レーンの数字


32

入力:

整数のリスト

出力:

-0123456789重複する数字を無視して、各数字(およびマイナス記号)を独自のレーンに順番に配置します。

例:

入力: [1,729,4728510,-3832,748129321,89842,-938744,0,11111]

出力:

-0123456789  <- Added as clarification only, it's not part of the output

  1         
   2    7 9
 012 45 78 
-  23    8 
  1234  789
   2 4   89
-   34  789
 0         
  1        

チャレンジルール:

  • 番号の重複した数字は無視されます。
  • I / Oは、任意の合理的な形式にすることができます。入力は、文字列のリスト/配列または文字配列にすることができます。出力は、文字列、文字、文字行列などのリストとして可能です。
  • 末尾のスペースはオプションです。
  • 先頭または末尾の改行の量は任意です(ただし、行の間ではありません)。
  • 入力には常に少なくとも1つの整数が含まれます
  • -2,147,483,648ただし、少なくとも2,147,483,64732ビットの整数範囲をサポートする必要があります。
  • input-listには-000(または2つ以上のゼロ)、または先頭にゼロが付いた整数(つまり012)は含まれません。
  • 使用している言語で、負の数に異なる記号(upperなど¯)を使用している場合、一貫性がある限り、代わりにその記号を使用することもできます。
  • (5または8のない行ができるようにするには、数字の間にスペース区切り文字を持つことが許可されている- 0 1 2 3 4 6 7 9代わりの-01234 67 9)限り、それは一貫性のある(したがってまた、間にスペースがあるはずとして、-および0)。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース:

Input: [1,729,4728510,-3832,748129321,89842,-938744,0,11111]
Output:
  1         
   2    7 9
 012 45 78 
-  23    8 
  1234  789
   2 4   89
-   34  789
 0         
  1        

Input: [4,534,4,4,53,26,71,835044,-3559534,-1027849356,-9,-99,-3459,-3459,-94593,-10234567859]
Output:
      4     
     345    
      4     
      4     
     3 5    
    2   6   
   1     7  
  0  345  8 
 -   345   9
 -0123456789
 -         9
 -         9
 -   345   9
 -   345   9
 -   345   9
 -0123456789

Input: [112,379,-3,409817,239087123,-96,0,895127308,-97140,923,-748]
Output:
  12       
   3    7 9
-  3       
 01 4   789
 0123   789
-      6  9
 0         
  123 5 789
-01  4  7 9
   23     9
-    4  78 

Input: [-15,-14,-13,-12,-11,10,-9,-8,-7,-5,-4,-3,-1,0,9,100,101,102,1103,104,105,106,116,-12345690]
Output:
- 1   5    
- 1  4     
- 1 3      
- 12       
- 1        
-01        
-         9
-        8 
-       7  
-     5    
-    4     
-   3      
- 1        
 0         
          9
 01        
 01        
 012       
 01 3      
 01  4     
 01   5    
 01    6   
  1    6   
-0123456  9

Input: [99,88,77,66,55,44,33,22,11,10,0,0,0,-941]
Output:
          9
         8 
        7  
       6   
      5    
     4     
    3      
   2       
  1        
 01        
 0         
 0         
 0         
- 1  4    9

出力で数字の間にスペースを入れることはできますか?
シャギー

¯代わりに上マイナスを使用できます-か?
ウリエル

行方不明の数字はまだそれほどのスペースに置き換えられるだろう、あなたの例では、4&6と7&9との間に3つのスペースが次のようになります"-0 1 2 3 4 <space> 6 7 <space> 9"(複数のスペースが何らかの理由で、コメントで崩壊します)
シャギー

1
私はあなたの前を通り抜けることを望んでいました!:Dまあまあ!
シャギー

回答:


4

スタックス、8 バイト

║V≡u╝─é╢

実行してデバッグする

標準入力では行ごとに1つの番号が必要です。各文字のターゲットインデックスを検索し、それを結果のインデックスに割り当てることで機能します。インデックスが範囲外の場合、配列は収まるまでゼロで拡張されます。出力中0、スペースになります。残りは文字コードです。

開梱されていない、コメントされていない、これはそれがどのように見えるかです。

m       for each line of input, execute the rest of the program and print the result
 zs     put an empty array under the line of input
 F      for each character code in the line of input, run the rest of the program
  Vd    "0123456789"
  I^    get the index of the character in this string and increment
  _&    assign this character to that index in the original string

これを実行する


長さ1のリストをどのように入力するのですか?(値または値と改行だけの場合は機能しません。)
ジョナサンアラン

1
ああ、良い点。単一の値でも機能する代替形式の入力は["7"]です。この形式は、などの複数の値も処理できます["34", "43"]
再帰的

6

05AB1E、13バイト

コード:

v'-žh«DyмSð:,

05AB1Eエンコードを使用します。オンラインでお試しください!

説明:

v               # For each element in the input..
 '-žh«          #   Push -0123456789
      D         #   Duplicate this string
       yм       #   String subtraction with the current element
                    e.g. "-0123456789" "456" м  →  "-0123789"
         Sð:    #   Replace all remaining elements with spaces
                    e.g. "-0123456789" "-0123789" Sð:  →  "     456   "
            ,   #   Pop and print with a newline

1
いいね!交換ルートへの移動は、私が見る挿入ルートよりも短かった:)
エミグナ

2
@Emigna挿入ルートも非常に興味深いアプローチです。実際、vðTúyvyÐd+ǝ},;)で4バイト節約できると思います。
アドナン

1
ブリリアント!私はǝそのように機能することを知りませんでした-0。しかし、今私はそれを考えて、それは実際には数字であり、文字列ではなく、最初にそれを読んだとき:P
Emigna

うーん...私は23バイトでした。05AB1E(人類をしゃべる)。
魔法のタコ


4

JavaScript、59 58バイト

文字列の配列としての入出力。

a=>a.map(x=>`-0123456789`.replace(eval(`/[^${x}]/g`),` `))

それを試してみてください

o.innerText=(g=s=>(f=
a=>a.map(x=>`-0123456789`.replace(eval(`/[^${x}]/g`),` `))
)(s.split`,`).join`\n`)(i.value="1,729,4728510,-3832,748129321,89842,-938744,0,11111");oninput=_=>o.innerText=g(i.value)
input{width:100%;}
<input id=i><pre id=o></pre>


元の

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

a=>a.map(x=>[...`-0123456789`].map(y=>-~x.search(y)?y:` `))


1
このようなエレガントなソリューションは、本当に気に入っています。
ブライアンH.


3

05AB1E17 13バイト

Adnanのおかげで4バイト節約

vðTúyvyÐd+ǝ},

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

説明

v               # loop over elements y in input
 ðTú            # push a space prepended by 10 spaces
    yv          # for each element y in the outer y
      y         # push y
       Ðd+      # push y+isdigit(y)
          ǝ     # insert y at this position in the space-string
           }    # end inner loop
            ,   # print

3

ルビー、42バイト

数値の配列を処理する匿名ラムダ:

->a{a.map{|n|"-0123456789".tr"^#{n}",?\s}}

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

あるいは、完全にPerlのような完全なプログラムははるかに短くなります。-plこのコンテキストでは、スイッチはかなりおかしく見えると思います。

ルビー -pl、29バイト

$_="-0123456789".tr"^#$_"," "

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

最後に、出力文字列を引用符で囲むことが許容される場合、次のことが可能です。

ルビー -n、27バイト

p"-0123456789".tr ?^+$_,?\s

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


3

JavaScript(Node.js)、60バイト

  • 結合を減らしてくれた@Andrew Taylorに感謝(8文字)
  • X.matchの@Yair Randに感謝(8文字)
a=>a.map(X=>"-0123456789".replace(/./g,x=>X.match(x)?x:" "))

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


ああ、そのjoinトリックは素敵ですが、質問は文字列の配列のように見えますが、出力を削除することで8バイトを削ることができますか?
アンドリューテイラー

かなり確信して、あなたは置き換えることによって、別のものを保存することができ(X+"").includes(x)RegExp(x).test(X)
アンドリュー・テイラー

(X+"").match(x)さらに短くなります。この質問では、入力を文字列の配列にすることもできますX.match(x)
イェールランド

2

Japt、16バイト

文字列の配列としての入出力。

£Ao ¬i- ®iS gXøZ

それを試してみてください


説明

