1
拼写单词的最佳字母卡
假设您有一个单词列表,并且希望能够使用字母卡拼写每个单词。例如,拼写 cat,您将使用三张标记为C,A,T的卡片。 假设每张卡是 双面的,请提交程序以定义可用于拼写整个单词列表的最小卡数。 输入是单词列表,可以是基于文件的,硬编码的,命令行的。输出是卡片列表,您可以按照自己的意愿格式化和排序卡片,前提是可以清楚地标记卡片的方式。 情况并不重要:高尔夫,高尔夫和高尔夫是等效的。 一些提示: 卡数不能少于最长单词的长度 一张卡的两边都有相同的字母是没有意义的 当大小写不重要时,建议使用小写以利用某些对称性 例如,这些利用了某些对称性: 输入: ben,bog,bug,den,do,doe,dog,due,dug,Ed,end,gob,上帝,Ned,ode,笔,Poe,pug 输出: b / d,e / g,o / n 输入: 一个和一个,猿,是,床,芽,bur,bur,Dan,Deb,dub,耳朵,Ed,时代,午睡,泛,豌豆,酒吧,Rae,跑,擦 输出: a / b,d / r,e / n 使其成为一场流行竞赛,因此代码的优美性,运行时性能和机敏性(包括规则弯曲和漏洞)非常重要! 加成:一些人询问“允许的”对称性,是否可以使用特殊字体以及是否可以折叠卡。 允许的对称性是在0、90、180或270度旋转后看起来彼此相似的任何字母。这包括b / q,d / p和n / u。我还会说M / W,Z / N,当然还有I / l(大写i,小写L)。我可能正在抓挠表面,因此如果您不确定其他任何问题,请询问。 为了简单起见,请限制为标准的sans-serif字体,例如SE中使用的字体。 就折叠而言,虽然您可以做一些令人惊奇的替换,例如B可以是D,E,F,I,P或R,如果真的进行创造性的折叠,则可以是C或L,但我认为这实际上是弯曲的! 当我和孩子们玩一些类似的纸牌时,我想到了这个问题。我注意到单面卡的制作非常容易,而双面卡的制作则非常困难。 另外:提供了赏金,以奖励最受欢迎的答案。如果有平局,将奖励给第一个提交的人。 …