เพื่อนของคุณจะนั่งที่ไหน


25

คุณและเพื่อนบางคนกำลังเล่นโบว์ลิ่ง มีจำนวนเลอร์สNทั้งหมด อย่างไรก็ตามมีเก้าอี้N -1 เท่านั้นที่จะนั่งเข้าได้วิธีแก้ง่าย: ใครก็ตามที่เปิดใช้งานในปัจจุบันไม่ได้รับเก้าอี้ จากนั้นเมื่อถึงคราวพวกเขาก็นั่งลงบนเก้าอี้ของบุคคลที่จะไปต่อ

ลองยกตัวอย่าง บอกว่าคุณเป็นชื่อและสี่เพื่อนของคุณจะถูกตั้งชื่อB , C , DและE ผู้เล่นทุกคนเคลื่อนที่ตามลำดับตัวอักษรดังนั้นคุณจะต้องไปก่อน เนื่องจากมีผู้เล่น 5 คนมีเพียง 4 ที่นั่งเท่านั้น เพื่อนของคุณนั่งในสี่ที่นั่งตามลำดับนี้:

CEBD

คุณไปแล้วและคุณได้รับการนัดหยุดงาน! มันคือเทิร์นถัดไปของBดังนั้นคุณจึงนั่งบนเก้าอี้ของเขา ตอนนี้ดูเหมือนว่านี้:

CEAD

Bไป Gutterball! จากนั้นเขาก็นั่งอยู่ในCจุด 's และCไปเปิดถัดไป

ลูกปัด

จากนั้นCนั่งอยู่บนเก้าอี้ของD

BEAC

และDนั่งในเก้าอี้ของE

BDAC

และสุดท้ายEนั่งในเก้าอี้ของคุณ

BDEC

คุณจะสังเกตเห็นว่าตอนนี้ทุกคนที่นั่งเป็นแบบหลอกๆ คุณต้องหาคำตอบหลังจากXหันไปใครจะนั่งที่ไหน

อินพุต

โปรแกรมของคุณจะต้องรับอินพุตทั้งสองจากผู้ใช้สตริงและตัวเลข ไม่จำเป็นต้องมีพรอมต์ สตริงจะเป็นตัวอักษร 1-51 ตัว (BZ และ az) โดยไม่มีการซ้ำ สิ่งนี้แสดงถึงลำดับที่เพื่อนของคุณเลือกที่จะนั่ง จะไม่มีตัวพิมพ์ใหญ่Aเพราะเป็นคุณและคุณต้องไปก่อนเสมอ จำนวนจะเป็นจำนวนรอบทั้งหมด (ไม่ใช่เกม) ที่คุณและเพื่อนเล่น จำนวนนี้จะเป็นค่าบวกและขนาดที่เหมาะสม (น้อยกว่า 1,000)

เอาท์พุต

โปรแกรมของคุณจะต้องพิมพ์คำสั่งที่เพื่อนของคุณกำลังนั่งหลังจาก X หันและมีการเปิด ตัวอย่างเช่นหากหลังจาก X เปลี่ยนลำดับเป็น BEDGCAHF และเป็นรอบของZโปรแกรมของคุณจะต้องพิมพ์ตรงนี้:

BEDGCAHF
It is Z's turn.

นี่คือตัวอย่างอินพุตและเอาต์พุตตัวอย่างบางส่วน

input: E, 4 
E
It is A's turn.

input: E, 5 
A
It is E's turn.

input: Bb, 2
AB
It is b's turn.

input: dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb, 999
JNuvFDqjwEPVnMSlOWXgAZyGKordIRBtkamziphcUYbxfCsTQeH
It is L's turn.

กฎระเบียบ

  • ทุกคนเรียงตามลำดับตัวอักษรโดยใช้ตัวพิมพ์ใหญ่ที่มีความสำคัญมากกว่าตัวพิมพ์เล็ก

  • นี่คือรหัสกอล์ฟดังนั้นช่องโหว่มาตรฐานนำไปใช้และส่งมีคะแนนไบต์


1
ฉันใช้เวลาหลายชั่วโมงในการทำสิ่งนี้เพื่อสมอง ฉันเพิ่งสังเกตเห็นว่าฉันทำผิด
คริสโตเฟอร์

1
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
คริสโตเฟอร์

มันสับมันและรายการแรกบนสแต็คคือคำตอบ
คริสโตเฟอร์

นั่นเป็นสิ่งที่ฉันประหลาดใจสำหรับคุณ: P
Christopher

คำตอบ:


