Numbers in base 10 that are palindromic in bases 2, 4, and 16: Difference between revisions

m
 
(5 intermediate revisions by 4 users not shown)
Line 523:
</pre>
 
 
=={{header|EasyLang}}==
<syntaxhighlight>
func rev n base .
while n > 0
r = r * base + n mod base
n = n div base
.
return r
.
for i = 0 to 25000 - 1
if rev i 2 = i and rev i 4 = i and rev i 16 = i
write i & " "
.
.
</syntaxhighlight>
{{out}}
<pre>
0 1 3 5 15 17 51 85 255 257 273 771 819 1285 1365 3855 4095 4097 4369 12291 13107 20485 21845
</pre>
 
=={{header|Euler}}==
'''begin'''
'''new''' palendromic; '''new''' n; '''label''' forN;
palendromic
&lt;- ` '''formal''' n; '''formal''' base;
'''begin'''
'''new''' v; '''new''' lPos; '''new''' rPos; '''new''' isPalendromic;
'''new''' digit;
'''label''' vGT0; '''label''' rGTl;
digit &lt;- '''list''' 64;
rPos &lt;- 0;
v &lt;- n;
vGT0: '''if''' v &gt; 0 '''then''' '''begin'''
rPos &lt;- rPos + 1;
digit[ rPos ] &lt;- v '''mod''' base;
v &lt;- v % base;
'''goto''' vGT0
'''end''' '''else''' 0;
isPalendromic &lt;- '''true''';
lPos &lt;- 1;
rGTl: '''if''' rPos &gt; lPos '''and''' isPalendromic '''then''' '''begin'''
isPalendromic &lt;- digit[ lPos ] = digit[ rPos ];
lPos &lt;- lPos + 1;
rPos &lt;- rPos - 1;
'''goto''' rGTl
'''end''' '''else''' 0;
isPalendromic
'''end'''
&apos;
;
'''out''' 0;
n &lt;- -1;
forN: '''if''' [ n &lt;- n + 2 ] &lt; 25000 '''then''' '''begin'''
'''if''' '''not''' palendromic( n, 16 ) '''then''' 0
'''else''' '''if''' '''not''' palendromic( n, 4 ) '''then''' 0
'''else''' '''if''' palendromic( n, 2 ) '''then''' '''out''' n
'''else''' 0
;
'''goto''' forN
'''end''' '''else''' 0
'''end''' $
{{out}}
<pre>
NUMBER 0
NUMBER 1
NUMBER 3
NUMBER 5
NUMBER 15
NUMBER 17
NUMBER 51
NUMBER 85
NUMBER 255
NUMBER 257
NUMBER 273
NUMBER 771
NUMBER 819
NUMBER 1285
NUMBER 1365
NUMBER 3855
NUMBER 4095
NUMBER 4097
NUMBER 4369
NUMBER 12291
NUMBER 13107
NUMBER 20485
NUMBER 21845
</pre>
 
=={{header|F_Sharp|F#}}==
Line 1,042 ⟶ 1,135:
« '''CASE'''
BINHEX DUP R→B →STR 3 OVER SIZE SUB DUP <span style="color:blue">REVSTR</span> ≠ '''THEN''' DROP 0 '''END'''
DUP 4 <span style="color:blue">D→B</span> DUP <span style="color:blue">REVSTR</span> ≠ '''THEN''' DROP 0 '''END'''
HEXBIN DUP R→B →STR 3 OVER SIZE SUB DUP <span style="color:blue">REVSTR</span> ==
'''END'''
» '<span style="color:blue">PAL2416</span>' STO
Line 1,053 ⟶ 1,146:
2 '''STEP'''
» '<span style="color:blue">TASK</span>' STO
Runs in 1 hours 3742 minutes on a HP-48SX.
 
====Much faster approach====
The task generates palindromes in base 16, which must then be verified as palindromes in the other two bases.
« BIN 1 SF
R→B →STR 3 OVER SIZE 1 - SUB
0 1 '''FOR''' b
'''IF''' DUP SIZE b 1 + MOD '''THEN''' "0" SWAP + '''END'''
""
OVER SIZE b - 1 '''FOR''' j
OVER j DUP b + SUB +
-1 b - '''STEP'''
'''IF''' OVER ≠ '''THEN''' 1 CF 1 'b' STO '''END'''
'''NEXT''' DROP
1 FS?
» '<span style="color:blue">PAL24?</span>' STO
« BINHEX {R→B 0→STR → h }
« "#"
1 15 '''FOR''' j
h '''IF'''SIZE j1 <span- style="color:blue">PAL24?</span>3 '''THENFOR''' j + '''END'''
h j DUP SUB +
2 '''STEP'''
1 15 FOR-1 j'''STEP'''
"h" j+ DUPSTR→ 16 * +B→R
» » '''IF''' DUP <span style="color:blue">PAL24?REVHEX</span> '''THEN''' + '''ELSE''' DROP '''END''' STO
2 '''STEP'''
« { }
1 15 '''FOR''' j
0 15 '''FOR''' kb
'''IF''' b <span style="color:blue">PAL24?</span> '''THEN''' b + '''END NEXT'''
j 256 * k 16 * + j +
1 2 '''FOR''' x
'''IF''' DUP <span style="color:blue">PAL24?</span> '''THEN''' + '''ELSE''' DROP '''END'''
'''NEXT''' 2 -1 15 '''STEPFOR''' m
16 255x 1 - ^ 16 x ^ 1 - '''FOR''' jb
'''IF''' j 16 MOD '''THEN''' b
j 256 *'''IF''' jm 160 MOD≥ '''THEN''' 16 * m + j 16 / IP +'''END'''
16 x ^ *
'''IF''' DUP <span style="color:blue">PAL24?</span> '''THEN''' + '''ELSE IF''' 25000 > '''THEN''' 255 'j' STO '''END'''
b <span style="color:blue">REVHEX</span> +
'''END'''
'''IF''' DUP <span style="color:blue">PAL24?</span> '''THEN''' +
'''NEXT'''
'''ELSE IF''' 25000 ≥ '''THEN''' KILL '''END''' <span style="color:grey">@ not idiomatic but useful to exit 3 nested loops</span>
'''END'''
'''NEXT NEXT NEXT'''
SORT
» '<span style="color:blue">TASK</span>' STO
 
Runs in 2 minutes 16 on a HP-48SX: 40 times faster than brute force!
<span style="color:blue">TASK</span> SORT
Runs in 2 minutes 16 on a HP-48SX: 18 times faster than brute force!
{{out}}
<pre>
Line 1,144 ⟶ 1,243:
=={{header|Wren}}==
{{libheader|Wren-fmt}}
<syntaxhighlight lang="wren">import "./fmt" for Conv, Fmt
{{libheader|Wren-seq}}
<syntaxhighlight lang="ecmascript">import "/fmt" for Conv, Fmt
import "/seq" for Lst
 
System.print("Numbers under 25,000 in base 10 which are palindromic in bases 2, 4 and 16:")
Line 1,160 ⟶ 1,257:
}
}
for (chunk in Lst.chunks(numbers, 8)) Fmt.printtprint("$,6d", chunknumbers, 8)
System.print("\nFound %(numbers.count) such numbers.")</syntaxhighlight>
 
2,058

edits