배열을 평평하게하십시오!


34

이 도전에서, 당신의 임무는 중첩 된 배열을 취하고 1 차원 평탄화 된 배열을 반환하는 프로그램을 만드는 것입니다. 예를 들어 [10,20,[30,[40]],50]출력해야합니다 [10,20,30,40,50].


입력

입력은 중첩 배열입니다 (예 :) [10,20,[[[10]]]]. 정수 (음수 및 양수), 문자열 및 배열 만 포함합니다. 입력을 함수 인수, STDIN 또는 언어에 맞는 것으로 취할 수 있습니다. 입력 배열에 빈 배열이 없다고 가정 할 수 있습니다.


산출

출력은 중첩 배열과 동일한 유형 및 동일한 순서로 동일한 요소를 갖는 평평한 1 차원 배열이됩니다.


테스트 사례

[10,20,30] -> [10,20,30]
[[10]] -> [10]
[["Hi"],[[10]]] -> ["Hi",10]
[[[20],["Hi"],"Hi",20]] -> [20,"Hi","Hi",20]
[[["[]"],"[]"]] -> ["[]","[]"]


의견을 사용하여 설명을 요청하십시오. 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

참고 : 언어에 내장 언어가 포함되어 있으면 사용해서는 안됩니다.


편집하다

코드를 실행할 수있는 웹 사이트에 대한 링크도 포함하십시오.


7
일부 언어는 문자열을 배열로 취급합니다. [[ "Hi"], [[10]]]-> [ "H", "i", 10] 괜찮습니까?
Adám

4
@ Mego PPCG에 대한 unflatten질문이 있지만 질문 이 없다는 것을 알게되어 너무 놀랐습니다 flatten.
Arjun

3
언어가 같은 크기의 하위 배열 만 지원하는 경우 어떻게합니까? (예 : Java?) 각 요소의 유형이 동일해야한다면 어떻게해야합니까? (예 : Java, C ++ 등?) 또한 ["[",[["[",],'[',"['['"]]테스트 사례로 추가하십시오 .
flawr

4
@flawr이 테스트 사례는 봇을 지원 '하고 "분리 문자로 지원되는 언어에만 적합 합니다. (하지만 테스트 케이스가 포함 동의 [, ], "\문자열 내부에 유용합니다.)
마틴 청산

4
테스트 사례에서는 이러한 유형의 배열을 여러 유형 또는 배열 리터럴에 대한 다른 표기법으로 지원하지 않는 언어도 제외합니다.
flawr

답변:


40

K, 3 바이트

,//

이것은 상당히 일반적인 관용구입니다. "수렴에 참여".

여기를 확인하십시오 .

작동 방식 :

결합 ( ,)은 원자 또는 목록을 융합하여 목록을 생성합니다. 오버 ( /)는 동사 (이 경우 조인)를 가져 와서 목록의 각 요소 사이에서 왼쪽에서 오른쪽으로 적용합니다. 따라서 화합물 ,/은 목록의 모든 최상위 요소를 평평하게 만듭니다. 기호는 /실제로 복합 동사의 원자가 (인수)에 따라 다른 의미를 갖습니다. ,/동사를 제공 할 때 최종 /은 "수렴"으로 작동 ,/합니다. 변경이 멈출 때까지 입력에 반복적으로 적용됩니다 . 일부 다른 언어에서는 이와 같은 기능을 "고정 점 조합기"라고합니다. 최하위 레벨 목록을 반복적으로 융합하면 결국 단일 플랫 목록에 도달하게되며 어떤 조작도 요소 순서를 혼란스럽게하지 않습니다. 이것은 문제를 해결하는 것 같습니다.


1
설명 감사합니다! 잘 얻은 +1하십시오.
Value Ink


1
나는 같은 알고리즘 (이 언어는 아님)을 생각해 냈습니다. 올바른 언어를 선택하여 구현하기위한 +1!
Cyoce

