lambdaway
::
hamming_numbers4
3
|
list
|
login
|
load
|
|
_h1 hamming number | [[1|?view=hamming_numbers]] | [[2|?view=hamming_numbers2]] | [[3|?view=hamming_numbers3]] | 4 _ul [[pascal|https://rosettacode.org/wiki/Hamming_numbers#Pascal]] {prewrap {nexth 16} '{def H {removedup {S.map nexth {S.serie 0 1000}}}} '{S.slice 0 19 {H}} '{S.length {H}} {S.last {S.map {{lambda {:n :i} {A.set! 0 {nexth {A.get 0 :n}} :n} } {A.new 1}} {S.serie 0 100}}} } {pre procedure Check; var i,n: NativeUint; begin n := 1; for i := 1 to 20 do begin n := NextHammNumb(n); write(n,' '); end; writeln; writeln; n := 1; for i := 1 to 1690 do n := NextHammNumb(n); writeln('No ',i:4,' | ',n,' = 2^',Pot[0],' 3^',Pot[1],' 5^',Pot[2]); end; } {script var idiv = function(a,b) { return Math.round(a/b) }; var nextham = function(n) { var abc = [0,0,0]; var q,p,nr=0,i=1000; while (nr !== 1) { nr = n+1; n = nr; p = 0; while (!(nr%2)) { p++; nr = idiv(nr,2); } abc[0]= p; p = 0; q = idiv(nr,3); while (q*3 === nr) { p++; nr = q; q = idiv(nr,3); } abc[1] = p; p = 0; q = idiv(nr,5); while (q*5 === nr) { p++; nr = q; q = idiv(nr,5); } abc[2] = p; i--; if (i < 0) return "oops" } return n // + " " + abc }; LAMBDATALK.DICT['nexth'] = function() { var args = arguments[0].trim(); return nextham( Number(args) ) }; LAMBDATALK.DICT['removedup'] = function() { // {removedup a b c ...} var args = arguments[0].trim().split(" "); var out = [args[0]]; for (var i=1; i < args.length; i++) if (args[i] !== args[i-1]) out.push( args[i] ) return out.join(" ") }; }
lambdaway v.20211111