無効なInvali Inval


27

このアイデアは、@TùxCräftîñgのチャットメッセージに大まかに基づいています。

以下のシーケンス例をご覧ください。

INVALID0INVALID1INVALID2 INVALID3INVALID4...INVALID9

INVALID9、次のようになります。

INVALI0INVALI1INVALI2INVALI3...INVALI9

そしてINVALI9、次のようになります:

INVAL0INVAL1INVAL2INVAL3...INVAL9

その後、次INVAL9のようになります。

INVA0INVA1INVA2INVA3、...INVA9

INVALID毎回単語から文字を削除し続けていることに注目してください。

単一の文字、つまり文字に到達するまで、これを繰り返しますI

I0I1I2I3I4...I9

さて、あなたの仕事は、単語の入力を取得し、上記の例のようにそれからシーケンスを生成することです。コードも1文字で動作する必要があり、その場合、結果のシーケンスは短くなります。

任意の入力および出力形式を選択できます(必要に応じて、セパレーターの有無にかかわらず)が、選択したものを指定する必要があります。

シーケンスは、正確に指定された順序である必要があります。

このチャレンジを正常に完了する最短のコード(バイト単位)がチャレンジに勝ちます。

上記の例の完全なシーケンス:

INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9

他の例:

入力:(MAYBE大文字と小文字は関係ありません)

出力:

MAYBE0, MAYBE1, MAYBE2, MAYBE3, MAYBE4, MAYBE5, MAYBE6, MAYBE7, MAYBE8, MAYBE9, MAYB0, MAYB1, MAYB2, MAYB3, MAYB4, MAYB5, MAYB6, MAYB7, MAYB8, MAYB9, MAY0, MAY1, MAY2, MAY3, MAY4, MAY5, MAY6, MAY7, MAY8, MAY9, MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9


入力: AFTER

出力:

AFTER0, AFTER1, AFTER2, AFTER3, AFTER4, AFTER5, AFTER6, AFTER7, AFTER8, AFTER9, AFTE0, AFTE1, AFTE2, AFTE3, AFTE4, AFTE5, AFTE6, AFTE7, AFTE8, AFTE9, AFT0, AFT1, AFT2, AFT3, AFT4, AFT5, AFT6, AFT7, AFT8, AFT9, AF0, AF1, AF2, AF3, AF4, AF5, AF6, AF7, AF8, AF9, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9


入力: WHAT ARE YOU DOING

