배열 풀기


34

이 도전은 Mathematica.SE에 대한 질문에서 영감을 얻었습니다 .

임의의 구조로 구성된 중첩 목록 / 배열이 있다고 가정합니다 (각 레벨의 목록의 길이가 반드시 같을 필요는 없음). 간단히하기 위해 노드가 음이 아닌 정수이거나 빈 배열이라고 가정합니다. 예로서

[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]

때때로 노드를 조작하기 위해 목록을 평평하게하는 것이 더 편리합니다.

--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]

그러나 결국 원래 구조를 유지하고 싶기 때문에 이것을 다시

--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]

당신의 임무는 그 마지막 단계를 수행하는 것입니다.

원하는 결과의 구조를 나타내는 임의의 음이 아닌 정수의 중첩 목록과 원하는 값을 나타내는 음이 아닌 정수의 일반 목록이 제공되면 플랫 목록을 구조화 된 목록의 형태로 재구성하십시오. 두 목록 모두 같은 수의 정수를 포함한다고 가정 할 수 있습니다.

평소와 같이 유효하지 않은 입력을 처리 할 필요가 없습니다 (예 : 두 번째 목록은 평평하지 않고 입력이 구문 적으로 변형되거나 노드로 정수를 갖지 않는 등) 코드에서 입력 배열을 수정할 수 있습니다.

STDIN, 명령 행 인수 또는 함수 인수를 통해 입력을 받아 함수 나 프로그램을 작성할 수 있으며 결과를 리턴하거나 STDOUT에 인쇄 할 수 있습니다. 편리한 목록 또는 문자열 형식을 사용하여 입력 및 출력을 표시 할 수 있습니다 (형식이 모호하지 않고 입력이 사전 처리되지 않는 한). 또한 두 입력의 형식이 일관되어야합니다 (예를 들어 하나의 입력을 문자열로, 다른 입력을 목록으로 사용할 수 없음). 입력 목록을 두 가지 순서로 가져갈 수 있지만 답에 정확한 입력 방법을 지정하십시오.

한 가지 더 제한 : 정규식을 사용해서는 안됩니다. 이것은 문자열 조작 문제가 아니라 배열 조작 문제입니다.

이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.

테스트 사례

Structure                             Values                 Result
[[[1,3],2],[1,4],12,[[0,0],[5,[7]]]]  [1,1,0,1,0,0,0,0,1,1]  [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[[[0,0],0],[0,0],0,[[0,0],[0,[0]]]]   [1,1,0,1,0,0,0,0,1,1]  [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[]                                    []                     []
[[]]                                  []                     [[]]
[0,1,2,3]                             [5,1,0,5]              [5,1,0,5]
[[[[[0]]]]]                           [123]                  [[[[[123]]]]]
[0,[1,[]],[[]],[2,3],[]]              [1,6,1,8]              [1,[6,[]],[[]],[1,8],[]]

Structure 배열의 값이 변경되면 허용됩니까?
ProgramFOX 2019 년

@ProgramFOX 예. "코드에서 입력 배열을 수정할 수 있습니다."
마틴 엔더

아이러니하게도, 여기에 제출 된 것 중 하나는 Mathematica에 있습니다.
Isiah Meadows

1
@impinball 그것은 다른 사람이 연결된 질문에서 답변을 훔치는 것을 막기 위해 질문과 함께 게시 한 내 것입니다 (사실, 그것은 단순히 그 대답의 골프 다운 버전 일뿐입니다).
마틴 엔더

@ MartinBüttner 오. 좋은. 실제로 더 짧은 대답 중 하나입니다.
Isiah Meadows

답변:


9

CJam, 18 16 13 바이트

lA,sNerN%l~]z

STDIN을 통해 이전 CJam 답변과 동일한 형식으로 입력합니다.

[0 [11 []] [[]] [2 3] []]
[1 6 1 8] 

결과 문자열을 STDOUT에 출력합니다.

[1 [6 []] [[]] [1 8] []]

첫 번째 줄을 문자열로 취급하고 모든 숫자 문자를 줄 바꿈으로 변환하고 하나 이상의 줄 바꿈 발생으로 분할하고 두 번째 줄을 스택의 배열로 배치하고 배열을 래핑하고 두 배열 (행)을 함께 묶습니다. 인쇄는 자동이며 첫 번째 행은 문자열로 처리되므로 대괄호가 유지됩니다.

코드 확장

lA,sNerN%l~]z
l                     "Read the first line of input. This is the nested array";
 A,s                  "Get array [0,1,2...9] and  convert it to string '012..9'";
    Ner               "Replace all occurrences of 0,1,2,..9 with new line";
       N%             "Split on one or more occurrences of new line";
         l~           "Read the second line as an array";
           ]          "Wrap both the splitted string and the second line array";
                      "in an array";
            z         "Transpose the array, there by placing the numbers from second";
                      "input array in the split holes of first input string";

3 바이트를 저장 한 @ user23013에게 감사합니다.

여기에서 온라인으로 사용해보십시오


OP에서 "이것은 문자열 조작 문제가 아니라 배열 조작 문제입니다."
atk

@atk : OP는 정규 표현식 만 명시 적으로 허용하지 않기 때문에 논쟁의 여지가 있습니다.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 2012 년

1
의 약자 /La-: %.
jimmy23013

@ user23013 와우, %그것은 그것이 분할을위한 것이라는 것을 결코 신경 쓰지 않았으며 , 여러 번의 발생으로도 분할되었습니다!
Optimizer

@atk 네, 정규 표현식 만 금지 되었으므로이 기술을 사용했습니다.
Optimizer

25

자바 스크립트, ES6, 44 바이트

f=(a,b,i=0)=>a.map(x=>x.map?f(x,b,i):b[i++])

이것은 다음 f과 같이 호출 할 수 있는 함수 를 만듭니다

f([0,[1,[]],[[]],[2,3],[]],[1,6,1,8])

즉, 중첩 배열과 값 배열을 입력 인수로 사용합니다. 함수의 출력은 변환 된 중첩 배열입니다.

이 질문은 재귀에 대한 매우 좋은 질문이므로 답이 깔끔하고 달콤한 재귀 함수입니다. 메서드를 f사용하여 첫 번째 인수를 변환 하는 함수 를 만듭니다 map. 각 요소에 대해 요소가 배열 인 경우 f다시 호출 하고, 그렇지 않으면 정수에 대해 i 번째 항목을 가져 와서 값을 증분하여 반환합니다 i. i순서를 올바르게 유지하기 위해 각 재귀 호출에서 값 이 전달됩니다.

배열 대 정수 감지는이 map방법을 사용하여 다시 수행됩니다 . 배열 변수의 map경우 유효한 함수이며 정수 변수의 map경우 변수에 대해 정의 된 속성이나 함수가 없습니다 .

이것은 ES6로 인해 최신 Firefox 브라우저에서 작동합니다.


3
나는 "+1"과 "thank"와 같은 주석을 피해야한다는 것을 알고 있지만, 이것은 단 하나의 달콤한 ES6 기능입니다! 이 코드 라인을 몇 시간 동안 볼 수 있습니다 :)
Jacob

.map코드에 2가 존재 한다는 것을 알았습니다 . 더 단축 할 수있는 방법이 있습니까? 어쨌든, 좋은 코드!
Derek 朕 會 功夫

우와, ES는 언제 람다 구문을 추가 했습니까?
솜털

ES6의 @fluffy;)
Optimizer

@Derek 朕 會 功夫 불행히도 아니. map는 컨텍스트에 연결되어 있으므로 첫 번째 맵은 속하는 a반면 다음 맵 x은 반복에서 각 맵에 속합니다 . map배열을 정수와 구별 하는 다른 짧은 방법은 없습니다
Optimizer

18

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

나는 Optimizer의 답변 에 정말 감동 했습니다. 매우 똑똑하게 수행되었으며 많은 것을 배웠습니다. 그러나 그것을 살펴보면 약간 단축하고 작은 버그를 수정하는 방법을 찾았습니다.

f=(a,b)=>a.map(x=>x.map?f(x,b):b.shift())

