친구와 큐잉


16

당신은 놀이 공원에서 최고의 새싹 Jim과 함께 있으며, 좋아하는 놀이기구가 보이면, 당신과 Jim이 한 눈에 교환합니다. 당연히 당신은 줄을 서기 위해 경주합니다. 불행히도 그는 당신이 골퍼이기 때문에 이기고 실제 스포츠 (미안한 친구)를합니다. 사실, 당신과 Jim은 x사람들 로 분리되어 있습니다. 줄 길이가 길고 n모든 j사람이 지그재그를하고 지그재그를하고 있다고 가정하면, 줄의 어느 위치에서 나와 열이 같은 열에 있을까요 (한 줄만)?

입력

3 정수

  • n-줄의 길이. 이 숫자는 항상 크거나 같으며 where j형식 은 양의 정수 (대기열의 행 수)입니다.y * jy
  • j-행의 한 행에있는 사람 수 (한 행에있는 열 수). 이 숫자는 항상 0보다 큽니다.
  • x- 당신과 그러한 짐과 사람들의 수 0 <= x < 2j - 1. 힌트 :이 숫자가 홀수이면 출력이 비어 있어야합니다.

산출

Jim이 같은 열에있는 행의 정수 위치 목록.
1 이 정수는 답변에 지정하는 한 0 또는 1 인덱싱 될 수 있습니다.
2 이 정수는 답에 지정하는 한 0 위치 또는 n-1 위치에서 시작한다고 가정 할 수 있습니다.

작은 큐 예
이 예에서 입력은입니다 n = 9, j = 3, x = 0. 2, 5Jim과 같은 열에 있으면 위치가 2 또는 5이기 때문에 결과가 출력 됩니다.

테스트 사례

[9, 3, 0] -> [2, 5]
[12, 3, 0] -> [2, 5, 8]
[9, 3, 1] -> []
[9, 3, 2] -> [1, 4]
[14, 7, 10] -> [1]
[24, 4, 6] -> [0, 4, 8, 12, 16]

채점

이것은 이므로 가장 짧은 답변 (바이트)이 이깁니다.


4
대기열 이 몇 가지 흥미로운 솔루션을 볼 수 rious! (죄송합니다. 나쁜 말장난과 단어의 부적절한 사용에도 불구하고 저를 판단하지 마십시오 : P)
HyperNeutrino

1
빈 배열 대신 잘못된 값을 반환 할 수 있습니까?
Rɪᴋᴇʀ

@Riker 나는 그것을 거부 할 이유가 없다. 그것을 위해 가십시오
Poke

답변:


9

파이썬 2 , 45 41 40 37 바이트

lambda n,j,x:range(j-x/2,x%2or n-x,j)

사소한 해결책입니다. 방금 패턴을 빠르게 스캔하고 패턴을 찾았습니다. 1- 색인, 1은 대기열의 뒷면에 있습니다.

-3 바이트를 피하고 값 대신 배열을
사용하여 -4 바이트 -3 바이트 and또는 배열 선택기 대신
-3 바이트를 or반대 순서 로 전환 하여 @DeadPossum에서 영감을 얻어 -1 바이트 . 1 인덱싱 때문에 만 작동

또한 4로 넘어간 4는 여전히 모든 4에서 4입니다.

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


Lol, 당신은 나보다 14 분 전에 게시 :) 내 버전은 3 바이트 더 짧습니다 :lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum

@DeadPossum 니스. 그보다 1 바이트 더 짧은 또 다른 솔루션이 있습니다. lol
HyperNeutrino

나는 범위의 두 번째 논쟁에서 실수를했다. 그것은해서는 안됩니다 n-j+1그래서, lambda n,j,x:x%2-1and range(j-x/2,n-x,j)40 바이트의 합계보다 하나 짧은
죽은 포섬

@DeadPossum 잠깐, 빈 배열 대신 잘못된 값을 반환 할 수 있었습니까?
HyperNeutrino

3
@FelipeNardiBatista는 "1-indexed"의 의미입니다.
Rɪᴋᴇʀ

2

, 22 21 바이트

20 바이트 코드, -p플래그는 +1

c%2?lv-c/2+b*\,a/b-1

소요 n, jx명령 줄 인수로. 위치 0에서 시작하여 0으로 색인화됩니다. 온라인으로 시도하십시오!

설명

좀 더 이해하기 쉽기 때문에 이것은 원래의 22 바이트 버전입니다.

                       a, b, c are cmdline args; l is [] (implicit)
c%2?                   Test c mod 2
    l                  If it's 1 (truthy), return empty list; else:
                a/b-1  Number of rows in the queue minus 1
               ,       Range(^)
             b*        Multiply each element by b
     b-1-c/2+          Add (b-1)-c/2 to each element
                       Output in [1;2;3] format (implicit, -p flag)

수식을위한 패턴을 관찰함으로써 수득 된 n=9, j=3:

x Output
0 [2;5]
2 [1;4]
4 [0;3]

우리가 가지고가는 경우에 x/2( 0, 1, 2),에서 빼기 j-1( 2, 1, 0), 및 해당 추가[0;3] , 우리는 모든 경우에 정확한 결과를 얻을.


1

자바 8 람다, 101 바이트

(n,j,x)->{int[]i=new int[n/j-1];int c=0,k=j-x/2;for(;k<n-x;k+=j)i[c++]=k;return x/2==0?i:new int[0];}

내 파이썬 답변의 거의 직접 포트. Java에는 범위가 없습니다.


0

하스켈, 43 바이트

(n#j)x|odd$round x=[]|m<-j-x/2=[m,m+j..n-x]

HyperNeutrino의 Python 답변에서 거의 직접 이식되었습니다.

보다 체계적인 코드 :

f n j x |odd$round x = []
        |otherwise   = let m=j-x/2 in [m,m+j..n-x]

편집 : 1 인덱싱되었다는 것을 잊어 버렸습니다.


0

C #-91 바이트

int[]r=new int[n/j-1];for(int i=1;i<n/j;i++){r[i-1]=i*j-x/2-1;}return(x%2==0)?r:new int[0];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.