토끼처럼 건너 뛰세요!

Erik the Outgolfer 08/26/2017. 30 answers, 2.887 views
code-golf array-manipulation

합리적인 형식의 음수가 아닌 정수의 목록이 주어지면 반복하는 모든 정수만큼 많은 요소를 건너 뛰고 반복합니다.


다음은 작업 된 예제입니다.

[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
 ^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
    ^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
          ^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
                   ^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done 

또 다른 실제 예제, 모든 동등 델타 :

[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
 ^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
                ^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
                            ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
                                        ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done 

범위를 벗어나는 예 :

[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
    ^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
             ^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds) 

규칙

  • 이 중 지루한 속임수를 쓰지 마라. 그들은 지루하고 재미 없다.
  • 최종 결과 만 반환하거나 인쇄해야합니다. STDERR 출력은 무시됩니다.
  • 입력을 모든 기본 문자열 (예 : 첫 번째 경우는 "0102513162")로 사용할 수 없습니다.
  • 입력에는 왼쪽에서 오른쪽 순서를 사용해야합니다.
  • 실행 된 예제에서와 같이 범위를 벗어나면 실행이 종료되는 것처럼 종료됩니다.
  • 0 요소를 건너 뛰려면 0 을 사용해야합니다.
  • 빈리스트 ( [] )가 입력되면 [] 반환해야합니다.

테스트 케이스

[]                                                     => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]                     => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]                   => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2]                         => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2]                                  => [0, 2, 4] 

이것은 이므로 최단 답변이 승리합니다!

5 Comments
Erik the Outgolfer 07/28/2017
샌드 박스 (2k + 사용자 만 해당)
3 Shaggy 07/28/2017
그래, 방금 발견 했어. / 안경을 낀다.
2 Rod 07/28/2017
아마 레프 러콘 ¯ \ _ (ツ) _ / ¯
1 Roman Gräf 07/28/2017
내 배열에 0이 오는 것이 괜찮습니까? 나를 ~ 18 바이트 저장할 것입니다.
1 Erik the Outgolfer 07/28/2017
@ RomanGräf 미안하지만 아니, 너무 애매한 경우가 있기 때문에 당신은 출력에 0 을 후행해야합니다.

30 Answers


Rod 07/28/2017.

파이썬 2 , 36 바이트

 f=lambda x:x and x[:1]+f(x[x[0]+1:]) 

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

4 comments
Mr. Xcoder 07/28/2017
나는 outgolfed하게 될 것을 기대하고 있었다. 그러나 그렇게 나쁘게 :)
Erik the Outgolfer 07/28/2017
x[:1] 대신 x[0] 을 할 수 없습니까?
Rod 07/28/2017
@EriktheOutgolfer 예, 그렇지만 목록이어야하므로 [x[0]]
Erik the Outgolfer 07/28/2017
@Rod 당신은 x[:1] 어쨌든 ... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2 , 49 46 * 41 바이트

