Hamming numbers: Difference between revisions
m
→{{header|Lambdatalk}}: small improvement
(→{{header|UNIX Shell}}: modify so it works in bash as well as ksh) |
m (→{{header|Lambdatalk}}: small improvement) |
||
Line 6,685:
<syntaxhighlight lang="scheme">
{def hamming
{if {= :x {A.get :n :h}}▼
then {* :a {A.get {+ :i 1} :h}} {+ :i 1}▼
else :x :i} ▼
}}▼
{hamming.loop :h▼
{hamming.test :h :n :x2 2 :i}▼
{hamming.test :h :n :x3 3 :j}▼
{hamming.test :h :n :x5 5 :k}▼
:limit▼
{+ :n 1} }▼
{def hamming.loop
{lambda {:h :
{if {>= :n :
then {A.last :h}
else {
{:m :m} {:n :n}
▲ } {hamming.loop :h
{if {= :b {A.get :n :h}}
then {* 3 {A.get {+ :j 1} :h}} {+ :j 1}
{if {= :c {A.get :n :h}}
then {* 5 {A.get {+ :k 1} :h}} {+ :k 1}
else :c :k}
▲ }}}}
{lambda {:n}
{hamming.loop {A.new {S.serie 1 :n}} 2 0 3 0 5 0 :n 1}
}}
-> hamming
-> 1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36
{hamming 1691}
-> 2125764000
</syntaxhighlight>
|