3

Pyth, 37 ไบต์

uXGK<.<+\ASzH2)QzpeK"It is ""'s turn.

การสาธิตออนไลน์: Pyth Compiler / Executor

อัลกอริทึมเป็นแบบอิงตามโซลูชันของ @ isaacg อย่างเขาฉันเริ่มต้นด้วยคำสั่งซื้อเริ่มต้นและใช้ฟังก์ชั่นXการแทนที่ของเพื่อแทนที่ผู้เล่นคนต่อไปด้วยผู้เล่นปัจจุบัน

แต่แตกต่างจากการใช้งานของเขาซึ่งเข้ามาแทนที่ผู้เล่นคนต่อไปโดยผู้เล่นคนปัจจุบันตามลำดับที่นั่งฉันใช้มันในวงกว้างมากขึ้น ฉันแทนที่ผู้เล่นปัจจุบันแต่ละคนโดยผู้เล่นคนต่อไปและผู้เล่นแต่ละคนในทีมปัจจุบันต่อไป สิ่งนี้สามารถทำได้โดยการส่งผู้เล่นทั้งสองเป็น ARG ที่สองและละเว้น ARG ที่สาม ( XG"ab")แทนXG"a""b") เนื่องจากผู้เล่นปัจจุบันไม่ได้เป็นส่วนหนึ่งของสตริง (เขากำลังเล่น) การแทนที่ครั้งแรกจึงไม่มีผลเลย แต่มันทำให้ฉันสร้างผู้เล่นทั้งสองในเวลาเดียวกันในขณะที่ @isaacg ต้องสร้างพวกมันทีละตัว

คุณสมบัติใหม่ที่ฉันใช้คือผู้ดำเนินการที่ได้รับมอบหมาย จนกระทั่งเมื่อไม่นานมานี้=N1ได้มีการแปลN = 1ซึ่งดำเนินการกับ Python assign('N',1)แต่ปัจจุบันมันคอมไพล์ ฟังก์ชันนี้กำหนดNด้วย 1 และส่งคืนค่า (แต่ไม่พิมพ์) ซึ่งช่วยให้สามารถบันทึกผลลัพธ์ระดับกลางที่เกิดขึ้นเช่นในการดำเนินการลด เมื่อใช้สิ่งนี้ฉันสามารถเก็บผู้เล่นคู่หนึ่งซึ่งเปลี่ยนตำแหน่งล่าสุดและพิมพ์ผู้เล่นคนที่สอง

คำอธิบายโดยละเอียด

                      implicit: z = input string, Q = input number
u              Qz     reduce for H in range(Q), start with G = z
                        update G with:
       +\ASz              "A" + sorted(z)
     .<     H             cyclic shifted by H
    <        2            get the first 2 elements (current + next player)
   K                      store the result in K
 XG           )           replace next player by current player in G
                      implicit print 

peK"It is ""'s turn.  print "It is" + K[-1] (current player) + "'s turn."

8

Pyth, 39 38 ไบต์

L@+\ASzbuXGyhHyHQzpyQ"It is ""'s turn.

นี้เป็นไปตามรอบการใช้งานซ้ำ ๆ Xของการค้นหาและแทนที่การดำเนินงาน บิตแรกจะกำหนดฟังก์ชั่นการค้นหาyซึ่งจะค้นหาbผู้เล่นลำดับที่ในลำดับผู้เล่น จากนั้นเราทำการแทนที่เพื่อค้นหาลำดับที่นั่งสุดท้ายซ้ำแล้วซ้ำอีกและพิมพ์ออกมาในที่สุด

รหัสเพื่อค้นหาที่นั่งสุดท้ายจะสั้นกว่า (18 ไบต์) กว่ารหัสที่จะพิมพ์ซึ่งมีขนาดเท่ากับ (21 ไบต์)

รหัสใช้สตริงที่นั่งในบรรทัดแรกของ STDIN และจำนวนครั้งในรอบที่สอง

สาธิต.

คำอธิบาย:

L@+\ASzbuXGyhHyHQzpyQ"It is ""'s turn.
                                          Implicit:
                                          z = input()
                                          Q = eval(input())

L                                         def y(b): return
  +\ASz                                    "A" + sorted(z)
 @     b                                  (               )[b]
        u       Qz                        reduce for H in range(len(Q)),
                                          G starts as z.
         XGyhHyH                          replace in G y(H+1) with y(H).
                  pyQ"It is ""'s turn.    Print out whose turn it is.

@ Sp3000 ขอบคุณสำหรับการจับ
isaacg

