Det ensamma skriptet

XKCD Fredag 5/2 -10

Collaz problem (mer info på engelska) är ett matematiskt problem som hävdar att ifall man tar ett tal, ifall det är jämt delar det med 2 och om det är udda multiplicerar man med 3 och lägger till 1 och upprepar processen med det nya talet får man till slut 1.

Jag skrev ett litet skript som simulerade den stackars person som XKCD beskriver här ovan:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os, sys, math

class collatz:
  def __init__(self, startVal):
    self.val = int(startVal)

  def step(self):
    if (int(self.val) % 2) == 0:
      self.val = self.val / 2
    else:
      self.val = (self.val * 3) + 1

  def current(self):
    return self.val

if __name__ == "__main__":
  if len(sys.argv) < 2:
    print "Please enter start number"
  else:
    colNum = collatz(sys.argv[1])
    stepNumber = 0
#   print "Step\tValue"
    while(colNum.current() != 1):
      colNum.step()
      stepNumber += 1
      print str(stepNumber) + "\t" + str(colNum.current())

Det har inte kunnat bevisats att proceduren i samtliga fall stabiliseras till 1 annat än experimentellt för finita (om än stora) talserier.

Graf för talet 123456

Graf över talet 123456 väg mot 1

Etiketter: , , ,

4 svar to “Det ensamma skriptet”

  1. Sandra Says:

    Yey! Man kanske skulle testa? Hmm ;)

  2. akeinexile Says:

    Det tycker jag definitivt du ska göra =) Men jag tänker fortfarande ringa och höra ifall du vill hitta på något ifall jag råkar vara i Sundsvall.

  3. Johan Says:

    Nästa steg är väll att göra ett skript som räknar ut hur många steg som krävs för att nå 1 för varje tal 1, 2, 3, 4… och visa det i en graf. Borde vara lite rörigt i början men linjeras senare. Typ som det verkar vara i grafen i inlägget, fast omvänt. Det kommer kräva mycket mer processortid iaf. och det är ju alltid coolt. :)

  4. akeinexile Says:

    jag ska se vad jag kan göra =)

    man skulle också kunna göra en 3d-graf med de olika startvärdena i djupleds-axeln (z kanske det är i sverige?)

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s


%d bloggare gillar detta: