Posts Tagged ‘collatz’

Det ensamma skriptet

mars 9, 2010

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