숫자를 나열


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 아니요. 추가하겠습니다.
Adám

숫자를 문자열로 사용할 수 있습니까?
Uriel

@Uriel STDIN에서 입력을 받으면 yes입니다 (차이는 없습니다). 논란의 여지가 없다고 생각합니다. 메타 합의가 무엇이든간에.
Adám

2
@Quelklef 네, 사실입니다. 그것은 긴 디자인 토론의 결과였다 당신이 여기에서 볼 수있는 정보] l의 (listify) 명령 totallyhuman 의 WIP 언어, Intrnt .
Adám

답변:


7

C #, 60 66 바이트

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

온라인으로 사용해보십시오!


보이는 외부 괄호가 없습니다. 결과가 실제로 목록에 있습니까?
Adám

@ Adám Yeah ( IEnumerable<char[]>) 단지 인쇄 코드가 추가되지 않습니다.
TheLethalCoder

@TheLethalCoder 요구 사항은 필수 반환 유형이 숫자 또는 숫자를 표시하는 문자열이나 문자가 아닌 숫자 목록입니다.
Kamil Drakari

@KamilDrakari Oh 사양이 업데이트 된 것을 보지 못했습니다 ...
TheLethalCoder

@KamilDrakari 업데이트에 대해 알려 주셔서 감사합니다.
TheLethalCoder

7

자바 스크립트 (ES6), 33 44 43 41 바이트

입력을 문자열로받습니다. 챌린지 사양이 업데이트 된 후 출력의 요소를 숫자로 변환하여 11 10 바이트를 희생 했습니다.

s=>s.split(/\D/).map(a=>[...a].map(eval))
  • Arnauld 의 사용 제안 덕분에 바이트가 절약되었습니다 eval.

그것을 테스트

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


설명

s=>

매개 변수를 통해 문자열을 인수로 사용하는 익명 함수 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

숫자는 숫자 여야합니다.
Adám

@ Adám : 11 바이트의 비용으로 업데이트되었습니다.
얽히고 설킨


5

젤리 ,  13  10 바이트

ŒṘµ<”/œpV€

숫자를 가져와 결과 숫자 목록을 반환하는 모나드 링크.

온라인으로 사용해보십시오! 바닥 글은 파이썬 표현을 인쇄하여 모든 실제 목록을 표시합니다.
... 또는 테스트 스위트를 참조하십시오.

어떻게?

ŒṘµ<”/œ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보다 낫습니다!
Outgolfer 에릭

4

05AB1E , 12 11 바이트

바이트를 저장 해준 Riley 에게 감사합니다 . 암호:

'-'.:'.¡εSï

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

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

기술적으로 필요 ï합니까?
매직 문어 Urn

@MagicOctopusUrn OP는 말했다The digits must be actual numbers, not strings.
dzaima

1
그것은 부끄러운 일 „-.S€¡입니다. 6에 대한 것이지만, 그들이 int이어야한다면 ... 확실하지 않습니다.
매직 문어 Urn

3

파이썬 2 , 59 바이트

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

온라인으로 사용해보십시오!

Felipe Nardi Batista에서 -5 바이트


당신의 세 번째 출력 [[[1, 2, 3], [4, 5]]]에는 추가 외부 목록이 있습니다
Felipe Nardi Batista

고정 및 여전히 64 바이트 링크 사용
Felipe Nardi Batista

1
map목록 이해력으로 외부를 변경하면 59 바이트를 얻을 수 있습니다 . link
Felipe Nardi Batista

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은 그것을 아스키 아트로 만들어 졌기 때문에 여러 줄 문자열로 변환하기 때문에 스택의 상단으로 출력합니다. 결과를 보려면 콘솔 뒤 `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 바이트가 절약되었습니다.

설명

문자열의 암시 적 입력 U.

q\D

RegEx를 사용하여 q숫자가 아닌 모든 문자의 배열 로 분할 ( ) 하십시오 .

®

배열을 매핑하십시오.

¬

각 문자열을 개별 문자 배열로 분할하십시오.

®

배열을 매핑하십시오.

n

정수로 변환합니다.


2
\D숫자 이외의 숫자 만 .-? 이기 때문에 에 분할 할 수 없습니다 .
Justin Mariner

가장 좋은 점은 /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 오 예 .. 어디에요? 아 잠깐만 ! 고정 중 ... 확인되었습니다. 젤리가 0.450.45별도로 구문 분석하고 출력으로도 가질 것이라고 누가 예상합니까 ?
Outgolfer Erik

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ý 알고리즘 선택의 문제 일뿐입니다.
Outgolfer Erik

그리고 그것은 데니스가 아니라 Mego입니다. :)
Zacharý

@ Zacharý 글쎄요,이 도전에서 두 번 공정해야 ...
Outgolfer Erik

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

펄 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

이것으로 조금 놀아서 조금 더 짧게 나누는 것을 발견했습니다. 내 것을 기반으로 결합하여 축소 할 수 있는지 확실하지 않습니까? 😊 온라인으로 사용해보십시오!
Dom Hastings

1
귀하의 $ &를 사용했습니다. 필자는 ".45"와 "45"의 경우를 처리한다는 점을 제외하고는 기본적으로 두 가지가 동일하다고 생각합니다.
Xcali

아, 맞아요!
Dom Hastings

1

펄 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

펄 6 , 22 바이트

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

온라인으로 사용해보십시오!

반환 된 목록의 요소는 문자열이지만 Perl의 경우와 마찬가지로 숫자로 사용할 수 있으며 암시 적으로 변환됩니다. 그것들은 모든 실제적인 목적을위한 "실제 숫자"입니다. 가장 즉각적인 표현으로 숫자가되도록하려면 코드 블록의 내용 앞에 3 바이트를 더하기 위해 "+«"만 있으면됩니다.


The challenge specifically states “The digits must be actual numbers, not strings.”, so the should probably be included.
Brad Gilbert b2gills

0

RUBY, 75 bytes

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

Try it online!


1
Can you remove all that whitespace?
TheLethalCoder

Yep, you're right, done!
Gregory

The same with some syntax tweaks: Try it online! (BTW, if you use Header and Footer on TIO the size displayed on the right side of Code will be the actual size of the solution.)
manatwork

Fixed, thanks for all the infos.
Gregory

You can swap .map{z|z.to_i} for .map &:to_i
Cyoce
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.