เข้าคิวกับเพื่อน


16

คุณอยู่กับ Jim ที่ดีที่สุดของคุณที่สวนสนุกและเมื่อการขี่ที่คุณชื่นชอบเข้ามาดูคุณและ Jim ก็มองดูการแลกเปลี่ยน แน่นอนว่าคุณต้องแข่งเพื่อเข้าแถว น่าเสียดายที่เขาชนะเพราะคุณเป็นนักกอล์ฟและเขาเล่นกีฬาที่แท้จริง (ขอโทษเพื่อน) ในความเป็นจริงคุณอยู่ไกลเกินกว่าที่คุณและจิมจะถูกแยกจากกันโดยxคน สมมติว่าบรรทัดนั้นมีความยาวnและคุณอยู่ที่ด้านหลังและเส้น zigs และ zags ทุก ๆjคนคุณและ Jim จะอยู่ในตำแหน่งใดในแถวเดียวกันที่อนุญาตให้คุณแชท (ห่างกันเพียงหนึ่งแถว)?

อินพุต

3 จำนวนเต็ม

  • n- ความยาวของเส้น จำนวนนี้จะมากกว่าหรือเท่ากับjและจะอยู่ในรูปแบบy * jที่yเป็นจำนวนเต็มบวก (จำนวนแถวในคิว)
  • j- จำนวนคนในหนึ่งแถวของบรรทัด (จำนวนคอลัมน์ในหนึ่งแถว) หมายเลขนี้จะมากกว่า 0 เสมอ
  • x- 0 <= x < 2j - 1จำนวนของผู้คนระหว่างคุณและจิมดังกล่าวว่า คำแนะนำ: ถ้าตัวเลขนี้เป็นเลขคี่ผลลัพธ์ของคุณควรจะว่างเปล่า

เอาท์พุต

รายการตำแหน่งจำนวนเต็มในบรรทัดที่ Jim อยู่ในคอลัมน์เดียวกันกับคุณ
1จำนวนเต็มเหล่านี้สามารถ 0 หรือ 1 ดัชนีตราบเท่าที่คุณระบุในคำตอบของคุณ
2จำนวนเต็มเหล่านี้สามารถสมมติว่าคุณเริ่มต้นที่ตำแหน่ง 0 หรือตำแหน่ง n-1 ตราบเท่าที่คุณระบุไว้ในคำตอบของคุณ

ตัวอย่าง

ตัวอย่างการเข้าคิวขนาดเล็ก
n = 9, j = 3, x = 0ในตัวอย่างนี้การป้อนข้อมูลที่จะเป็น ผลลัพธ์ควรเป็น2, 5เพราะตำแหน่งของคุณคือ 2 หรือ 5 เมื่อคุณอยู่ในคอลัมน์เดียวกับ Jim

กรณีทดสอบ

[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
ฉันรอคิวเพื่อดูโซลูชันที่น่าสนใจสำหรับเรื่องนี้! (ขอโทษปุนไม่ดีและยังใช้คำที่ไม่เหมาะสม แต่สิ่งใดอย่าตัดสินฉัน: P)
HyperNeutrino

1
เราสามารถคืนค่าเท็จแทนที่จะเป็นอาร์เรย์ที่ว่างเปล่าได้หรือไม่?
Rɪᴋᴇʀ

@Riker ฉันไม่เห็นเหตุผลที่จะไม่อนุญาต ไปเลย
Poke

คำตอบ:


9

Python 2 , 45 41 40 37 ไบต์

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

ค่อนข้างแก้ปัญหาเล็กน้อย ฉันเพิ่งสแกนหารูปแบบและพบรูปแบบอย่างรวดเร็ว 1-indexed, 1 อยู่ที่ด้านหลังของคิว

-4 bytes โดยการหลีกเลี่ยง ternaries และใช้ array สำหรับค่าแทน
-1 byte ด้วยแรงบันดาลใจจาก @DeadPossum โดยใช้andแทน ternaries หรือ selector array
-3 bytes โดยสลับไปorที่ลำดับที่ตรงกันข้าม ใช้งานได้เนื่องจากการจัดทำดัชนี 1 รายการเท่านั้น

การขีดฆ่า 4 ยังคงเป็น 4 ใน 4s ทั้งหมด :(

ลองออนไลน์!


ฮ่า ๆ คุณโพสต์เพียง 14 นาทีก่อนหน้าฉัน :) รุ่นของฉันสั้นกว่า 3 ไบต์:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum

@DeadPossum ดี ฉันมีวิธีแก้ปัญหาอื่นที่สั้นกว่าหนึ่งไบต์ฮ่า ๆ
HyperNeutrino

ฉันมีข้อผิดพลาดในการโต้แย้งที่สองของช่วง มันไม่ควรจะเป็นn-j+1ดังนั้นlambda n,j,x:x%2-1and range(j-x/2,n-x,j)จะสั้นลงโดยหนึ่งในจำนวน 40 ไบต์
ตาย Possum

@DeadPossum เดี๋ยวก่อนเราได้รับอนุญาตให้ส่งคืนค่าเท็จแทนที่จะเป็นอาร์เรย์ว่างเปล่าหรือไม่
HyperNeutrino

3
@FelipeNardiBatista นั่นคือความหมายของ "1-indexed" หมายความว่า btw
2560

2

Pip , 22 21 ไบต์

โค้ด 20 ไบต์ +1 สำหรับการ-pตั้งค่าสถานะ

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

ใช้เวลาn, jและxเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ดัชนี 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

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

พอร์ตที่เกือบจะตรงกับคำตอบของ Python ของฉัน ช่วงนี้ไม่มีอยู่ใน Java


0

Haskell, 43 ไบต์

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

สวยมากโดยตรงจากคำตอบของงูหลามจาก HyperNeutrino

รหัสที่มีรูปแบบดีกว่า:

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

แก้ไข: ลืมพูดถึงมันเป็นหนึ่งในการจัดทำดัชนี


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.