Flippign Lettesr Aroudn


33

チャットでは、私たちは多くの場合タイプが速いため、メッセージを投稿する前に文字順序を実際に見ません。怠け者なので、単語の最後の2文字を自動的に交換するプログラムが必要ですが、遅すぎる応答を望まないため、コードは短くなければなりません。

あなたはそれを受け入れることを希望する場合はあなたの仕事は、与えられた文字列内の各単語の最後の2つの文字(ワードので、反転するプログラム書くことであるThanskにターンThanks)。言葉はで区切られた英語のアルファベットで二つ以上の文字の配列である単一のスペース。

  • 文字列/リストの文字入力のみアルファベット文字とスペース(ASCII [97から122]、[65から90]および32)を含むことが保証されるよう、あなたは受け取ります。

  • これらの抜け穴はデフォルトでは禁止されていることに注意しながら、任意のプログラミング言語で、任意の標準的な方法で入力を取得し、出力を提供できます。

  • 出力には、末尾にスペースが1つと、末尾に改行が1つある場合があります。

  • 入力には常に単語(および対応する空白)のみが含まれ、少なくとも1つの単語で構成されます。

これはコードゴルフなので、各言語での最短の提出(バイト単位)が勝ちです!

テストケース

文字列は読みやすくするために引用符で囲まれていることに注意してください。

入力->出力

「ありがとう」->「ありがとう」
「あなたのウェルカム」->「どういたしまして」
「これはリンゴです」->「Thsi si na appel」
「Flippign Lettesr Aroudn」->「Flipping Letters Around」
「スワップレットを使用したチャレンジ」->「スワップされたレターを使用したチャレンジ」

または、テストスイートの利便性のために、入力とそれに対応する出力を個別に示します。

ありがとう
あなたのウェルカム
これはリンゴです
Flippign Lettesr Aroudn
スワップレットを使用したチャレンジ
ありがとう
どういたしまして
このsi app
手紙をめくる
交換されたレターを使用したチャレンジチャレンジ

タイトルをくれたDJMcMayhemに感謝します。これはもともとCMCでした。


単語の配列を出力できますか?
シャギー

@Shaggyいいえ、出力が文字列(またはデフォルトで文字のリスト)でなければなりません
氏Xcoder

入力ごとに末尾のスペースをリクエストできますか?
FlipTack

@FlipTack 最初のバージョンでは許可されていましたが、それを使用する回答が投稿される前にその規則を削除しました。(一部は、チャットのユーザーの中には、そうでなければ簡単すぎると言っていたので、彼らに同意したからです)。いいえ、許可されていません。
ミスターXcoder

1
@Fabian Aの単語列である2通の以上の手紙
氏Xcoder

回答:


16

V、4 5バイト

òeXp

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

|| カーソルを示します

バッファはで始まり|w|ord and more words、カーソルは最初の文字にあります。

再帰的に ò

e言葉の最後に行く

wor|d| and more words

Xカーソルの左側の文字を削除します

wo|d| and more words

p次のキャラクターの上でそれを味わう

wod|r| and more words

暗黙の終了ò、バッファの最後に達するまで他の単語に対して同じプロセスを繰り返します


2
タスクに適した言語:)
DJMcMayhem

「再帰的」ではなく「繰り返し」という意味ですか?
NieDzejkob

@NieDzejkob V wikiは「再帰的に」という言葉を使用してòコマンドgithub.com/DJMcMayhem/V/wiki/Normal-Mode-Commands
Kritixi Lithos

10

ゼリー、7 バイト

Ḳœ?@€2K

文字のリストを取得および返すモナドリンク

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

どうやって?

Ḳœ?@€2K - Link: list of characters
Ḳ       - split at spaces
     2  - literal two
    €   - for €ach:
   @    -   with sw@pped arguments:
 œ?     -     nth permutation (the 2nd permutation has the rightmost elements swapped)
      K - join with spaces

これは順列の乱用です。代替
ミスターXcoder

@ Mr.Xcoder Ḳ2œ?ЀKも機能し、単一のクイックを使用します。
デニス

7

Brain-Flak、122バイト

{(({})[((((()()){}){}){}){}])((){[()](<{}>)}{}){{}<>(({}({}))[({}[{}])])(<>)}{}({}<>)<>}<>(({}({}))[({}[{}])]){({}<>)<>}<>

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

仕事のための最悪の言語:)

読みやすい少し読みやすいバージョン:

{
    (({})[((((()()){}){}){}){}])((){[()](<{}>)}{})

    {
        {}
        <>

        (({}({}))[({}[{}])])

        (<>)
    }
    {}

    ({}<>)<>

}<>

(({}({}))[({}[{}])])

{

    ({}<>)
    <>
}<>

