Skip to content

Instantly share code, notes, and snippets.

@shekhargulati
Last active August 29, 2015 14:20
Show Gist options
  • Select an option

  • Save shekhargulati/1b6f18bb29f23b18dd0d to your computer and use it in GitHub Desktop.

Select an option

Save shekhargulati/1b6f18bb29f23b18dd0d to your computer and use it in GitHub Desktop.
Reactive Collatz Conjecture Sequence
import rx.Observable;
import rx.Subscriber;
import java.util.stream.IntStream;
public class CollatzConjectureSequence {
public static void main(String[] args) {
Observable<Integer> observable = CollatzConjectureSequence.create(19);
observable.doOnNext(val -> {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}).subscribe(val -> System.out.println(IntStream.rangeClosed(1, val).mapToObj(number -> String.valueOf(number)).reduce("", (acc, number) -> acc + "*")));
}
private static Observable<Integer> create(final int n) {
return Observable.<Integer>create(subscriber -> {
subscriber.onNext(n);
sequence(subscriber, n);
});
}
private static void sequence(Subscriber<? super Integer> subscriber, int number) {
if (number == 1) {
subscriber.onCompleted();
} else if (number % 2 == 0) {
int next = number / 2;
subscriber.onNext(next);
sequence(subscriber, next);
} else {
int next = number * 3 + 1;
subscriber.onNext(next);
sequence(subscriber, next);
}
}
}
@shekhargulati
Copy link
Author

For n = 19 it produces following

*******************
**********************************************************
*****************************
****************************************************************************************
********************************************
**********************
***********
**********************************
*****************
****************************************************
**************************
*************
****************************************
********************
**********
*****
****************
********
****
**
*

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment