lambdaway
::
rare_numbers
5
|
list
|
login
|
load
|
|
_h1 rare numbers _p Numbers when added or subtracted to its reverse gives a perfect square. _ul [[https://rosettacode.org/wiki/Rare_numbers|https://rosettacode.org/wiki/Rare_numbers]] _ul [[http://www.shyamsundergupta.com/rare.html|http://www.shyamsundergupta.com/rare.html]] _ul [[https://www.planetmath.org/RareNumbers|https://www.planetmath.org/RareNumbers]] {prewrap Rare numbers are positive integers n where: n is expressed in base ten r is the reverse of n (decimal digits) n must be non-palindromic (n ≠ r) (n+r) is the sum (n-r) is the difference and must be positive the sum and the difference must be perfect squares Rare numbers exhibit certain properties: - Rare numbers start always with an even digit and end in the digits 0, 2, 3, 7 and 8. - Digital root of a rare number is always 2, 5, 8 and 9. Consider a Rare number ABCD...MNPQ with any number of digits, then 1) Rare number can never start with an odd digit. 2) A-Q of any Rare number can only be 0, 1, 4, 5 or 6. The value of Q can never be 1, 4, 6, 9 3) The digital root of a Rare number can take the values 2, 5, 8 or 9 only. } _h2 lambdatalk {pre '{def filter {lambda {:n} {let { {:a {W.first :n}} {:q {W.last :n}} {:d {- {W.first :n} {W.last :n}}} } {and {= {% :a 2} 0} {or {= :d 0} {= :d 1} {= :d 4} {= :d 5} {= :d 6}} {not {or {= :q 1} {= :q 4} {= :q 6} {= :q 9}}}}}}} -> {def filter {lambda {:n} {let { {:a {W.first :n}} {:q {W.last :n}} {:d {- {W.first :n} {W.last :n}}} } {and {= {% :a 2} 0} {or {= :d 0} {= :d 1} {= :d 4} {= :d 5} {= :d 6}} {not {or {= :q 1} {= :q 4} {= :q 6} {= :q 9}}}}}}} {filter 65} {filter 621770} {filter 281089082} {filter 281089083} {filter 2022652202} {filter 2042832002} '{def lt_israre {lambda {:n} {let { {:n :n} {:r {W.reverse :n}} } {if {and {> :n :r} {isInt {sqrt {+ :n :r}}} {isInt {sqrt {- :n :r}}}} then :n else}}}} -> {def lt_israre {lambda {:n} {if {filter :n} then {let { {:n :n} {:r {W.reverse :n}} } {if {and {> :n :r} {isInt {sqrt {+ :n :r}}} {isInt {sqrt {- :n :r}}}} then :n else} } else}}} } _p testing {prewrap {lt_israre 64} {lt_israre 65} {lt_israre 66} {lt_israre 621770} '{S.map lt_israre {S.serie 1 10000}} '{S.map lt_israre {S.serie 1 700000}} -> 65 621770 // computed in 7650ms '{S.map lt_israre {S.serie 1 280000000}} -> crushes my iPad... } _h2 calling javascript {pre LAMBDATALK.DICT["js_israres"] = function() '{ var args = arguments[0].trim().split(" "), i0 = Number( args[0] ), i1 = Number( args[1] ), a = []; var israre = function(n) { var r = Number( n.toString().split("").reverse().join("") ); return (n > r) && (Number.isInteger(Math.sqrt(n+r))) && (Number.isInteger(Math.sqrt(n-r))) }; for (var i=i0; i < i1; i++) if (israre(i)) a.push(i); return a }; } _p testing {prewrap '{js_israres 1 2050000000} -> [65,621770,281089082,2022652202,2042832002]] // computed in 784307ms ~ 13 minutes } _p {i alain marty | 2023/01/13} {script LAMBDATALK.DICT["isInt"] = function() { var args = arguments[0]; return (Number.isInteger(Number(args))) ? "true" : "false" }; LAMBDATALK.DICT["js_israre"] = function() { var n = arguments[0], // "12345" r = n.split("").reverse().join(""), // "54321" n = Number(n), r = Number(r); return (israre(n)) ? n : "" }; var israre = function(n) { var r = Number( n.toString().split("").reverse().join("") ); return (n > r) && (Number.isInteger(Math.sqrt(n+r))) && (Number.isInteger(Math.sqrt(n-r))) }; LAMBDATALK.DICT["js_israres"] = function() { var args = arguments[0].trim().split(" "), i0 = Number( args[0] ), i1 = Number( args[1] ), a = []; for (var i=i0; i < i1; i++) if (israre(i)) a.push(i); return a }; }
lambdaway v.20211111