如果该单词中的字母可以重新排列以形成不同的单词,则单词是字谜.
按字符排序的最短源代码,用于查找给定单词列表的所有字符集集.
空格和新行应计为字符
使用代码标尺
--------- -------- 10 20 -------- -------- 30 40 -------- ---- 50 ---- -------- 60 70 -------- -------- 80 90 -------- 100 ------- 110- ------ 120
一个单词的列表,从一个新行分隔每个字标准输入.
例如
A A's AOL AOL's Aachen Aachen's Aaliyah Aaliyah's Aaron Aaron's Abbas Abbasid Abbasid's
所有组的字谜,每组由一条单独的线分隔.
示例运行:
./anagram < words marcos caroms macros lump's plum's dewar's wader's postman tampons dent tend macho mocha stoker's stroke's hops posh shop chasity scythia ...
我有一个149 char perl解决方案,我会在几个人发布后发布:)
玩得开心!
假设字谜不区分大小写(即大写和小写字母相同)
只应打印超过1个项目的集合
每组字谜应该只打印一次
字谜集中的每个单词应该只出现一次
如果两个单词仅在大小写方面有所不同,那么它们应该折叠成同一个单词,由您来决定使用哪个大写方案用于折叠单词
只要每个单词以某种方式分隔,例如逗号分隔或空格分隔有效,单词集只需以新行结束.我知道有些语言内置了快速阵列打印方法,所以如果它不输出空格分隔的数组,这应该允许你利用它.
Danko Durbić.. 12
$k=@{};$input|%{$k["$([char[]]$_|%{$_+0}|sort)"]+=@($_)} $k.Values|?{$_[1]}|%{"$_"}
为了排除只是大小写不同的话,我们只能从输入列表,即删除重复的(案例insensitvely) $input|sort -u
,其中-u
代表-unique
.sort
默认情况下不区分大小写:
$k=@{};$input|sort -u|%{$k["$([char[]]$_|%{$_+0}|sort)"]+=@($_)} $k.Values|?{$_[1]}|%{"$_"}
[char[]]$_|%{$_+0}|sort
-part的解释它是哈希表条目的关键,在该条目下存储单词的字谜.我最初的解决方案是:$_.ToLower().ToCharArray()|sort
.然后我发现我不需要ToLower()
密钥,因为哈希表查找不区分大小写.
[char[]]$_|sort
将是理想的,但对于字符的关键需要的排序,以不区分大小写(否则Cab
和abc
下不同的密钥将被存储).不幸的是,sort
字符不具有大小写不敏感(仅适用于字符串).
我们需要的是[string[]][char[]]$_|sort
,但是我找到了一种将每个char转换为字符串的简短方法,即将其他东西连接到它,在这种情况下是一个整数0
,因此[char[]]$_|%{$_+0}|sort
.这不会影响排序顺序,实际的键最终会像:d0 o0 r0 w0
.它不漂亮,但它做的工作:)
$k=@{};$input|%{$k["$([char[]]$_|%{$_+0}|sort)"]+=@($_)} $k.Values|?{$_[1]}|%{"$_"}
为了排除只是大小写不同的话,我们只能从输入列表,即删除重复的(案例insensitvely) $input|sort -u
,其中-u
代表-unique
.sort
默认情况下不区分大小写:
$k=@{};$input|sort -u|%{$k["$([char[]]$_|%{$_+0}|sort)"]+=@($_)} $k.Values|?{$_[1]}|%{"$_"}
[char[]]$_|%{$_+0}|sort
-part的解释它是哈希表条目的关键,在该条目下存储单词的字谜.我最初的解决方案是:$_.ToLower().ToCharArray()|sort
.然后我发现我不需要ToLower()
密钥,因为哈希表查找不区分大小写.
[char[]]$_|sort
将是理想的,但对于字符的关键需要的排序,以不区分大小写(否则Cab
和abc
下不同的密钥将被存储).不幸的是,sort
字符不具有大小写不敏感(仅适用于字符串).
我们需要的是[string[]][char[]]$_|sort
,但是我找到了一种将每个char转换为字符串的简短方法,即将其他东西连接到它,在这种情况下是一个整数0
,因此[char[]]$_|%{$_+0}|sort
.这不会影响排序顺序,实际的键最终会像:d0 o0 r0 w0
.它不漂亮,但它做的工作:)
chop,$_{join'',sort split//,lc}.="$_ "for<>;/ ./&&say for%_
请注意,这需要Perl 5.10(用于该say
功能).
先前尺寸: 150 159 字符
import Char import List x=sort.map toLower g&a=g(x a).x main=interact$unlines.map unwords.filter((>1).length).groupBy((==)&).sortBy(compare&).lines
该版本的165个字符符合新的澄清规则:
import Char import List y=map toLower x=sort.y g&f=(.f).g.f w[_]="";w a=show a++"\n" main=interact$concatMap(w.nubBy((==)&y)).groupBy((==)&x).sortBy(compare&x).lines
此版本处理:
输入中仅按大小写区分的单词应仅计为一个单词
输出需要是每行一个字谜集,但额外的标点符号是可以接受的