WHAT ARE YOU DOING0, WHAT ARE YOU DOING1, WHAT ARE YOU DOING2, WHAT ARE YOU DOING3, WHAT ARE YOU DOING4, WHAT ARE YOU DOING5, WHAT ARE YOU DOING6, WHAT ARE YOU DOING7, WHAT ARE YOU DOING8, WHAT ARE YOU DOING9, WHAT ARE YOU DOIN0, WHAT ARE YOU DOIN1, WHAT ARE YOU DOIN2, WHAT ARE YOU DOIN3, WHAT ARE YOU DOIN4, WHAT ARE YOU DOIN5, WHAT ARE YOU DOIN6, WHAT ARE YOU DOIN7, WHAT ARE YOU DOIN8, WHAT ARE YOU DOIN9, WHAT ARE YOU DOI0, WHAT ARE YOU DOI1, WHAT ARE YOU DOI2, WHAT ARE YOU DOI3, WHAT ARE YOU DOI4, WHAT ARE YOU DOI5, WHAT ARE YOU DOI6, WHAT ARE YOU DOI7, WHAT ARE YOU DOI8, WHAT ARE YOU DOI9, WHAT ARE YOU DO0, WHAT ARE YOU DO1, WHAT ARE YOU DO2, WHAT ARE YOU DO3, WHAT ARE YOU DO4, WHAT ARE YOU DO5, WHAT ARE YOU DO6, WHAT ARE YOU DO7, WHAT ARE YOU DO8, WHAT ARE YOU DO9, WHAT ARE YOU D0, WHAT ARE YOU D1, WHAT ARE YOU D2, WHAT ARE YOU D3, WHAT ARE YOU D4, WHAT ARE YOU D5, WHAT ARE YOU D6, WHAT ARE YOU D7, WHAT ARE YOU D8, WHAT ARE YOU D9, WHAT ARE YOU 0, WHAT ARE YOU 1, WHAT ARE YOU 2, WHAT ARE YOU 3, WHAT ARE YOU 4, WHAT ARE YOU 5, WHAT ARE YOU 6, WHAT ARE YOU 7, WHAT ARE YOU 8, WHAT ARE YOU 9, WHAT ARE YOU0, WHAT ARE YOU1, WHAT ARE YOU2, WHAT ARE YOU3, WHAT ARE YOU4, WHAT ARE YOU5, WHAT ARE YOU6, WHAT ARE YOU7, WHAT ARE YOU8, WHAT ARE YOU9, WHAT ARE YO0, WHAT ARE YO1, WHAT ARE YO2, WHAT ARE YO3, WHAT ARE YO4, WHAT ARE YO5, WHAT ARE YO6, WHAT ARE YO7, WHAT ARE YO8, WHAT ARE YO9, WHAT ARE Y0, WHAT ARE Y1, WHAT ARE Y2, WHAT ARE Y3, WHAT ARE Y4, WHAT ARE Y5, WHAT ARE Y6, WHAT ARE Y7, WHAT ARE Y8, WHAT ARE Y9, WHAT ARE 0, WHAT ARE 1, WHAT ARE 2, WHAT ARE 3, WHAT ARE 4, WHAT ARE 5, WHAT ARE 6, WHAT ARE 7, WHAT ARE 8, WHAT ARE 9, WHAT ARE0, WHAT ARE1, WHAT ARE2, WHAT ARE3, WHAT ARE4, WHAT ARE5, WHAT ARE6, WHAT ARE7, WHAT ARE8, WHAT ARE9, WHAT AR0, WHAT AR1, WHAT AR2, WHAT AR3, WHAT AR4, WHAT AR5, WHAT AR6, WHAT AR7, WHAT AR8, WHAT AR9, WHAT A0, WHAT A1, WHAT A2, WHAT A3, WHAT A4, WHAT A5, WHAT A6, WHAT A7, WHAT A8, WHAT A9, WHAT 0, WHAT 1, WHAT 2, WHAT 3, WHAT 4, WHAT 5, WHAT 6, WHAT 7, WHAT 8, WHAT 9, WHAT0, WHAT1, WHAT2, WHAT3, WHAT4, WHAT5, WHAT6, WHAT7, WHAT8, WHAT9, WHA0, WHA1, WHA2, WHA3, WHA4, WHA5, WHA6, WHA7, WHA8, WHA9, WH0, WH1, WH2, WH3, WH4, WH5, WH6, WH7, WH8, WH9, W0, W1, W2, W3, W4, W5, W6, W7, W8, W9

リーダーボード


1
完全なシーケンスを一度に投稿できますか?おそらくさらにいくつかのサンプルで?また、入力には何が含まれている可能性がありますか?
DJMcMayhem

1
セパレーターの欠如(例INVALID0INVALID1INVALID2)は有効な出力フォーマットですか?
DLosc

@DLoscはい、そうです。
バッファーオーバーリード

3
ご存知のように、チャレンジを投稿した後、すぐに回答を受け入れることは一般的に推奨されません。受け入れが早すぎると、ユーザーが新しい回答を投稿できなくなります。それはあなたが言うことではありませんすることはできません受け入れ答えを保つが、私は長い次の時間を待つことをお勧めしたいです。
DJMcMayhem

@DJMcMayhemわかりました!
バッファーオーバーリード

回答:


5

ゼリー、7 バイト

ḣJṚp⁵Ḷ¤

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

使い方

ḣJṚp⁵Ḷ¤  Main link. Argument: s (string)

 J       Yield all (1-based) indices of s.
ḣ        Head; for each index k, take the first k characters of s.
  Ṛ      Reverse the result.
      ¤  Combine the two links to the left into a niladic chain.
    ⁵      Yield 10.
     Ḷ     Unlength; yield [0, ..., 9].
   p     Return the Cartesian product of the prefixes and the range.
         (implicit) Print the Cartesian product without separators.