외출 4는 여전히 정규 4입니다 (

* -3 thanks to @ASCII-only 입니다.

 l=input()
while l:print l[0];l=l[l[0]+1:] 

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

개행으로 구분 된 결과를 채팅에서 허용 된 OP로 인쇄합니다. 나는 이것이 non-recursive full programnon-recursive full program 으로 더 짧아 질 수 있다고 생각하지 않는다.


이게 어떻게 작동합니까?

  • l=input() - 표준 입력에서 목록을 읽습니다.

  • while l: - 빈 목록이 파이썬에서 거짓이라는 사실을 명심하십시오. 목록이 비어있을 때까지 반복합니다.

  • print l[0]; - 목록의 첫 번째 요소를 인쇄합니다.

  • l=l[l[0]+1:] - "토끼처럼 건너 뜀"- 목록에서 처음 l[0]+1 을 잘라냅니다.

예를 들어 보겠습니다.

목록에 [5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] 을 입력하면 코드는 다음을 수행합니다 (위의 설명에 따라) - 배열 : 5 , 처음 6을 자른다 : [2, 1, 2, 1, 0, 0] . 그런 다음 2 를 인쇄하고 처음 3 2 를 자릅니다 : [1,0,0] . 마찬가지로 1 을 출력하고 처음 2 자릿수를 잘라내어 [0] 얻습니다. 물론 0 이 출력되고 프로그램이 종료됩니다.

1 comments

w0lf 07/28/2017.

하스켈, 29 27 26 바이트

 j(x:y)=x:j(drop x y)
j x=x 

Zgarb 덕분에 1 바이트를 절약했습니다.

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

2 comments
Zgarb 07/28/2017
두 번째 줄의 f x=x 는 바이트를 저장합니다.
w0lf 07/28/2017
@ Zgarb 쿨, 고마워!

Adnan 07/28/2017.

05AB1E , 10 9 바이트

[¬Dg>#=ƒ¦ 

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

1 comments
Magic Octopus Urn 07/28/2017
그래, 그게 내가 생각했던 것보다 나아 졌어.

Martin Ender 07/28/2017.

Mathematica, 46 44 바이트

SequenceCases[#,NO 

대안 :

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
와 대단해!

Johan Karlsson 07/28/2017.

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

a=>a.map((n,i)=>a.splice(i+1,n))&&a 

 let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] 

구형 솔루션 39 바이트

a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r 

-3 bytes thanks to @ThePirateBay

1 comments
ThePirateBay 07/28/2017
39 바이트 a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r

TheLethalCoder 07/28/2017.

C #, 68 바이트

 a=>{for(int i=0;i 

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

전체 / 서식있는 버전 :

 namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} 

목록을 반환하는 데는 107 바이트가 더 걸립니다.

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
왜 누군가가 이것을 downvoted 했습니까?
Thomas Ayoub 07/31/2017
점수를 매기고 완벽한 5k를 만드시겠습니까?
TheLethalCoder 07/31/2017
@ThomasAyoub 우리는 OCD가있는 사람이라고 가정 할 수 있습니다.

Zgarb 07/28/2017.

껍질 , 8 6 바이트

←TU¡Γ↓ 

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

레오 덕분에 -2 바이트 (완전히 새로운 솔루션 아이디어)!

설명

목록 패턴 일치 함수 Γ 사용하고 있습니다. 함수 f 와 머리 x 와 꼬리 xs 있는 목록을 취해 fxxs 적용합니다. 목록이 비어 있으면 Γ 는 유형과 일치하는 기본값 (이 경우 빈 목록)을 반환합니다. 우리는 fx 하는 x 요소를 떨어 뜨리는 가져갑니다. 그런 다음이 함수를 반복하여 결과 요소를 목록에 수집합니다.

←TU¡Γ↓  Implicit input, e.g. [0,2,0,2,4,1,2]
    Γ↓  Pattern match using drop
   ¡    iterated infinitely: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[],[],[],...
  U     Cut at first repeated value: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[]]
 T      Transpose: [[0,2,4],[2,0,1],[0,2,2],[2,4],[4,1],[1,2],[2]]
←       First element: [0,2,4] 
5 comments
Leo 07/28/2017
ø의 기본값을 버리면 모든 것이 여전히 마법처럼 작동합니다 :)
Leo 07/28/2017
또는 더 적은 바이트의 경우, tio.run/##yygtzv7//1HbhJDQQwvPTX7UNvn////RBjpGOiBsomOoYxQLAA
Zgarb 07/28/2017
@ 레오 와우, 영리 하네!
Erik the Outgolfer 07/28/2017
왜 이걸 CW 했지?
Zgarb 07/28/2017
@ErikTheOutgolfer 그건 실수 였어. (나는 내 ​​전화기에있어 우연히 뭔가를 밀었다.) 나는 그것을 원상태로 돌리고있다.

Ruud 07/28/2017.

파이썬 2 , 59 55 바이트

 l=input()
i=0
while l[i:]:i+=1;l[i:i+l[i-1]]=[]
print l 

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

2 comments
1 Rod 07/28/2017
del l[i:i+l[i-1]] 대신 del l[i:i+l[i-1]] l[i:i+l[i-1]]=[] del l[i:i+l[i-1]] 을 사용하여 바이트를 저장할 수 있습니다

Dave 07/28/2017.

Pyth, 22 바이트

VQ aY.(Q0VeY .x.(Q0 ;Y 

쓸데없는 바이트 삭제

4 comments
Erik the Outgolfer 07/28/2017
거기에 23 바이트가 표시됩니다.
Dave 07/28/2017
오타 :) 죄송합니다 ...
3 Wheat Wizard 07/28/2017
왜 투표를하지 않았는지 모르겠습니다. 답변을 수정하면 "자동 투표"가 시작될 가능성이 있습니다. 자동 downvote에 대한 이유는 혼란스럽고 끔찍하지만 시스템이 당신의 답을 휴리스틱에 기초한 "낮은 품질"로 간주 할 때 발생합니다. 누군가가 당신의 대답을 좋아하지 않았을 수도 있지만, 그 순간에는 아무런 문제가 보이지 않아서 왜 그렇게 될지 확신 할 수 없습니다.
isaacg 07/31/2017
당신이 Pyth를 사용하고있어 기쁘다!

Rod 07/28/2017.

Python 2 , 60 42 바이트

Luis Mendo 덕분에 -18 바이트

 x=input()
i=0
while 1:print x[i];i+=1+x[i] 

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


Martin Ender 07/28/2017.

망막 , 36 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

.+
$*
((1)*¶)(?<-2>1*¶)*
$1
%M`.
0$ 

입력 및 출력은 라인 피드로 구분되며 뒤 따르는 줄 바꿈으로 구분됩니다.

온라인으로 사용해보십시오! (편리한 테스트 스위트를 허용하기 위해 줄 바꿈 대신 쉼표를 사용합니다.)


Riley 07/28/2017.

브레인 플랙 (Brain-Flak) , 64 바이트

([]){{}(({})<>)<>{({}[()]<{}>)}{}([])}{}<>([]){{}({}<>)<>([])}<> 

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

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
이런 세상에! 솔루션을 작성한 다음 게시하기 위해 아래로 스크롤했지만 바이트 단위로 똑같은 솔루션을 작성했습니다. ({}[()]<{}>) vs ({}<{}>[()]) 와 같은 사소한 세부 사항도 동일했습니다! 이런 우연이!
2EZ 4RTZ 07/28/2017
@DJMcMayhem은 모든 명성 XD를 훔칩니다.

user202729 07/28/2017.

Mathematica, 64 50 바이트

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
나는이 깔끔한 코드를 더 이상 골프를 치는 것에 저항 할 수 없었다. 내 대답은 아래에있다.

jkelm 07/28/2017.

C # (.NET 코어) , 68 바이트

 n=>{var t="";for(int i=0;i 

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

입력을 정수 배열로 취하고 비 건너 뛴 값을 포함하는 문자열을 반환합니다.

3 comments
TheLethalCoder 07/28/2017
인쇄 할 때와 똑같은 방식으로 인쇄합니다.
jkelm 07/28/2017
나는 간단한 해결책을 좋아한다. 그래도 LINQ를 배워야 겠어, 내가 그렇게 많은 C # lambdas를 단축하는 것을 보았다. ..
TheLethalCoder 07/28/2017
대부분의 시간을 암시 적으로 반환 할 수 있기 때문에 시간이 단축됩니다. 그것은 using System.Linq;using System.Linq; 암시 적 반환 사이에 토스입니다 using System.Linq; 및 정상적인 루프.

Jarko Dubbeldam 07/28/2017.

R, 58 바이트

f=function(x,p=1)NO 

재귀 함수. 벡터 x 를 인수로 취해 포인터 p 합니다. 이렇게하면 x 의 해당 항목이 인쇄되고 p+x[p] 가 경계를 벗어나는 지 확인하고 그렇지 않으면 새 포인터의 함수를 호출합니다.

f=function(x,p=1,s=x[1])`if`((z<-x[p]+p+1)>sum(x|1),s,f(x,z,c(s,x[z]))) 

이것은 숫자를 인쇄하는 대신 적절한 벡터를 반환하는 유사한 솔루션입니다.

3 comments
Giuseppe 07/28/2017
numeric(0) 의 입력은 어떨까요? 일명 빈 배열.
Jarko Dubbeldam 07/28/2017
@Giuseppe 나는 내 PC 뒤에있을 때 그것을 살펴볼 것이다.
Giuseppe 08/24/2017
57 바이트! 빈 경우도 처리합니다.

Roman Gräf 07/28/2017.

Java (OpenJDK 8) , 53 바이트

@ PunPun1000 및 @ TheLethalCoder 덕분에

 a->{for(int n=0;;n+=1+a[n])System.out.println(a[n]);} 

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

5 comments
TheLethalCoder 07/28/2017
내 C # 응답에서와 같이 결과를 인쇄하면 아무 것도 저장할 수 있습니까?
Roman Gräf 07/28/2017
@ 청각 장애인 시도
TheLethalCoder 07/28/2017
n 을 루프 안으로 이동하여 바이트를 저장할 수 있습니까?
TheLethalCoder 07/28/2017
게다가이 순간에 작동하지 않는 것 같습니다.
PunPun1000 07/28/2017
(a[n+=1+a[n]] 뒤에 괄호가 빠졌습니다. 올바른 값을 출력 한 후에도 함수가 오류를 던지고, 이것이 허용되는지 아닌지에 대한 일치를 알지 못합니다. 표준 오류에 대한 모든 것은 무시됩니다.) 이것이 의도라면, for 루프에서 n 를 제거 할 수 있습니다. 마지막으로 TIO 코드는 괄호로도 실행되지 않습니다. Consumer 를 사용하고 func.accept(test)

Martin Ender 07/28/2017.

앨리스 , 15 바이트

/$.. \h&
\I@nO/ 

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

라인 피드로 구분 된 10 진수 정수 목록을 입력 및 출력하십시오.

설명

/   Switch to Ordinal mode.
I   Read a line.
.   Duplicate it.
n   Logical NOT (gives truthy if we're at EOF).
/   Switch to Cardinal.
    The IP wraps around to the left.
\   Switch to Ordinal.
$@  Terminate the program if we're at EOF.
.   Duplicate the input line again.
O   Print it.
\   Switch to Cardinal.
h   Increment the value.
&   Store the result in the iterator queue.
    The program wraps around to the beginning. 

반복자 큐에 정수 n 을 저장하면 다음 명령이 n 번 실행됩니다. / 는 명령과 같지 않으므로 다음 명령은 I 됩니다. 따라서 값 x 읽고 인쇄하면 다음 반복에서 x+1 값을 읽습니다. 마지막 값은 스택의 맨 위에옵니다. 필요한 숫자 목록 요소를 건너 뜁니다.


Mr.Wizard 07/28/2017.

Mathematica , 37 (30?)

user202729의 훌륭한 골프 방법.

±NO 

규칙은 명시 적으로 출력 형식을 지정하는 것 같지 않으므로 아마도 :

±NO 

두 번째 함수의 출력은 다음과 같습니다. 0.2.4.{} - 특히 {} 은 최종 규칙을 준수하는 빈 집합에 대해 반환됩니다.

2 comments
1 JungHwan Min 07/28/2017
±Drop[NO±NO 수 있습니다. ±NOInfix 보다 우선 순위가 낮기 때문입니다.
Mr.Wizard 07/28/2017
@JungHwanMin 나는 그것을 놓쳤다. 감사!

Jenny_mathy 07/28/2017.

Mathematica, 65 바이트

(s=#;t=1;w={};While[t<=Length@s,AppendTo[w,k=s[[t]]];t=t+k+1];w)& 

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


w0lf 07/28/2017.

Ruby, 36 33 31

f=->l{a,*l=l;a&&f[l.drop(p a)]} 

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

4 comments
sethrin 07/30/2017
f= 을 헤더 요소로 뺄 수 있습니다.
w0lf 07/30/2017
@ 스 트린이라도 재귀 적으로 호출해야합니까?
sethrin 07/30/2017
흠, 좋은 질문입니다. 나는 그렇지 않다고 생각한다. 나는 당신의 솔루션에 대해 그렇게 많이 좋아했습니다.
w0lf 07/30/2017
@ 스 트린 감사! :)

AnonymousReality 07/28/2017.

스위프트, 63 바이트

func a(d:[Int]){var i=0;while i 

이것은 나의 첫 번째 항목입니다. 그래서 규칙에 100 % 확신 할 수는 없지만,이 대답으로 충분합니다. 시스템에 입력을 얻는 방법에 대한 약간의 규칙이 확실하지 않습니다. 입력을 반환 할 수있는 어딘가에 함수를 가정 할 수 있다면 더 짧은 답변을 얻을 수 있습니다.

2 comments
Stephen 07/28/2017
PPCG에 오신 것을 환영합니다! 기본 규칙은 전체 프로그램으로 작동하는 코드를 가질 수 있으므로 STDIN에서 입력 (일반적으로) 및 STDOUT으로 출력 (일반적으로) or 함수이므로 함수 매개 변수 및 출력 (일반적으로)에서 입력 함수 반환.
AnonymousReality 07/28/2017
@StepHen - 감사합니다! 나는 나의 다른 버전을 무효로 만들 것이라고 생각한다. 더 많은 기여를 기대합니다!

Perl 6 , 31 바이트

 {(@_,{.[1+.[0]..*]}...^0)[*;0]} 

그것을 시험해 보라.

퍼지는:

 {  # bare block lambda with implicit parameter 「@_」
  (
    # generate a sequence

    @_,

    {
      .[ # index into previous value in the sequence
        1 + .[0]  # start by skipping one plus the first element
                  # of the previous value in the sequence
        ..  *     # use that to create a Range with no end
      ]
    }

    ...^  # keep doing that until: (and throw away last value)
    0     # it generates an empty list

  )[ *; 0 ]  # from every value in the sequence, get the first element
} 

[*;0] 없이 코드의 작동 방식을 이해하기 위해 다음과 같은 시퀀스가 ​​생성됩니다.

 [0, 1, 0, 2, 5, 1, 3, 1, 6, 2],
   (1, 0, 2, 5, 1, 3, 1, 6, 2),
         (2, 5, 1, 3, 1, 6, 2),
                  (3, 1, 6, 2) 

Renzo 07/29/2017.

Common Lisp, 51 바이트

(do((x(read)(nthcdr(1+(print(car x)))x)))((not x))) 

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


C ++ (gcc), 172 바이트

#includeint main(){std::istream& i=std::cin;char c;int a,b;while(i>>c&&i>>a){std::cout<>c&&i>>b);}std::cout< 

온라인으로 사용해보기

끔찍한 (c/91?"":" ") 은 출력의 정확한 간격을 나타냅니다. 그것 없이는 (-15 바이트) 출력은 [0,2,4] 형태로, 간단한 " " (-9 바이트)로 출력하면 [ 0, 2, 4] 처럼 출력됩니다 (처음에는 추가 공간이 [0,2,4] ) .

<<(c/93?"":"]") 는 단지 [] 빈 입력 코너 경우를 처리합니다 []

끝나는 endline을 인쇄하지 않습니다.

1 comments
Erik the Outgolfer 07/30/2017
또한 숫자가없는 구분 기호로 구분 된 번호를 인쇄 할 수 있으며 [] 가 필요하지 않으며 해당 가장자리의 경우 빈 출력을 가질 수 있으며 (c/91?"":" ") 필요는 없습니다. 챌린지에서 예제의 형식과 일치 할 필요는 없습니다.

Jonathan Allan 07/29/2017.

젤리 , 8 바이트

ḢṄ‘ṫ@µL¿ 

결과를 출력하는 전체 프로그램. 개행 다음에 개행 문자가옵니다 (빈리스트는 결과를 출력하지 않습니다).

Try it online!

방법?

ḢṄ‘ṫ@µL¿ - Main link: list of non-negative integers  e.g. [2,5,4,0,1,2,0]
       ¿ - while:           Iteration:  1                  2             3          4        5
      L  -   length (0 is falsey)       7                  4             3          1        0
     µ   - ...do:                                                                            stop
Ḣ        -   head (pop & modify)        2 ([5,4,0,1,2,0])  0 ([1,2,0])   1 ([2,0])  0 ([0])
 Ṅ       -   print it (and yield it)   "2\n"              "0\n"         "1\n"      "0\n"
  ‘      -   increment                  3                  1             2          1
   ṫ@    -   tail from index            [0,1,2,0]          [1,2,0]      [0]         []
         -
         -                       i.e. a resulting in the printing of: '''2
                                                                         0
                                                                         1
                                                                         0
                                                                         ''' 
2 comments
Erik the Outgolfer 07/30/2017
마침내 젤리 대답! BTW 내가 7 바이트에서 할 수 있습니다.
Erik the Outgolfer 07/30/2017
또한 18 바이트의 목록 반환 함수도 있습니다.

Evpok 07/30/2017.

파이썬 3 , 35 바이트

 f=lambda h=0,*t:t and[h,*f(*t[h:])] 

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

f(*l) 로 실행하십시오. 여기서 l 은 사용자의 입력입니다. 논쟁의 여지가 있지만 입력에 대한 규칙을 스트레칭,하지만 난 그냥 고급 언팩 사랑 해요.


cliffroot 07/28/2017.

Clojure, 67 바이트

#(nth(reduce(fn[[z k]b](if(= z 0)[b(conj k b)][(- z 1)k]))[0[]]%)1) 

초기 매개 변수 [0 []] 시작합니다. 여기서 0 은 카운터이고 [] 는 결과입니다. 이리스트의 최초의 요소가 0 의 경우, 인수의 항목 n 를 결과에 추가해,이리스트 [n [... n]] 건네 주면 (자), 최초의 요소는 감소합니다. (이 설명은 저에게 끔찍한 느낌입니다)

온라인으로보기


Dead Possum 07/28/2017.

파이썬 2.4, 85 바이트

파이썬으로 이길 수있는 기회는 없지만 oneliners를 좋아합니다. 다른 사람들에게 흥미로울 수 있습니다.
밝혀진 바에 따르면 건물 목록에 접근 할 수있는 환상적인 마술이 있지만 2.4에서 작동하고 <= 2.3
locals()['_[1]'] 그렇습니다. 파이썬은 목록에 대한 비밀 이름 _[1] 을 생성하고 그것을 생성하고 그것을 locals 저장합니다. 또한 _[2] , _[3] ... 이름은 중첩 목록에 사용됩니다.

lambda n:[j for i,j in enumerate(n)if i==len(locals()['_[1]'])+sum(locals()['_[1]'])] 

따라서 이미 추가 된 요소의 수와 그 합을 계산합니다. 결과는 다음 원하는 요소의 색인입니다.
나는 열거하지 않도록하는 방법이 있어야한다고 생각합니다. [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ] 의해 입력 배열에 직접 액세스하는 것과 같습니다. 그러나 인덱스 아웃 (on-line)을 유지하면서 인덱스 아웃 (out-of-range)에서이를 보호 할 수있는 간결한 방법을 생각할 수는 없습니다.

여기에 이미지 설명을 입력하십시오.


Neil 07/28/2017.

배치, 69 바이트

:l
@if not "%1"=="" echo %1&(for /l %%i in (0,1,%1)do @shift)&goto l 

(주위에 () 가 필요합니다. 그렇지 않으면 goto 가 루프 내부에서 발생합니다.)

Related questions

Hot questions

Language

Popular Tags