Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1657

Kode

#########################################################################
#                 10-row School abacus
#                         by
#                      Michael H
#########################################################################
#       Description partially extracted from from wikipedia 
#
#  Around the world, abaci have been used in pre-schools and elementary
#
# In Western countries, a bead frame similar to the Russian abacus but
# with straight wires and a vertical frame has been common (see image).
# Helps schools as an aid in teaching the numeral system and arithmetic
#
#         |00000*****   |     row factor 1000000000
#         |00000*****   |     row factor 100000000
#         |00000*****   |     row factor 10000000 
#         |00000*****   |     row factor 1000000
#         |00000*****   |     row factor 100000
#         |00000*****   |     row factor 10000
#         |00000*****   |     row factor 1000
#         |00000****   *|     row factor 100     * 1
#         |00000***   **|     row factor 10      * 2
#         |00000**   ***|     row factor 1       * 3
#                                        -----------    
#                             Sum                123 
#
# Each row represents a different row factor, starting with x1 at the
# bottom, ascending up to x1000000000 at the top row.     
######################################################################

# TASK:
# Define a procedure print_abacus(integer) that takes a positive integer
# and prints a visual representation (image) of an abacus setup for a 
# given positive integer value.
# 
# Ranking
# 1 STAR: solved the problem!
# 2 STARS: 6 < lines <= 9
# 3 STARS: 3 < lines <= 6
# 4 STARS: 0 < lines <= 3
#
#EXAMPLE:
print_abacus(12345678)
#>>>|00000*****   |
#>>>|00000*****   |
#>>>|00000****   *|
#>>>|00000***   **|
#>>>|00000**   ***|
#>>>|00000*   ****|
#>>>|00000   *****|
#>>>|0000   0*****|
#>>>|000   00*****|
#>>>|00   000*****|
Jeg har en løsning på en linje i Python, noen som kommer opp med noen geniale løsninger selv?

Kode

def p_a(v, b="00000*****"):
    print "\n".join(["|"+b[:10-int(x)]+" "+b[10-int(x):]+"|" for x in "%010d"%(v)])
Det burde gjøre akkurat samme nytten.
Sist endret av etse; 27. februar 2013 kl. 19:13.
Synes este sin løsning ser meget bra ut.
Vet ikke kanskje flytte "|" opp til default argument og forandre litt på slice.

Kode

def p_a(v, b="|00000*****|"):
    print "\n".join([b[:11-int(x)]+"  "+b[-1-int(x):] for x in "%010d"%(v)])
Litt meningløst og stappe alt inn på 1 linje,men har gjort dette veldig mange ganger selv i god "golf code" stil.

Kode

print '\n'.join([b[:11-int(x)] + '  ' + b[-1-int(x):] for x in ('%010d'%123) for b in ['|00000*****|']])
The bird.
reaVen's Avatar
Trådstarter
snippsat nice, men def'linjen er selvsagt ikke med i tellingen
Noen som har noe annet enn Python?
m0b
m0b's Avatar
DonorAdministrator
Hva er grunnen til at du ikke viser din egen linje som du har nevnt?
The bird.
reaVen's Avatar
Trådstarter

Kode

def p_a(value):
    print "\n".join(["|"+"00000*****"[:min(10,10-int(x))]+"   "+"00000"[:max(0, int(x)-5)]+"*****"[:int(x)]+"|" for x in "0"*(10-len(str(value)))+str(value)])
Her var min, grunnen var at jeg vet den kunne forbedres, men ville se om noen hadde noen andre måter å gjøre det på.