6
7バイト。私は、この正確なコードをコードゴルフで機能させるというアイデアを誰かがどのように思いついたかを知りたいだけです。
-haykam


8

Javascript(ES6)、53 47バイト

f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

Peanut&Neilのおかげで6バイト節約

出力:区切り文字なしの単一の文字列としてのすべての単語。

var f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

document.getElementsByTagName('div')[0].innerHTML = f('INVALID')
<div style="word-wrap:break-word"></div>


パターン内の項目間にスペースを追加しないことで(許可されている)セパレーターを使用しないように、1バイトを節約して52バイトに減らしますここで試してみてください!
-haykam

...のs&&代わりに使用できませんか?s?:''
ニール

また、投稿した最後のコードから一部を削除することで、49バイトに減らすことができます+''ここで試してみてください!
-haykam

Firefoxを使用していますが、テキストはスペースで区切られていません。質問には必須ではありませんが、お知らせします。
バッファーオーバーリード

1
@TheBitByte-私の悪い。もはやセパレーターはありません(ピーナッツが示唆したように)が、それに応じて答えを更新するのを忘れていました。気づいてくれてありがとう!
アーナルド

7

Perl、29バイト

+1を含む -n

STDINの入力で実行:

perl -nE '/^.+(?{map{say$&.$_}0..9})^/' <<< PERL

コードだけ:

/^.+(?{map{say$&.$_}0..9})^/

非常に素晴らしいコード。私は最後に^それを理解していません...それは同じ仕事をしているように見えますが、(*FAIL)理由はわかりません。説明してもらえますか?
ダダ

@Dadaはい、失敗を強制することはまさにそれです。それは文字列の先頭から少なくとも1つの文字にマッチしたので、それはもうそれほど開始時にすることはできません^バックトラックに、その前に正規表現を強制的に一致するが失敗する
トンHospel

はい、ありがとう。入力に含まれていない任意の文字で動作することを期待していましたが、動作するのは^... のみです。あなたの例では、なぜ,/動作しないの^/ですか?
ダダ

これは、正規表現オプティマイザーの実装の詳細です。文字列にない特定の文字を入力すると、正規表現が一致することはなく、実際の正規表現の一致も開始されないことを知ることができます。^オプティマイザーの現在の理解を超えています。いずれかの2つの動作の将来的に変更される可能性があります...
トンHospel

わかりました、それはそのようなものだと思いましたが、確かではありませんでした。どうもありがとう
ダダ

6

Haskell、47 43バイト

f""=[]
f x=map((x++).show)[0..9]++f(init x)

使用例:f "IN"-> ["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"]

単純な再帰的アプローチ。単語に各桁を追加し、最後の文字を削除して再帰呼び出しを追加します。


6

Pyth、9バイト

sM*_._QUT

STDINで引用符付き文字列の入力を受け取り、文字列のリストを出力するプログラム。

オンラインで試す

使い方

sM*_._QUT  Program. Input: Q
    ._     List of prefixes of Q
   _       Reverse
       UT  Unary range up to 10, yielding [0, 1, 2, ..., 9]
  *        Cartesian product of the above two
sM         Map concatenate over the above
           Implicitly print

5

ピップ12 11バイト

単語をcmdline引数として受け取ります。セパレータなしの出力。

Wa&Oa.,tDQa

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

説明:

             Implicit: a = 1st cmdline arg, t = 10
