Ty i niektórzy kumple idziecie na kręgle. W sumie jest N meloników. Jednak są tylko krzesła N- 1, na których można usiąść. Rozwiązanie jest proste: ktokolwiek przy tej turze nie dostanie krzesła. Następnie, kiedy ich kolej się kończy, siadają na krześle osoby, która idzie dalej.
Weźmy przykład. Załóżmy, że są nazwane i twoi przyjaciele są cztery nazwie B , C , D i E . Każdy gracz porusza się w kolejności alfabetycznej, więc musisz iść pierwszy. Ponieważ jest 5 graczy, są tylko 4 miejsca. Twoi znajomi siedzą na czterech miejscach w tej kolejności:
CEBD
Idź i dostaniesz strajk! Teraz kolej B , więc usiądź na jego krześle. Teraz wygląda to tak:
CEAD
B idzie. Piłka do rynny! Potem siada na miejscu C , a C idzie w następnej turze.
KORALIK
następnie C siada na krześle D.
BEAC
a D siedzi na krześle E.
BDAC
i na koniec E siedzi na twoim krześle.
BDEC
Zauważysz, że teraz każde miejsce jest (pseudo) tasowane. Musisz się dowiedzieć, po X zwrotach, kto będzie siedzieć?
Wkład
Twój program musi pobrać dwa dane wejściowe od użytkownika, ciąg znaków i liczbę. Nie są wymagane żadne monity. Ciąg będzie składał się z 1-51 znaków alfabetycznych (BZ i az) bez powtórzeń. Jest to kolejność, w jakiej usiądą Twoi znajomi. Nie będzie wielkiej litery A, ponieważ to ty, i zawsze idziesz pierwszy. Liczba będzie całkowitą liczbą rund (nie gier), w które Ty i Twoi znajomi gracie. Liczba ta będzie dodatnia i ma rozsądny rozmiar (mniej niż 1000).
Wydajność
Twój program musi wydrukować kolejność, w której siedzą Twoi znajomi po X kolejkach, i czyja to kolej. Tak na przykład, jeśli po X odwraca kolejność była BEDGCAHF i było Z kolej „s, program musi wydrukować dokładnie tak:
BEDGCAHF
It is Z's turn.
Oto kilka przykładowych danych wejściowych i wyjściowych.
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.
Zasady
Wszyscy idą w kolejności alfabetycznej, a wielkie litery mają pierwszeństwo przed małymi literami.
To jest golf golfowy, więc obowiązują standardowe luki, a zgłoszenia są oceniane w bajtach .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Odpowiedzi:
Pyth, 37 bajtów
Demonstracja online: Pyth Compiler / Executor
Algorytm jest trochę oparty na rozwiązaniu @ isaacg. Podobnie jak on, zaczynam od początkowej kolejności miejsc i wielokrotnie korzystam z funkcji
X
zamiany, aby zastąpić następnego gracza obecnym graczem.Ale w przeciwieństwie do jego implementacji, która zastępuje znak następnego gracza aktualnym graczem w kolejności miejsc siedzących, używam go w szerszym zakresie. Zastępuję każdy znak obecnego gracza kolejnym graczem i każdy znak następnego gracza przez bieżącego gracza. Odbywa się to poprzez przekazanie obu graczy jako drugiego argumentu i pominięcie trzeciego argumentu (
XG"ab")
zamiastXG"a""b"
). Ponieważ obecny gracz nie jest częścią struny (gra), pierwsza wymiana nie ma żadnego efektu. Ale pozwala mi to na generowanie obu graczy jednocześnie, podczas gdy @isaacg musi je generować indywidualnie.Kolejną szaloną nową funkcją, której używam, jest operator przypisania. Do niedawna
=N1
został przetłumaczony naN = 1
, który był wykonywany za pomocą Pythona. Ale obecnie się kompilujeassign('N',1)
. Ta funkcja przypisujeN
1 i zwraca wartość (ale nie drukuje jej). Umożliwia to zapisywanie wyników pośrednich, które występują na przykład w operacji redukcji. Dzięki temu mogłem zapisać parę graczy, którzy zmienili pozycje na końcu i wydrukować drugiego gracza.Szczegółowe wyjaśnienie
źródło
Pyth,
3938 bajtówOpiera się to na całym powtarzane aplikacje na Znajdowanie i zamienianie operacji
X
. Pierwszy bit definiuje funkcję wyszukiwaniay
, która znajdujeb
odtwarzacz w kolejności graczy. Następnie wielokrotnie wykonujemy zamiany, aby znaleźć ostateczną kolejność miejsc, a na końcu drukować, czyja to kolej.Zabawne jest, że kod do znalezienia ostatecznej kolejności miejsc jest krótszy (18 bajtów) niż kod do wydrukowania, którego kolejność (21 bajtów).
Kod pobiera łańcuch miejsca siedzącego w pierwszym wierszu STDIN, a liczbę zwojów w drugim wierszu.
Demonstracja.
Wyjaśnienie:
źródło
%
, jeśli wstawisz tylko jedną rzecz. Nawet++
zaoszczędziłby jeden bajt, ale najlepszym sposobem (2 bajty) jest użyciep
:pyQ"It is ""'s turn
++
Ma więc tę samą liczbę bajtów%
ip
zapisuje tylko 1 bajt.CJam,
494543 bajtówMyślę, że to działa. Po prostu uruchamia algorytm bez zmian.
Wypróbuj online.
Wyjaśnienie
źródło
Python 3, 110
Zoptymalizowana wersja rozwiązania Sp3000 wykorzystująca
replace
. ListaS
zmienia się cyklicznie, ale litery są w kolejności. Wykonujemy wielokrotne zamiany w danym ciągu każdego znakuS
na poprzedni.źródło
Klip 10 ,
5956 bajtówPrzykład
Wyjaśnienie
Pierwszym wejściem jest lista graczy przypisana do zmiennej
x
.Drugie wejście to liczba zwojów, które program uzyskuje
ny
.Dziękujemy Sp3000 za pomysł użycia „zamień”.
źródło
Python 3, 128 bajtów
Pobiera dwa wiersze danych wejściowych za pośrednictwem STDIN - początkowa kolejność siedzeń, a następnie liczba zwojów.
Jest to w zasadzie ten sam pomysł wyszukiwania i zamiany jak w moim rozwiązaniu CJam . Jedyną trudną częścią jest to, że trzymamy
A
się z tyłu kolejności kręgli i robimy naszemu indeksowii
indeks następnego melonika, wykorzystując w ten sposób indeksowanie przez -1 i unikającIndexError
s.Jest to kilka bajtów krótszych w Pythonie 2, ale wysyłam Python 3 do porównania z rozwiązaniem OP.
źródło
int(input())
w wierszu 4 stają się danymi wejściowymi (-4), co powoduje ich anulowanie. Następnie usuń nawiasy z wydruku i dodaj spację w sumie 127. Czy czegoś brakuje?exec
JavaScript (ES6) 116
116 bajtów jako program z I / O poprzez wyskakujące okienko. 114 jako funkcja do przetestowania.
Uruchom fragment kodu w przeglądarce Firefox, aby go przetestować.
źródło
PowerShell, 168 bajtów
Zdecydowałem, że wszystkie moje odpowiedzi na tej stronie będą w PowerShell. Pewnego dnia otrzymam odpowiedź, która może konkurować ...
wywołaj funkcję w ten sposób:
x Bb 2
źródło
Ta odpowiedź nie wygra, ale i tak ją wyrzucę.
Python 3, 167 bajtów
źródło
Pip , 54 bajty
Niezbyt konkurencyjny, ale przynajmniej mogę pochwalić się zmiennymi ciągami Pip i poleceniem Zamień. Bierze porządek miejsc i liczbę rund jako argumenty wiersza poleceń (które są przypisywane odpowiednio do
a
ib
).Wyjaśnienie:
Byłoby 49, gdybym zadał sobie trud zaimplementowania
SS
(sortowania jako ciągów) w tym samym czasie, co zrobiłemSN
(sortowania numerycznego) ... Ach, niebezpieczeństwa związane z rozwojem języka.źródło
Python 2 , 105 bajtów
Wypróbuj online!
Golf z:
źródło
Perl 5 , 102 + 1 (-n) = 103 bajty
Wypróbuj online!
Wkład
Kolejność siedzenia, a następnie liczba zwojów bez spacji:
źródło