番号をリストする


19

実数が与えられたら、それをリストのリストに変換します。負符号(ある場合)は空のリストになり、整数部は数字のリストになり、小数部(ある場合)は数字のリストになります。数字は文字列ではなく、実際の数字でなければなりません。

0[[0]]

123[[1,2,3]]

-123[[],[1,2,3]]

123.45[[1,2,3],[4,5]]

0.45[[0],[4,5]]

-0.45[[],[0],[4,5]]

-123.45[[],[1,2,3],[4,5]]


配列の数字は単一文字の文字列として許可されますか?
-dzaima

@dzaimaいいえ。追加します。
アダム

番号を文字列として解釈できますか?
ウリエル

@Uriel STDINから入力を受け取る場合、yes(違いはありません)。引数として、いいえ、私は思う。メタコンセンサスが何であれ。
アダム

2
@Quelklefはい、実際のところ。これは、完全に人間のWIP言語であるIntrntの(リスト化)コマンドについて、ここで見ることができる長い設計の議論の結果でした。l
アダム

回答:


7

C#、60 66バイト

using System.Linq;s=>s.Split('-','.').Select(p=>p.Select(c=>c-48))

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


目に見える外側のブラケットはありません。結果は実際にリストされていますか?
アダム

@AdámYeah(IEnumerable<char[]>)それは単に印刷コードがそれらを追加しないことです
。– TheLethalCoder

@TheLethalCoder要件では、必要な戻り値の型は数字としての数字のリストであり、それらの数字を表示する文字列や文字ではないと述べています。
カミルドラカリ

@KamilDrakari Ohは仕様が更新されたことを知りませんでした...
TheLethalCoder

@KamilDrakari修正済み。更新について教えてくれてありがとう。
TheLethalCoder

7

JavaScript(ES6)、33 44 43 41バイト

入力を文字列として受け取ります。チャレンジ仕様が更新された後、出力の要素を数値に変換する11 10バイトが犠牲になりました。

s=>s.split(/\D/).map(a=>[...a].map(eval))
  • Arnauldの使用の提案の おかげで1バイト節約できましたeval

試して

console.log((
s=>s.split(/\D/).map(a=>[...a].map(eval))
)("-123.45"))


説明

s=>

parameterを介して文字列を引数として取る匿名関数s
"-123.45"

s.split(/\D/)

使用するすべての数字以外の文字の配列に文字列を分割する正規表現-すなわち、-とは.
["","123","45"]

.map(a=>)

パラメータを介して各文字列を関数に渡し、配列をマッピングしますa

[...a]

個々の文字列の配列に分割します。
[[],["1","2","3"],["4","5"]]

.map(eval)

部分配列とeval各文字列をマップし、整数に変換します。
[[],[1,2,3],[4,5]]


文字列の2D配列?JSONはどのように見えますか?
アダム

数字は数字でなければなりません。
アダム

@Adám:11バイトのコストで更新されました。
シャギー


5

ゼリー 13  10 バイト

ŒṘµ<”/œpV€

数値を受け取り、結果の数値リストのリストを返すモナドリンク。

オンラインでお試しください!(フッターは、すべての実際のリストを表示するためにPython表現を出力するだけ
です)...またはテストスイートを参照してください。

どうやって?

ŒṘµ<”/œpV€ - Link: number
ŒṘ         - Python representation (yields a string representation of the number)
  µ        - monadic chain separation (call that s)
    ”/     - literal '/' character
   <       - less than? (vectorises) ('.' and '-' are, digit characters are not)
      œp   - partition s at truthy indexes of the resulting list discarding the borders
        V€ - evaluate €ach (list of characters) as Jelly code (vectorises)

また、ゼリーは05AB1Eよりも優れています!
エリックアウトゴルファー

4

05AB1E12 11バイト

バイトを保存してくれたRileyに感謝します。コード:

'-'.:'.¡εSï

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

説明:

'-'.:            # Replace "-" by "."
     '.¡         # Split on "."
        ε        # Apply to each element..
         S       #   Split into a list of characters
          ï      #   Convert back to int

技術的に必要ïですか?
魔法のタコUr

@MagicOctopusUrn OPは言ったThe digits must be actual numbers, not strings.
-dzaima

1
それは残念です、私は考えていました:„-.S€¡6のために、しかしもし彼らがintでなければならないなら...不明です。
魔法のタコUr

3

Python 2、59バイト