i변수를 꺼내서 로 대체했습니다 shift(). 이로 인해 약간 짧아지고 i참조가 아닌 값으로 전달되는 사실로 인해 문제가 해결됩니다. 마법사는 최종 배열의 일부 숫자가 반복되고 일부는 사용되지 않습니다. 다시 한 번, Optimizer의 답변은 생각보다 좋았습니다. 제가 할 수 있었던 것보다 낫습니다. 조금 수정했습니다.


2
좋은 골프! 내가 그것을 잡지 못했던 약간 슬프다 : P
Optimizer

16

Dyalog APL, 14 자

이것은 쉬운 일이 아닙니다 : (∊a)←b.

일반적으로 납작 ∊a함을 의미 a하지만 과제의 왼쪽에서 발생하면이 문제가 요구하는 것을 정확하게 수행합니다. 함수 인의 요구 사항을 준수하기 위해서는 몇 가지 여분의 구불 거리는 곡선이 필요 : {a←⍺⋄(∊a)←⍵⋄a}(람다에 대한 중괄호, 그리고 왼쪽과 오른쪽 인수, 문 분리에 대한).

tryapl.org에서 테스트 하십시오. APL에서 빈 숫자 벡터는 ( "zilde") 로 표시됩니다 . 요소가 하나 인 벡터는 스칼라를 의미 (,A)하기 때문에 구성됩니다 (A). 출력에서이 것은 :

┌⊖┐
│0│
└~┘

빈 숫자 형 벡터를 나타냅니다. 0중앙 배열의 요소하지 않다 "원형 요소"를 나타낸다.


1
그 그래픽 표현은 구분하지 않습니다 (,1)(1)또는 왜 마지막 비트는로 표현 [1|1]대신 [1|[1]]?
Martin Ender

tryapl이 사용하는 그래픽 표현 (이라고도 함 ]box on)은 이들을 구별하지 않습니다. Dyalog ( displayfrom dfns.dws)에는 구별을 만드는 또 다른 기능이 있지만 불행히도 추가 작업 공간 (예 : 라이브러리)의로드를 제한합니다. :(
ngn

1
대괄호 형식의 결과를 보려면 다음을 시도하십시오 ∊{0=⍴⍴⍵:⍕⍵ ⋄ '['(∇¨⍵)']'}a.. 또는이 : ∊{0=⍴⍴⍵:⍕⍵ ⋄ '['(1↓,'|',[1.5]∇¨⍵)']'}a분리자를 고집하는 경우 |.
ngn

아, ]display atryapl 에서도 사용할 수 있습니다 . 구조에 대한 완전한 정보를 제공합니다. 죄송합니다. 처음에는 이것을 몰랐습니다.
ngn

페어 포인트. 나는 그것을 2 바이트의 추가 비용으로 함수로 바꾸었다.
ngn

10

파이썬, 51

f=lambda a,b:[b.pop(0)if x<[]else f(x,b)for x in a]

예:

>>> f([0,[1,[]],[[]],[2,3],[]], [1,6,1,8])
[1, [6, []], [[]], [1, 8], []]

10

파이썬 2, 50

f=lambda s,v:v.pop(0)if s<[]else[f(x,v)for x in s]

이것은 매우 아름다운 문제였습니다. 계속 작업하면서 코드의 일부가 불필요하다는 것을 깨달았으며 논리가 간단한 표현으로 축소되었습니다. 대부분의 골프는 올바른 알고리즘을 찾는 데있었습니다.

s구조이며 v목록의 단순 목록입니다. 아이디어는 (Python 2는 숫자를 목록보다 작은 것으로 취급 합니다 s)의 정수 인지 확인하는 s<[]것입니다. 이 경우, 단순히 걸릴의 첫 번째 요소를 반환 v에서 제거합니다 v. 그렇지 않으면의 하위 목록으로 내려갑니다 s.

이것은 pop 매우 기능적인 스타일의 코드에서 필수적인 마법입니다. 모든 v요소가 동일한 인스턴스를 가리 키 므로 요소를 하나에서 팝 v하면 전체 실행 트리 에서 요소가 제거 되므로 각 숫자 v는 한 번만 사용됩니다. 목록 이해 [f(x,v)for x in s]는 깊이 우선 및 왼쪽에서 오른쪽으로 확장 된 콜 트리를 생성하여 요소가 v올바른 순서로 슬롯 화되도록합니다.

