言葉の逆転


30

ソナは10歳の娘と一緒に家にいます。彼女は午後2時に学校が終わるので、学校から別の子供を連れ戻すために学校に行く必要があります。外は暑いので、彼女は小さな子供を家に置いておきたいと思っています。

彼女は、子供がいない間、忙しくしておくために、たくさんの紐を子供に与えました。彼女は、文字列の単語を逆にするように彼女に頼みました。文字列がたくさんあるので、この巨大な課題を解決するために娘を助ける必要があります。

したがって、単一のスペースで区切られた単語を含む文字列が与えられた場合、文字列内の単語を逆にします。先頭または末尾にスペースがないと仮定できます。

文字列にはのみが含まれる[a-zA-z ]ので、句読点を処理する必要はありません。

入力として文字列が与えられ、文字列を出力する必要があります。

サンプルテストケース:

Input:
Man bites dog 

Output: 
dog bites Man


Input:
The quick brown fox jumps over the lazy dog

Output:
dog lazy the over jumps fox brown quick The


Input:
Hello world

Output:
world Hello

得点

これはです。バイト単位の最短回答が優先されます。



1
入力を単語のリストとして取得できますか?(つまり['man', 'bites', 'dog']
Rɪᴋᴇʀ

3
出力に末尾の空白を含めることはできますか?
デジタル外傷

回答:


11

網膜、7バイト

O$^`\w+

オンラインでお試しください!

すべての単語に一致する(\w+)ソートキーの空の文字列(O$)でソートします。つまり、まったくソートされず、順序が逆になります(^)。


Retinaを使用したことはありませんが、なぜ必要なの0$ですか?ただ逆にすることはできませんか?
コイアリンガーアーイング

O現在、@ RandomUserソートモード()は、このリバースオプションを持つ唯一のモードです。
マーティンエンダー



7

JavaScript(ES6)、31バイト

s=>s.split` `.reverse().join` `

それを試してみてください

f=
s=>s.split` `.reverse().join` `
o.innerText=f(i.value="Man bites dog")
oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>


1
このような答えです。これは、C#の答えと本質的に同じで、ゴルフでC#が嫌いです。私の答えの余分な綿毛はすべてバイト数をほぼ倍にします... +1
TheLethalCoder

サイドノート:C#で何も渡さない場合Split、デフォルトで空白で分割されますが、ここでも同じことができますか?
TheLethalCoder

1
残念ながら、@ TheLethalCoderは、splitJSで文字列/正規表現を指定しない場合、使用する構文に応じて、個々の文字ごとに分割するか、元の文字列を含む単一の要素で配列を作成します。
シャギー

7

Bash +一般的なLinuxユーティリティ、21

printf "$1 "|tac -s\ 

出力文字列に末尾のスペースを残します-それがOKかどうかはわかりません。


2
50kおめでとうございます!! 今日のあなたの番:-)
ルイスメンドー

@LuisMendoありがとう!
デジタル外傷

6

R、19バイト

cat(rev(scan(,'')))

stdinから文字列を読み取ります。デフォルトでは、scanスペース/改行で区切られたトークンを読み取るため、ワードをベクトルとして読み取ります。rev反転し、catスペースを含む要素を出力します。

オンラインでお試しください!


6

Brachylog、6バイト

ṇ₁↔~ṇ₁

オンラインでお試しください!

説明

ṇ₁        Split on spaces
  ↔       Reverse
   ~ṇ₁    Join with spaces

「スペースで分割」と「スペースを結合」の両方が同じビルトインを使用する、つまりṇ₁、異なる「方向」で使用されるだけであることに注意してください。




3

brainfuck、74バイト

,[>++++[<-------->-],]<[>++++[->--------<]+>[[<]>[+>]<]<-[<]>[.>]<[[-]<]<]

オンラインでお試しください!

このコードは、2つの異なる場所に数値-32を作成しますが、単一の-32を維持しようとするよりもバイト数が少ないようです。

説明

,[                        input first character
  >++++[<-------->-]      subtract 32 from current character (so space becomes zero)
,]                        repeat for all characters in input
<                         go to last character of last word
[                         while there are more words to display:
 >++++[->--------<]       create -32 two cells right of last letter
 +>                       increment trailing space cell (1 right of last letter) so the next loop works
 [[<]>[+>]<]              add 32 to all cells in word and trailing space cell
 <-                       subtract the previously added 1 from the trailing space
 [<]>                     move pointer to beginning of word
 [.>]<                    output word (with trailing space)
 [[-]<]                   erase word
 <                        move to last character of previous word
]

3

C、54 48バイト

入力として引数を使用、48バイト

main(c,v)char**v;{while(--c)printf("%s ",v[c]);}

オンラインで試す

> ./a.out man bites dog

ポインターを使用して、84バイト

f(char*s){char*t=s;while(*t)t++;while(t-s){while(*t>32)t--;*t=0;printf("%s ",t+1);}}

つかいます

main(){ f("man bites dog"); }

3

Japt11 10 7 4バイト

Japtでの最初の試み。

¸w ¸

オンラインで試す


説明

    :Implicit input of string U
¸   :Split on <space>
w   :Reverse
¸   :Join with <space>

ここで Japtのヒントを共有してください。


2
Japtをご利用いただきありがとうございます:-)の¸代わりに使用できますqS 。ここで3バイト節約できます。(インタープリタードキュメントの「Unicodeショートカット」セクションを参照してください)
-ETHproductions

いいね!-Sフラグを使用すると、バイトを保存できます。
オリバー

@ obarakon、2バイトを数えます。フラグがバイトカウントに含まれていない限り、その場合は4バイトになりますか?
シャギー

@Shaggy各フラグは1バイトとしてカウントされます。したがって-S、合計バイト数に+1されます。
オリバー

ああ、なるほど。それはPPCGのものですか、それともJaptのものですか?
シャギー






2

Cubix、48バイト

ほとんどこれをあきらめましたが、ついにそこに着きました。

oU_;SW;@?ABu>):tS-?;\0$q^s.$;;<$|1osU!(;;...<#(1

オンラインでお試しください!

これは、次のように辺の長さが3の立方体にマッピングされます

      o U _
      ; S W
      ; @ ?
A B u > ) : t S - ? ; \
0 $ q ^ s . $ ; ; < $ |
1 o s U ! ( ; ; . . . <
      # ( 1
      . . .
      . . .

一般的な手順は次のとおりです。

  • すべての入力Aと逆Bスタックを取得する
  • ネガqを下に移動0し、スタックにカウンターを追加します。ここで飛び回るのビット。
  • スペース/終了ループを検索し、スタックを正しい印刷順序にします。
    • カウンター)をインクリメントし、スタックからカウンター項目を取得しますt
    • スペースまたはEOIですか S-?
    • そうでない場合は繰り返します
  • 単語ループを印刷する
    • デクリメントカウンター (
    • カウンター!Uが0の場合、ループを終了します
    • sスタック上のキャラクターとカウンターを入れ替える
    • o文字を印刷し、スタックからポップします;
    • 繰り返しループ
  • スタックの長さを取得し、#デクリメントします(
  • ?0かどうかを確認し、0の@場合は終了します
  • それ以外の場合は、スペースをSoクリーンアップして印刷;;し、最初のループに戻ります。

余分なステップをいくつかスキップしましたが、ステップバイステップで見ることができます


2

Mathematica、35バイト

StringRiffle@Reverse@StringSplit@#&

オンラインでお試しください!


StringSplit[#]空白で自動的に分割されるため、を指定する必要はありません" "
木ではない

2
正しい!-5バイト!
J42161217

ああ、私はあなたが関数合成を使用して別のバイトを保存できると思います:(StringRiffle@*Reverse@*StringSplitそれをのように呼び出しますStringRiffle@*Reverse@*StringSplit@"hello world"
ツリーではない

2

ローダ27 25バイト

@fergusqのおかげで2バイト節約

{[[split()|reverse]&" "]}

オンラインでお試しください!

この関数は、入力ストリームから入力を受け取ります。

説明(古い)

{[[(_/" ")()|reverse]&" "]}           /* Anonymous function */
   (_/" ")                            /* Pull a value from the stream and split it on spaces */
          ()                          /* Push all the values in the resulting array to the stream */
            |reverse                  /* And reverse it */
  [                 ]                 /* Wrap the result into an array*/
                     &" "             /* Concatenate each of the strings in the array with a space */
 [                       ]            /* And push this result to the output stream */

splitはデフォルトの区切り文字としてスペースを使用するためsplit()、より短くなり(_/" ")()ます。
fergusq





1

Gema、29文字

<W><s>=@set{o;$1 ${o;}}
\Z=$o

サンプル実行:

bash-4.4$ gema '<W><s>=@set{o;$1 ${o;}};\Z=$o' <<< 'Man bites dog'
dog bites Man 



1

Java 8、53 57バイト

Lambda + Stream API

s->Stream.of(s.split(" ")).reduce("",(a,b)->b+" "+a)

Selimの提案に続いて、4バイトをドロップしました


1
使用して保存4バイトStream.ofの代わりに、Arrays.stream: - )
セリム


1

Pyth、3バイト

_cw

私の最初のPythの回答、@ notjaganの回答より1バイト短い!

説明:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.