카테고리 보관물: 코딩

코딩

토끼처럼 건너 뛰세요! ^ Skip 3 elements [4,

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


다음은 작동하는 예입니다.

[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”).
  • 입력하려면 왼쪽에서 오른쪽 순서를 사용해야합니다.
  • 작동하는 예제에서와 같이 범위를 벗어나면 다른 방식으로 실행이 종료됩니다.
  • 00 개의 요소를 건너 뛰는 데 사용해야 합니다.
  • 빈 목록 ( [])을 입력으로 받으면를 반환해야합니다 [].

테스트 사례

[]                                                     => []
[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]

이것은 이므로 가장 짧은 답변이 이깁니다!



답변

파이썬 2 , 36 바이트

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

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


답변

파이썬 2 , 49 44 * 41 바이트

44를 넘어서도 여전히 규칙적인 44입니다 🙁

* -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인쇄되고 프로그램이 종료됩니다.


답변

하스켈, 29 27 26 바이트

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

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

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


답변

자바 스크립트 (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 바이트


답변

05AB1E , 10 9 바이트

[¬Dg>#=ƒ¦

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


답변

매스 매 티카, 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;}