합리적인 형식의 음이 아닌 정수 목록이 주어지면 반복하는 모든 정수만큼 많은 요소를 건너 뛰고 반복합니다.
다음은 작동하는 예입니다.
[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]
이것은 code-golf 이므로 가장 짧은 답변이 이깁니다!
답변
답변
파이썬 2 , 49 44 * 41 바이트
* -3 @ASCII 전용 덕분 입니다.
l=input()
while l:print l[0];l=l[l[0]+1:]
채팅에서 OP가 허용 한대로 결과를 줄 바꿈으로 구분하여 인쇄합니다. 비 재귀 전체 프로그램 으로 더 짧아 질 수 있다고 생각하지 않습니다 .
어떻게 작동합니까?
-
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 을 인쇄 하고 자릅니다 [1,0,0]
. 마찬가지로을 출력 1
하고 처음 2를 자르면을 얻습니다 [0]
. 물론 0
인쇄되고 프로그램이 종료됩니다.
답변
답변
자바 스크립트 (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
@ThePirateBay 덕분에 -3 바이트
답변
답변
매스 매 티카, 46 44 바이트
SequenceCases[#,{x_,y___}/;Tr[1^{y}]<=x:>x]&
대안 :
SequenceCases[#,{x_,y___}/;x>=Length@!y:>x]&
SequenceCases[#,l:{x_,___}/;x>Tr[1^l]-2:>x]&
답변
C #, 68 바이트
a=>{for(int i=0;i<a.Count;i+=a[i]+1)System.Console.Write(a[i]+" ");}
풀 / 포맷 버전 :
namespace System
{
class P
{
static void Main()
{
Action<Collections.Generic.List<int>> f = a =>
{
for (int i = 0; i < a.Count; i += a[i] + 1)
System.Console.Write(a[i] + " ");
};
f(new Collections.Generic.List<int>() { });Console.WriteLine();
f(new Collections.Generic.List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
f(new Collections.Generic.List<int>() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
f(new Collections.Generic.List<int>() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
f(new Collections.Generic.List<int>() { 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<int>() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();
Console.ReadLine();
}
}
}
목록을 반환하는 시간은 107 바이트입니다.
a=>{var l=new System.Collections.Generic.List<int>();for(int i=0;i<a.Count;i+=a[i]+1)l.Add(a[i]);return l;}