Gå til innhold

Anbefalte innlegg

Jeg har hjulpet en person med å automatisere den temmelig bisarre sysselen numerologi. Det dreier seg f.eks om å finne "Skjebnetallet" ved å legge sammen og redusere sifrene i fødselsdatoen til et enkelt siffer, som må være 1-9, 11, 22 eller 33. F.eks blir 6.sept i år til "skjebnetallet" 4:

 

0 + 6 + 0 + 9 + 2 + 5 = 22 => 2 + 2 = 4.

 

Jeg har denne funksjonen for å finne tallet:

 

valid_numbers = [1,2,3,4,5,6,7,8,9,11,22,33]
def reduce_number(n):
   n = str(n)
   if len(n) > 1:
       while True:
           num = sum((int(x) for x in n))
           if num in valid_numbers:
               return str(num)
           n = str(num)
   return str(n)

 

Den gjør jobben, men virker litt omstendelig. Finnes det en smartere, mer matematisk måte å gjøre det på? Ser for meg et-eller annet med reduce() og divmod(), men det blir bare rot

 

:hrm:

Lenke til kommentar
Videoannonse
Annonse

Den funker den, men innenfor numerologien er det slik at 11, 22 og 33 er spesielle tall, så 8,3, blir f.eks 11, ikke 1+1=2.

 

Utrolig ekspressivt, Ruby!

 

Edit:

 

Kikket på det på nytt. Beskar istedet for å lete etter en fancy løsning:

 

def reduce_number(num, valid_numbers = (1,2,3,4,5,6,7,8,9,11,22,33)):
   if str(num) == '0': return num
   while True:
       num = sum((int(x) for x in str(num)))
       if num in valid_numbers:
           return str(num)

Endret av zeitgeist
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...