短縮された整数シーケンスを展開する


18

整数の略記法の形式で数字のリストを入力すると、その列が完全に出力されます。

短縮シーケンスの整数シーケンス形式 は、その前の数字mよりも少ない桁数ですべての数字nを見つけることによって機能します。Dの桁数としてN、最後のDの桁数Mはすべての数字に置き換えられ 、N。入力例を次に示します。

123 45 6 7 89 200

置換ルールを適用すると、45 <123であるため、最初に45を145に変換します。

123 145 6 7 89 200

同じルールを繰り返し適用すると、次のようになります。

123 145 146 7 89 200
123 145 146 147 89 200
123 145 146 147 189 200

シーケンスはソートされているため(ルールが適用される番号はありません)、これが最終出力です。

あなたはそれを仮定するかもしれません

  • 可能な場合は常に略記法が使用されます。たとえば、入力は 12 3、neverになり12 13ます。

  • 同じ桁数のままで数字が減ることはありません。たとえば、入力はにはなりません333 222

  • 速記規則を適用しても、シーケンス内の前の番号よりも小さい番号になることはありません。たとえば、入力はにはなりません 123 12

  • 数値は常に正の整数であり、先頭に0が含まれることはありません(文字列形式を使用する場合)。

  • 展開された完全なシーケンスに重複した番号が含まれることはありません。(ただし、省略形のシーケンスは、例:10 1 20 1-> かもしれません10 11 20 21。)

  • 入力には少なくとも1つの数字が含まれます。

入力および出力は、数字/文字列のリスト/配列、または非数字で区切られた要素を持つ単一の文字列のいずれかです。

これはであるため、バイト単位の最短コードが優先されます。

入力と出力が交互の行にあるテストケース:

1 2 3 10 1 2 20 5 100 200 10 3 5 26 9 99 999 9999
1 2 3 10 11 12 20 25 100 200 210 213 215 226 229 299 999 9999
223 1184 334 441 5 927 2073 589 3022 82 390 5 9
223 1184 1334 1441 1445 1927 2073 2589 3022 3082 3390 3395 3399
5 10 5 20 5 30 5 40 5 50 5
5 10 15 20 25 30 35 40 45 50 55
7 8 9 70 80 90 700 800 900 7000 8000 9000
7 8 9 70 80 90 700 800 900 7000 8000 9000
42
42

課題はかなり古いですが、a)入力を空にすることはできますか?b)入力に含まれる数字は1つだけですか?
エリックアウトゴルファー

@EriktheOutgolfer先に進み、入力に1つ以上の数字があると言います。
ドアノブ

回答:


7

ゼリー、7バイト

DUṛ"\UḌ

オンラインでお試しください!または、すべてのテストケースを確認します

使い方

DUṛ"\UḌ  Main link. Input: A (list of integers)

D        Convert each integer to a list of its base 10 digits.
 U       Reverse each digit list.
    \    Do a cumulative reduce, applying the dyadic link to the left:
   "       For each pair of corresponding digits:
  ṛ          Select the right one.
           Vectorization leaves digits that do not have a counterpart untouched.
     U   Reverse the resulting digit arrays.
      Ḍ  Convert from base 10 to integer.

5

Javascript、45 42バイト

@Neilに感謝します

a=>a.map(x=>z=z.slice(0,-x.length)+x,z='')

上記の関数は、文字列の配列を想定しています。


1
z=z.slice(0,-x.length)+x,z=''(または選択した変数名)を使用して4バイトを保存します。
ニール

@ニール。良いですね!私はそれを行う方法があるはずだと知っていました
削除され

(保存のカウントを間違えて申し訳ありません。)また、文字列バージョンs=>s.split` `.map(は2バイト(今回はダブルチェック)より短いことが判明したため、不要ですs=>s.replace(/\d+/g,
ニール

@ニール。有効なポイント。答えるときの私の最初の目標だったので、私はちょうどそこに残しました...しかし、あなたは正しいです
削除


0

Gema、35文字

<D>=@set{p;@fill-right{${p;};$0}}$p

入力:何かで区切られた数字の文字列、出力文字列。

サンプル実行:

bash-4.3$ gema '<D>=@set{p;@fill-right{${p;};$0}}$p' <<< '123 45 6 7 89 200'
123 145 146 147 189 200

0

ルビー、39文字

->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}

入力:文字列の配列、出力:文字列の配列。

サンプル実行:

2.1.5 :001 > ->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}[%w{123 45 6 7 89 200}]
 => ["123", "145", "146", "147", "189", "200"] 

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