Wa           While a (i.e. while it's not the empty string)
   Oa.,t     Concatenate range(10) to a and output
               (Pip concatenates a string to a range itemwise)
  &          The output operation is &-ed to the loop condition to save on curly braces
        DQa  Dequeue from a, removing the final character on each iteration

4

V、20バイト

A0òYpó.10/0/e
$hòd

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

これには印刷できない文字が含まれているため、読み取り可能な形式を次に示します。

A0<esc>òYp<C-a>ó.10/0/e
$hòd

そして、これがhexdumpです:

0000000: 4130 1bf2 5970 01f3 2e31 302f 302f 650a  A0..Yp...10/0/e.
0000010: 2468 f264                                $h.d

説明:

A0<esc>                 "Append a '0' to the input
       ò                "Recursively:
        Yp              "  Yank this line and paste it
          <C-a>         "  Increment the first number on this line
               ó        "  Substitute:
                .10     "    Any single character followed by '10'
                   /0   "    Replace it with a '0'
                     /e "    Ignore errors if this is not found
$h                      "  Move to the end of the end of this line than back one.
                        "  This makes it so the loop ends once there is only one
                        "  character on this line.
  ò                     "End the loop
   d                    "Delete a line (since we create one too many)  

4

Bash + coreutils、54バイト:

for i in `seq ${#1} 1`;{ printf "${1:0:i}%s " {0..9};}

単純にシーケンス[Length of Input,1]をループし、各反復中に、現在の反復値の長さまで入力ワードを出力します。9各数値は、ワードの[0,9]9コピーに追加されます。ファイル内で実行し、引用符で囲まれた単語、つまりを実行しますbash A.sh "blah blah blah"


4

Floroid - 50 47 31バイト

f=Ba:aM[a+b KbIhd]+f(a[:-1])H[]

現在、@ JonathanAllanが2番目の再帰メソッドで使用するのと同様のメソッドを使用しています。

次の言語でデカルト積をより慎重に実装した場合、これは可能性がありますBc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd)

テストケース

Input: ABC
Output: ['ABC0', 'ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5', 'ABC6', 'ABC7', 'ABC8', 'ABC9', 'AB0', 'AB1', 'AB2', 'AB3', 'AB4', 'AB5', 'AB6', 'AB7', 'AB8', 'AB9', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']

Input: M
Output: ['M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9']

3

(lambdabot)Haskell-49バイト

f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Lambdabotは#haskellのIRCボットです。自動的に多数のモジュールをインポートします(ライブのData.List場所を含む)inits。また、言語は実装によって定義されるため、このlambdabot haskellを呼び出して、インポートのバイトを支払う必要はありません。

通常のHaskell:

import Data.List
f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

本当にtails動作しますか?
ベルギ

@Bergi、インポートを完全に忘れてしまったことを指摘してくれてありがとう:)
BlackCap

インポートを意味するのではなく、間違った出力を生成することを意味しました。INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi

@ Bergi、Yikes!あなたが正しい。私のためにさらに8バイト
BlackCap

3

braingasm34 33 31 28バイト

現在の状態では、braingasmは、いくつかの(3などの)追加機能を備えた単に栄光に満ちたBrainfuck です。実際に機能を追加するのではなく、開発時間のほとんどを可能な限り「エンタープライズ」にするために費やしてきました...

とにかく、次のコードは最新の開発スナップショットで動作するはずです。のような標準入力から改行のない入力を受け取り、標準$ echo -n INVALID | braingasm invalid.bg出力に出力します。

,[>,]#[48+10[#<[.>]<+]0,<0,]

説明:

,[>,]                 lay down the input on the tape
#[                    (length of input - 1) times do
  48+                   add '0' at the end of the tape
  10[                   10 times do
     #<[.>]               move to start of tape, then print the tape
     <+                   increase the number at the end of the tape
  ]                     done printing current word with 0 through 9
  0,                    erase the number by writing 0 onto it
  <0,                   likewise, remove one character
]                     done

編集:どうやら、区切り文字として空の文字列を使用してスキップしても大丈夫です


2

パイソン2、53の 55バイト

+2バイト:再帰ではfを宣言する必要があります(@Destructible Watermelonが指摘)

f=lambda s:s and[s+`n`for n in range(10)]+f(s[:-1])or[]

空の文字列に再帰して(空のリストを生成)、一度に1文字ずつ切り捨て、現在の文字列の10個のリストの先頭に、それぞれに0〜9の数字を追加します。

イデオンでテストする

Pythonの3、54の 56バイト

f=lambda s:s and[s+n for n in'0123456789']+f(s[:-1])or[]

