1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/ruby
- # Author: Daniel "Trizen" Șuteu
- # Date: 25 August 2016
- # License: GPLv3
- # Website: https://github.com/trizen
- # https://projecteuler.net/problem=277
- # Runtime: 0.271s
- func collatz(n) {
- gather {
- loop {
- n.is_one && break
- if (n % 3 == 0) {
- n /= 3
- take('D')
- }
- elsif (n % 3 == 1) {
- n = ((4*n + 2) / 3)
- take('U')
- }
- elsif (n % 3 == 2) {
- n = ((2*n - 1) / 3)
- take('d')
- }
- }
- }.join
- }
- var step = 1
- var from = 10**15
- var j = 1
- var s = 'UDDDUdddDDUDDddDdDddDDUDDdUUDd'
- var l = s.len
- loop {
- for i in RangeNum(from, Inf, step) {
- var c = collatz(i)
- if (c.begins_with(s.substr(0, j))) {
- if (j == l) {
- say i;
- goto :OUTER
- }
- from = i
- step *= 3
- j += 1
- break
- }
- }
- }; @:OUTER
|