@Cyoce 만약 당신의 언어가 여기에 사용 된 3 개의 연산자와 동등하다면, 그것은 매우 자연스러운 해결책입니다. 반드시 변형을 게시하십시오.
JohnE

1
@JohnE 긴 이야기, 내가 생각해 낸 알고리즘에서 언어를 파생시켜 언어가 아직 완성되지 않았습니다 (따라서 구현되지 않았습니다).
Cyoce

38

자바 스크립트 (ES6), 35 바이트

@ user81655의 답변에서 영감을 얻었습니다 .

f=a=>a.map?[].concat(...a.map(f)):a

3
매우 영리한! 누락 된 키를 처리하는 JS의 이상한 방식을 사용하여 [ab] +1!
Cyoce

나는 그것을 이길 수 있습니다.
대머리 Bantha

@BaldBantha : 우리는 당신의 답변을 기대하고 있습니다 :-)
Bergi

2
CVM NVM 33 바이트 솔루션이 테스트 사례 중 하나에서 실패합니다. NOOOO
대머리 Bantha

2
@BaldBantha, join-split은 문자열 내부에서 쉼표로 실패합니다.
Qwertiy

19

수학, 16 14 바이트

{##&@@#&//@#}&

목록을 가져 와서 반환하는 명명되지 않은 함수. 예 :

{##&@@#&//@#}& @ {{{20}, {"Hi"}, "Hi", 20}}
(* {20, "Hi", "Hi", 20} *)

설명

구문 설탕 파티!

이해하는 방법이 작품 노트 티카의 모든 표현이 원자 중 하나입니다 (예 : 숫자, 문자열, 문자) 또는 형태의 화합물 표현 f[a, b, c, ...], f, a, b, c임의의 표현 그 자체이다. 여기 에서 표현 f머리 라고합니다 . 그 밖의 모든 것은 단지 구문 설탕입니다. 예는 {a, b, c}단지입니다 List[a, b, c].

우리 는리스트의 모든 레벨에 //@걸쳐 함수를 맵핑하는 것으로 시작 합니다. 예를 들어 :

f //@ {{{20}, {"Hi"}, "Hi", 20}}
(* f[{f[{f[{f[20]}], f[{f["Hi"]}], f["Hi"], f[20]}]}] *)

이것은 f화합물 표현뿐만 아니라 원자에 대한 것입니다. 우리가 지금 찾고있는 것은 목록 헤드를 제거하고 다른 모든 것을 유지하는 방법입니다.

Apply함수는 일반적으로 목록의 요소를 별도의 인수로 함수에 제공하는 데 사용되지만 실제 정의는 더 일반적이며 표현식의 헤드를 대체합니다. 예 Apply[g, f[a, b]]를 들어 g[a, b].

이제는 Sequence사라지는 특별한 "헤드" 가 있습니다. 예를 들어로 {a, Sequence[b, c], d}평가합니다 {a, b, c, d}. 목록을 평탄화하는 아이디어는 모든 내부 목록의 헤드를 대체하여 Sequence주변 목록에 뿌려지는 것입니다. 우리가 원하는 것은 리스트로 Apply향하는 Sequence것입니다. 편리하게 Apply원자에 무언가를 넣으면 원자는 변경되지 않고 그대로 유지되므로 표현 유형을 전혀 구분할 필요가 없습니다.

마지막으로, 하나의 작은 문제 f가 있습니다. 가장 바깥 쪽 레벨에도 적용되어 List원하지 않는 가장 바깥 쪽도 제거합니다 . 이를 방지하는 가장 짧은 방법은 단순히 결과를 다시 목록으로 Sequence묶어 주변 이 안전하게 사라질 수 있도록하는 것입니다.

코드 도 Apply없고 Sequence코드 도 없습니다 . @@의 운영자 형태 Apply##&긴 내장 이름을 단축하기위한 표준 골프 트릭입니다 Sequence. 그래서 모든 것을 조금 풀면 다음과 같은 결과를 얻습니다.

flatten[list_] := { MapAll[Apply[Sequence], list] }

##&작동 방식과 이유에 대한 자세한 내용 은 Mathematica 팁에 대한 답변에서 "인수 순서"섹션을 참조하십시오 .


처음 본 적이 있습니다 //@. 알고 매우 유용합니다!
DavidC

//@깔끔한 패턴을 포착합니다. Joy의 재귀 조합기 중 일부를 상기시켜줍니다. Mathematica의 관련 기능에 대한 좋은 참조 링크가 있습니까? 나는 프로그램에서 명시적인 재귀를 팩토링하는 방법에 매우 관심이 있습니다.
JohnE

1
@JohnE 글쎄, 여기 문서가 있습니다. 당신은 또한 같은 것들을 볼 수 있었다 Map, MapAt, Apply,뿐만 아니라 Replace및 관련 기능. 일반적으로 선택적인 levelspec 매개 변수 를 사용하는 많은 기능이 있지만 (원래 16 바이트 솔루션 참조) 여러 / 모든 수준에서 한 번에 기능을 적용 할 수 있습니다.
Martin Ender

12

파이썬 2, 43 바이트

f=lambda l:[l]*(l*0!=[])or sum(map(f,l),[])

목록에서 요소를 되풀이하고 결과를 연결합니다. 문자열 또는 숫자에서 단일 목록으로 묶습니다.

불행히도, 파이썬 2 는 다른 유형 사이 에 유형 int < list < string샌드위치 list를 주문 하므로 두 가지 불평등이 필요합니다. 그래서, 대신, l*0빈리스트에 체크 []그렇지 않으면 제공, 0또는 "".


10

루비, 43 42 34 바이트

재귀 솔루션. 이제 예외 처리와 함께! (그러나 변화를 고무시키는 데 @akostadinov를 신용하게 할 수도 있음)

f=->a{a.map(&f).inject:+rescue[a]}

IDEOne 링크


짧음에 대한 명성, 굉장
akostadinov

나는 당신이 그런 식으로 사용할 rescue수 있다는 것을
몰랐습니다

1
@Cyoce 루비에는 기술적으로 try블록 이 없기 때문에 begin잡으려는 부분과 그렇지 않은 부분을 구별하는 데 사용 합니다. 따라서 블록의 나머지 부분을 모두 잡기 때문에 기술적으로 필요하지 않습니까? Ruby는 라인을 다음과 같이 해석하므로 나머지는 공백으로 잘 ...inject(:+) rescue [a]
Value Ink

1
@ KevinLau-notKenny, 아니요, 같은 줄의 구조는 다릅니다. 단지 그 줄을 구조하는 것입니다. 예를 들면 a = raise("haha") rescue 1할당합니다 1a. 그것은 '
akostadinov

@ KevinLau-notKenny 인라인가있다 rescue가 인라인처럼, if하고 while.
Nic Hartley

8

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

f=a=>[].concat(...a.map(v=>v.pop?f(v):v))
<textarea id="input" rows="6" cols="40">[[[20],["Hi"],"Hi",20]]</textarea><br /><button onclick="result.textContent=JSON.stringify(f(eval(input.value)))">Go</button><pre id="result"></pre>


8

펄 6 , 24 바이트

{gather {$_».&{.take}}}

설명:

{ # has $_ as an implicit parameter

  gather {

    $_\ # the parameter from the outer block
    »\  # for each single value in the structure
    .&( # call the following block as if it was a method
      { # this block has its own $_ for a parameter
        .take # call the .take method implicitly on $_
      }
    )
  }
}

테스트:

#! /usr/bin/env perl6

use v6.c;
use Test;

my &flatten = {gather {$_».&{.take}}}

my @tests = (
  [10,20,30], [10,20,30],
  [[10,],], [10,],
  [["Hi",],[[10,],],], ["Hi",10],
  [[["[]",],"[]"],], ["[]","[]"],
);

plan @tests / 2;

for @tests -> $input, $expected {
  # is-deeply cares about the exact type of its inputs
  # so we have to coerce the Seq into an Array
  is-deeply flatten($input).Array, $expected, $input.perl;
}
1..4
ok 1 - $[10, 20, 30]
ok 2 - $[[10],]
ok 3 - $[["Hi"], [[10],]]
ok 4 - $[[["[]"], "[]"],]

7

하스켈, 43 바이트

data D a=L a|N[D a]
f(L x)=[x]
f(N l)=f=<<l

Haskell은 하위 목록의 깊이가 다른 중첩 목록이나 목록 요소의 혼합 유형이 없습니다. 중첩을 위해 일부 요소를 보유 D하는 리프 L또는 s N목록 인 노드 인 사용자 정의 데이터 유형 을 정의합니다 D. 혼합 요소의 Either경우 여기에 두 가지 유형을 하나로 결합 하는 사전 정의 된 데이터 유형 을 사용합니다 Either String Integer. 새 유형 D과 평면화 함수 f는 리프 요소 유형에서 완전히 다형성이므로 Either.

사용 예 : f (N[N[L(Right 20)], N[L(Left "Hi")], L(Left "Hi") , L(Right 20)])-> [Right 20,Left "Hi",Left "Hi",Right 20].


6

Pyth, 7 6 5 바이트

us+]Y

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트

물론 2 바이트만으로 작업을 처리하는 내장 함수도 있습니다 : .n( Test Suite )


현재 당첨자에서 3 분 거리에 있습니다! +1
Arjun

@Sting : 다른 바이트를 골라냅니다. G내가 쓰지 않으면 Pyth가 마지막 문자를 암시 적으로 추가한다는 것을 잊어 버렸 습니다.
Jakube

축하합니다!
Arjun

6

자바 스크립트 (Firefox 30-57), 43 바이트

f=a=>a.map?[for(b of a)for(c of f(b))c]:[a]

그냥 사용을 피할 수 있기 때문에 concat.


그렇지 않다 (6)는 ECMA 스크립트 되지 파이어 폭스 30 +를 ?
Solomon Ucko

1
@SolomonUcko No [for(of)]는 Firefox 30 이상에서만 사용할 수 있습니다. ES7에 제안되었지만 나중에 삭제되었습니다.
Neil

1
설명해 주셔서 감사합니다! 대부분, 난 그냥 줄 알았는데for(__ in __)
솔로몬 Ucko에게

@SolomonUcko [for (in)]는 객체의 키를 제공하는 대체 실험 구문입니다.
Neil

5

펄, 34 29 바이트

기능.

다음과 같이 나열하기 위해 평평 해야하는 경우 my @a = f(@a)29 바이트 :

sub f{map{ref()?f(@$_):$_}@_}

Ideone에서 테스트

ref와 같이 ref 배열을 평평하게 해야하는 경우 my $a = f($a)34 바이트 :

sub f{[map{ref()?@{f(@$_)}:$_}@_]}

Ideone에서 테스트하십시오 .

Perl 5.22.0 이상, 27 바이트

홉스에 감사합니다 .

my @a = f(@a)27 바이트 와 같이 나열하기 위해 병합 해야하는 경우 :

sub f{map{ref?f(@$_):$_}@_}

JDoodle에서 테스트

my $a = f($a)32 바이트 와 같이 ref 배열을 평평하게 해야하는 경우 :

sub f{[map{ref?@{f(@$_)}:$_}@_]}

JDoodle에서 테스트하십시오 .


나는 그것을 테스트하지는 않았지만 ?@{f@$_}:대신 ?@{f(@$_)}:2 바이트를 절약하는 대신 작동해야 한다고 생각 합니다 .
msh210

1
@ msh210 아니요, 작동하지 않습니다. 컴파일러는 아직 선언되지 않았기 f때문에 f그것이 함수인지 khow하지 않습니다 . sub f{}sub f{... f@$_ ...}일.
Denis Ibaev

1. ref2 바이트를 절약하기 위해 parens가 필요하지 않습니다. 2. 내가 볼 수있는 한, sub f{map{ref?f(@$_):$_}@_}규칙 내에 있고 다른 5.를 저장합니다. 5. f배열 (비 참조)을 목록으로 가져 오므로 동일하게 반환 할 수 있습니다.
hobbs

@hobbs 1. 괄호가 없으면 ref컴파일러는 다음 과 같은 작업을 ?시작 한다고 가정합니다 . 따라서 컴파일러는 두 번째를 검색 하고 오류를 발생시킵니다. ?PATTERN?ref(?PATTERN?)?
Denis Ibaev

@DenisIbaev 아. ?PATTERN?5.22.0에서 제거되었지만 m?PATTERN?여전히 작동합니다. 최신 버전에서 테스트 중입니다. 5.22+를 지정하면이 두 바이트를 얻을 수 있습니다.
홉스

4

줄리아, 29 바이트

f(x,y=vcat(x...))=x==y?x:f(y)

이것은 수정 점에 도달 할 때까지 반복 함수로 반복되는 것입니다. 예

julia> f([1,[2,[3,[4,[5,[6]]]]]])
6-element Array{Int64,1}:
 1
 2
 3
 4
 5
 6

3

망막 , 30 바이트

1>`("(\\.|[^"])+")|[][]
$1
$
]

온라인으로 사용해보십시오! 첫 번째 줄은 한 번에 여러 테스트 사례를 실행하는 데만 사용됩니다.

내가의 "일반적인"입력 형식에 가기로 결정 그래서 망막은, 배열, 문자열 리터럴 또는 숫자의 개념이 없습니다 [...,...]스타일의 배열과 "-delimited 문자열 \(특히 모든 문자를 탈출 문자열 내부에 사용할 수 있습니다 "\자체).

프로그램 자체는 단순히 전체 문자열 또는 대괄호와 일치 $1하고 문자열을 유지하고 대괄호를 제거하는 것으로 대체합니다 . 한도 1>는 첫 번째 일치를 건너 뛰어 선행을 제거하지 않습니다 [. 그러나 이것은 후행을 제거 ]하므로 별도의 단계에서 다시 추가합니다.


3

파이크, 11 바이트

.F~]+=])K~]

여기 사용해보십시오!

설명:

.F~]+=])    - Deep for loop
  ~]        -    contents of `]` ([] by default)
    +       -  ^+i
     =]     - `]` = ^
        K~] - Output value
        K   - Remove the output from the for loop
         ~] - Return the contents of `]`

또는 버그 수정 후 7 바이트

M?+]K~]

여기 사용해보십시오!

설명:

M?+]    - Deep map
 ?+]    -  `]` = `]`+i
    K~] - Output value
    K   - Remove the output from the for loop
     ~] - Return the contents of `]`

또는 stdout으로 인쇄가 허용 된 경우 2 바이트 (내장 기능이 제공 될 수 있음)

M
<newline required>

여기 사용해보십시오!

이것은 print_newline입력의 모든 비 시퀀스 항목에 기능을 깊이 적용하고 시퀀스 항목에 대해 반복됩니다.


K에서 4 분 거리! +1
Arjun

3

자바 (V8) 390 276 바이트

public static Object[] f(final Object[]a) {
    List<Object>r=new ArrayList<>();boolean t=false;int n=0;
    for(final Object p:a)
        if(t=p instanceof Object[]){for(final Object q:(Object[])p) r.add(q);}
        else r.add(p);
    return(t)?f(r.toArray()):r.toArray();
}  

완전성과 그 모든 것을 위해서. :) Java의 코드 효율적이라고 말할 수 없습니다.


3
안녕하세요, PPCG에 오신 것을 환영합니다! 이 질문은 code-golf 이므로 코드를 최소화하십시오. 감사!
NoOneIsHere

3
불필요한 공백, 탭 및 줄 바꾸기를 모두 제거하십시오. 변경 oafo하고, 변화 flattenf.
NoOneIsHere

2
당신은 finals 필요하지 않습니다 , 모든 것은 람다 일 수 있습니다, 당신은 필요하지 않습니다 public static...
David Conrad

1
대신 generics 객체를 사용하면 몇 개의 문자를 저장할 수 있습니다
user902383

1
당신은 또한 2 바이트 저장 당신은 대체 할 수있는 경우 false1>2, 추가 2 바이트 당신은 (컴파일러는 자동으로 0으로 정의) n을 선언하는 경우 얻을 수 있지만 없습니다
user902383

2

파이썬, 57 바이트

f=lambda a:sum([list==type(x)and f(x)or[x]for x in a],[])

온라인으로 사용해보십시오 : Python 2 , Python 3

list==type(x)트릭을 해준 Kevin Lau에게 감사합니다 .


2
type(x)==list보다 짧습니다 isinstance(x,list).
Value Ink

1
"정수 (음수 및 양수), 문자열 및 배열 만 포함합니다." 어떻 [`x`>'['and...습니까? (Python 2에서만 작동합니다.)
Lynn

2

루비

내장 flatten방법이 있습니다.

여기에서 실행할 수 있습니다 : http://www.tutorialspoint.com/execute_ruby_online.php

하나의 43 바이트이지만 다음과 같이 공유한다고 생각했습니다.

f=->a{a.inject([]){|r,e|r+(f[e]rescue[e])}}

이전 및 다른 루비 응답보다 효율적인 하나의 45 바이트 :

f=->a{a.map{|e|Array===e ?f[e]:[e]}.inject:+}

벤치 마크는 다음과 같습니다.

require 'benchmark'
n=10^9
arr=[[[20],[[[[[[[[123]]]]]]]],"ads",[[[[[[[4]]]]]]],5,[[[[[[[[[[6]]]]]]]]]],7,8,[[[[[[[[[[9]]]]]]]]]],[[[[[[[[[[0]]]]]]]]]],[[[[[[[[[[[["Hi"]]]]]]]]]]]],[[[[[["Hi"]]]]]],[[[[[20]]]]]]]
Benchmark.bm do |x|
  x.report { f=->a{a.map(&f).inject:+rescue[a]}; f[arr] }
  x.report { f=->a{a.map{|e|e!=[*e]?[e]:f[e]}.inject:+}; f[arr] }
  x.report { f=->a{a.inject([]){|r,e|r+(f[e]rescue[e])}}; f[arr] }
  x.report { f=->a{a.map{|e|Array===e ?f[e]:[e]}.inject:+}; f[arr] }
end

결과:

       user     system      total        real
   0.010000   0.000000   0.010000 (  0.000432)
   0.000000   0.000000   0.000000 (  0.000303)
   0.000000   0.000000   0.000000 (  0.000486)
   0.000000   0.000000   0.000000 (  0.000228)

1
안녕하세요, PPCG에 오신 것을 환영합니다! 불행히도이 규칙으로 인해 귀하의 답변이 유효하지 않습니다 : Note: If your language contains a built-in for this, then you must NOT use it.
NoOneIsHere 여기

@NoOneIs 여기, 고마워요
akostadinov

1
새 업데이트가 시간에 따라 어떻게 업데이트 되나요? 또한 내 새로운 답변과 마찬가지로 주변 공간을 제거 할 수 있습니다rescue
Value Ink

@ KevinLau-notKenny 업데이트, 감사합니다! 자바 rescue처럼 다소 느린 btw로 보인다try/catch
akostadinov

1
바이트 수도 업데이트
Value Ink


2

클로저, 68 바이트

(def f #(if(some vector? %)(f(mapcat(fn[z](if(vector? z)z[z]))%))%))

mapcat먼저 각 요소에 함수를 적용한 다음 결과를 연결합니다. 따라서 연결될 때마다 하나의 '중첩 수준'이 손실됩니다. Concat은 시퀀스가 ​​아닌 경우 작동하지 않으므로 벡터가 아닌 경우 요소를 벡터로 래핑해야합니다.

당신은 여기에 그것을 시도 할 수 있습니다 : http://www.tryclj.com

(f [[[20],["Hi"],"Hi",20]])
(f [[["[]"],"[]"]])

좋은 첫 번째 코드 골프. +1 :)
Arjun

2

ANSI C, 193 바이트

#define b break;
#define c case
#define p putch(_);
char f;main(_){switch(_){c 1:putch(91);b c 34:f^=1;p b c 91:f&&p b c 93:f&&p b c 10:c 13:putch(93);return;default:p}_=getch();main(_);}

:-/, 어떤 제안? Btw, 이것을 컴파일 할 온라인 소스를 찾으려고했지만 WL 은이 코드가 컴파일하기에 엄격합니다. 그렇지 않으면 VS와 gcc에서 작동합니다.


2
PPCG에 오신 것을 환영합니다!
마틴 엔더

1
PPCG에 오신 것을 환영합니다! 좋은 첫 골프. 행운을 빌어 요!
Arjun

감사! 다른 곳에서 댓글을 달 수 있도록 내 요점을 높이려는 시도였습니다. 계정이 다른 포털 용인 것처럼 작동하지 않는 것 같습니다. : DI는 c ++의 멋진 기능을 사용할 수 있는지 확인합니다.
amritanshu

2

자바 스크립트 20 바이트

a=>(a+[]).split(',')

배열 + 배열은 array.toString과 같습니다


@WheatWizard 환영합니다. 저는 사이트를 처음 사용합니다. 실제로 a함수의 인수입니다. 이제 기능을 편집하려고합니다.
i--

이제는 @WheatWizard가 괜찮습니다. 이것에 문제가 있으면 알려주십시오
i--

1
실제로 자바 스크립트 문서를 보면 익명 함수가 확실히 짧을 것이므로 a=>코드의 시작 부분 에만 추가하면 됩니다.
밀 마법사

@WheatWizard 언급 한대로 화살표 기능으로 업데이트했습니다. 그러나 화살표 기능은 직접 호출을 지원하지 않기 때문에 스 니펫을 제거해야합니다. 콜백 전용
i--

1
쉼표가있는 문자열은 올바르게 처리되지 않습니다.
Jo King

2

C #, 48 바이트

()=>{$"[{i.Replace("[","").Replace("]","")}]";};

아무도 아직 C # 솔루션을 제공하지 않았기 때문에 게시 할 것이라고 생각했습니다. 제안을 환영합니다!


사이트에 오신 것을 환영합니다. 한동안 C #으로 프로그래밍하지 않았지만 몇 가지 문제가있는 것으로 보입니다. 하나는 어떻게 i초기화됩니까? 그리고 그것이 [["[]"],"[]"]예제에서 작동한다고 확신 합니까?
밀 마법사

죄송합니다. 입력은 문자열로 전달됩니다. 빈 배열은 빈 문자열로 변환됩니다.
PmanAce

마지막 테스트 케이스는 어떻습니까? 또한, 당신이 할 의도가 있다고 생각 i=>$"{i.Replace("[","").Replace("]","")}"합니까?
무지의 구현

슬프게도 마지막 경우에는 작동하지 않으며 빈 배열을 제거합니다. :(
PmanAce

이 답변은 최종 테스트 사례를 통과하지 못합니다. 몇 달 동안 수정되지 않았으므로 삭제하기로 결정했습니다.
mbomb007

1

라켓, 63 바이트

(define(f l)(apply append(map(λ(x)(if(list? x)(f x)`(,x)))l)))

