Вы и некоторые друзья играете в боулинг. Всего N котлов. Тем не менее, есть только N- 1 стульев, в которых можно сидеть. Решение простое: кто бы ни повернулся в данный момент, не получает стул. Затем, когда их очередь заканчивается, они садятся в кресло человека, который идет дальше.
Давайте возьмем пример. Скажем , Вы назвали , и ваши четверо друзей называются B , C , D и E . Каждый игрок движется в алфавитном порядке, поэтому вы должны идти первым. Поскольку здесь 5 игроков, есть только 4 места. Ваши друзья сидят на четырех местах в таком порядке:
CEBD
Вы идете, и вы получите удар! Теперь очередь за Б , так что вы сидите на его стуле. Теперь это выглядит так:
CEAD
Б идет. Gutterball! Затем он сидит в C месте «s и C идет следующий ход.
ШАРИК
то C сидит в D стула «s.
Британская европейская авиатранспортная компания
и D сидит в кресле E
BDAC
и наконец, E сидит в вашем кресле.
BDEC
Вы заметите, что теперь место каждого (псевдо) перетасовано. Вы должны узнать, после X поворотов, кто будет где сидеть?
вход
Ваша программа должна получить от пользователя два ввода: строку и число. Никаких подсказок не требуется. Строка будет состоять из 1-51 буквенных символов (BZ и az) без повторов. Это порядок, в котором ваши друзья решили сесть. Там не будет заглавной буквы А, потому что это вы, и вы всегда идете первым. Количество будет общим количеством раундов (не игр), в которые вы и ваши друзья играете. Это число будет положительным и разумного размера (менее 1000).
Выход
Ваша программа должна распечатать порядок, в котором ваши друзья сидят после поворота 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.
правила
Все идут в алфавитном порядке, причем заглавные буквы имеют приоритет над строчными.
Это код-гольф, поэтому применяются стандартные лазейки, а заявки оцениваются в байтах .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Ответы:
Pyth, 37 байт
Демонстрация онлайн: компилятор / исполнитель Pyth
Алгоритм основан на решении @ isaacg. Как и он, я начинаю с начального порядка мест и постоянно использую функцию
X
замены, чтобы заменить следующего игрока текущим игроком.Но в отличие от его реализации, которая заменяет символ следующего игрока текущим игроком в порядке рассадки, я использую его более широко. Я заменяю каждого персонажа текущего игрока следующим игроком, а каждого персонажа следующего игрока текущим игроком. Это достигается передачей обоим игрокам второго аргумента и опусканием третьего аргумента (
XG"ab")
вместоXG"a""b"
). Поскольку текущий игрок не является частью строки (он играет), первая замена не имеет никакого эффекта вообще. Но это позволяет мне генерировать обоих игроков одновременно, в то время как @isaacg должен генерировать их по отдельности.Еще одна сумасшедшая новая функция, которую я использую, - оператор присваивания. До недавнего времени
=N1
переводилась на языкN = 1
Python. Но в настоящее время это компилируется вassign('N',1)
. Эта функция присваиваетN
1 и возвращает значение (но не печатает его). Это позволяет сохранять промежуточные результаты, которые происходят, например, в операции сокращения. Используя это, я смог сохранить пару игроков, которые меняли позиции последними, и распечатать второго игрока.Детальное объяснение
источник
Pyth,
3938 байтЭто основано на повторных применениях операции поиска и замены
X
. Первый бит определяет функцию поискаy
, которая находитb
игрока в порядке игрока. Затем мы неоднократно выполняем замены, чтобы найти окончательный порядок рассадки и, наконец, распечатываем, чья это очередь.Забавно, что код для определения окончательного порядка размещения короче (18 байт), чем код для печати, чей это оборот (21 байт).
Код занимает строку посадки в первой строке STDIN, а количество оборотов - во второй.
Демонстрация.
Объяснение:
источник
%
, если вы вставляете только одну вещь. Даже++
бы сохранить один байт, но лучший способ (2 байта) используетp
:pyQ"It is ""'s turn
++
имеет тот же байт-счетчик , как%
иp
сохраняет только 1 байт.CJam,
494543 байтаЯ думаю, что это работает. Он просто запускает алгоритм как есть.
Попробуйте онлайн.
объяснение
источник
Питон 3, 110
Оптимизированная версия решения Sp3000 с использованием
replace
. СписокS
циклически повторяется, хотя буквы присутствуют по порядку. Мы выполняем многократные замены в данной строке каждого символаS
предыдущего.источник
Клип 10 ,
5956 байтпример
объяснение
Первым вводом является список игроков, назначенных переменной
x
.Второй вход - это число оборотов, которое получает программа
ny
.Спасибо Sp3000 за идею использования «заменить».
источник
Python 3, 128 байт
Занимает две строки ввода через STDIN - начальный порядок рассадки, затем количество оборотов.
По сути, это та же идея поиска и замены, что и в моем решении CJam . Единственная хитрость в том , что мы будем придерживаться
A
в задней части порядка боулинг и сделать наш индексi
индекс следующего котелка, таким образом , воспользовавшись индексации -1 и избежатьIndexError
s.Это немного меньше байтов в Python 2, но я публикую Python 3 для сравнения с решением OP.
источник
int(input())
в строке 4 становится ввод (-4), так что отменяется. Затем удалите скобки из печати и добавьте пробел в общей сложности 127. Я что-то упустил?exec
JavaScript (ES6) 116
116 байт как программа с вводом / выводом через всплывающее окно. 114 в качестве проверяемой функции.
Запустите фрагмент кода в Firefox для проверки.
источник
PowerShell, 168 байт
Я решил, что все мои ответы на этом сайте будут в PowerShell. Однажды у меня будет ответ, который может конкурировать ...
вызовите функцию так:
x Bb 2
источник
Этот ответ не победит, но я все равно его выброшу.
Python 3, 167 байт
источник
Пип , 54 байта
Не очень конкурентоспособный, но, по крайней мере, я могу показать изменчивые строки Пипа и команду Swap. Принимает порядок рассадки и количество раундов в качестве аргументов командной строки (которые присваиваются
a
иb
, соответственно).Объяснение:
Было бы 49 лет, если бы я удосужился реализовать
SS
(сортировать как строки) в то же время, что и яSN
(сортировать по числовому признаку) ... Что ж , опасности в разработке языка.источник
Python 2 , 105 байт
Попробуйте онлайн!
Гольф:
источник
Perl 5 , 102 + 1 (-n) = 103 байта
Попробуйте онлайн!
вход
Порядок рассадки с последующим числом поворотов без пробелов:
источник