£                    :Map over each element X
 Ao                  :  Range [0,10)
    ¬                :  Join to a string
     i-              :  Prepend "-"
        ®            :  Map over each character Z
         iS          :    Prepend a space
            g        :    Get the character at index
             XøZ     :      X contains Z? (true=1, false=0)

2

Pythonの377の、64バイト

@Rodのおかげで-12バイト

lambda x:[[[" ",z][z in str(y)]for z in"-0123456789"]for y in x]

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

Pythonでのゴルフの最初の適切な試み。アドバイス歓迎!

文字の2D配列を返します。


1
あなたは使用することができます'-0123456789'代わりにrange(10)し、最初のブロックとスワップをドロップするstr(z)zあなたもpython2および使用に切り替えることができ、`y`代わりにstr(y)``-に相当+であるrepr
ロッド

の余分なスペースin "-
ジョナサンフレッチ



2

MATL、13バイト

"45KY2ht@gm*c

入力は文字列のセル配列です。オンラインでお試しください!または、すべてのテストケースを確認します

説明

         % Implicit input: cell array of strings, for example {'1','729',...,'11111'}
"        % For each cell
  45     %   Push 45 (ASCII code of '-')
  KY2    %   Push predefined literal '0123456789'
  h      %   Concatenate horizontally: gives '-0123456789'
  t      %   Duplicate
  @      %   Push current cell, for example {'729'}
  g      %   Convert cell to matrix. This effectively gives the cell's contents, '729'
  m      %   Ismember: gives an array of zeros and ones indicating membership of each
         %   char from '-0123456789' in '729'. The result in the example is
         %   [0 0 0 1 0 0 0 0 1 0 1]
  *      %   Multiply, element-wise. Chars are implicity converted to ASCII 
         %   Gives the array [0 0 0 50 0 0 0 0 55 0 57] 
  c      %   Convert ASCII codes to chars. 0 is displayed as space. Gives the string
         %   '   2    7 9'
         % Implicit end
         % Implicilly display each string on a different line

2

J32 27バイト

FrownyFrogのおかげで-5バイト!

10|.":(10<."."0@[)}11$' '"0

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

元のソリューション:

J、32バイト

(('_0123456789'i.[)}11$' '"0)@":

説明:

@": 文字に変換し、

}11$' '"0 11個のスペースの配列の内容をこれらの文字に変更します