1

자바 8165 자

import java.util.*;<T>T[]f(T[]a){List<T>l=new ArrayList<>();for(T e:a)if(e instanceof Object[])Collections.addAll(l,f((T[])e));else l.add(e);return(T[])l.toArray();}

수업에 참여하지 않은 상태 :

public class Q80096 {

    public static <T> T[] flatten(T[] array) {
        List<T> flattenedList = new ArrayList<>();
        for (T element : array)
            if (element instanceof Object[])
                 Collections.addAll(flattenedList, flatten((T[]) element));
            else
                flattenedList.add(element);
        return (T[]) flattenedList.toArray();
    }
}

이 답변은 Jeremy Harton의 접근 방식을 기반으로 합니다. 나는 그것을 어떤 곳에서 사용하고 더 골프 같은 버전을 만들었습니다.


"array"에서 Arrays.asList ()를 사용할 때 foreach를 람다로 가져 가서 수집기로 끝내는 것이 더 좋지 않을까요?
Serverfrog

1

자바 스크립트, 17 바이트

a=>eval(`[${a}]`)

마지막으로 JavaScript의 유형 변환을 잘 활용할 수 있습니다! 이것은 실제로 배열을 출력하지만 문자열 변환 (HTML로 입력)하면 쉼표로 구분 된 목록이됩니다.

