来信,动起来!铂 2


14

字母,动起来!非常受欢迎,但参与度有限。这个问题将更容易解决,但希望在打高尔夫球时能有一些技巧。

只给您提供一串小写字母。对于每个字母,在字母表中的位置m,将其移动,使其从末尾成为第m个字母。如果m的值比字符串的长度长,请将其移到最前面。仅输出完全转换的字符串。

例子:

“长颈鹿”

  • 'g'是字母表中的第7个字母,它已经是背面的第7个字母,因此请保留。
  • “ i”是第9个字母,由于9大于单词的长度,因此它位于最前面,因此字符串变为 igraffe
  • “ r”是第18个字母,就像“ i”一样,它位于前面: rigaffe
  • “ a”是第一个字母,它一直到最后: rigffea
  • “ f”是第6个字母,从背面变成第6个字母: rfigfea
  • 下一个'f'也是第6个字母,因此它也从后面移到第6个字母: rffigea
  • “ e”是第5个字母,从背面到第5个字母: rfefiga

“花”

  • 'f'(6)=> flower
  • 'l'(12)=> lfower
  • 'o'(15)=> olfwer
  • 'w'(23)=> wolfer
  • 'e'(5)=> weolfr
  • 'r'(18)=> rweolf

“菠萝”

  • 'p'(16)=> pineapple
  • 'i'(9)=> ipneapple
  • 'n'(14)=> nipeapple
  • 'e'(5)=> nipaepple
  • 'a'(1)=> nipepplea
  • 'p'(16)=> pnipeplea
  • 'p'(16)=> ppnipelea
  • 'l'(12)=> lppnipeea
  • 'e'(5)=> lppneipea(确保您移动尚未移动的e!在这里无关紧要,但在下面则可以。)

感谢@Neil通过以下3个改进来改进了测试用例:

“比萨”

  • 'p'(16)=> pizza
  • 'i'(9)=> ipzza
  • 'z'(26)=> zipza
  • 'z'(26)=> zzipa(移动第二个z!)
  • 'a'(1)=> zzipa

“胡言乱语”

  • 'a'(1)=> bracadabraa
  • 'b'(2)=> racadabraba
  • 'r'(18)=> racadabraba
  • 'a'(1)=> rcadabrabaa
  • 'c'(3)=> radabrabcaa
  • 'a'(1)=> rdabrabcaaa
  • 'd'(4)=> rabrabcdaaa
  • 'a'(1)=> rbrabcdaaaa
  • 'b'(2)=> rrabcdaaaba
  • 'r'(18)=> rrabcdaaaba
  • 'a'(1)=> rrbcdaaabaa

“字符”

  • 'c'(3)=> haractecrs
  • 'h'(8)=> arhactecrs
  • 'a'(1)=> rhactecrsa
  • 'r'(18)=> rhactecrsa
  • 'a'(1)=> rhctecrsaa
  • 'c'(3)=> rhtecrscaa
  • 't'(20)=> trhecrscaa
  • 'e'(5)=> trhcrescaa
  • 'r'(18)=> rtrhcescaa
  • 's'(19)=> srtrhcecaa

Answers:



4

Python 3,78个字节。

感谢orlp,节省了2个字节。
DSM节省了7个字节。

x=input()
y=[]
for z in x:m=max(len(x)-ord(z)+96,0);y[m:m]=z
print(''.join(y))

将单词建立为列表,然后将其加入。


(q-p,0)[p>q]比更长min(q-p,0)
orlp 2016年

是的,但是不会做同样的事情。总是会返回0或负数。
Morgan Thrapp '16

对不起,我是说max(q-p,0)
orlp

3

Python 2,86个字节

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print"".join(k)[::-1]

Python 3,88个字节

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print("".join(k)[::-1])

例子

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf

3
k.remove删除第一个实例,因此对于来说会失败baa
Sp3000 '16

2

JavaScript的ES6,136个 134 131字节

s=>([...s].map(c=>{s=s.replace(c,'');p=s.length+97-c.charCodeAt();s=s.substr(0,p)+c.toUpperCase()+s.substring(p)}),s.toLowerCase())

请注意,我非常注意不要将同一字符移动两次,否则pizza会变成zipza应该移动的时间zzipa。还有一个极端的情况,就是不能过早删除字符。characters可能成为可能,srtrchaeac或者srtrheccaa如果您做错了,但应该如此srtrhcecaa。另一个棘手的词是abracadabra输出rrabaaadcba错误的单词。rrbcdaaabaa是正确的。

编辑:通过使用自动将其参数强制为0..length范围的子字符串,精简了两个字节。

编辑:通过将第一个子字符串更改为substr,减少了三个字节,如user81665所建议。


我认为您可以使用substr代替substring
user81655 '16

slice更好(我认为)。
Mama Fun Roll

@ՊՓԼՃՐՊՃՈԲՍԼ他不能,因为将负数slice打断就可以了。
user81655 '16

哦,忘记了。
Mama Fun Roll

是的,pizza您张贴在我的帖子上的测试用例存在一些错误,但我已将其修复。
geokavel

1

Pyth,18 17字节

uXeS,Z-lzhx;HGHzk

测试套件

使用reduce遍历输入字符串,在正确位置插入字符串(基本情况为空)字符串。


1

𝔼𝕊𝕄𝕚𝕟,23个字符/ 40个字节

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝

Try it here (Firefox only).

说明

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝ // implicit: ï=input, ᴉ=input split into chars, Ξ=empty array, ᶛ=lowercase alphabet
ᴉⓜ                      // map over input chars
   ΞăМƲ ïꝈ-ᶛą$,0),0,$;   // use splice to insert map item into Ξ at requested index
                      Ξ⨝ // join Ξ
                         // implicit output
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.