Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Riduidel/266767 to your computer and use it in GitHub Desktop.
Save Riduidel/266767 to your computer and use it in GitHub Desktop.
def numbers=[1:[1]];
def getNext(number) {
if((number%2)==0) {
return number/2;
} else {
return 3*number+1;
}
}
def getSequence(numbers, number) {
if(numbers.containsKey(number)) {
return numbers.get(number);
} else {
def next = getNext(number).toInteger();
def seq = new Expando();
seq.next = next;
seq.nextSequence = getSequence(numbers, next);
seq.number = number;
seq.toString = {
return number+ " -> "+nextSequence;
}
seq.size = ((seq.nextSequence instanceof Expando) ? seq.nextSequence.size+1 : 2);
numbers[number]=seq;
return seq;
}
}
long start = System.currentTimeMillis();
for(i in 1..1000000) {
getSequence(numbers, i);
}
max = 0;
numbers.each { k, v->
if(k>1) {
if(v.size>max) {
max = v.size;
}
}
}
println "maximum length is $max";
long end = System.currentTimeMillis();
println "duration "+((end-start)/1000.0)+" s";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment