Bạn bè của bạn sẽ ngồi ở đâu?


25

Bạn và một vài người bạn đang đi chơi bowling. Có tổng cộng N Bowlers. Tuy nhiên, chỉ có ghế N -1 để ngồi. Giải pháp rất đơn giản: bất cứ ai quay đầu hiện tại đều không có ghế. Rồi khi đến lượt của họ, họ ngồi vào ghế của người đi bên cạnh.

Hãy lấy một ví dụ. Say You được đặt tên A , và bốn người bạn của bạn được đặt tên B , C , D , và E . Mỗi người chơi di chuyển theo thứ tự bảng chữ cái, vì vậy bạn phải đi trước. Vì có 5 người chơi nên chỉ có 4 chỗ. Bạn bè của bạn ngồi trong bốn chỗ theo thứ tự này:

CEBD

Bạn đi, và bạn sẽ nhận được một cuộc đình công! Đó là B 's lần lượt tiếp theo, vì vậy bạn ngồi trên ghế của mình. Bây giờ nó trông như thế này:

CEAD

B đi. Máng xối! Sau đó, ông ngồi trong C tại chỗ 's, và C đi lần lượt tiếp theo.

VÒI

sau đó C ngồi trên ghế của D.

BEAC

D ngồi trên ghế của E

BDAC

và cuối cùng, E ngồi trên ghế của bạn.

BDEC

Bạn sẽ nhận thấy rằng bây giờ chỗ ngồi của mọi người (giả) bị xáo trộn. Bạn phải tìm hiểu, sau khi quay X , ai sẽ ngồi ở đâu?

Đầu vào

Chương trình của bạn phải lấy hai đầu vào từ người dùng, một chuỗi và một số. Không cần nhắc nhở. Chuỗi sẽ là 1-51 ký tự chữ cái (BZ và az) không lặp lại. Điều này thể hiện thứ tự bạn bè của bạn đã chọn để ngồi. Sẽ không có chữ hoa A vì đó là bạn và bạn luôn đi trước. Số lượng sẽ là tổng số vòng (không phải trò chơi) mà bạn và bạn bè của bạn chơi. Con số này sẽ dương và có kích thước hợp lý (dưới 1000).

Đầu ra

Chương trình của bạn phải in ra thứ tự mà bạn bè của bạn đang ngồi sau khi X quay, và đó là lượt của ai. Vì vậy, ví dụ, nếu sau khi X chuyển đơn hàng là BEDGCAHF và đến lượt của Z , chương trình của bạn phải in chính xác điều này:

BEDGCAHF
It is Z's turn.

Dưới đây là một vài mẫu đầu vào và đầu ra.

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.

Quy tắc

  • Mọi người đều đi theo thứ tự bảng chữ cái, với chữ in hoa được ưu tiên hơn chữ thường.

  • Đây là môn đánh gôn, vì vậy các sơ hở tiêu chuẩn được áp dụng và các bài nộp được tính theo byte .


1
Tôi đã dành hàng giờ làm việc này cho brainflak. Tôi chỉ nhận thấy rằng tôi đã làm sai.
Christopher

1
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Christopher

Nó xáo trộn nó và mục đầu tiên trên stack là câu trả lời.
Christopher

Đó là điều làm tôi ngạc nhiên đối với bạn: P
Christopher

Câu trả lời:


3

Bình thường, 37 byte

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

Trình diễn trực tuyến: Trình biên dịch / thực thi Pyth

Thuật toán này dựa trên giải pháp của @ isaacg. Giống như anh ấy, tôi bắt đầu với thứ tự chỗ ngồi ban đầu và liên tục sử dụng chức năng Xthay thế của để thay thế người chơi tiếp theo với người chơi hiện tại.

Nhưng không giống như cách thực hiện của anh ta, thay thế char của người chơi tiếp theo bởi người chơi hiện tại theo thứ tự chỗ ngồi, tôi sử dụng nó theo cách rộng hơn. Tôi thay thế từng char của người chơi hiện tại bằng người chơi tiếp theo và mỗi char của người chơi tiếp theo bởi người chơi hiện tại. Điều này được thực hiện bằng cách chuyển cả hai người chơi thành đối số thứ hai và bỏ qua đối số thứ ba ( XG"ab")thay vì XG"a""b"). Vì người chơi hiện tại không phải là một phần của chuỗi (anh ta đang chơi), nên sự thay thế đầu tiên không có tác dụng gì cả. Nhưng nó cho phép tôi tạo cả hai người chơi cùng một lúc, trong khi @isaacg phải tạo riêng từng người chơi.

Một tính năng mới điên rồ khác mà tôi sử dụng là toán tử gán. Cho đến gần đây =N1đã được dịch sang N = 1, được thực thi bằng Python. Nhưng ngày nay nó biên dịch thành assign('N',1). Hàm này gán Nvới 1 và trả về giá trị (nhưng không in nó). Điều này cho phép lưu kết quả trung gian, ví dụ xảy ra trong một hoạt động giảm. Bằng cách này, tôi có thể lưu trữ cặp cầu thủ đã thay đổi vị trí cuối cùng và in trình phát thứ hai.

Giải thích chi tiết

                      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

Bình thường, 39 38 byte

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

