省略記号を複数形にする方法は?


14

明らかに省略です。

チャットメッセージに触発され

あなたの挑戦

リスト、スペース、またはコンマで区切られた単語の文字列を指定すると、省略記号がそれらを認識します。

単語を省略記号化するには:

  1. 単語から始めます。
  2. 元の単語の最初の文字を最後に追加します。
  3. 元の単語の最後の2文字を末尾に追加します。
  4. 元の単語の最後から2番目の文字を最後に追加します。
  5. 元の単語の最初の文字を最後に追加します。
  6. 元の単語の最後の文字を最後に追加します。
  7. 手順5と6を1回繰り返します。
  8. 完了です!

あなたは仮定することができます:

  • 入力単語は英数字のみです
  • 入力と出力はスペースで区切られた文字列またはリストにすることができます
  • 入力には単語のみが含まれます
  • 言葉は少なくとも2文字の長さになります
  • 入力は正規表現と一致します /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • 異なる入力形式と出力形式を使用できます
  • もっと来て...

テストケース:

ellipsis -> ellipsisessieses
goat -> goatgttagtgt
covfefe -> covfefeceefcece
programmer5000 -> programmer5000p000p0p0
up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt
it is golf yo -> itittiitit isissiisis golfgfflgfgf yoyooyyoyo
crossed out 44 is still 44 -> crossedcddecdcd outottuotot 4444444444 isissiisis stillslllslsl 4444444444

最短のstststst answerarrearar ininniinin bytesbssebsbs winswssnwsws


「ellipsisessieses」の「e」が「
Nun

15
私はまだ省略記号を複数形する方法がわからない... EDITを:どうやら、それは楕円形です。
完全に人間

1
ステップ2では、最初の文字を追加するのではなく、単にeを追加する必要があると思います
ベンゼン

@ベンゼンはもっと理にかなっているかもしれませんが、今は遅すぎます。
Programmer5000

2
それはだ楕円。-isで終わる単語と-eで終わる単語のスペルが同じで発音が異なる他の複数形は、axesbaseです。

回答:


16

JavaScript(ES6)、58 57バイト

NB:これは、このJellyの回答でJonathan Allanと同じトリックを使用することが判明しています(投稿後に気付きましたが)。

ジョナサンアランのおかげで1バイト節約

文字列の配列で動作します。

s=>s.map(s=>s+'01120101'.replace(/./g,n=>s.substr(-n,1)))

テストケース


うわー、これはクールです!良くやった!
Programmer5000

私はあなたが交換することにより、バイトを救うことができると信じて2110212101120101してn-2-n
ジョナサンアラン

@JonathanAllan良いキャッチ。ありがとう!
アーナルド

11

ゼリー 13 12  11 バイト

⁽×ʠb3’ịṭµ€K

文字のリストのリストを取り、スペースで区切られた出力を印刷する完全なプログラム。

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

どうやって?

⁽×ʠb3’ịṭµ€K - Main link: list of lists of characters e.g. ["this","is","it"]
        µ€  - for each word in the input:            e.g. "this"
⁽×ʠ         -   base 250 literal 5416                     5416
   b3       -   converted to base 3                       [2,1,1,0,2,1,2,1]
     ’      -   decrement                                 [1,0,0,-1,1,0,1,0]
      ị     -   index into the word                       "tssitsts"
       ṭ    -   tack to the word                          ["this",["tssitsts"]]
          K - join the results with spaces                ["this",["tssitsts"]," is",["issiisis"]," it",["ittiitit"]]
            - implicit print                              thistssitsts isissiisis itittiitit

あるいは、単語のリストから単語のリストを11バイトで指定することもできます

⁽×ʠb3’ị;@µ€

⁽×ʠb3’また4,⁵Bj-、同じバイトカウントのバイナリに置き換えることもできます
[4,10]バイナリはisで[[1,0,0],[1,0,1,0]]結合され-1ます[1,0,0,-1,1,0,1,0])。


結果をスペースで結合する必要がありますか?リスト/リストのリストを出力できます。
Programmer5000

@ programmer5000うん、スペースで参加することは、ここではオプションです
ASCIIのみ