lambda a:[[]]*(a<0)+[map(int,n)for n in`abs(a)`.split('.')]

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

フェリペ・ナルディ・バティスタから-5バイト


あなたの第3の出力に[[[1, 2, 3], [4, 5]]]余分な外リストがあります
フェリペ・ナルディバティスタ

修正済みで、まだ64バイトのリンクを
フェリペナルディバティスタ

1
mapリスト内包表記でアウターを変更すると、59バイトになります:リンク
フェリペナルディバティスタ

2

実際には、23バイト

'.@;)A$s⌠♂≈⌡M[[]]+@s~@t

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

説明:

'.@;)A$s⌠♂≈⌡M[[]]+@s~@t
'.                       push "."
  @;)                    make a copy of the input and move it to the bottom of the stack
     A$s                 absolute value of input, stringify, split on periods
        ⌠♂≈⌡M            convert integer and fractional parts to lists of digits
             [[]]+       prepend an empty list
                  @s~    bitwise negation of sign of input (1 -> -2, 0 -> -1, -1 -> 0)
                     @t  elements in the list starting at that 0-based index (drops the leading empty list if the input was positive)

2

SOGL V0.12、11のバイト

Ζ-.ŗ .Θ⌡č¹r

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

スタックの最上部への出力(SOGLはascii-art用に作成されているため、SOGLが複数行の文字列に変換するため)。結果を表示するには、コンソールを見て`r`@10:(外側の括弧はスタック配列です)、またはοø∑コードの後に追加します

Ζ-.ŗ         replace "-" with "."
     .Θ      split on "."s
       ⌡     for each
        č      chop into characters (casts to strings :/)
         ¹   wrap in array (this + for each is like map())
          r  reverse types, vectorizing

2

Japt(v2.0a0)、12 10 8バイト

入力を文字列として受け取ります。

q\D ®¬®n

それをテストします-Q視覚化の目的でのみフラグを立てます。)

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

説明

stringの暗黙的な入力U

q\D

RegExを使用qして、すべての非数字文字の配列に分割()します。

®

配列にマップします。

¬

各文字列を個々の文字の配列に分割します。

®

配列にマップします。

n

整数に変換します。


2
分割できないのは\D、数字以外は.and だけだから-です。
ジャスティンマリナー

最良の部分は、あなたも/sを必要としません:
ETHproductions

@ETHproductions:今、それはとても甘いです。私は、/複数行に行くことでクロージングを省略することができたかもしれないと思った。私はそれらの両方を省略しようとは考えませんでした。
シャギー

1

オクターブ、54バイト

@(x)cellfun(@(c){c-48},strsplit(num2str(x),{'-' '.'}))

入力として数値を受け取り、数値ベクトルのセル配列を生成する無名関数。

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

説明

@(x)cellfun(@(c){c-48},strsplit(num2str(x),{'-' '.'}))

@(x)                                                    % Function with input x
                                num2str(x)              % Convert x to string
                       strsplit(          ,{'-' '.'})   % Split at '-' or '.'. Gives a
                                                        % cell array of substrings
    cellfun(          ,                               ) % To each substring apply
                                                        % the following function
            @(c){c-48}                                  % Subtract 48 from each char
                                                        % and pack into a cell

1

C(GCC) 170の 164 152 146 144バイト

これを少し下にゴルフできるはずです...

#define P printf
#define V *v[1]
main(c,v)char**v;{for(V^45?P("[[%c",V++):P("[[],[%c",V++,V++);V;V^46?P(",%c",V++):P("],[%c",V++,V++));P("]]");}

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


することで数バイト節約できると思います #define P printf(P呼び出しで括弧を省略
-Cyoce

1

ゼリー、12バイト

ŒṘ⁾-.yṣ”.V€€

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