Điều này dựa trên các ứng dụng lặp đi lặp lại của hoạt động tìm và thay thế , X. Bit đầu tiên xác định chức năng tra cứu y, tìm thấy trình phát bthứ tự theo thứ tự trình phát. Sau đó, chúng tôi liên tục thực hiện các thay thế để tìm thứ tự chỗ ngồi cuối cùng, và cuối cùng in ra lần lượt của nó.

Thật thú vị, mã để tìm thứ tự chỗ ngồi cuối cùng ngắn hơn (18 byte) so với mã để in có lượt của nó (21 byte).

Mã này lấy chuỗi chỗ ngồi trên dòng đầu tiên của STDIN và số lần quay thứ hai.

Trình diễn.

Giải trình:

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 Cảm ơn bạn đã bắt được.
isaacg 04/05/2015

Không bao giờ sử dụng %, nếu bạn chỉ chèn một điều. Thậm chí ++sẽ tiết kiệm được một byte, nhưng cách tốt nhất (2 byte) là sử dụng p:pyQ"It is ""'s turn
Jakube

Rất tiếc. Bỏ lỡ điểm ở cuối. Vì vậy, ++có cùng số byte như %pchỉ lưu 1 byte.
Jakube

7

CJam, 49 45 43 byte

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

Tôi nghĩ rằng điều này làm việc. Nó chỉ chạy các thuật toán như là.

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

Giải trình

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

Trăn 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)

Một phiên bản tối ưu hóa của giải pháp Sp3000 sử dụngreplace . Danh sách Schu kỳ mặc dù các chữ cái trình bày theo thứ tự. Chúng tôi thực hiện thay thế lặp đi lặp lại trong chuỗi đã cho của từng ký tự của Slần trước.


Chơi tốt, mọi lúc :)
Sp3000

@ Sp3000 Tôi đã sử dụng giải pháp của bạn mặc dù.
xnor

3

Clip 10 , 59 56 byte

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

Thí dụ

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

Giải trình

Đầu vào đầu tiên là danh sách người chơi, được gán cho biến x.

Đầu vào thứ hai là số lượt mà chương trình thu được 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           -.

Cảm ơn Sp3000 cho ý tưởng sử dụng "thay thế".


3

Python 3, 128 byte

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

Thực hiện hai dòng đầu vào thông qua STDIN - thứ tự chỗ ngồi ban đầu sau đó số lượt.

Về cơ bản, đây là ý tưởng tìm kiếm và thay thế tương tự như giải pháp CJam của tôi . Phần khó khăn duy nhất là chúng tôi dán Aở mặt sau của thứ tự bowling và làm cho chỉ số của chúng tôi trở ithành chỉ số của cung thủ tiếp theo , do đó tận dụng việc lập chỉ mục bằng -1 và tránh IndexErrors.

Đây là một vài byte ngắn hơn trong Python 2, nhưng tôi đang đăng Python 3 để so sánh với giải pháp của OP.


Python 2 có những cải tiến gì? Tôi thấy rằng đầu vào trên dòng 1 trở thành raw_input (+4) và int(input())trên dòng 4 trở thành đầu vào (-4) để hủy bỏ. Sau đó xóa dấu ngoặc đơn khỏi bản in và thêm khoảng trắng cho tổng số 127. Tôi có thiếu thứ gì không?
DJMcMayhem

@DJMcMayhem Bạn đã quên dấu ngoặc đơn choexec
Sp3000

2

JavaScript (ES6) 116

116 byte là chương trình với I / O thông qua cửa sổ bật lên. 114 là một chức năng có thể kiểm tra.

Chạy đoạn mã trong Firefox để kiểm tra.

// 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 byte

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."}

Tôi đã quyết định tất cả các câu trả lời của mình trên trang web này sẽ có trong PowerShell. Một ngày nào đó tôi sẽ có câu trả lời có thể cạnh tranh ...

gọi hàm như thế này: x Bb 2


1

Câu trả lời này sẽ không chiến thắng, nhưng dù sao tôi cũng sẽ ném nó ra.

Python 3, 167 byte

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 byte

Không cạnh tranh lắm, nhưng ít nhất tôi có thể thể hiện các chuỗi có thể thay đổi của Pip và lệnh Hoán đổi. Lấy thứ tự chỗ ngồi và số vòng làm đối số dòng lệnh (được gán cho ab, tương ứng).

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

Giải trình:

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)

Sẽ là 49 nếu tôi bận tâm thực hiện SS(sắp xếp theo chuỗi) cùng lúc tôi đã làm SN(sắp xếp số) ... À, sự nguy hiểm của việc có một ngôn ngữ đang phát triển.


1

Python 2 , 105 byte

a,s='A',input()
exec"b=a<max(s)and min(e for e in s if e>a)or'A';s=s.replace(b,a);a=b;"*input()
print s,b

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

Sân gôn của:

s=input()
n=input()
a='A'
for i in range(n):
 try:
  b=min(e for e in s if e>a)
 except:
  b='A'
 s=s.replace(b,a)
 a=b
print s
print b

0

Perl 5 , 102 + 1 (-n) = 103 byte

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."

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

Đầu vào

Thứ tự chỗ ngồi, theo sau là số lượt không có chỗ trống:

SEatingOrder###
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.