首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最优Alphabet步进

最优Alphabet步进
EN

Code Golf用户
提问于 2018-12-12 03:14:21
回答 5查看 1.5K关注 0票数 31

给定一个只由字母组成的输入字符串,返回步骤大小,返回从任意字母开始访问所有字母所需的最小步数。

例如,以单词dog为例。如果我们使用1的步长,我们最终会得到:

代码语言:javascript
复制
defghijklmnopqrstuvwxyzabcdefg   Alphabet
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
defghijklmnopqrstuvwxyzabcdefg   Visited letters
d          o                 g   Needed letters

总共30步。

然而,如果我们使用一个步骤大小为11,我们得到:

代码语言:javascript
复制
defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefg
^          ^          ^          ^          ^          ^
d          o          z          k          v          g   Visited letters
d          o                                           g   Needed letters

总共有6个步骤。这是步骤的最小数量,因此dog的返回结果是步骤大小;11

测试用例:

代码语言:javascript
复制
"dog"      -> 11
"age"      -> 6
"apple"    -> 19
"alphabet" -> 9
"aaaaaaa"  -> 0 for 0 indexed, 26 for 1 indexed
"abcdefga" -> 1 or 9
"aba"      -> Any odd number except for 13
"ppcg"     -> 15
"codegolf" -> 15
"testcase" -> 9
"z"        -> Any number
"joking"   -> 19

规则

  • 输入将是一个非空字符串或字符数组,仅由字母az组成(您可以选择大写还是小写)。
  • 输出可以是0索引(即范围0-25)或1索引(1-26)
  • 如果有领带,您可以输出任意一步大小或所有这些。
  • 这是密码-高尔夫,所以每种语言的最小字节数获胜!
EN

回答 5

Code Golf用户

发布于 2018-12-12 09:38:37

木炭,41字节

代码语言:javascript
复制
≔EEβEθ∧μ⌕⭆β§β⁺⌕β§θ⊖μ×κξλ⎇⊕⌊ιΣι⌊ιθI⌕θ⌊Φθ⊕ι

在网上试试!链接是详细的代码版本。0-索引。解释:

代码语言:javascript
复制
Eβ

循环26步的大小。(实际上,我在这里循环小写字母并使用索引变量。)

代码语言:javascript
复制
Eθ∧μ

在第一个输入之后,循环遍历输入的每个字符。

代码语言:javascript
复制
⭆β§β⁺⌕β§θ⊖μ×κξ

循环26次,并生成在给定步长下从输入的前一个字符开始(0-索引)的26步所产生的字符串。

代码语言:javascript
复制
⌕...λ

查找输入的当前字符在该字符串中的位置,如果找不到-1。

代码语言:javascript
复制
E...⎇⊕⌊ιΣι⌊ι

取所有位置之和,除非找不到一个,在这种情况下使用-1。

代码语言:javascript
复制
≔...θ

省点钱吧。

代码语言:javascript
复制
⌊Φθ⊕ι

找出最小的非负和。

代码语言:javascript
复制
I⌕θ...

用这个和找到第一步的大小并输出它。

票数 6
EN

Code Golf用户

发布于 2018-12-12 06:25:57

JavaScript,143个字节

代码语言:javascript
复制
w=>(a=[...Array(26).keys(m=1/0)]).map(s=>~[...w].map(c=>(t+=a.find(v=>!p|(u(c,36)+~v*s-u(p,36))%26==0),p=c),p=t=0,u=parseInt)+t<m&&(m=t,n=s))|n

在网上试试!

多亏了沙基,使用[...Array(26).keys()]可以节省9个字节。

票数 5
EN

Code Golf用户

发布于 2018-12-12 18:06:55

果冻,17字节

代码语言:javascript
复制
ƓI%
26×þ%iþÇo!SỤḢ

输入是STDIN上的字节串,输出是1索引.

在网上试试!

是如何工作的

代码语言:javascript
复制
ƓI%            Helper link. Argument: m (26 when called)

Ɠ              Read a line from STDIN and eval it as Python code.
 I             Increments; take all forward differences.
  %            Take the differences modulo m.


26×þ%iþÇoSSỤḢ  Main link. No arguments.

26             Set the argument and the return value to 26.
  ×þ           Create the multiplication table of [1, ..., 26] by [1, ..., 26].
    %          Take all products modulo 26.
       Ç       Call the helper link with argument 26.
     iþ        Find the index of each integer to the right in each list to the left,
               grouping by the lists.
        o!     Replace zero indices (element not found) with 26!.
               This works for strings up to 25! = 15511210043330985984000000 chars,
               which exceeds Python's 9223372036854775807 character limit on x64.
          S    Take the sum of each column.
           Ụ   Sort the indices by their corresponding values.
            Ḣ  Head; extract the first index, which corresponds to the minimal value.
票数 4
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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