@ programmer5000主な答えの下に私が与えたリストを返す代替の11バイトがあります(モナドリンクとして返されるリストは1つではないKため、を削除してメインのものを10にする方法はないことに注意してください)レベルの深さ、私は緩いI / Oを押しすぎていると思います-それは["this", "is", "it"]戻り値の入力のため[['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]]です(「...」は文字のリストです)、それを完全なプログラムとして印刷するために残してしまうでしょうすべて一緒にthistssitstsisissiisisitittiitit))
ジョナサンアラン

7

05AB1E、12バイト

εD•Lz•3вÍèJ«

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

説明

ε              # apply on each word in input
 D             # duplicate the word
  •Lz•         # push the base-255 compressed number 5416
      3в       # convert to a list of base-3 digits (yields [2, 1, 1, 0, 2, 1, 2, 1])
        Í      # subtract 2 from each (yields [0, -1, -1, -2, 0, -1, 0, -1])
         è     # index into the word with these numbers
          J    # join to string
           «   # append to the original word

1
ヘヘ、偉大な心...
ジョナサン・アラン

@ジョナサンアラン:うん、私たちはまったく同じ考えを持っていたようです。Jellysのより短い圧縮がこの日勝ちました:)
Emigna




4

、20バイト

F⪪S «ι↑E”o∨↙8”§ι±Iκ→

オンラインでお試しください!リンクは、コードの詳細バージョンです。これをコーディングした後、たまたま@Arnauldの答えを読んだだけですが、これは基本的には移植版です。説明:

F   «                   Loop over
  S                     Input string
 ⪪                       Split at spaces
     ι                  Print the word
        ”o∨↙8”          Compressed string 01120101
       E                Map over each character
                 Iκ     Cast character to integer
                ±       Negate
              §ι        Circularly index into word
      ↑                 Print array upwards, prints each element rightwards
                    →    Move right


@ ASCII-only -rsフラグに余分なバイトを追加する必要はありませんか?
ニール

わからない、そう思う?-rsただ無効印刷にありますが、プロンプト入力
ASCIIのみ

-rs代わりにモードをデフォルトにする必要がありますか?
ASCIIのみ


3

JavaScript(ES6)、74 60バイト

s=>s.map(s=>s+(a=s[l=s.length-1],b=s[0])+a+a+s[l-1]+b+a+b+a)

入力を配列として受け取り、配列を出力します。

Programmer5000のおかげで-9バイト

テストケース:


3

Mathematica、89バイト

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&

1
Ellipsisessieses組み込みの数学はありませんか?:(
Programmer5000



3

Paradoc(v0.2.10)、13?バイト(CP-1252)

µ96Qó3BÌDX=v+

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

単語のリストを取得し、スタック上の単語のリストを作成します。

base-3トリックの小さなバリエーション。多分それは私のベース250-何でもコンプレッサーで動作する時間です。

説明:

μ             .. Map the following block over each word (the block is
              .. terminated by }, but that doesn't exist, so until EOF)
              .. (The word is on the stack now.)
 96Qó         .. 96 * 26 (Q in base 26) = 2496, a hack to prevent us from
              .. needing a space to separate this from the following number.
     3B       .. Convert 2496 to base 3 to get [1,0,1,0,2,1,1,0]
       ÌD     .. Negate and reverse to get [0,-1,-1,-2,0,-1,0,-1]
         X    .. Push the loop variable: the word being mapped over
          =v  .. Index, vectorize; map over the indices by indexing them
              .. into the word
            + .. Concatenate with the original word

(バイトカウントの質問:TIOで実際にこれを実証しているので、スタック上の単語のリストを取得し、スタック上の単語のリストを作成しますが、その単語のリストでは実際にはあまりできませんµによって開始されたブロックを閉じない限り、その閉じ括弧をカウントする必要がありますか?)


1
その閉じブレースを鳴らすべきですか?はい、必要な場合。
エリックアウトゴルファー

3

Wolfram言語/ Mathematica、66バイト

StringJoin[StringSplit[#,""]/.{a_,___,b_,c_}:>{#,a,c,c,b,a,c,a,c}]&

すぐにそれを実際にホイップしただけで、あちこちで少し改善されるかもしれません。




2

Java 8、117バイト

a->{int i=0,l;for(String s:a){char c=s.charAt(0),d=s.charAt(l=s.length()-1);a[i++]+=""+c+d+d+s.charAt(l-1)+c+d+c+d;}}

入力を文字列配列として受け取り、バイトを節約するために新しい配列を返す代わりにこの元の配列を変更します。

おそらくもう少しゴルフすることができます。

説明:

ここで試してみてください。

a->{                          // Method with String-array as parameter and no return-type
  int i=0,                    //  Index-integer (starting at 0)
      l;                      //  Length-integer which we use multiple times
  for(String s:a){            //  Loop over the input array
    char c=s.charAt(0),       //   The first character of the word
         d=s.charAt(          //   The last character of the word
            l=s.length()-1);  //    and set `l` at the same time to `length()-1`
    a[i++]+=                  //   Append to the current value in the array:
      ""                      //    String so the characters aren't appended as integers
      +c                      //    + the first character
      +d+d                    //    + two times the last character
      +s.charAt(l-1)          //    + the single-last character
      +c+d+c+d;               //    + the first + last character two times
  }                           //  End of loop
}                             // End of method

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