В фокусе с 5 картами участвует маг, помощник которого дает им 4 показанные карты и одну скрытую в этом порядке, и маг должен угадать скрытую.
ВНИМАНИЕ: Решение ниже! Оставьте сейчас или испортитесь этим.
Решение
Хитрость в том, что пять карт даны в определенном порядке !
- 5 карт в указанном порядке.
- номер карты в (порядок номеров).
, где - номер карты, а - целое число, равно шагу карты справа от в , при необходимости перенося в начало.
- масть в (порядок мастей).
, где - номер карты, а - масть, обозначает карту с номером карты и мастью .
, гдеи б являются карты, правдаесли«s костюм находится слева от Ь » s костюм в S O , или их масти равны иНомер карты слева от Ь -х номер карты в N O .
, где и - карты, истинно, если ложно.
, где , и - карты, является индексом перестановки их упорядочения, указанного в таблице ниже:
Решение проблемы с 5-карточным фокусом заключается в следующем:
Соревнование
Все идет нормально. Однако выполнение вычислений, указанных выше, уже запрашивается здесь . Вместо этого ваша задача состоит в том, чтобы 5 карт в произвольном порядке упорядочить их должным образом. Это означает, что первые четыре карты на выходе будут представлять пятую. Другими словами, будьте помощником. Требования:
- .
- (то есть это должно быть возможно).
пример
Давайте рассмотрим набор 7H,2D,6D,5C,6C
. Прежде всего, мы берем 25 пар:
7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C
Затем мы явно удаляем 5 пар, которые содержат одну и ту же карту дважды, они не существуют в одной колоде:
7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C
Впоследствии, поскольку костюмы должны быть одинаковыми, разные костюмы в паре - это нет-нет:
2D, 6D 6D, 2D 5C, 6C 6С, 5С
Наконец, мы проверяем, можно ли перейти от первой карты ко второй, добавив максимум 6, удалив половину оставшихся пар:
2D, 6D 5C, 6C
Теперь у нас есть действительные пары: 2D,6D
и 5C,6C
. Первая карта каждой пары - это карта 1, а последняя - карта 5.
Мы собираемся пойти 5C,6C
сюда для легкости. Таким образом, весь набор состоит в 7H,2D,6D,5C,6C
удалении двух карт в выбранной нами паре 7H,2D,6D
. Эти карты будут представлять 6 - 5 = 1
, поэтому мы должны заказать их как «min, mid, max». 7H > 2D < 6D < 7H
или просто 2D < 6D < 7H
так у нас сейчас есть 2D,6D,7H
.
Последний шаг - собрать все это вместе, чтобы наш результат был 5C,2D,6D,7H,6C
.
Разъяснения
- Вы можете использовать
10
вместоT
. - Вы можете использовать один из
♠♥♦♣
,♤♡♢♧
или♠♡♢♣
вместоCDHS
, соответственно. - Это код-гольф , выигрывает самый короткий код.
Контрольные примеры
Вы можете вывести одно или несколько допустимых решений, включенных для каждого теста.
8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
... 8S,TD,TS,5C,QS
... TS,5C,8S,TD,QS
JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
... 4S,JD,KH,9D,8S
4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
... TH,4D,2C,4H,KH
... KH,4D,TH,2C,4H
3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
... 3S,KS,9H,KH,8S
... 8S,3S,9H,KH,KS
... KS,KH,9H,8S,3S
KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH
4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
... TD,4C,KC,QS,JD
AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D
AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
... AS,9C,2H,TC,3S
4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
... JS,JC,4C,8H,AS
4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
... 4H,QS,QC,AC,TH
источник
Ответы:
Node.js ,
190186180 байтПопробуйте онлайн!
Как?
Определение и сравнение номеров карт
"NS"
Генерация перестановок ввода
Тестирование костюмов
Первый очевидный тест - убедиться, что первая и последняя карты одной масти. Мы отвергаем перестановку, если они не равны.
Тестирование расстояния
Мы вычисляем расстояние между первым номером карты и последним номером карты с помощью:
Этот тест основан на том, как работает
sort()
алгоритм Node.js.sort()
Давайте рассмотрим следующий код:
У нас естьA < B (1 < 2 ), A < C (1 < 3 ) и B < C (2 < 3 ). Все сравнения, обработанные в функции обратного вызова, являются ложными иК просто умножается на 23 , Итак, мы в конечном итогек = 8 ,
Теперь, если мы сделаем:
Все сравнения теперь правдивы, что создает битовую маскук = 15 ,
Каждая перестановка генерирует уникальную битовую маску, которая отображается на уникальном расстоянии:
Данныйk мы можем преобразовать его в расстояние, выполнив:
Собрав все вместе, мы имеем следующий тест:
источник
Python 3 ,
260 248232 байтаПопробуйте онлайн!
-12 байт благодаря Эрику Outgolfer
-14 байт, удалив понимание списка
источник
Чистый ,
225220209 байтПопробуйте онлайн!
Как сложная функция
:: [[Char]] -> [[Char]]
, с некоторыми помощниками.Expanded:
источник
Рубин , 175 байт
Попробуйте онлайн!
Лямбда-функция, принимающая массив карт в виде строк
комментарии
источник
Желе , 41 байт
Монадическая ссылка, принимающая список списков символов, возвращающий список всех действительных аранжировок в том же формате.
Попробуйте онлайн!(нижний колонтитул форматирует результат как сетку, чтобы избежать неявной распечатки, выполняемой кодом Link при запуске в качестве полной программы)
Или посмотрите тестовый набор .
У меня есть скрытое подозрение, что другой подход будет гораздо более кратким. Я должен буду вернуться к этому вызову позже!
... хм, я еще раз покопался и получил еще 41 байт ( тест ):
источник