Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
51
Task/Hailstone-sequence/C-Shell/hailstone-sequence.csh
Normal file
51
Task/Hailstone-sequence/C-Shell/hailstone-sequence.csh
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Outputs a hailstone sequence from !:1, with one element per line.
|
||||
# Clobbers $n.
|
||||
alias hailstone eval \''@ n = \!:1:q \\
|
||||
echo $n \\
|
||||
while ( $n != 1 ) \\
|
||||
if ( $n % 2 ) then \\
|
||||
@ n = 3 * $n + 1 \\
|
||||
else \\
|
||||
@ n /= 2 \\
|
||||
endif \\
|
||||
echo $n \\
|
||||
end \\
|
||||
'\'
|
||||
|
||||
set sequence=(`hailstone 27`)
|
||||
echo "Hailstone sequence from 27 has $#sequence elements:"
|
||||
@ i = $#sequence - 3
|
||||
echo " $sequence[1-4] ... $sequence[$i-]"
|
||||
|
||||
# hailstone-length $i
|
||||
# acts like
|
||||
# @ len = `hailstone $i | wc -l | tr -d ' '`
|
||||
# but without forking any subshells.
|
||||
alias hailstone-length eval \''@ n = \!:1:q \\
|
||||
@ len = 1 \\
|
||||
while ( $n != 1 ) \\
|
||||
if ( $n % 2 ) then \\
|
||||
@ n = 3 * $n + 1 \\
|
||||
else \\
|
||||
@ n /= 2 \\
|
||||
endif \\
|
||||
@ len += 1 \\
|
||||
end \\
|
||||
'\'
|
||||
|
||||
@ i = 1
|
||||
@ max = 0
|
||||
@ maxlen = 0
|
||||
while ($i < 100000)
|
||||
# XXX - I must run hailstone-length in a subshell, because my
|
||||
# C Shell has a bug when it runs hailstone-length inside this
|
||||
# while ($i < 1000) loop: it forgets about this loop, and
|
||||
# reports an error <<end: Not in while/foreach.>>
|
||||
@ len = `hailstone-length $i; echo $len`
|
||||
if ($len > $maxlen) then
|
||||
@ max = $i
|
||||
@ maxlen = $len
|
||||
endif
|
||||
@ i += 1
|
||||
end
|
||||
echo "Hailstone sequence from $max has $maxlen elements."
|
||||
Loading…
Add table
Add a link
Reference in a new issue