나는 grc의 답변 과 독립적으로 이것을 썼지 만 단일 [(및 변수 이름) 을 움직이는 것과 똑같이 밝혀졌습니다 . 이 간격으로 인해 문자가 저장됩니다. 괄호 이동은 고려하지 않은 목록 이해의 일부가 아니라 함수에서 즉시 노드 사례를 처리하는 것을 의미합니다.

입력 요구 사항을 확장하여 STDIN 및 구조에서 함수 인수로 값을 가져 오면 문자를 49로 절약 할 수 있습니다 . 이를 통해 사용할 수 있습니다 map.

v=input()
g=lambda s:v.pop(0)if s<[]else map(g,s)

9

루비, 39

f=->a,b{a.map{|d|f[d,b]}rescue b.shift}

목록의 요소가 정수가 될 때까지 반복됩니다.
Integer.map을 호출하면 예외가 발생
하므로 구조 부분으로 이동하여 두 번째 목록에서 첫 번째 요소를 "pops / shift"합니다.

정규식 soln ... 약간 길게 :

f=->a,b{eval a.to_s.split(/\d+/).zip(b)*''}

몇 가지 테스트 사례로 사용해보십시오


참고로, 정규식 솔루션은 허용되지 않습니다. ;)
Martin Ender 2014

5

CJam, 43 37 35 33 바이트

이것은 내 JS 답변을 직접 변환 한 입니다. 약간 길며, 대부분 유형 감지에 의해 사용됩니다.

