숫자를 나열


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와 .45를 0.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.