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

m
(Added Euler)
(3 intermediate revisions by 3 users not shown)
Line 523:
</pre>
 
 
=={{header|EasyLang}}==
<syntaxhighlight>
func rev n base .
while n > 0
r = j 256r * kbase 16+ *n +mod j +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}}==
Line 1,130 ⟶ 1,150:
====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''' DUPb <span style="color:blue">PAL24?</span> '''THEN''' b + '''ELSE''' DROPEND NEXT'''END'''
j 256 * k 16 * + j +
1 152 '''FOR''' jx
'''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''' + '''ELSE IF''' 25000 > '''THEN''' 255 'j' STO '''END'''
'''NEXT'''
'''ELSE IF''' 25000 ≥ '''THEN''' KILL '''END''' <span style="color:grey">@ not idiomatic but useful to exit 3 nested loops</span>
2 '''STEPEND'''
'''NEXT NEXT NEXT'''
SORT
» '<span style="color:blue">TASK</span>' STO
 
<span style="color:blue">TASK</span> SORT
Runs in 2 minutes 16 on a HP-48SX: 18 times faster than brute force!
{{out}}
Line 1,217 ⟶ 1,243:
=={{header|Wren}}==
{{libheader|Wren-fmt}}
<syntaxhighlight lang="ecmascriptwren">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,233 ⟶ 1,257:
}
}
for (chunk in Lst.chunks(numbers, 8)) Fmt.printtprint("$,6d", chunknumbers, 8)
System.print("\nFound %(numbers.count) such numbers.")</syntaxhighlight>
 
2,076

edits