Xếp hàng với bạn bè


16

Bạn đang có nụ tốt nhất của mình, Jim, tại công viên giải trí và khi chuyến đi yêu thích của bạn xuất hiện, bạn và Jim liếc nhau. Tự nhiên bạn đua nhau xếp hàng. Thật không may, anh ấy thắng vì bạn là người chơi gôn và anh ấy chơi một môn thể thao thực sự (xin lỗi bạn bè). Trên thực tế, bạn ở rất xa phía sau rằng bạn và Jim bị xmọi người ngăn cách . Giả sử đường thẳng là chiều dài nvà bạn ở phía sau và đường zigs và zags mỗi jngười, ở vị trí nào trong đường kẻ, bạn và Jim sẽ ở cùng một cột cho phép bạn trò chuyện (chỉ cách nhau một hàng)?

Đầu vào

3 số nguyên

  • n- Chiều dài của dòng. Con số này sẽ luôn luôn lớn hơn hoặc bằng jvà sẽ theo hình thức y * jnơi ylà một số nguyên dương (số lượng hàng trong hàng đợi).
  • j- Số lượng người trong một hàng của dòng (số lượng cột trong một hàng). Con số này sẽ luôn lớn hơn 0.
  • x- Số người giữa bạn và Jim như vậy 0 <= x < 2j - 1. Gợi ý: Nếu số này là số lẻ, thì đầu ra của bạn sẽ trống.

Đầu ra

Một danh sách các vị trí số nguyên trong dòng mà Jim ở cùng cột với bạn.
1 Các số nguyên này có thể là 0 hoặc 1 được lập chỉ mục miễn là bạn chỉ định trong câu trả lời của mình.
2 Các số nguyên này có thể giả sử bạn bắt đầu ở vị trí 0 hoặc vị trí n-1 miễn là bạn chỉ định trong câu trả lời của mình.

Thí dụ

Ví dụ xếp hàng nhỏ
Trong ví dụ này, đầu vào sẽ là n = 9, j = 3, x = 0. Đầu ra phải là 2, 5vì vị trí của bạn là 2 hoặc 5 khi bạn ở cùng cột với Jim

Các trường hợp thử nghiệm

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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.


4
Tôi đang xếp hàng chờ đợi để xem một số giải pháp thú vị cho việc này! (chơi chữ xấu xin lỗi và sử dụng cũng không đúng của từ nhưng bất cứ điều gì, đừng phán xét tôi: P)
HyperNeutrino

1
Chúng ta có thể trả về một giá trị giả thay vì một mảng trống không?
R

@Riker Tôi thấy không có lý do gì để không cho phép điều đó. Đi cho nó
Chọc

Câu trả lời:


9

Python 2 , 45 41 40 37 byte

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

Khá nhiều giải pháp tầm thường. Tôi chỉ nhanh chóng quét các mẫu và tìm thấy một mẫu. 1 chỉ mục, 1 ở phía sau hàng đợi.

-4 byte bằng cách tránh ternaries và sử dụng một mảng cho các giá trị thay vì
-1 byte nhờ một số nguồn cảm hứng từ @DeadPossum, bằng cách sử dụng andthay vì ternaries hoặc bộ chọn mảng
-3 byte bằng cách chuyển sang orthứ tự ngược lại. Chỉ hoạt động vì lập chỉ mục 1

Ngoài ra, gạch bỏ 4 vẫn là 4 trên tất cả các 4s :(

Hãy thử trực tuyến!


Lol, bạn đã đăng chỉ 14 phút, trước tôi :) Phiên bản của tôi ngắn hơn 3 byte:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum

@DeadPossum Đẹp. Tôi có một giải pháp khác ngắn hơn một byte so với đó, lol
HyperNeutrino

Tôi đã có một sai lầm trong đối số thứ hai của phạm vi. Không nên n-j+1như vậy, nên lambda n,j,x:x%2-1and range(j-x/2,n-x,j)ngắn hơn một lần nữa trong tổng số 40 byte
Dead Possum

@DeadPossum Đợi đã, chúng tôi có được phép trả về giá trị giả thay vì một mảng trống không?
HyperNeutrino

3
@FelipeNardiBatista nghĩa là "1-indexed" nghĩa là gì, btw.
R

2

Pip , 22 21 byte

20 byte mã, +1 cho -pcờ.

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

Mất n, jxnhư là đối số dòng lệnh. Chỉ số 0, bắt đầu từ vị trí 0. Hãy thử trực tuyến!

Giải trình

Đây là phiên bản 22 byte ban đầu của tôi vì nó dễ hiểu hơn một chút.

                       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)

Công thức được thu thập bằng cách quan sát các mô hình cho n=9, j=3:

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

Nếu chúng ta lấy x/2( 0, 1, 2), trừ nó từ j-1( 2, 1, 0), và thêm rằng [0;3], chúng tôi nhận được kết quả chính xác trong mọi trường hợp.


1

Lambda Java 8, 101 byte

(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];}

Cổng gần như trực tiếp của câu trả lời Python của tôi. Phạm vi không tồn tại trong Java.


0

Haskell, 43 byte

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

Khá nhiều cổng trực tiếp từ câu trả lời Python từ HyperNeutrino

Mã được định dạng tốt hơn:

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

EDIT: Quên đề cập đến nó là một chỉ mục


0

C # - 91 byte

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];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.