これがBrainfuckバージョンよりも長いとは思えません...
Pureferret

@pureferret Brain-flakはbrainfuckよりも長い傾向があります。主に、brain-flakが2を必要とするプリミティブコマンドごとに2バイトが必要です。
DJMcMayhem



6

Python 3、50バイト

print(*(w[:-2]+w[:-3:-1]for w in input().split()))

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

この答えは、Python 3のprintの動作を乱用します。複数の引数が1つのスペースで印刷されます。もちろん、入力にいくつの単語が含まれるかわからないため、複数の引数を指定することはできません。そこで、splat演算子を使用します。基本的に

print(*[a,b,c])

とまったく同じです

print(a,b,c)

それを酷使すると、完全なプログラムが、使用する' '.join必要のある関数/ラムダなどに比べて短くなります。


Python 2はを書き込むことで2バイトを節約するようですfor w in input().split():print w[:-2]+w[:-3:-1],。Python 3では、最後の2文字を抽出するprint(*(''.join(a)+c+b for*a,b,c in input().split()))ことaは、文字列に作り直す必要がある場合を除いてうまく機能します。
XNOR

5

Matlab(R2016b)、51 50バイト

保存された49 50(!)@Giuseppeのおかげでバイト。

function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')

そして、私の以前の答え:

Matlab(R2016b)、100バイト

(それの楽しみのために:P)

function s(a),a=regexp(a,' ','split');for i=1:length(a),fprintf('%s ',a{i}([1:end-2 end end-1])),end

説明:

function s(a) % Defining as a function...
a=regexp(a,' ','split'); % Splits the input string at the spaces
for i=1:length(a) % Loops through each word
    fprintf('%s ',a{i}([1:end-2 end end-1])) % And prints everything with the last two characters swapped.
end

1
単語は少なくとも2文字であると定義されているため、1文字の単語は発生しません。
ジュゼッペ

regexprepここで働い?のようなものregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
ジュゼッペ

D =これ。だった。エピック!この回答は私のものとはまったく異なるため、この回答を投稿してください。唯一のことは、Matlabがマッチを参照することで$1あり\1、そうではないので、そうregexprep(a,'(\w*)(\w)(\w)','$1$3$2')です。
チアゴオレニク

1
別の回答として/この回答に投稿する必要があります。文字列チャレンジで正規表現が役立つかどうかを確認するのは常に良いことです!その上、私は明らかにMATLABの正規表現エンジンを理解していないので、私がそれを信用するのはかなり公平ではないでしょう。
ジュゼッペ

1
function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')さらにもう1バイト短くなっています!
ジュゼッペ


4

プロローグ(SWI)、60バイト

[A,B]+[B,A].
[A,B,32|U]+[B,A,32|Y]:-U+Y,!.
[A|U]+[A|Y]:-U+Y.

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

説明

まず、基本ケースを定義します。

p([A,B],[B,A]).

これは、最後の2文字が常に交換されることを意味します。

次に、スペースのすぐ隣にいる場合の動作を定義します。

p([A,B,32|U],[B,A,32|Y]):-p(U,Y),!.

スペースの直前でスペースの前の文字が交換されると2つのストリングが一致し、ストリングが一致する場合は残りが一致します。その後!、カットに使用します。

最後のケースは、最初の2文字が一致する必要があるスペースの隣にない場合です。

p([A|U],[A|Y]):-p(U,Y).

4

Wolfram言語、117バイト

StringReplace[RegularExpression["\\b[[:alpha:]]{2,}\\b"]:>StringDrop[StringInsert["$0",StringTake["$0",{-1}],-3],-1]]

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

テスト文字列に適用されます。

StringReplace[
  RegularExpression["\\b[[:alpha:]]{2,}\\b"] :> 
   StringDrop[StringInsert["$0", StringTake["$0", {-1}], -3], -1]] /@
 {"Thansk", "Youer welcoem", "This is an apple", 
  "Flippign Lettesr Aroudn", "tHe oDd chALlEneg wiht swappde lettesR"} // Column
Thanks
Youre welcome
Thsi si na appel
Flipping Letters Around
teH odD chALlEnge with swapped letteRs

4
PPCGへようこそ!
Steadybox

@Steadyboxありがとう。
エドモンド

4

R111 51 41バイト

@Giuseppeの好意により、古い方法を水から吹き飛ばす正規表現アプローチ。

cat(gsub("(.)(.)\\b",'\\2\\1',scan(,"")))

1
ここで正規表現ははるかに効率的です:オンラインで試してみてください!
ジュゼッペ

(Rで純粋な文字列操作アプローチを行うために必要な勇気に感謝しているわけではありません)
ジュゼッペ


@Giuseppeうわー、すてきな仕事!回答に編集しましたが、独自の回答を作成したい場合は先に進んでください!
rturnbull