うん、私は現在、私は唯一の13は、(私がいることを投稿しますが、短くなることができなければならないと思います)持って、あまりにもそれを試してみまし0.45返す[[],[4,5]代わりに[[0],[4,5]](それはと衝突-45
ジョナサン・アラン

@JonathanAllanそうそう...どこで入手したのかわからない?ああ、待って!修正中... OK修正済み。Jellyが0and .450.45別々に解析し、それを出力として持つと誰が期待するでしょう。
エリックアウトゴルファー

1

実際には、16バイト

$'.'-(Æ'.@s⌠♂≈⌡M

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

説明:

$'.'-(Æ'.@s⌠♂≈⌡M Implicit eval'd input
$                Convert to str
 '.              Push '.'
   '-            Push '-'
     (           Rotate stack left
      Æ          Pop a, b, c; push c.replace(b, a)
       '.        Push '.'
         @       Pop a, b; push b, a (swap)
          ⌠♂≈⌡   Push function ♂≈
           ♂       Map
            ≈        Convert to int
              M  Map

1
作成者をアウトゴルフした、いい。
ザカリー

@Zacharýアルゴリズムの選択の問題です。
エリックアウトゴルファー

そして、それはもちろんデニスではなく、あなたが倒したメゴです:)
ザカリー

@Zacharýまあ、この挑戦​​で公平になるために二度…
エリック・ザ・アウトゴルファー

1

R、51 47 72バイト

x=RG::s(strtoi(s(gsub('-','.',scan()),on='\\.')))
x[is.na(x)]=list(NULL)

私はRG図書館が大好きです。

空のリストが実際に空であることを確認するために26バイトを追加する必要がありました。

               gsub('-','.',scan())             # replace - with . in input; also converts to string
             s(                    ,on='\\.')   # split string on '.'
      strtoi(                                )  # convert to numeric
RG::s(                                        ) # convert to lists of digits

    x[is.na(x)]=list(NULL)                      # converts list of `NA` to empty list

出力例:

> x=RG::s(strtoi(s(gsub('-','.',-123.45),on='\\.')))
> x[is.na(x)]=list(NULL)
> x
[[1]]
NULL

[[2]]
[1] 1 2 3

[[3]]
[1] 4 5

まあ、ありますnumeric(0)空の数値のリストのためか、list()またはNULL
ジュゼッペ

私はそれを作るために修正を加えましたNULLが、今ではそれを行うためのゴルファーの方法があると確信しています。たぶん私はそれに戻ってきます。
BLT

1

Perl 5の56 54 + 1(-p)= 55バイト

$_="[[$_]]";s/\D\K\./0./;s/\d(?=\d)/$&,/g;s/-|\./],[/g

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

Domから$&について通知されたため、2バイト節約

説明:

$_="[[$_]]";        # Add opening and closing to ends of strings
s/\D\K\./0./;       # handle the case of .45 or -.45 by inserting 0 before
                    # the decimal.  Otherwise, .45 & 45 would be ambiguous.
s/\d(?=\d)/$&,/g;   # Put a comma between numbers.
s/-|\./],[/g        # Turn - and . into separators between lists

これを少し試してみたところ、分解が少し短くなったことがわかりました。私のものに基づいてそれを組み合わせてあなたのものを縮小できるかどうかはわかりませんか?onlineオンラインで
ドムヘイスティングス

1
あなたの$&を使用しました。私は「.45」と「45」のケースを処理することを除いて、2つは基本的に同等だと思います。
Xcali

ああ、そうだね!
ドムヘイスティングス

1

Perl 6、23バイト

+«*.split(/\D/)».comb

試して

拡大

\            # numify each of the following (possibly in parallel)
*\             # WhateverCode lambda (this is the input)
.split(/\D/)\  # split on non-digits ( . and - )
».comb         # split each of those into individual characters

…».combは、より優先順位が高いことに注意してください+«…





0

Perl 6、22バイト

{m:g/^\d*|\d+/».comb}

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

返されるリストの要素は文字列ですが、Perlの通常のように、それらは数値として使用でき、暗黙的に変換されます。それらはすべての実用的な目的のための「実際の数字」です。それらを最も直接的な表現の数字にするためには、コードブロックの内容の前に「+«」を3バイト追加するだけです。


チャレンジには、「数字は文字列ではなく、実際の数字でなければなりません」と明記されています。」、したがって、おそらく含まれるべきです。
ブラッドギルバートb2gills

0

ルビー、75バイト

->(x){(x<0?[[]]:[])+x.abs.to_s.split('.').map{|y|y.chars.map{|z|z.to_i}}}

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


1
その空白をすべて削除できますか?
TheLethalCoder

うん、あなたは正しい、完了です!
グレゴリー

いくつかの構文の調整についても同じです。オンラインで試してください!(ところで、TIOでヘッダーとフッターを使用する場合、コードの右側に表示されるサイズはソリューションの実際のサイズになります。)
manatwork

すべての情報に感謝します。
グレゴリー

あなたは入れ替えることができます.map{z|z.to_i}のために.map &:to_i
Cyoce
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.