ห้ามใช้%หากคุณใส่เพียงสิ่งเดียว แม้++จะประหยัดได้หนึ่งไบต์ แต่วิธีที่ดีที่สุด (2 ไบต์) ก็คือp:pyQ"It is ""'s turn
Jakube

อุ่ย พลาดจุดสิ้นสุด ดังนั้นจึง++มีจำนวนไบต์เดียวกันเป็น%และpบันทึกเพียง 1 ไบต์
Jakube

7

CJam, 49 45 43 bytes

l_'A+$ri{:L2<(erL(+}*1<"
It is "\"'s turn."

ฉันคิดว่ามันใช้งานได้ มันรันอัลกอริทึมตามที่เป็นอยู่

ลองออนไลน์

คำอธิบาย

l                       Read line (initial seating order)
_'A+$                   Copy, add "A" and sort to give bowling order

ri{          }*         Do <number of turns> times...
   :L                     Save bowling order as L
     2<(                  Get next and current bowlers
        er                Replace next with current in seating
          L(+             Push bowling order again and update (rotate)

1<                      Get current bowler from start of bowling order
"                  
It is "\"'s turn."      Output message

4

Python 3, 110

s=input()
S=sorted(s+'A')*999
exec("y,*S=S;s=s.replace(S[0],y);"*int(input()))
print(s+"\nIt is %s's turn."%y)

รุ่นที่ดีที่สุดของการแก้ปัญหาโดยใช้ SP3000 replaceรายการSรอบแม้ว่าตัวอักษรที่มีอยู่ในการสั่งซื้อ เราดำเนินการแทนที่ซ้ำแล้วซ้ำอีกในสตริงที่กำหนดของแต่ละอักขระของอักขระSก่อนหน้า


เล่นได้ดีทุกครั้ง :)
Sp3000

@ Sp3000 ฉันใช้วิธีแก้ปัญหาของคุณ
xnor

3

คลิป 10 , 59 56 ไบต์

[t{)k[qa)qglqtg(lqt}wx)nyN"It is "gnyt"'s turn.."`]s,x'A

ตัวอย่าง

[t{)k[qa)qglqtg(lqt}wx)nyN"It is "gnyt"'s turn.."`]s,x'A
dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb
999
JNuvFDqjwEPVnMSlOWXgAZyGKordIRBtkamziphcUYbxfCsTQeH
It is L's turn.

คำอธิบาย

xอินพุตแรกคือรายชื่อผู้เล่นที่ได้รับมอบหมายให้ตัวแปร

nyการป้อนข้อมูลที่สองคือจำนวนรอบซึ่งโปรแกรมได้ด้วย