'_0123456789'i.[ このリスト内の文字のインデックスによって示される場所

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


1
10|.":(10<."."0@[)}11$' '"0
-FrownyFrog

@FrownyFrog素敵なソリューション、ありがとう!
ガレンイワノフ

2

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

=Transpose(ArrayFormula(If(IsError(Find(Mid("-0123456789",Row($1:$11),1),Split(A1,",")))," ",Mid("-0123456789",Row($1:$11),1

入力はcellのコンマ区切りリストA1です。出力は、多くのエントリが入力された範囲にB1:L?あり?ます。(式は好きな場所に置くことができますがB1、便宜上選択しました。)Sheetsは式の最後に4つの閉じ括弧を自動的に追加し、4バイトを節約します。

Screenshot

別のテストケースと別のテストケース

説明:

  • Mid("-0123456789",Row($1:$11),1) 11文字を順番に選択します。
  • Find(Mid(~),Split(A1,","))各入力要素でそれらの文字を探します。これは、数値を返すか、見つからない場合はエラーを返します。
  • If(IsError(Find(~)," ",Mid(~))文字が見つからなかった場合はスペースを返し、見つかった場合は文字を返します。(重複を避ける方法があればいいのにMid(~)部分のわからない。)
  • ArrayFormula(If(~))マルチセル内の参照にするものであるMid(~)Find(~)の仕事を。また、1つのセルの数式が複数のセルの値を返すようにするものでもあります。
  • Transpose(ArrayFormula(~)) 返された配列は横から始まるため転置します。


1

Perl 6、35バイト

{.map:{map {m/$^a/||' '},'-',|^10}}

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

出力は、正規表現一致またはスペース文字のいずれかを含む文字マトリックスです。


標準入力可能性があり「入力は任意の合理的な形式にすることができます」の場合は、おそらく-peあなたが最初の.MAP、中括弧とスワップで済ます聞かせ$^aについて$_
フィル・H

@PhilH -p-nなんらかの形で、少なくともTIOではバグが多いようです。何らかの理由$_でブロックに渡されません。例1例2を参照してください。
-nwellnhof

1

Java 8、53バイト

a->a.map(i->"-0123456789".replaceAll("[^"+i+"]"," "))

私自身の挑戦は、私がそれを作ったときだと思っていたよりも簡単です。

両方の入力と出力java.util.stream.Stream<String>

説明:

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

a->                              // Method with String-Stream as both input and return-type
  a.map(i->                      //  For every String in the input:
    "-0123456789"                //   Replace it with "-0123456789",
    .replaceAll("[^"+i+"]"," ")) //   with every character not in `i` replaced with a space


1

R96 75バイト

for(i in scan())cat(paste(gsub(paste0("[^",i,"]")," ","-0123456789"),"\n"))

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

この正規表現アプローチを提案してくれたKevin Cruijssenに感謝します!

空白で区切られた整数としてstdinから入力を取得し、asciiアートをstdoutに出力します。


私はRをあまりよく知らないので、さらにゴルフができると確信していますが、この異なるアプローチは12バイト短くなっていますfunction(N)for(i in N)cat(paste(gsub(paste("[^","]",sep=i)," ","-0123456789"),"\n"))。(integer-arrayの代わりにstring-arrayとして入力します。)オンラインで試してください。
ケビンクルーッセン

@KevinCruijssenああ、うん、そう、ゴルフもできるよ。
ジュゼッペ

1

SOGL V0.1214の 13 バイト

{ø,{²²⁴WI1ž}P

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

説明:

{ø,{²²⁴WI1ž}P

{            repeat input times
 ø,            push an empty string and the next input above that
   {       }   for each character in the input
    ²²           push "0123456789"
      ⁴          copy the character on top
       W         and get it's index in that string (1-indexed, 0 for the non-existent "-")
        I        increment that (SOGL is 1-indexed, so this is required)
         1ž      at coordinates (index; 1) in the string pushed earlier, insert that original copy of the character
            P  print the current line


1

Pyth、14バイト

VQm*d}dNs+\-UT

入力を文字列のリストとして受け取り、各行の文字列のリストを出力します。
ここで試してみてください

説明

VQm*d}dNs+\-UT
VQ                For each string in the input...
  m     s+\-UT    ... and each character in "-0123456789"...
     }dN          ... check if the character is in the string...
   *d             ... and get that character or an empty string.

1

網膜、26バイト

%"-0123456789"~`.+
[^$&]¶ 

オンラインでお試しください!注:末尾のスペース。説明:入力の各行に対して%その子ステージを~1回実行します。~最初にその子ステージを実行します。これは、行を[^and でラップし、行に]<CR><SP>ない文字をスペースで置き換えるプログラムを生成します。"-0123456789"そのプログラムへの入力は、(与えられた文字列であることを指定する$置換が許可されているが、私はそれらを必要としません)。


1

Perl 5 -nバイト

-最初の位置以外に表示される可能性がある場合は機能しません

#!/usr/bin/perl -n
say"-0123456789"=~s/[^$_]/ /gr

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


場合は動作しません-最初の位置にあるよりも、どこにも表示される可能性それは、あなたがこの課題に答えるされていない真であることができれば、彼らはもはや整数ではないでしょうから、。:P
エリック・ザ・アウトゴルファー




1

K430の 27バイト

溶液:

{?[a in$x;a:"-",.Q.n;" "]}'

例:

q)k){?[a in$x;a:"-",.Q.n;" "]}'1 729 4728510 -3832 748129321 89842 -938744 0 11111
"  1        "
"   2    7 9"
" 012 45 78 "
"-  23    8 "
"  1234  789"
"   2 4   89"
"-   34  789"
" 0         "
"  1        "

説明:

入力に基づいて「-0123 ...」または「」を返します。右から左に解釈されます。APLの回答に競合はありません:(

{?[a in$x;a:"-",.Q.n;" "]}' / the solution
{                        }' / lambda for each
 ?[      ;          ;   ]   / if[cond;true;false]
                .Q.n        / string "0123456789"
            "-",            / join with "-"
          a:                / save as a
       $x                   / convert input to string
   a in                     / return boolean list where each a in x
                     " "    / whitespace (return when false)

0

APL + WIN、33バイト

文字列としての画面入力のプロンプト

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