手紙、動く!Pt。2


14

最初の手紙、Get Moving!非常に人気がありましたが、参加は限られていました。これは簡単に解決できますが、うまくいけばゴルフにいくつかのトリックが含まれます。

小文字のみの文字列が与えられます。各文字について、アルファベット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を移動することを確認してください!ここでは重要ではありませんが、その下は移動します。)

次の3つの追加でテストケースを改善してくれた@Neilに感謝します。

"ピザ"

  • 'p'(16)=> pizza
  • 'i'(9)=> ipzza
  • 'z'(26)=> zipza
  • 'z'(26)=> zzipa(2番目の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

回答:



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

それは同じですが、それは同じことをしません。それは常に0または負の値を返します。
モーガンスラップ

申し訳ありませんが、私は意味した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

2

ジャバスクリプト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。もう1つの注意がabracadabra必要な言葉は、出力rrabaaadcbaが正しくないことです。rrbcdaaabaa正しいでしょう。

編集:引数を自動的に0..lengthの範囲に強制する部分文字列を使用して、2バイトを削り落とします。

編集:user81665で提案されているように、最初のサブストリングをsubstrに変更することにより、3バイトを削り落としました。


substr代わりに使用できると思いますsubstring
user81655

sliceより良い(私は思う)。
ママファンロール

@ՊՓԼՃՐՊՃՈԲՍԼ負の数を渡すとslice壊れるので、彼はできません。
user81655

ああ、それを忘れました。
ママファンロール

ええ、pizzaあなたが私の投稿に置いたテストケースに少し間違いがありましたが、私はそれを修正しました。
-geokavel


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.