Gå til innhold

Anbefalte innlegg

Skrevet

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:

Videoannonse
Annonse
Skrevet

Her har du en i Ruby, for litt variasjon (tar en streng inn).

 

def numb(s)
    return s.length == 1 ? s : numb(s.split(//).inject(0){|i,j| i+j.to_i}.to_s)
end

 

Meget mulig jeg misforstod hele oppgaven, dog...

Skrevet (endret)

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
Skrevet
Hva med:

def numb(tall):
   while tall not in range(1,9)+[11,22,33]:
       tall=sum([int(i) for i in str(tall)])
   return tall

Ja den er fin! Må ha range(1,10), men ellers lekker.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...