[t                                        ]s,x'A .-t is the sorted list of players including A-.
  {                                      `       .-Print the following:            -.
    k[q            }wx)ny                        .-In each round (q is all the previous rounds)-.
       a)q                                       .-Replace                         -.
          glqt                                   .-the next player                 -.
              g(lqt                              .-with the previous player        -.

                     N                           .-Also print a newline            -.
                      "It is "    "'s turn.."
                              gnyt               .-The ny'th player in t           -.

ขอบคุณ Sp3000 สำหรับแนวคิดในการใช้ "แทนที่"


3

Python 3, 128 ไบต์

L=input()
S=sorted(L)+["A"]
i=0
exec("L=L.replace(S[i],S[i-1]);i=-~i%len(S);"*int(input()))
print(L+"\nIt is %s's turn."%S[i-1])

รับอินพุตสองบรรทัดผ่าน STDIN - ลำดับที่นั่งเริ่มต้นจากนั้นจำนวนการเลี้ยว

นี้เป็นพื้นเดียวกันการค้นหาและแทนที่ความคิดของฉันเป็นวิธีการแก้ปัญหา CJam ส่วนที่ยุ่งยากเพียงอย่างเดียวคือเราติดAที่ด้านหลังของคำสั่งโบว์ลิ่งและทำให้ดัชนีของเราiเป็นดัชนีของคนขว้างลูกต่อไปดังนั้นการใช้ประโยชน์จากการจัดทำดัชนีโดย -1 และหลีกเลี่ยงIndexErrors

นี่สั้นลงสองสามไบต์ใน Python 2 แต่ฉันโพสต์ Python 3 เพื่อเปรียบเทียบกับโซลูชันของ OP


หลาม 2 มีการปรับปรุงอะไรบ้าง? ฉันเห็นว่าอินพุตในบรรทัด 1 กลายเป็น raw_input (+4) และint(input())บรรทัดที่ 4 กลายเป็นอินพุต (-4) ดังนั้นจึงยกเลิก จากนั้นลบวงเล็บออกจากการพิมพ์และเพิ่มช่องว่างรวมเป็น 127 ฉันจะทำบางสิ่งบางอย่างหายไปหรือไม่?
DJMcMayhem

@DJMcMayhem คุณลืมวงเล็บสำหรับexec
Sp3000

2

JavaScript (ES6) 116

116 ไบต์เป็นโปรแกรมที่มี I / O ผ่านหน้าต่างป๊อปอัพ 114 เป็นฟังก์ชั่นทดสอบ

เรียกใช้ข้อมูลโค้ดใน Firefox เพื่อทดสอบ

// as a program with I/O
for(t=[...s=(P=prompt)()].sort(),x=P(),p='A';x--;p=n)t.push(p),s=s.replace(n=t.shift(),p);P(`${s}
It is ${p}' turn`)

// as a function with 2 parameters, returning output as a 2 lines string
f=(s,x)=>{for(t=[...s].sort(),p='A';x--;p=n)t.push(p),s=s.replace(n=t.shift(),p);return(`${s}
It is ${p}' turn`)}

// Test suite
test=[
['CEBD',5], ['E', 4],['E',5],['Bb', 2],
['dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb', 999]];

Out=x=>OUT.innerHTML=OUT.innerHTML+x;

test.forEach(([p,x])=>Out(p+' '+x+':\n'+f(p,x)+'\n'))
Test cases from OP:
<pre id=OUT></pre>


2

PowerShell ขนาด 168 ไบต์

function x($s,$t){$p="A"+$s-split''|?{$_}|%{[int][char]$_}|sort|%{[char]$_};$l=$p.count;1..$t|%{$s=$s.replace($p[$_%$l],$p[($_-1)%$l])};$s;"It is $($p[$t%$l])'s turn."}

ฉันตัดสินใจว่าคำตอบทั้งหมดของฉันในเว็บไซต์นี้จะเป็น PowerShell วันหนึ่งฉันจะมีคำตอบที่สามารถแข่งขัน ...

เรียกใช้ฟังก์ชันดังนี้: x Bb 2


1

คำตอบนี้จะไม่ชนะ แต่ฉันจะโยนมันออกไป

Python 3, 167 ไบต์

s=input()
n=int(input())
c='A'
t=sorted(set(s+c))
F=len(t)
f=list(s)
for i in range(n):
 I=f.index(t[(i+1)%F]);c,f[I]=f[I],c
print(''.join(f)+'\nIt is '+c+"'s turn.")

1

Pip , 54 ไบต์

ไม่ค่อยมีการแข่งขัน แต่อย่างน้อยฉันก็ต้องอวดสายที่ไม่แน่นอนของ Pip และคำสั่ง Swap รับลำดับการสั่งซื้อและจำนวนรอบเป็นอาร์กิวเมนต์บรรทัดคำสั่ง (ซึ่งได้รับการกำหนดaและbตามลำดับ)

u:'Ao:SN A^u.aLbSu(aa@?C(o++i))Pa"It is ".u."'s turn."

คำอธิบาย:

u:'A                   u = player who's currently up

o:SN A^u.a
      ^u.a             Append "A" to the seating order, split into list of characters
o:SN A                 ASCII value of each char, sort the resulting list, assign to o

LbSu(aa@?C(o++i))
Lb                     Repeat b times:
  Su                   Swap u with:
    (a          )      The character of a at index:
      a@?              Find in a:
         C(o++i)       chr(ASCII value of next player from o)
                       (Subscripts wrap around, as in CJam, so no need for mod)

Pa                     Print the final lineup
"It is ".u."'s turn."  Current player (auto-printed)

มันจะเป็น 49 ถ้าฉันใส่ใจที่จะใช้SS(เรียงลำดับเป็นสตริง) ในเวลาเดียวกันกับที่ฉันทำSN(เรียงลำดับตัวเลข) ... อืมมอันตรายถึงการมีภาษาในการพัฒนา



0

Perl 5 , 102 + 1 (-n) = 103 ไบต์

s/\d+//;$t=$&;@p=sort'A',split//;for$i(1..$t){s/$p[$i%@p]/$p[--$i%@p]/}say"$_
It is $p[$t%@p]'s turn."

ลองออนไลน์!

อินพุต

ลำดับที่นั่งตามด้วยจำนวนรอบที่ไม่มีช่องว่าง:

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