1
いや、それを心配しないでください。私がダウンしgolfed :別の10バイトの別の正規表現のアプローチを移植し、70バイトの古いアプローチの
ジュゼッペ・

4

APL(Dyalog Classic)、28バイト

1↓∊((¯2↓⊢),2↑⌽)¨' '(,⊂⍨⊣=,)⍞

⎕MLそして、⎕IOともに1

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

説明

  • ... (,⊂⍨⊣=,) ... 分割(境界線を維持し、先頭に境界線を追加)...
  • ... ⍞ ...入力...
  • ... ' ' ... ...スペースで。
  • ... ( ... )¨ ... 次に、その各要素に:
    • ... , ... 連結...
    • ... (¯2↓⊢) ... ...最後の2つを除くすべてのアイテム...
    • ... 2↑⌽ ... ...最後の2つの要素の逆に。
  • 1↓∊ ... 最後に、フラット化された結果の最初の要素を除くすべてを返します。

最初を
アダム



3

J20 19 11バイト

@Bolce Bussiereの功績

1&A.&.>&.;:

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

       &.;:      on words
    &.>          on each
  A.             apply the permutation
1&               number 1, swap the last two elements

1
13バイトで(1&A.&.>)&.;:
Bolce Bussiere

@BolceBussiereパーフェクト
FrownyFrog

説明を追加してもらえますか?私のソリューションの恥ずかしいバイト数を減らすためにKに移植できるかどうか疑問に思います!
ストリートスター

3

アリス、24バイト

/0RR'.%$1\' o
\ix*o ne@/

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

説明

/...\' o
\.../

これにより、ループ本体が線形の序数スニペットであるループが形成され、' o2回のループ反復ごとにCardinalモードで実行されます。後者はスペースを表示するだけです。

順序コードのジグザグ構造を展開すると、線形ループ本体は実際には次のようになります。

iR*' %e10xRo.n$@

これを分解する:

i     Read all input. On subsequent iterations, this will push an empty string.
R     Reverse.
*     Join. On the first iteration, this joins the input to an implicit empty string,
      which does nothing. On subsequent iterations, it will join the empty string to
      the word on top of the string, thereby getting rid of the empty string.
' %   Split around spaces. On the first iteration, this will split the input
      into individual words. On subsequent iterations, this does nothing.
e10   Push "10".
x     Use this to permute the (reversed) word on top of the stack. In
      particular, the word is rearranged with the same permutation that is
      required to sort the string "10", which means the first two letters
      get swapped (which correspond to the last two letters of the actual
      word).
R     Reverse the swapped word.
o     Print it.
.n$@  If there are no words left on the stack, terminate the program.

文字交換h~Zは4 ()ではなく3バイト()で行えることに気づいたのe10xですが、レイアウトを調整して実際に全体で1バイトを節約する方法は見当たりません。
マーティンエンダー

2

brainfuck109100バイト

編集:1文字の単語を処理する必要はありません

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

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

末尾のスペースを印刷します

使い方

,[>++++[-<-------->],] Puts input on the tape and subtracts 32 from each character
                       This separates each word

>+[- Start the loop
   <[>++++[<++++++++>-]<[->>+<<]<] Add 32 to each letter of the word
                                   Skip this on the first iteration for the last word

   <<[->>+<<]>[[-<+>]>] Swaps the last two letters of the word
   <<[>+>+>]- If there is another word to the left continue loop
              Also set up to add a space to the end of the word
 <] End loop
 >>>>>>>[.>] Print the modified string

以前のバージョン、109バイト

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

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



1

PHP119 107バイト

編集:完全に人間に感謝

<?php foreach(explode(" ",trim(fgets(STDIN)))as$w)echo substr($w,0,strlen($w)-2).strrev(substr($w,-2))," ";

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


1
$word1文字の変数名を作成することはできませんか?
完全に人間の

@totallyhumanうん!私はフルバージョンを書き、それを圧縮しましたが、それに気づきませんでした。ありがとうございます。
Zerquix18

PHPのオープンタグは、6バイトを節約する回答で省略できます。
ダニエルW.

のだろうかfgets(STDIN)省略するかで置き換えることができ$x、あまりにもすべての答えは自分の答えに入力カウントしないで好き
ダニエル・W.

trim()不要なはずです。
タイタス


1

sed20 17 + 1(-r)= 18バイト

s/(.)(.)\b/\2\1/g

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


TIOリンクが投稿されたコードと一致しません。TIOリンクは数バイト長くなります。
Xcali

おっと、リンクを修正
Noskcaj

削除でき|$ます。何もしていません。(あなたが必要とすることをあなたが期待することをするために(.)(.)(\b|$)、それは\bすでに文字列の終わりに一致するため、それは必要ではありません。)
ジョーダン