イデオンでテストする


2
ラムダにそれ自体への呼び出しが含まれている場合は、そのf=部分を持っている必要があると確信しています(変数に値があると仮定できない方法に少し似ています)
Destructible Lemon

2

Swift 3、150バイト

最短のソリューションではありませんが、Swiftにとってひどいものではありません

func a(s: String){var c=s.characters,r="";while(c.count>0){var k = "";for d in c{k+=String(d)};for i in 0...9{r+="\(k)\(i) "};c.removeLast()};print(r);}

これをIBM Swift Sandboxでオンラインでテストします

非ゴルフ

func a(s s: String){
    var c = s.characters, r = ""
    while(c.count > 0){
        var k = ""
        for d in c{
            k+=String(d)
        }
        for i in 0...9{
            r+="\(k)\(i) "
        }
        c.removeLast()
    }
    print(r)
}

2

ルビー、51

区切り記号は使用されません。

->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

i%10セパレーターの後に次を追加します。

,$/改行のために、,?|のための|(任意の印刷可能な文字についても同様)、,' 'スペースに。

テストプログラムで

f=->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

f[gets.chomp]

2

PHP、64 56バイト

for($i=9;$a=substr($argv[1].a,0,-++$i/10);)echo$a.$i%10;

for(;$a=substr($argv[1].a,$i=0,-++$l);)for(;$i<10;)echo $a.$i++;


別のforループを防ぐ良い方法。エコー後にスペースを削除することで1バイトを節約できます
アロス

2

Haskell、49 46バイト

f=(>>=(<$>['0'..'9']).snoc).reverse.tail.inits

マップf=(>>=(mapを挿入することでバイトを保存できます['0'..'9']).snoc).tail.reverse.inits。3 fmapを使用して:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

ああ、あなたがreverse.tail.inits代わりにtail.reverse.initsあなたも正しい出力を得た場合;)
ブラックキャップ

@BlackCap:おかげで、なぜ標準ライブラリーに反転(f)マップがないのか不思議に思いましたが、セクションについては考えませんでした。に関してtail、私は意味したと思いますinitが、逆に交換してもうまくいきます:
Bergi

2

C#、107 102バイト

string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}

非ゴルフ

string f(string i)
{
   string o = "";
   while(i != "")
   {
      for (int k = 0; k <= 9;)
         o += i + k++;
      i = i.Remove(i.Length - 1);
   }
   return o;
}

1
k++for-loopを削除し、++の使用後に追加することで少しゴルフすることができます。次のkように:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k+++",";i=i.Remove(i.Length-1);}return o;}また、コンマはOPのチャレンジでは必要ありませんが、もちろん、必要に応じて保持することもできます。これがなければ:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}
ケビンCruijssen

2

ルビー、90 85バイト

f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}

文字列が空の場合、空の配列を返します。それ以外の場合は、文字列+ 0〜9の各数値の数値を生成しf、最後の文字を含まない文字列で呼び出します。

@LevelRiverStのおかげで5バイト節約


ルビーでゴルフをしたことがないあなたはそれを取る。この質問への私の答え(またはこのサイトの他の多くのRubyの答え)をチェックして、無駄な関数defやを含めずに関数を定義するゴルフの方法を確認してくださいend。ラムダを作成して、変数に割り当てて角かっこ内の引数で呼び出す限り、名前を付けないようにすることもできます。
レベルリバーセント

@LevelRiverStラムダを使用すると1バイト長くなります
-TuxCrafting

わかりました、再帰的だから名前を付ける必要があるという事実を見逃しました。しかし、それでもf=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}5バイト短くなっています。
レベルリバーセント

@LevelRiverStああ、->構文については知りませんでした
-TuxCrafting

f=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}さらに4バイト節約します。Rubyはブール式を左から右に評価し、結果を決定する必要がない限り、後の用語を評価しません。Cでも同じゴルフテクニックを使用できます。この場合に()周りreturn[]が必要な理由はわかりません。
レベルリバーセント

2

Perl 6、32 = 31バイト+ 1の-p