쉼표로 구분 된 목록이 허용 가능한 출력이면 다음이 유효합니다.

7 바이트

a=>""+a

참고 : 스 니펫은 어떤 이유로 손상되었습니다

var subject = 
  a=>eval(`[${a}]`)
<input oninput="try {output.innerHTML = subject(this.value)} catch(e) {output.innerHTML='Invaild Input'}" />
<div id="output"></div>


3
입력 콘솔에서 실행할 때 작동하지 않는 것 ["["]내가 실행 시도 ... (a=>eval([$ {A}] ))(["["])와있어SyntaxError
jrich

@jrich. 문자를 입력 할 때이 오류가 발생합니다. 유효한 배열 을 복사하여 붙여 넣으면 예상대로 작동합니다. 그건 그렇고, 좋은 답변 SpeedNinja, 나는 클릭으로 oninput이벤트 만 변경 할 것 button입니다.
워싱턴 Guedes

쉼표가있는 문자열에는 작동하지 않습니다.
Jo King


1

첨부 , 14 바이트

{Reap[Sow@>_]}

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

다행히도 Attache에는 "벡터화"연산자가 있으며 목록의 원자에 함수를 적용합니다. 이 경우, 할 수있는 모든 우리의 필요와 죽음의 사신 설정하는 것입니다 ReapSow입력의 모든 원자 _와를 @>. 꽤 우아하다고 생각합니다.

대안

15 바이트 : Fixpoint{`'^^_}

16 바이트 : Fixpoint!&Concat

17 바이트 : {q:=[]q&Push@>_q}

17 바이트 : Fixpoint[&Concat]


1

엘릭서 , 74 바이트

def d(l)do l|>Stream.flat_map(fn x->if is_list(x)do d(x)else[x]end end)end

첫 번째 엘릭서 답변이므로 골프를 칠 수 있습니다.

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

설명:

def d(l)do l|>            # Recursive method taking a list as input:
  Stream.flat_map(fn x->  #  Map over each item `x` of the input-list:
    if is_list(x)do       #   If `x` is a list itself:
      d(x)                #    Do a recursive call with `x`
    else                  #   Else:
      [x]                 #    Simply leave `x` unchanged
    end                   #   End of the if-else statements
  end)                    #  End of the map
end                       # End of the recursive method

물론 내장이 허용 된 경우에는 25 바이트 가 될 수 있습니다 .

fn(l)->List.flatten(l)end

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



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.