删除字母同时保持字符串唯一


15

受启发 这一奇妙的挑战(基于观点和投票的数量)的,以我的拙见,答案太少了。

给定(通过任何方式)字符串列表,返回(通过任何方式)一组字母,当从给定字符串中删除这些字母时,它们(剩余的字符串)的总长度应尽可能小,同时保持每个字母的长度字符串唯一且至少一个字符长。

例子:

给定“日”和“日”;返回“ ay”,因为删除字符“ ay”时给定的字符串将是“ D”和“ d”。

给定“ Hello World!”,“ Hello world。”和“ Hello world”;之所以返回“ Helo Wrd”,是因为删除字符“ Helo Wrd”(带空格)时,字符串将为“!”,“ w。”和“ w”。

给定“世纪”,“十年”,“年”,“月”,“周”,“日”,“小时”,“分钟”和“秒”;返回“ centurdowi”,因为当字符“ centurdowi”给定的单词将是“ y”,“ a”,“ ya”,“ mh”,“ k”,“ ay”,“ h”,“ m”,“ s” ”已删除。

返回集的顺序和格式并不重要。


1
您的第二种情况是错误的:“ Helo Wrd”使用“!”,“ w”给出总长度为4。和“ w”。
路加福音

1
@卢克谢谢。我会解决的。这表明我们需要一种算法,因为手工完成容易出错。
2015年

对于第三个,“ centurdowi”的总长度为y,a,ya,mh,k,ay,h,m,s 12.
路加福音

@卢克谢谢。
2015年

+1使用挑战来帮助您应对另一个挑战!
路加福音

Answers:


4

Haskell,138130字节

import Data.List
c=concat
f i=snd$minimum[(length$c q,s)|s<-subsequences$nub$c i,q<-[map(filter(`notElem`s))i],nub q==q,all(>"")q]

用法示例:f ["century", "decade", "year", "month", "week", "day", "hour", "minute", "second"]-> "centurdoki"

这是蛮力的方法。

     s<-subsequences$nub$c i  -- concatenate input i to a single string, remove
                              -- duplicates and make a list of all subsequences
       q<-[map(filter(...))i] -- remove chars appearing in subsequence s from all
                              -- input words, call result q
          nub q==q            -- keep those s where q has no duplicates (i.e. each
                              -- resulting string is unique) and
            all(>"")q         -- contains no empty strings
  (length$c q,s)              -- make pairs from all kept s, where the first element
                              -- is the combines length of all strings in q,
                              -- second element is s itself
snd$minimum                   -- find minimum of those pairs and discard length

编辑:@Seeq帮助我节省了8个字节。谢谢!


怎么样map(#s),所以你不需要翻转notElem?编辑:或者您不能内联吗?
seequ

@Seeq:通过调用时map(#s)(#)必须定义为flip (filter . flip notElem)。但是当然内联要短得多。谢谢!
nimi 2015年

2

珀斯,34岁

接受格式为的输入["century", "decade", "year", "month", "week", "day", "hour", "minute", "second"]。一如既往地赞赏高尔夫球技巧。

hh.mlsebfqlQl{eTf!}keTm,dm-kdQy{sQ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.