私はPerl 6に精通しているわけではないので、Perl 6をさらに減らす方法があるかもしれません。

$_= ~((~$_,*.chop...^!*)X~ ^10)

-p入力行ごとに1回評価するために使用します。行は$_プログラムの実行中に配置され、実行後に出力され$_ます。

(~$_,*.chop...^!*)最初の要素は文字列化されたリスト(ある~)の入力を、後続の各要素は、前の(オフ最後の文字をチョッピングすることによって得られる*.chop()文字列が空になるまでそれが続く!*空の文字列の場合を除く)、(^...^) 。

X~指定された操作、この場合は文字列連結(~)を使用して、左右のリストのすべてのペアを生成します。^100、1、... 9のリストです。

最後に、リストはで再び文字列化され~、必要な単語にスペースを区切り文字として付けます。


2

PowerShell v2 +、60バイト

param($n)$n.length..1|%{$i=$_-1;0..9|%{-join$n[0..$i]+"$_"}}

入力文字列の長さからにループし1ます。各反復で、ヘルパー$iを現在の数からマイナスに等しく設定し1ます。これは.length、文字の総数であるため必要ですが、文字列のインデックス付けは0から始まります。次に、からにループ09ます。各内部ループ$nは、外部ループの値に基づいて入力文字列をスライス-joinし、文字列に戻し、内部ループカウントで文字列を連結します。個々のループ結果はパイプラインに配置され、出力はプログラムの完了時に暗黙的に行われます。

PS C:\Tools\Scripts\golfing> .\invalid-invali-inval.ps1 'foo'
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo7
foo8
foo9
fo0
fo1
fo2
fo3
fo4
fo5
fo6
fo7
fo8
fo9
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9

2

Dyalog APL14 11 バイト

文字列のリストを返します。

,⎕D∘.,⍨⌽,\⍞

, listify(テーブルをリストにする)

⎕D すべての数字

∘.,⍨ すべてに追加(つまり、すべての組み合わせを作成)

の逆のリスト

,\ の累積連結

テキスト入力

TryAPLオンライン!


一定。ボイラープレートを使用して記入するのを忘れていました。
Adám16年

2

Groovy(58バイト)

なぜGroovyの回答を投稿するのかわからない... Groovyのゴルフに必要な最小サイズは、クロージャーの必要性に基づいて2であるため、ここでの最適な回答は最小サイズの2倍です。

   {s->(s.length()-1..0).each{c->10.times{print s[0..c]+it}}}

ここで試してください:https : //groovyconsole.appspot.com/script/5148433803378688


2

バッチ、85 83バイト

@for /l %%i in (0,1,9)do @echo %1%%i
@set s=%1
@if not "%s:~,-1%"=="" %0 %s:~,-1%

2

Java 7、105 98バイト

void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

@Pokeのおかげで-7バイト。

アンゴルフド

void c(String s){
  for(int x = 0, l = s.length(); x < l*10; ){
    System.out.print(s.substring(0, l - x/10) + x++ % 10);
  }
}

テストコード:

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

class M{
  static void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}

  public static void main(String[] a){
    c("INVALID");
    System.out.println();
    c("MAYBE");
    System.out.println();
    c("AFTER");
    System.out.println();
    c("WHAT ARE YOU DOING");
  }
}

出力:

INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALI0INVALI1INVALI2INVALI3INVALI4INVALI5INVALI6INVALI7INVALI8INVALI9INVAL0INVAL1INVAL2INVAL3INVAL4INVAL5INVAL6INVAL7INVAL8INVAL9INVA0INVA1INVA2INVA3INVA4INVA5INVA6INVA7INVA8INVA9INV0INV1INV2INV3INV4INV5INV6INV7INV8INV9IN0IN1IN2IN3IN4IN5IN6IN7IN8IN9I0I1I2I3I4I5I6I7I8I9
MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYB0MAYB1MAYB2MAYB3MAYB4MAYB5MAYB6MAYB7MAYB8MAYB9MAY0MAY1MAY2MAY3MAY4MAY5MAY6MAY7MAY8MAY9MA0MA1MA2MA3MA4MA5MA6MA7MA8MA9M0M1M2M3M4M5M6M7M8M9
AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTE0AFTE1AFTE2AFTE3AFTE4AFTE5AFTE6AFTE7AFTE8AFTE9AFT0AFT1AFT2AFT3AFT4AFT5AFT6AFT7AFT8AFT9AF0AF1AF2AF3AF4AF5AF6AF7AF8AF9A0A1A2A3A4A5A6A7A8A9
WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOIN0WHAT ARE YOU DOIN1WHAT ARE YOU DOIN2WHAT ARE YOU DOIN3WHAT ARE YOU DOIN4WHAT ARE YOU DOIN5WHAT ARE YOU DOIN6WHAT ARE YOU DOIN7WHAT ARE YOU DOIN8WHAT ARE YOU DOIN9WHAT ARE YOU DOI0WHAT ARE YOU DOI1WHAT ARE YOU DOI2WHAT ARE YOU DOI3WHAT ARE YOU DOI4WHAT ARE YOU DOI5WHAT ARE YOU DOI6WHAT ARE YOU DOI7WHAT ARE YOU DOI8WHAT ARE YOU DOI9WHAT ARE YOU DO0WHAT ARE YOU DO1WHAT ARE YOU DO2WHAT ARE YOU DO3WHAT ARE YOU DO4WHAT ARE YOU DO5WHAT ARE YOU DO6WHAT ARE YOU DO7WHAT ARE YOU DO8WHAT ARE YOU DO9WHAT ARE YOU D0WHAT ARE YOU D1WHAT ARE YOU D2WHAT ARE YOU D3WHAT ARE YOU D4WHAT ARE YOU D5WHAT ARE YOU D6WHAT ARE YOU D7WHAT ARE YOU D8WHAT ARE YOU D9WHAT ARE YOU 0WHAT ARE YOU 1WHAT ARE YOU 2WHAT ARE YOU 3WHAT ARE YOU 4WHAT ARE YOU 5WHAT ARE YOU 6WHAT ARE YOU 7WHAT ARE YOU 8WHAT ARE YOU 9WHAT ARE YOU0WHAT ARE YOU1WHAT ARE YOU2WHAT ARE YOU3WHAT ARE YOU4WHAT ARE YOU5WHAT ARE YOU6WHAT ARE YOU7WHAT ARE YOU8WHAT ARE YOU9WHAT ARE YO0WHAT ARE YO1WHAT ARE YO2WHAT ARE YO3WHAT ARE YO4WHAT ARE YO5WHAT ARE YO6WHAT ARE YO7WHAT ARE YO8WHAT ARE YO9WHAT ARE Y0WHAT ARE Y1WHAT ARE Y2WHAT ARE Y3WHAT ARE Y4WHAT ARE Y5WHAT ARE Y6WHAT ARE Y7WHAT ARE Y8WHAT ARE Y9WHAT ARE 0WHAT ARE 1WHAT ARE 2WHAT ARE 3WHAT ARE 4WHAT ARE 5WHAT ARE 6WHAT ARE 7WHAT ARE 8WHAT ARE 9WHAT ARE0WHAT ARE1WHAT ARE2WHAT ARE3WHAT ARE4WHAT ARE5WHAT ARE6WHAT ARE7WHAT ARE8WHAT ARE9WHAT AR0WHAT AR1WHAT AR2WHAT AR3WHAT AR4WHAT AR5WHAT AR6WHAT AR7WHAT AR8WHAT AR9WHAT A0WHAT A1WHAT A2WHAT A3WHAT A4WHAT A5WHAT A6WHAT A7WHAT A8WHAT A9WHAT 0WHAT 1WHAT 2WHAT 3WHAT 4WHAT 5WHAT 6WHAT 7WHAT 8WHAT 9WHAT0WHAT1WHAT2WHAT3WHAT4WHAT5WHAT6WHAT7WHAT8WHAT9WHA0WHA1WHA2WHA3WHA4WHA5WHA6WHA7WHA8WHA9WH0WH1WH2WH3WH4WH5WH6WH7WH8WH9W0W1W2W3W4W5W6W7W8W9

