Created
July 1, 2018 02:15
-
-
Save djmetzle/f45baa84ef21ca99183eec8429827f71 to your computer and use it in GitHub Desktop.
Recaman Sequence Generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/ruby | |
# Recaman Sequence Generator | |
HIEGHT=2160 | |
WIDTH=3840 | |
SVG_PREAMBLE = <<~HEREDOC | |
<?xml version="1.0" standalone="no"?> | |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" | |
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |
<svg width="#{WIDTH}px" height="#{HIEGHT}px" viewBox="-1 #{-1 * HIEGHT / 2} #{WIDTH} #{HIEGHT }" | |
xmlns="http://www.w3.org/2000/svg" version="1.1"> | |
HEREDOC | |
SVG_FOOTER = <<~HEREDOC | |
</svg> | |
HEREDOC | |
MAX_SEQUENCE_VALUE = 1000000 | |
$current_number = 0 | |
$current_step = 1 | |
$visted_numbers = [] | |
$visted_numbers[0] = true | |
def iterate_sequence | |
if can_go_back? | |
$current_number -= $current_step | |
$visted_numbers[$current_number] = true | |
else | |
$current_number += $current_step | |
$visted_numbers[$current_number] = true | |
end | |
$current_step += 1 | |
end | |
def can_go_back? | |
return false if $current_number - $current_step <= 0 | |
return false if $visted_numbers[$current_number - $current_step] | |
return true | |
end | |
puts SVG_PREAMBLE | |
$last_delta_negative = false | |
$flag = 0 | |
def flip_flag | |
if $flag == 0 | |
$flag = 1 | |
else | |
$flag = 0 | |
end | |
end | |
while $current_number < MAX_SEQUENCE_VALUE | |
last_value = $current_number | |
iterate_sequence | |
delta = $current_number - last_value | |
if delta > 0 | |
unless $last_delta_negative | |
flip_flag | |
end | |
$last_delta_negative = false | |
else | |
if $last_delta_negative | |
flip_flag | |
end | |
$last_delta_negative = true | |
end | |
puts <<~HEREDOC | |
<path d="M#{last_value},0 a0.5,0.5 90 0,#{$flag} #{delta},0" fill="none" stroke="black" stroke-width="0.5" />" | |
HEREDOC | |
end | |
puts SVG_FOOTER |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment