lwap彼女はのどが痛い!


27

リストまたは区切り文字列が指定されている場合、各単語の最初の文字を1ワード後にリストまたは区切り文字列を出力します。

この課題では、「単語」はスペース、改行、タブ文字を除くすべての印刷可能なASCII文字のみで構成されます。

たとえば、「Good afternoon、World!」という文字列を使用します。(スペース区切り):

1. String
"Good afternoon, World!"

2. Get the first characters:
"[G]ood [a]fternoon, [W]orld!"

3. Move the characters over. The character at the end gets moved to the beginning.
"[W]ood [G]fternoon, [a]orld!"

4. Final string
"Wood Gfternoon, aorld!"

これはなので、最短のコードが勝ちます!

テストケース:

Input -> output (space-delimited)

"Good afternoon, World!" -> "Wood Gfternoon, aorld!"
"This is a long sentence." -> "shis Ts i aong lentence."
"Programming Puzzles and Code Golf" -> Grogramming Puzzles Pnd aode Colf"
"Input -> output" -> "onput I> -utput"
"The quick brown fox jumped over the lazy dog." -> "dhe Tuick qrown box fumped jver ohe tazy log."
"good green grass grows." -> "good green grass grows."

出力に末尾のスペースは許可されますか?
ビジネスキャット

単語間にせいぜい1つのスペースがあると仮定できますか?
数学中毒

文字が互いに続くことができるいくつかのルールを使用すると、spoonerismジェネレーターen.wikipedia.org/wiki/Spoonerism
表示名

@BusinessCatはい。
同志SparklePony

@mathjunkieはい。
同志SparklePony

回答:



8

Japt11 10 9 8バイト

Japtのインデックスラッピングとネガティブインデックスを利用します。

ËhUgEÉ g

オンラインで試す


説明

        :Implicit input of array U (each element is an individual word).
Ë       :Map over the array.
h       :Replace the first character of the current element (word) ...
Ug      :  with the word in the array at index ...
EÉ      :    current index (E) -1's ...
g       :  first character.
        :Implicit output of array of modified words

入力をリストとしても取ることができ、さらにバイトを節約できると思います¸
-ETHproductions

@ETHproductionsのストレッチかもしれませんが、お願いします。編集:ここで
シャギー

1
はい、投稿の冒頭に「リストまたは区切り文字列を指定してください」と表示されていますが、どれくらいの期間存在したかわかりません(チャレンジが最初に投稿されてから推測します)。
ETHproductions

良いですね!使用することhは良い考えでした。私はあなたのテクニックを使って£XhUg´Y¯1に£g´Y ¯1 +XÅなることを思いつきました。
オリバー

5

Haskell、43バイト

p%((a:b):r)=(p:b):a%r
_%e=e
(%)=<<head.last

オンラインでお試しください!入力および出力に文字列のリストを使用します。

前の単語の最初の文字を記憶しp、現在の単語の最初の文字を再帰的に作成しながら、新しい最初の文字をチェーンに送ります。前の最初の文字は、最後の単語の最初の文字として初期化されます。


4

ルビー、85 77 63バイト

これがもっと短くなる可能性がかなり高いと確信しています。

編集:収集のための@manatworkをありがとう->マップ

a=gets.split;$><<a.zip(a.rotate -1).map{|x,y|y[0]+x[1..-1]}*' '

あなたは両方を置き換えることができます.collectし、.each.map
マナトワーク

1
-pフラグ(+1バイト)およびi=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}究極のゴルフ
バリューインク


4

CJam12 10 9バイト

jimmy23013のおかげで1バイト節約

q~Sf+:()o

入力を単語のリストとして受け取ります。

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

説明

     e# Example input: ["Good" "afternoon," "World!"]
q~   e# Read and eval the input.
     e# STACK: [["Good" "afternoon," "World!"]]
Sf+  e# Append a space to each word.
     e# STACK: [["Good " "afternoon, " "World! "]]
:(   e# Remove the first character from each substring.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! " 'W]]
)o   e# Remove and print the last element of the array.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! "]]
     e# Implicitly join the remaining array with no separator and output.

入力と出力をリストとして受け取ることができます。
同志SparklePony

Pゴルフ、それは今:@ComradeSparklePonyあなたは後に、私が答えたことを確認した
ビジネス猫

)oのために1m>
jimmy23013


3

JavaScript(ES6)、46バイト

s=>s.map((k,i)=>s.slice(i-1)[0][0]+k.slice(1))

slice(-1)配列の最後の要素を返すという事実を利用します。

スニペット


結合を削除できますか?質問は、リストを出力できると述べています。これは、8バイト救う
クレイグ・アイレ

1
@CraigAyre、甘い、ありがとう!
リックヒッチコック

3

VIM、16、9つのバイト

<C-v>GdjPGD{P

@Wossnameのおかげで7バイトが節約されました!

入力を1行に1ワード、たとえば

Hello
world
and
good
day
to
you

入力をリストとして取得することは許可されているため、これは問題ないはずです。

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


「手作業」で行うと、12回のキーストロークで実行できます。ここでその構文をどのように明確にするか、またはこのパズルでそれを行うことが妥当かどうかはわかりません。^vGdjPGd$ggP (^ vは[control + v]
キーコンボ

@Wossnameああ、それは素晴らしいアイデアです!Theresの私も多くのバイトを保存するために追加(例えば、夫婦小さなものdd -> Dgg -> }先端のために)ありがとう!
DJMcMayhem

ddとggの両方に短いバージョンがあることは知りませんでした!素晴らしい:)
Wossname

「<Cv>」の代わりにコードの文字vの周りに「スーパースクリプトHTMLタグ」を使用してはどうですか?これにより、回答で見たときにコードが適切な長さに見えるようになります。したがって、コードは次のようになります。<sup> V </ sup> GdjPGD {P ...これは、stackexchange Webページが適切にフォーマットするとかなりきれいに見えます。
Wossname

1
中括弧が段落間を飛び回っていますが、ここでは1つの段落しか扱っていないため、ここで機能します。クール。ああすごいことで、大きなコードファイルをすばやくスクロールできるようになりました。そのヒントをありがとう。:)
Wossname

3

> <>44 45バイト

90.f3+0.>&i&01.>~r&l0=?;o20.
 i:" "=?^:1+ ?!^

スペースで区切られた単語を想定しています。

アーロンによる修正が1バイト追加されました



2

Haskell、50バイト

f=zipWith(:).((:).last<*>init).map head<*>map tail

入力と出力は単語のリストとしてです。


1
関数には名前を付けることができないため、を省略できますf=
-nimi

1
ああ、クール、Haskell用のオンラインコンパイラが存在することに気づかなかった 私は間違っているのでコメントを削除します^^
Fundモニカの訴訟

2

PHP、62バイト

$c=end($_GET);foreach($_GET as$g)echo$g|$g[0]=$c^$g^$c=$g,' ';

2

C#、78 77バイト

using System.Linq;a=>a.Select((s,i)=>a[i-->0?i:a.Count-1][0]+s.Substring(1));

Func<List<string>, IEnumerable<string>>、フル/フォーマット済みバージョンにコンパイルします。

using System;
using System.Collections.Generic;
using System.Linq;

class P
{
    static void Main()
    {
        Func<List<string>, IEnumerable<string>> f = a =>
                a.Select((s, i) => a[i-- > 0 ? i : a.Count - 1][0] + s.Substring(1));

        Console.WriteLine(string.Join(" ", f(new List<string>() { "Good", "afternoon,", "World!" })));
        Console.WriteLine(string.Join(" ", f(new List<string>() { "This", "is", "a", "long", "sentence." })));

        Console.ReadLine();
    }
}

2

Brachylog、12バイト

{hᵐ↻|bᵐ}ᶠzcᵐ

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

説明

Example input: ["Good","afternoon,","World!"]

{      }ᶠ       Find: [["W","G","a"],["ood","fternoon,","orld!"]]
 hᵐ↻              Take the head of each string, cyclically permute them
    |             (and)
     bᵐ           Get the strings without their heads
         z      Zip: [["W","ood"],["G","fternoon,"],["a","orld!"]]
          cᵐ    Map concatenate on each list: ["Wood","Gfternoon,","aorld!"]

2

R、72 70バイト

function(x)paste0(substr(x,1,1)[c(y<-length(x),2:y-1)],substring(x,2))

オンラインで試す

Giuseppeのおかげで2バイト節約されました。

入力と出力はリストです。最初の文字で構成される部分文字列を取得し、最後の文字を先頭に循環させ、各単語の残りの部分文字列と共に貼り付けます。サイクリングのステップはキラーですが、これ以上削減する方法がわかりません。


1
2:y-1代わりに使用することができます。1:(y-1)なぜなら、2バイトを節約する:よりも優先されるから-です。
ジュゼッペ


2

Python 2 + Numpy、104バイト

from numpy import *
s=fromstring(input(),"b")
m=roll(s==32,1)
m[0]=1
s[m]=roll(s[m],1)
print s.tobytes()

1
インポートステートメントをバイトカウントに含める必要があります。クールな答え!
同志SparklePony

また、入力と出力のコードをバイト数に
含める

1
最終的な改行を1バイトで削除できると思います。
Ørjanヨハンセン

@ØrjanJohansenはい、「u1」の代わりに「b」も機能するため、-2バイトです。
ミハイルV


1

Mathematica、59バイト

""<>#&/@Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&

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

単語のリストを取得して返します。

文字列を取得して返す場合、これは87バイトで機能します。

StringRiffle[Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&@StringSplit@#," ",""]&


1

kdb +、25 22バイト

溶液:

rotate[-1;1#'a],'1_'a:

例:

q)rotate[-1;1#'a],'1_'a:("The";"quick";"brown";"fox";"jumped";"over";"the";"lazy";"dog.")
"dhe"
"Tuick"
"qrown"
"box"
"fumped"
"jver"
"ohe"
"tazy"
"log."

説明:

1_'a:             // (y) drop first character of each element of a
,'                // join each left with each right
rotate[-1;1#'a]   // (x) take first character of each element of a, rotate backwards 1 char

追加:

通常の文字列(37バイト)を使用するバージョン:

q){" "sv rotate[-1;1#'a],'1_'a:" "vs x}"The quick brown fox jumped over the lazy dog."
"dhe Tuick qrown box fumped jver ohe tazy log."



0

Mathematica、134バイト

(w=Characters@StringSplit@#;d=Drop[w,0,1];StringRiffle[StringJoin/@Table[PrependTo[d[[i]],RotateRight[First/@w][[i]]],{i,Length@w}]])&



0

C、106 77バイト

i,a,b;f(char*o){a=*o;for(i=0;o[i++];)if(o[i]==32){b=o[++i];o[i]=a;a=b;}*o=a;}

-scottinetから-29バイト

文字列をインプレースで変更します。

ゴルフをしていない:

char *f(char *o){
    char a=*o,b; // start with a as the first character of the first word
    for(int i=0;++i<strlen(o);){
        // iterate through the string with i as the index
        if(o[i]==32){ // if the current character is a space, 
                      // i.e. if a word begins after this character
            b=o[++i]; // store the beginning of the next word in b
            o[i]=a; // set the beginning of the next word to a
            a=b; // set a to what the beginning of the next work used to be
        }
    }
    *o=a; 
    // set the beginning of the first word to the old beginning of the last word
}

Golfierバージョン提案(全く同じコード):-29バイト
scottinet



0

、11バイト

Foz:ṙ_1TmΓ,

入力と出力を文字列のリストとして、オンライン試してみてください!

(ヘッダーは単に入力を単語のリストに変換し、出力リストをスペースで結合します。)

説明

F(z:ṙ_1)TmΓ,  -- example input: ["Good" "afternoon,","World!"]
         m    -- map the following (example on "Good")
          Γ   -- | pattern match head & tail: 'G' "ood"
           ,  -- | construct tuple: ('G',"ood")
              -- : [('G',"ood"),('a',"fternoon,"),('W',"orld!")]
        T     -- unzip: ("GaW",["ood","fternoon,","orld!"])
F(     )      -- apply the function to the pair
    ṙ_1       -- | rotate first argument by 1 (to right): "WGa"
  z:          -- | zip the two by (example with 'W' and "ood")
              -- | | cons/(re)construct string: "Wood"
              -- :-: ["Wood","Gfternoon,","aorld!"]

代替、11バイト

§oz:ṙ_1m←mt

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


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