1
forループを組み合わせて、サフィックスとサブストリングを暗黙的に決定する追加のロジックを実行することにより、7バイトを節約できます。void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}
ポケ

1

Python 3、62バイト

lambda x:[(x+" ")[:~i//10]+str(i%10)for i in range(len(x)*10)]

他の答えのように再帰を使用しません。

の「」x+" "が存在する理由:-0はまだゼロです。したがって、マイナス表記を使用してこの方法ですべての文字列を取得することはできません。文字列、


1

C、72、70バイト

j;F(char*s,int l){while(l--)for(j=0;j<10;)printf("%.*s%d",l+1,s,j++);}

文字列をポインター/サイズのペアとして受け取ります。メインテスト:

int main() {
  F("INVALID", 7); putchar('\n');
  F("MAYBE", 5); putchar('\n');
  F("AFTER", 5); putchar('\n');
  F("WHAT ARE YOU DOING", 18); putchar('\n');
}

1

網膜、37バイト

バイトカウントはISO 8859-1エンコードを前提としています。

M&!r`.+
m`$
0
%{`$
¶$%`
T`w`d`.$
G10`

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

説明

M&!r`.+

一致するすべての一致を右から印刷して、入力のすべてのプレフィックスを取得します。

m`$
0

0各行にa を追加します。

%{`$
¶$%`

{彼らは文字列を変更するために失敗するまで、残りの3つのステージがループ内で実行されていることを示しています。の%彼らは個別にそれぞれの行に適用されるべきであると述べています。

ステージ自体は、最後の行を複製するだけです(最初はこれが実行される行ですが、3つのステージを繰り返すたびに別の行が追加されます)。

T`w`d`.$

次の文字置換を実行して、最後の行の数字を増やします。

from: _0123456789AB...
to:   0123456789

そして最後に:

G10`

最初の10行のみを保持して、後に追加した行を削除しINPUT9ます。


1

Scala、73 70バイト

def g(s:String):String=if(s=="")""else(0 to 9 flatMap(s+_))++g(s.init)

のように呼ぶ f("INVALID")ます。文字のシーケンスを返します。

説明

def g(s:String):String= //defines a method g taking a String as a parameter
                        //and returning a String
if(s=="")""             //guard to prevent infinite recursion
else
    (0 to 9             //create a Range from 0 to 9 (inclusive)
    flatMap(            //map:
        s+_                 //append each number to the string
    ))                  //and flatten
    ++ g(s.init)        //concatenate with g applied to everything but the last element of s

代替ソリューション、73バイト

(s:String)=>s.scanLeft("")(_+_).tail.reverse.flatMap(x=>(0 to 9)map(x+_))

無名関数を定義します。それを呼び出すには、書く

val f = ...

そして、このように呼び出します

f("INVALID")

文字列のシーケンスを返します。印刷すると、次のようになります。

Vector(INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)

説明

s.scanLeft("")(_+_)    //accumulate letters from left to right -> Vector("", "I", "IN", "INV", "INVA", "INVAL", "INVALI", "INVALID")
.tail                  //drop the first element
.reverse               //reverse it
.flatMap(x =>          //map each element called x
    (0 to 9)           //create a Range from 0 to 9 (inclusive)
    map(x+_)           //append each number to x
)                      //and flatten

あなたの再帰的な解決策は、反復的な解決策よりも3バイト少ないです
-TuxCrafting

あなたは正しい、私は数えた後、それを最適化する必要があります。
corvus_192

1

CJam、29 28バイト

ls_,,:)W%]~{_[X<aA*A,]zo}fX;

説明:

ls                              read input as string
  _                             duplicate input
   ,,                           create range of length input
      :)W%]                     add 1 to all elements and reverse
           ~                    dump array on stack
            {            }fX    for loop
             _                  duplicate input string
              [X<aA*            slice input string and multiply by 10
                    A,]         range(10)
                       zo       zip array and print (no separator)
                            ;   clear stack

オンラインで試す

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