Для целей этого вопроса колода карт форматируется следующим образом:
[
"AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
"AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD",
"AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH",
"AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
"J", "J"
]
Карты всегда форматируются как значения, за которыми следуют масти. Например, пиковый AS
туз. Два сингла J являются джокерами. Мы хотим перетасовать эту колоду карт, но она должна быть Superb ™.
Superb Shuffle ™ - это тот, в котором:
- Нет двух карт (кроме джокеров) одной масти рядом.
- Ни одна карта (кроме джокеров) не является смежной с одним и тем же значением.
- Ни одна карта (кроме джокеров) не является смежной с одним из смежных значений (на один выше или на один ниже в этом порядке, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Обратите внимание, что туз не может быть смежным ни с 2, ни с королем).
- Джокеры могут быть в любой позиции.
- Определение Superb Shuffle ™ не требует, чтобы карты находились в другом порядке каждый раз, когда они перетасовываются. Что не очень хорошо, но это Superb ™.
Потому что это Superb ™.
Примером может быть:
[
"AS", "5D", "9H", "KC", "2D", "6H", "10C", "QS", "3H", "7C", "9S",
"KD", "4C", "6S", "10D", "AC", "3S", "7D", "JH", "J", "4D", "8H",
"QC", "AD", "5H", "9C", "JS", "2H", "6C", "8S", "QD", "3C", "5S",
"9D", "KH", "2S", "6D", "10H", "J", "3D", "7H", "JC", "KS", "4H",
"8C", "10S", "AH", "5C", "7S", "JD", "2C", "4S", "8D", "QH"
]
Соревнование:
- Напишите некоторый код для выполнения превосходного перемешивания
- Используйте любой язык.
- Ввод может быть либо :
- колода карт, как описано выше, в том же порядке , что и массив или другая структура списка.
- Нет ввода (код генерирует колоду карт в этом порядке)
- На выходе должна быть полная колода карт в Superb Shuffle ™, как описано выше.
- Попытайтесь выполнить Superb Shuffle ™ с наименьшим количеством байтов.
- Ссылка на онлайн-переводчика, такого как Try It Online, является предпочтительной, но необязательной.
Счастливого тасования!
T
вместо10
?Ответы:
Japt,
654 байтаРазбивает входной массив на подмассивы каждого 16-го элемента и выравнивает.
Попытайся
источник
Рубин , 31 байт
Попробуйте онлайн!
Объяснение:
Я выбираю одну карту, затем пропускаю следующие 16 и начинаю с первой карты, когда достигаю последней карты колоды. 17 и 54 взаимно просты, поэтому я обязательно выберу все карты.
17-я позиция гарантированно будет другой масти, а разница в значении составляет не менее 2: 13-я (или 15-я) карта имеет то же значение и другую масть, поэтому, пропуская другие 4 (или 2), значение будет правильным ,
источник
Python 3 , 21 байт
Попробуйте онлайн!
Объяснение:
Та же идея, что и в моем ответе на Ruby, но в Python еще короче: я использую 17 колод и собираю каждую 17-ю карту.
источник
JavaScript, 35 байт
Попробуйте онлайн!
Принимая массив колоды в качестве входных данных, и заменяя каждое нечетное значение другой картой, находящейся на расстоянии «20 карт» в колоде.
источник
Java 10,
7265 байтАналогичен ответу Ruby @GB , но с использованием
i*7%54
массива результатов вместоi*17%54
массива ввода для сохранения байта.Попробуйте онлайн.
Объяснение:
источник
AS, 6S, JS, 3D, 8D, KD,
.Perl 6 ,
21 2018 байтСпасибо Брэду Гилберту за 2 байта за 2 байта
Попробуйте онлайн!
Еще один порт ответа ГБ .
Обратите внимание, что, хотя глобальная переменнаяТем не менее,$!
не сбрасывается между функциями, значение не имеет значения, так как любой порядок вывода действителен.$
это сброс.Объяснение:
источник
$
как и с$!
или$/
. Кроме того, если вы использовали$_
вместо@_
вы могли бы начать его.[…]
вместо@_[…]
сохранения других байт.05AB1E ,
975 байтPort of @GB 's Ruby answer , так что постарайтесь поддержать его!
-2 байта, печатая каждую карту с разделителем новой строки вместо переноса ее в список результатов
-2 байта благодаря @ Mr.Xcoder
Попробуйте онлайн.
Объяснение:
источник
ā17*è
должен сохранить еще 2 байтаJavaScript, 27
Еще один, основанный на ответе рубина
Отредактировано в явном сокращении
источник
T-SQL, 31 байт
Если вам не нужен дополнительный столбец в выводе, я могу уменьшить его до 29 байт :
Таким образом, вы можете проверить, что мой вывод «Superb», вот его колода:
(Создано с использованием нового дополнения SQL 2017
STRING_AGG
):Сложной частью для меня был не код выбора, а заполнение входной таблицы (которая разрешена для SQL в соответствии с нашими правилами ввода-вывода ).
Поскольку SQL по своей природе неупорядочен (он гарантирует только определенный порядок, если вы включите явное
ORDER BY
предложение), мне пришлось включить этот исходный порядок в качестве поля i во входную таблицу t . Это также означает, что я могу использовать его для сортировки, используя тот же «относительно простой» фактор / процесс, который используют все остальные. Я обнаружил, что этоi*7%54
работает так же хорошо, как иi*17%54
.Вот команды для настройки и заполнения таблицы ввода t , основанные на моем решении этого связанного вопроса :
источник
i
будет ли считаться дополнительным вкладом здесь?Желе ,
54 байтаПопробуйте онлайн!
Получается так, как
все остальные,кроме случайного парня , делают это, чтобы сэкономить байт :(Кредит в ГБ за их метод .
То, как я пошел ...
Попробуйте онлайн!
Как?
Зафиксируйте каждую другую карту и разбросайте ее вращением колоды, оставленной на 20 мест (18 и 22 места также работают; кроме того, действует как направление вращения, так и фиксирование нечетных или четных карт)
То есть (используя
T
для10
иrj
&bj
дляJ
s):источник
PowerShell 3.0,
3026 байт-4 благодаря
старому коду Mazzy в 30 байтах
Еще один порт метода ГБ.
источник
$args[(0..53|%{$_*17%54})]
.The input can be either:... in the same order, as *an array*
.$args
это массив. и вы можете использовать брызги . например$a=@("AS", ..., "J"); &{} @a
. Попытайся. :)&{
и}
. Вы можете сохранитьparam($d)0..53|%{$d[$_*17%54]}
в файл. и назовите этот файл без&{...}
Древесный уголь , 8 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Еще один порт ответа Ruby от @ GB. Объяснение:
источник
Красный , 44 байта
Попробуйте онлайн!
Еще одна интерпретация кода ГБ. Я добавляю 16 копий колоды к себе, а затем извлекаю каждую 17-ю карту.
источник