おっと、それを取り除くつもりだった。ありがとう、
ノスクカイ

1

PHP、65バイト

PHP 7.1以降が必要です

for(;$s=$argv[++$i];$s[-1]=$s[-2],$s[-2]=$c,print"$s ")$c=$s[-1];

文を個別のコマンドライン引数として受け取ります。で実行し-nrます。


単一の文字列、77 + 1バイトでの作業:

foreach(explode(" ",$argn)as$s){$c=$s[-1];$s[-1]=$s[-2];$s[-2]=$c;echo"$s ";}

でパイプとして実行し-nRます。


...またはオンラインで試してください


1

Java 8、35バイト

s->s.replaceAll("(.)(.)\\b","$2$1")

@TaylorScottのGoogleスプレッドシートの答えは、私は2つのバイトをgolfed後。編集:ゴルフの2バイト後、ニールの網膜回答のポートになりました。

説明:

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

s->                           // Method with String as both parameter and return-type
   s.replaceAll("(.)(.)       //  Replace any two characters,
                       \\b",  //  with a word-boundary after it (space or end of String)
                "$2$1")       //  With the two characters swapped

1

Googleスプレッドシート、33バイト

セルから入力A1を取得し、呼び出しセルに出力する匿名ワークシート関数

=RegExReplace(A1,"(.)(.)\b","$2$1

-2バイト以上の使用に対して@KevinCruijssenに感謝(.)(\w)


私が間違っていなければ、両方とも(\w)ゴルフをすることができます(.)\bすでに単語だけを探すための表示です。(ただし、完全には
定か

@KevinCruijssen-あなたは絶対に正しい、それは可能です。ありがとうございました!
テイラースコット

1

JavaScript(Node.js)38 36 32バイト

s => s.replace(/(。)(。)(| $)/ g、 "$ 2 $ 1") 
s=>s.replace(/(.)(.)\b/g,"$2$1")

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

RegExpのアプローチは@Giuseppeの好意によるものです(ただし、これは独立して考えていました)。単語は1つのスペースだけで区切られていると仮定します

-2 1つのスペースのみを考慮し、末尾スペースを追加する場合

-4ありがとう@Shaggy


もっとスペースがあるかどうかは関係ない、と思う
l4m2

@ l4m2しかし、さらにスペースがある場合は、の38になりs=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")ます。
朝琴シエル

@ l4m2ところで、私の最初の答えはs=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
浅本シエル

ab abc abcd abcde abcdef ab_bc_cd_de____ef____
l4m2

1
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")同じ長さ
l4m2

1

K(oK)23 22バイト

" "/{x@prm[!#x]1}'" "\

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

例:

" "/{x@prm[!#x]1}'" "\"Hello World"
"Helol Wordl"

説明:

1バイトを節約するためのFrownyFrogのソリューションのポート。

これに戻ります。

" "/{prm[x]1}'" "\ / the solution
              " "\ / split input on " "
    {       }'     / apply lambda to each
     prm[x]        / permute input x
           1       / and take the 2nd result
" "/               / join with " "

以前のソリューション:

  • " "/-2{(x_y),|x#y}'" "\ 23バイト

1

05AB1E、7バイト

#vy`sðJ

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

-1ありがとう Magic Octopus Urnにます。

末尾のスペースを1つ印刷します。


これは11バイトです
ダニエルW.

2
@DanFromGermanyいいえ、05AB1Eにはコードページがあり、8バイトで表すことができます。
エリックアウトゴルファー

8バイトで表されるプログラムを実行できますか?
ダニエルW.

@DanFromGermanyはい、05AB1Eインタープリターは05AB1Eエンコードのファイルからこのプログラムを実行できます。
エリックアウトゴルファー

1
@MagicOctopusUrnこれはリストではなく、後になり`ます。
エリックアウトゴルファー


0

SNOBOL4(CSNOBOL4)136 119バイト

	I =INPUT
B	I SPAN(&LCASE &UCASE) . Y ARBNO(' ') =:F(O)
	Y RPOS(2) REM . Z =REVERSE(Z)
	O =O Y ' '	:(B)
O	OUTPUT =O
END

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

末尾にスペースを入れて印刷します。言語がStriNg OrientedおよびsymBOlic Languageのバックロニムであり、コードがBrain-Flakよりも長い場合、何か間違ったことをしていることがわかります

Bは空の文字列にI置き換え(alphabetic characters saved as Y)(some number of spaces)られます。

次の行は、最後の2つの文字を抽出YなどをZして、それらを置き換えZ逆転し、その後、次の行を連結しOYし、単一の空白文字。

最後に、Ilineの必須パターンと一致しなくなったときに出力しますB


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