首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字母表重建

字母表重建
EN

Code Golf用户
提问于 2021-10-20 02:52:53
回答 6查看 1.4K关注 0票数 14

你是一位研究被遗忘已久的语言的历史学家。你刚刚发现了一块粘土石碑,它以字母顺序列出了语言中所有已知的单词。你的任务是找到这个字母的顺序,如果它存在的话。

任务

给定一个有序的单词列表,尝试输出一个有序的字符列表,以便:

  1. 单词列表中的每个字符在字符列表中准确地显示一次。
  2. 给出的单词列表按照字符列表按“字母顺序”排序。

如果(而且只有当)没有字符列表能够满足这些要求,则输出您所选择的错误/失败值。您必须在回答中指定所选择的值。

值得注意的是,多个字母排序对于给定的单词列表是有效的;如果我们有单词Cod、Com和Dy,可以假定C在D之前,d在m前面。字母o和y在生成的字母表中有不同的有效位置。为了更清楚起见,以下是该单词列表的一些有效输出(但不是全部):

代码语言:javascript
运行
复制
Input: Cod Com Dy
Output: CDdmoy
Output: CDdmyo
Output: CDdomy
Output: CoDdym
Output: dmCDoy
Output: dCmDoy
Output: CdoymD
Output: dyCoDm
Output: yodmCD

如果有多个有效字符列表,则代码必须一致地输出一个有效答案或所有有效答案。

规则

  • 你的输入是一个单词列表,可以以任何合理的格式输入。只允许输出语言在它们的初始数据/程序中包含这个单词列表,而不需要额外的字节成本。
  • 单词列表至少包含两个单词,没有两个单词是相同的。
  • 任何字母数字字符[A-Za-z0-9]都可以作为字符包含在单词列表中。
  • 单词从左到右读,先按最左边的字符字母顺序排列,然后再按下一个字符的字母顺序排列,等等。
  • 两个以同一个子串开头的单词只有在两个单词中较短的一个放在第一位时才会按字母顺序排列。“汽车”必须先于“鲤鱼”)。
  • 同一字符的大写和小写形式被认为是不同的字符,即字母表区分大小写。
  • 您可以以任何合理的格式输出每个字母表,但每个字母表必须只包含单词列表中的每个字符一次,而不包含其他字符。(这一要求当然不适用于虚假/失败的产出)

示例

您的正确输出可能不匹配所有这些,因为任何给定的单词列表可能有多个正确的字母表。有些人可能只有一个有效的答案。

代码语言:javascript
运行
复制
Input: bob cat chat dog hat hot guy
Output: tuybcdaohg

Input: A Aa AA Bb Ba
Output: baAB

Input: 147 172 120 04 07
Output: 14720

Falsy输出示例

这些都应该是错误的输出,并且可以用作测试用例。

代码语言:javascript
运行
复制
Input: GREG HOUSE ROCK AND ROLL
Output: [falsy]

Input: b5OtM bb5O MO Mtt 5
Output: [falsy]

Input: a aa aaa aaaaa aaaa
Output: [falsy]

评分

这是密码-高尔夫,最短的代码获胜。:)

EN

回答 6

Code Golf用户

发布于 2021-10-20 03:05:39

维沙尔,21字节

代码语言:javascript
运行
复制
∑UṖ'→?µ←:₃[nL|β];?⁼;h

在网上试试!

输出一个可能的字母表。使用较大字母的输入超时,因为它检查输入字符集的所有排列。退出时若有错误,则为falsey。

14如果a aa aaa aaaaa aaaa不是falsey的话。如果基地转换不是那么简陋的话,时间就会短得多。

解释说(从理论上说,如果基础转换不是那么简单的话)

代码语言:javascript
运行
复制
∑UṖ'→?µ←ðpβ;?⁼;h
∑U                # Get all unique characters of the input
  Ṗ               # and then all permutations of that.
   '              # From that, keep only items (n) where
    →?µ←ðp;       #    the input sorted by conversion to bijective base n with a space prepended to make everything non-zero
            ?⁼   #    equals the original input (⁼ is non-vectorising equals)
              ;h # and get the first from that

实际上,我需要使用鬼变量和变量范围限定一次。

票数 5
EN

Code Golf用户

发布于 2021-10-20 07:48:23

果冻,11字节

返回所有有效的字母表和空列表作为falsy值。

代码语言:javascript
运行
复制
FQŒ!iⱮⱮṢƑ¥Ƈ

在网上试试!

代码语言:javascript
运行
复制
F            -- flatten the word list into a single string
 Q           -- get the unique characters
  Œ!         -- get all permutations of those characters
          Ƈ  -- keep the permutation that return a truthy value for:
         ¥   --   group the last two links into dyad
             --   which is called with the permutation on the left and the word list on the right
    iⱮⱮ      --   for each character of each word get its index in the permutation
       ṢƑ    --   is the resulting list invariant under sorting?
票数 4
EN

Code Golf用户

发布于 2021-10-20 06:36:04

JavaScript (Node.js),146个字节

代码语言:javascript
运行
复制
a=>(g=s=>s[0]?g(s.filter(c=>a.some(w=>s.includes((r=/(.*)(.?).*,\1(.)/.exec([p,p=w]))[2])&&r[3]==c,p='')||!(q+=c))):q)([...new Set(a.join(q=''))])

在网上试试!

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/236452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档