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

m
(Added Lua)
 
(7 intermediate revisions by 4 users not shown)
Line 126:
OD
END
</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|ALGOL W}}==
<syntaxhighlight lang="algolw">
begin % find numbers palendromic in bases 2, 4, and 16 %
 
% returns true if n is palendromic in the specified base, false otherwide %
logical procedure palendromic( integer value n, base ) ;
begin
integer array digit( 1 :: 32 );
integer dPos, v, lPos, rPos;
logical isPalendromic;
dPos := 0;
v := n;
while v > 0 do begin
dPos := dPos + 1;
digit( dPos ) := v rem base;
v := v div base
end while_v_gt_0 ;
isPalendromic := true;
lPos := 1;
rPos := dPos;
while rPos > lPos and isPalendromic do begin
isPalendromic := digit( lPos ) = digit( rPos );
lPos := lPos + 1;
rPos := rPos - 1
end while_rPos_gt_lPos_and_isPalendromic ;
isPalendromic
end palendromic ;
% as noted by the REXX sample, all even numbers end in 0 in base 2 %
% so 0 is the only possible even number, note 0 is palendromic in all bases %
write( " 0" );
for n := 1 step 2 until 24999 do begin
if palendromic( n, 16 ) then begin
if palendromic( n, 4 ) then begin
if palendromic( n, 2 ) then begin
writeon( i_w := 1, s_w := 0, " ", n )
end if_palendromic__n_2
end if_palendromic__n_4
end if_palendromic__n_16
end for_n
end.
</syntaxhighlight>
{{out}}
Line 137 ⟶ 183:
{{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|Arturo}}==
 
Line 476 ⟶ 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 995 ⟶ 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
« { 0 }
01 25000 '''FOR''' n
'''IF''' n <span style="color:blue">PAL2416</span> '''THEN''' n + '''END NEXT'''
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,095 ⟶ 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,111 ⟶ 1,257:
}
}
for (chunk in Lst.chunks(numbers, 8)) Fmt.printtprint("$,6d", chunknumbers, 8)
System.print("\nFound %(numbers.count) such numbers.")</syntaxhighlight>
 
2,056

edits