Distinct palindromes within decimal numbers: Difference between revisions

Line 159:
1320267947849490361205695 false
</pre>
 
=={{header|Nim}}==
<lang Nim>import algorithm, sequtils, sets, strutils
 
iterator substrings(s: string): string =
## Yield the substrings of the given string.
for istart in 0..s.high:
for istop in istart..s.high:
yield s[istart..istop]
 
func isPalindrome(s: string): bool =
## Return true if "s" is a palindrome.
result = true
for i in 0..(s.high div 2):
if s[i] != s[s.high - i]: return false
 
func cmpPal(s1, s2: string): int =
## Compare two palindromes (used for sort).
result = cmp(s1.len, s2.len)
if result == 0:
result = cmp(s1[0], s2[0])
 
func palindromes(str: string): seq[string] =
## Return the sorted list of palindromes contained in "str".
var palSet: HashSet[string]
for s in substrings(str):
if s.isPalindrome: palSet.incl s
result = sorted(toSeq(palSet), cmpPal)
 
 
when isMainModule:
 
for n in 100..125:
echo n, ": ", palindromes($n).mapIt(it.align(3)).join(" ")
 
echo()
for s in ["9", "169", "12769", "1238769", "123498769", "12346098769",
"1234572098769", "123456832098769", "12345679432098769",
"1234567905432098769", "123456790165432098769",
"83071934127905179083", "1320267947849490361205695"]:
let pals2 = palindromes(s).filterIt(it.len >= 2)
let verb = if pals2.len == 0: " doesn't contain palindromes "
else: " contains at least one palindrome "
echo s, verb, "of two digits or more"</lang>
 
{{out}}
<pre>100: 0 1 00
101: 0 1 101
102: 0 1 2
103: 0 1 3
104: 0 1 4
105: 0 1 5
106: 0 1 6
107: 0 1 7
108: 0 1 8
109: 0 1 9
110: 0 1 11
111: 1 11 111
112: 1 2 11
113: 1 3 11
114: 1 4 11
115: 1 5 11
116: 1 6 11
117: 1 7 11
118: 1 8 11
119: 1 9 11
120: 0 1 2
121: 1 2 121
122: 1 2 22
123: 1 2 3
124: 1 2 4
125: 1 2 5
 
9 doesn't contain palindromes of two digits or more
169 doesn't contain palindromes of two digits or more
12769 doesn't contain palindromes of two digits or more
1238769 doesn't contain palindromes of two digits or more
123498769 doesn't contain palindromes of two digits or more
12346098769 doesn't contain palindromes of two digits or more
1234572098769 doesn't contain palindromes of two digits or more
123456832098769 doesn't contain palindromes of two digits or more
12345679432098769 doesn't contain palindromes of two digits or more
1234567905432098769 doesn't contain palindromes of two digits or more
123456790165432098769 doesn't contain palindromes of two digits or more
83071934127905179083 doesn't contain palindromes of two digits or more
1320267947849490361205695 contains at least one palindrome of two digits or more</pre>
 
=={{header|Perl}}==
Anonymous user