Palindrome pairs: Difference between revisions
Content added Content deleted
(added Factor) |
(Same wording appears on leetcode.) |
||
Line 1: | Line 1: | ||
Task deleted pending original task writer giving some indication that the same task on leetcode and here have no plagiarism issues. |
|||
Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the two words, i.e. words[i] + words[j] is a palindrome. |
|||
<br> |
|||
Input: ["abcd","dcba","lls","s","sssll"] |
|||
<br> |
|||
Output: |
|||
<br> |
|||
(abcd,dcba) |
|||
<br> |
|||
(dcba,abcd) |
|||
<br> |
|||
(s,lls) |
|||
<br> |
|||
(lls,sssll) |
|||
<br> |
|||
{{draft task}} |
|||
=={{header|Factor}}== |
|||
<lang factor>USING: formatting kernel math.combinatorics qw sequences ; |
|||
IN: rosetta-code.palindrome-pairs |
|||
: palindrome? ( seq -- ? ) dup reverse = ; |
|||
qw{ abcd dcba lls s sssll } 2 [ |
|||
dup reverse [ |
|||
dup concat palindrome? |
|||
[ "," join "(%s)\n" printf ] [ drop ] if |
|||
] bi@ |
|||
] each-combination</lang> |
|||
{{out}} |
|||
<pre> |
|||
(abcd,dcba) |
|||
(dcba,abcd) |
|||
(s,lls) |
|||
(lls,sssll) |
|||
</pre> |
|||
=={{header|Perl 6}}== |
|||
<lang perl6>my @words = <abcd dcba lls s sssll Nod don't>; #' |
|||
sub is-palindrome (Str $s) { $_ eq .flip given $s.lc.comb(/\w/).join } |
|||
for @words.combinations(2) { |
|||
say "({.join: ','})" if .join.&is-palindrome; |
|||
say "({.reverse.join: ','})" if .reverse.join.&is-palindrome; |
|||
}</lang> |
|||
{{Out}} |
|||
<pre>(abcd,dcba) |
|||
(dcba,abcd) |
|||
(s,lls) |
|||
(lls,sssll) |
|||
(don't,Nod)</pre> |
|||
=={{header|Ring}}== |
|||
<lang ring> |
|||
# Project : Palindrome pairs |
|||
# Date : 2018/07/27 |
|||
# Author : Gal Zsolt (~ CalmoSoft ~) |
|||
# Email : <calmosoft@gmail.com> |
|||
load "stdlib.ring" |
|||
pairs = ["abcd","dcba","lls","s","sssll"] |
|||
for n = 1 to len(pairs)-1 |
|||
for m = n + 1 to len(pairs) |
|||
pal1 = pairs[n] + pairs[m] |
|||
pal2 = pairs[m] + pairs[n] |
|||
if palindrome(pal1) |
|||
see "(" + pairs[n] + "," + pairs[m] + ")" + nl |
|||
ok |
|||
if palindrome(pal2) |
|||
see "(" + pairs[m] + "," + pairs[n] + ")" + nl |
|||
ok |
|||
next |
|||
next |
|||
</lang> |
|||
Output: |
|||
<pre> |
|||
(abcd,dcba) |
|||
(dcba,abcd) |
|||
(s,lls) |
|||
(lls,sssll) |
|||
</pre> |
|||
=={{header|Sidef}}== |
|||
<lang ruby>func find_palindromes(arr, callback) { |
|||
arr.len.variations(2, {|i,j| |
|||
var w = (arr[i]+arr[j]).fc.gsub(/\W+/) |
|||
callback(i, j) if (w == w.flip) |
|||
}) |
|||
} |
|||
var t = [ |
|||
"abcd","dcba","lls","s","sssll", |
|||
"Mr. Owl ate","or a cat I saw?", |
|||
" my metal worm","Was it a car ", |
|||
] |
|||
find_palindromes(t, {|i,j| |
|||
say "(#{i}, #{j}) = (#{t[i].dump}, #{t[j].dump})" |
|||
})</lang> |
|||
{{out}} |
|||
<pre> |
|||
(0, 1) = ("abcd", "dcba") |
|||
(1, 0) = ("dcba", "abcd") |
|||
(2, 4) = ("lls", "sssll") |
|||
(3, 2) = ("s", "lls") |
|||
(5, 7) = ("Mr. Owl ate", " my metal worm") |
|||
(8, 6) = ("Was it a car ", "or a cat I saw?") |
|||
</pre> |
|||
=={{header|zkl}}== |
|||
<lang zkl>fcn palindromePairs(strs){ |
|||
strs=Utils.Helpers.pickNFrom(2,strs); |
|||
strs.extend(strs.apply("reverse")).filter( |
|||
fcn(anb){ // ("s","lls") |
|||
ab:=anb.concat(); |
|||
ab==ab.reverse() |
|||
}) |
|||
}</lang> |
|||
<lang zkl>palindromePairs(T("abcd","dcba","lls","s","sssll")) |
|||
.concat("\n").println();</lang> |
|||
{{out}} |
|||
<pre> |
|||
L("abcd","dcba") |
|||
L("lls","sssll") |
|||
L("dcba","abcd") |
|||
L("s","lls") |
|||
</pre> |
|||
Or, if we want to really stretch the meaning of palindrome, make the following one line change: |
|||
<lang zkl>fcn palindromePairs(strs){ |
|||
strs=Utils.Helpers.pickNFrom(2,strs); |
|||
strs.extend(strs.apply("reverse")).filter( |
|||
fcn(anb){ // ("s","lls") |
|||
ab:=anb.apply(fcn(s){ s.filter("[a-zA-Z]".glob).toLower() }).concat(); |
|||
ab==ab.reverse() |
|||
}) |
|||
}</lang> |
|||
<lang zkl>palindromePairs(T("abcd","dcba","lls","s","sssll", |
|||
"Mr. Owl ate","or a cat I saw?", |
|||
" my metal worm","Was it a car ",)) |
|||
.concat("\n").println();</lang> |
|||
{{out}} |
|||
<pre> |
|||
L("abcd","dcba") |
|||
L("lls","sssll") |
|||
L("Mr. Owl ate"," my metal worm") |
|||
L("dcba","abcd") |
|||
L("s","lls") |
|||
L("Was it a car ","or a cat I saw?") |
|||
</pre> |
Latest revision as of 14:38, 28 July 2018
Task deleted pending original task writer giving some indication that the same task on leetcode and here have no plagiarism issues.