q~:B;{{_`La`&{F}{;BW):W=}?}%}:F~`

STDIN의 두 줄에 두 개의 입력 배열을 취합니다.

[[[1 3] 2] [1 4] 12 [] [[0 0] [5 [7]]]]
[1 1 0 1 0 0 0 0 1 1]

다음과 같이 STDOUT으로 출력합니다.

[[[1 1] 0] [1 0] 0 "" [[0 0] [1 [1]]]]

여기에서 온라인으로 사용해보십시오


5

Haskell, 113104 바이트 (데이터 유형 선언의 86 + 18)

data N=I Int|L[N]
L[]!v=(L[],v)
L(a:b)!v|(c,w)<-a!v,(L d,u)<-L b!w=(L$c:d,u)
_!(n:m)=(I n,m)
s#v=fst$s!v

Haskell에는 내장 배열 데이터 유형이 없으므로 내 자신의 롤을 사용해야했습니다. 이러한 이유로 프로그램에는 패턴 일치 및 명시 적 구조 재귀 만 포함됩니다. 마지막 테스트 사례는

L[I 0,L[I 1,L[]],L[L[]],L[I 2,I 3],L[]]#[1,6,1,8]

평가

L[I 1,L[I 6,L[]],L[L[]],L[I 1,I 8],L[]]

4

수학, 41 바이트

Function[,m[[i++]],Listable][i=1;m=#2;#]&

이것은 이름없는 함수로 구조를 첫 번째 인수로, 값 목록을 두 번째 인수로 사용하고 목록을 반환합니다.

이것은 이 도전에 영감을 준 질문에 대한 대답 의 골프 버전입니다 . 나는 이것을 직접 게시하고 있으며이 답변을 받아들이지 않을 것입니다 (실제로 가장 짧게 유지해야하므로 의심 스럽습니다). 이것은 기본적으로 답변을 복사하여 다른 사람이 도전에서 이기지 못하도록하기위한 것입니다.

작동 방식 :

  • 우리는 Listable순수한 기능을 정의 합니다. 리스트 가능한 함수는리스트 자체 대신리스트 인수의 요소에 자동으로 적용되므로 f구조화 된리스트를 호출 하면 기본적으로 각 정수가 i로 대체 된 동일한 구조의리스트가 리턴 됩니다 f[i].
  • 우리는 값 목록을 전역에 저장하고 m카운터를에 저장 i합니다.
  • f인수에 관계없이 호출 할 때마다 의 다음 요소를 반환합니다 m.

4

리볼 -87 66 60

f: func[a[block!]b][map-each n a[any[attempt[f n b]take b]]]

언 골프 드 :

f: func [a [block!] b] [
    map-each n a [
        any [
            attempt [f n b]  
            take b
        ]
    ]
]

예:

>> f [0 [1 []] [[]] [2 3] []]   [1 6 1 8]           
== [1 [6 []] [[]] [1 8] []]

4

C #, 225 + 13 = 239185 + 35 = 220172 + 35 = 207 바이트

이것을 요구합니다 :

using System;using o=System.Object;

object[]s를 인수로 허용합니다 .

o[]u(o[]a,o[]b){var c=a;int i=0;Action<o[],o[]>d=null;d=(e, f)=>{for(int j=0;j<e.Length;j++){if(e[j]is int){f[j]=b[i];i++;}else{d((o[])e[j],(o[])f[j]);}}};d(a,c);return c;}

Ungolfed 코드 :

object[] Unflatten(object[] structure, object[] values)
{
    var c = structure;
    int i = 0;
    Action<object[], object[]> recursiveFunc = null;
    recursiveFunc = (e, f) =>
    {
        for (int j = 0; j < e.Length; j++)
        {
            if (e[j] is int)
            {
                f[j] = values[i]; i++;
            }
            else
            {
                recursiveFunc((object[])e[j], (object[])f[j]);
            }
        }
    };
    recursiveFunc(structure, c);
    return c;
}

2
using o=System.Object모든 인스턴스 object를 간단히 사용 하고 교체 하여 조금 더 단축 할 수 있습니다 o. msdn.microsoft.com/ko-kr/library/sf0df423.aspx
Kroltan

1
@ Kroltan 좋은 팁, 감사합니다!
ProgramFOX

Clone얕다. 입력 수정이 허용되는 경우 전혀 복제 할 필요가 없습니다. 허용되지 않으면 적절한 복제가 필요합니다.
코드 InChaos

@CodesInChaos 내가 봅니다. 입력 배열 수정이 허용되었으므로 복제본을 제거했습니다. 감사!
ProgramFOX

3

파이썬 2, 64 바이트

def g(N,L):f=lambda N:L.pop(0)if`N`<":"else map(f,N);return f(N)

목록에서 목록을 좋아한다고 들었으므로 함수에 함수를 넣었습니다.

편집 : grc의 대답을 보면 완전히 불필요하다는 것을 알았습니다. 오 잘 ...


3

SWI- 프롤로그 82

f([],A,[],A):-!.
f([H|T],A,[J|U],B):-(is_list(H),!,f(H,A,J,C);A=[J|C]),f(T,C,U,B).

샘플 실행 :

?- f([[[1,3],2],[1,4],12,[[0,[],0],[5,[7]]]],[1,1,0,1,0,0,0,0,1,1],R,[]).
R = [[[1,1],0],[1,0],0,[[0,[],0],[1,[1]]]].

[]쿼리 의 마지막 부분 은 일치하지 않는 수의 요소를 확인하는 것입니다.이 질문에는 필요하지 않은 것 같습니다.


삭감 (및 연장에 의해 고가 is_list)이 필요한 이유는 무엇입니까 ?
관련없는 문자열

1
@UnrelatedString : 정답을 얻는 데 불필요하다면 답을 직접 편집하십시오. 내 프롤로그는 당시에 나빴고 (라이브러리를 사용하고 광범위하게 자릅니다) 요즘 더 녹슬 었습니다.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

2

얼랑, 116 93 바이트

f(R,F)->put(n,F),[g(X)||X<-R].
g([H|T])->[g(H)|g(T)];g([])->[];g(E)->[H|T]=get(n),put(n,T),H.

이 개 불순한 기능을 사용 f하고 g. 플랫 목록 f으로 설정하여 프로세스 사전을 조작하고 n중첩 목록의 각 요소를에 맵핑합니다 g(X). g그런 다음 n리스트가 아닌 값을 발견 할 때마다 플랫리스트의 꼬리 로 설정 하고 플랫리스트의 헤드를 리턴합니다.


1

펄 5, 49 바이트

첫 번째 인수는 템플릿 구조이고 두 번째 인수는 값입니다.

sub u{($t,$l)=@_;ref$t?[map{u$_,$l}@$t]:shift@$l}

테스트 프로그램

use Test::More;
use Test::Deep;

sub u{($t,$l)=@_;ref$t?[map{u$_,$l}@$t]:shift@$l}

cmp_deeply u([[[1,3],2],[1,4],12,[[0,0],[5,[7]]]],[1,1,0,1,0,0,0,0,1,1]),[[[1,1],0],[1,0],0,[[0,0],[1,[1]]]];
cmp_deeply u([[[0,0],0],[0,0],0,[[0,0],[0,[0]]]],[1,1,0,1,0,0,0,0,1,1]),[[[1,1],0],[1,0],0,[[0,0],[1,[1]]]];
cmp_deeply u([], []), [];
cmp_deeply u([[]], []), [[]];
cmp_deeply u([0,1,2,3], [5,1,0,5]), [5,1,0,5];
cmp_deeply u([[[[[0]]]]], [123]), [[[[[123]]]]];
cmp_deeply u([0,[1,[]],[[]],[2,3],[]], [1,6,1,8]), [1,[6,[]],[[]],[1,8],[]];
done_testing;

1

파워 쉘 : 115

입력 배열은 $ i, 매핑은 $ m, 출력은 $ o

$h={if($_.GetType().IsArray){if($_.c -eq 0){,@()}else{,@($_|%{.$h})}}else{$m[$c++]}};$i|%{$o=@();$c=0}{$o+=,(.$h)}

$ h는 재귀 함수를 포함하는 문자열이며. $ h를 사용하여 문자열에 포함 된 코드를 실행할 수 있습니다. 그리고 powershell이 ​​단일 값 배열을 스칼라로 평면화 할 것을 주장하지 않으면 30 바이트가 더 짧아집니다. 단일 null 값을 null로

결과를 확인하기위한 편리한 배열 구조 뷰어

$j={if($_.GetType().IsArray){write-host '(' -n;($_|%{.$j});write-host ')' -n}else{write-host "$_" -n}};write-host '(' -n;$o|%{(.$j)}; write-host ')' -n;

편집 : 149

unflatten.ps1로 저장 :

$m=[array]$args[1];$h={if($_.GetType().IsArray){if($_.c -eq 0){,@()}else{,@($_|%{.$h})}}else{$m[$c++]}};$args[0]|%{$o=@();$c=0}{$o+=,(.$h)};echo $o;

편집 : 136, 인라인 출력 배열 생성 및 쓰기 출력

$m=[array]$args[1];$h={if($_.GetType().IsArray){if($_.c -eq 0){,@()}else{,@($_|%{.$h})}}else{$m[$c++]}};echo(,@($args[0]|%{$c=0}{.$h}))

. \ unflatten.ps1로 호출 [입력 배열] [매핑 배열]

출력은 파이프 라인에 기록되므로 먼저 다음을 실행하십시오.

Function View-Array{
Param([Parameter(ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)]
      [array]$o)

    PROCESS{
    $j={if($_.GetType().IsArray){write-host '(' -n;($_|%{.$j});write-host ')' -n}else{write-host "$_" -n}};
    write-host '(' -n;$o|%{(.$j)}; write-host ')' -n;
    }
}

와 함께 실행

.\unflatten.ps1 [input array] [mapping array] | View-Array

1

C #, (40 + 123) = 163 바이트 또는 (67 + 81) = 148 바이트

C #은 정적 입력과 긴 네임 스페이스로 어려움을 겪고 있습니다.

배열 방법

문장 사용하기 :

using o=System.Object;using System.Linq;

암호:

o[] u(o[] x,o[] y){int i=0;Func<o[],o[],o[]> f=null;f=(a,b)=>a.Select(e=>e is int?b[i++]:f((o[])e,b)).ToArray();return f(x,y);}

스택 방법 (배열 대신 스택 구조 사용)

문장 사용하기 :

using s=System.Collections.Generic.Stack<object>;using System.Linq;

암호:

System.Func<s,s,s>f=null;f=(a,b)=>new s(a.Select(e=>e is int?b.Pop():f((s)e,b)));

첫 번째 시도, 먼저 코드 골프입니다.

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