Antri dengan Teman

16

Anda bersama kawan terbaik Anda, Jim, di taman hiburan dan ketika perjalanan favorit Anda mulai terlihat, Anda dan Jim saling bertukar pandang. Secara alami Anda berlomba untuk mengantre. Sayangnya dia menang karena kamu seorang pegolf dan dia memainkan olahraga nyata (teman maaf). Faktanya, Anda jauh di belakang sehingga Anda dan Jim dipisahkan oleh xorang-orang. Dengan asumsi garis panjang ndan Anda berada di belakang dan garis zig dan zag setiap jorang, pada posisi apa di garis itu Anda dan Jim akan berada di kolom yang sama memungkinkan Anda untuk mengobrol (hanya terpisah satu baris)?

Memasukkan

3 Integer

  • n- Panjang garis. Jumlah ini akan selalu lebih besar dari atau sama dengan jdan akan dalam bentuk y * jdi mana yadalah bilangan bulat positif (jumlah baris dalam antrian).
  • j- Jumlah orang dalam satu baris baris (jumlah kolom dalam satu baris). Jumlah ini akan selalu lebih besar dari 0.
  • x- Jumlah orang antara kamu dan Jim sedemikian rupa 0 <= x < 2j - 1. Petunjuk: Jika angka ini ganjil, maka output Anda harus kosong.

Keluaran

Daftar posisi integer di baris tempat Jim berada di kolom yang sama dengan Anda.
1 Bilangan bulat ini dapat diindeks 0 atau 1 selama Anda tentukan dalam jawaban Anda.
2 Bilangan bulat ini dapat mengasumsikan Anda mulai dari posisi 0 atau posisi n-1 selama Anda tentukan dalam jawaban Anda.

Contoh

Contoh Antrian Kecil
Dalam contoh ini, inputnya adalah n = 9, j = 3, x = 0. Keluaran seharusnya 2, 5karena posisi Anda 2 atau 5 ketika Anda berada di kolom yang sama dengan Jim

Uji Kasus

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

Mencetak gol

Ini adalah , jadi jawaban tersingkat (dalam byte) menang.

Menyodok
sumber
4
Saya sangat antri untuk melihat beberapa solusi menarik untuk ini! (maaf kata-kata buruk yang buruk dan juga penggunaan kata yang tidak tepat tetapi apa pun, jangan menilai saya: P)
HyperNeutrino
1
Bisakah kita mengembalikan nilai falsy bukan array kosong?
Rɪᴋᴇʀ
@Riker saya tidak melihat alasan untuk melarang itu. Lakukanlah
Poke

Jawaban:

9

Python 2 , 45 41 40 37 byte

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

Cukup banyak solusi sepele. Aku hanya cepat dipindai untuk pola dan menemukan pola. 1-diindeks, 1 di belakang antrian.

-4 byte dengan menghindari terner dan menggunakan array untuk nilai bukan
-1 byte berkat beberapa inspirasi dari @DeadPossum, dengan menggunakan andalih-alih terner atau selektor array
-3 byte dengan beralih ke ordalam urutan yang berlawanan. Hanya berfungsi karena pengindeksan 1

Juga, mencoret 4 masih 4 pada semua 4s :(

Cobalah online!

HyperNeutrino
sumber
Lol, Anda diposting hanya 14 menit, sebelum saya :) Versi saya lebih pendek 3 byte:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum
@DeadPossum Bagus. Saya punya solusi lain yang satu byte lebih pendek dari itu, lol
HyperNeutrino
Saya memiliki kesalahan dalam argumen jangkauan kedua. Seharusnya tidak n-j+1, jadi lambda n,j,x:x%2-1and range(j-x/2,n-x,j)lebih pendek dengan satu lagi total 40 byte
Dead Possum
@DeadPossum Tunggu, kita diizinkan untuk kembali nilai falsy bukan array kosong?
HyperNeutrino
3
@FelipeNardiBatista artinya "1-indexed", btw.
Rɪᴋᴇʀ
2

Pip , 22 21 byte

20 byte kode, +1 untuk -pbendera.

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

Membawa n, jdan xsebagai argumen command-line. Diindeks 0, mulai dari posisi 0. Cobalah online!

Penjelasan

Ini adalah versi 22-byte asli saya karena ini sedikit lebih dimengerti.

                       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)

Rumus diperoleh dengan mengamati pola untuk n=9, j=3:

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

Jika kita mengambil x/2( 0, 1, 2), kurangi dari j-1( 2, 1, 0), dan menambahkan bahwa untuk [0;3], kami mendapatkan hasil yang benar dalam semua kasus.

DLosc
sumber
1

Java 8 lambda, 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];}

Port jawaban Python saya yang hampir langsung. Rentang tidak ada di Jawa sekalipun.

HyperNeutrino
sumber
0

Haskell, 43 byte

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

Cukup banyak porting langsung dari jawaban Python dari HyperNeutrino

Kode yang diformat lebih baik:

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

EDIT: Lupa menyebutkan itu satu-diindeks

Nama Tampilan Umum
sumber
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];
Chengliang YE
sumber