На самом деле никогда не было особой проблемы с ASCII-картами AFAIK. Итак, используя следующую колоду карт ASCII:
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): |
| ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
Возьмите два целых числа p
и в q
качестве входных данных; где p
- количество игроков и q
количество карт, которые получает каждый игрок.
- Случайным образом перетасуйте колоду карт (это неоднозначно, но означает, что все карты должны с одинаковой вероятностью появиться где-либо один раз).
- Раздайте 1 раунд карт на игрока, выводя
q
рядыp
карт в каждом ряду.
Правила:
- Результаты должны быть равномерно случайными, каждая карта должна иметь одинаковую вероятность появления в любом месте.
- Гарантируется, что у
0 < p*q <= 52 and p < 10
вас может быть неопределенное поведение для сценариев, где это не выполняется. - Вы должны вывести
q
ряд карточек сp
карточками на ряд. - Каждый столбец должен быть отделен от
|
(символ трубы, окруженный пробелами); Если вы выбрали другой символ, чем этот, объясните почему. Окрестности здесь не являются обязательными. - В каждой строке должно быть 1 или более символов новой строки между ними, более одной допустимо, 0 - нет (1 символ новой строки означает новую строку по умолчанию).
- Каждая строка должна быть помечена игроком, которому она принадлежит, в формате «Player N» (0 или 1 с индексированием - это нормально).
- Ни одна карта не может появиться более одного раза.
T
на десять.
Примеры:
Функция ( p=1,q=1
):
Player 1 # Can also be 0.
.------.
|2.--. |
| (\/) |
| :\/: |
| '--'2|
'------'
Функция ( p=2,q=1
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|2.--. | | |T.--. |
| (\/) | | | (\/) |
| :\/: | | | :\/: |
| '--'2| | | '--'T|
'------' | '------'
Функция ( p=2,q=2
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|J.--. | | |3.--. |
| (\/) | | | :/\: |
| :\/: | | | :\/: |
| '--'J| | | '--'3|
'------' | '------'
.------. | .------.
|8.--. | | |6.--. |
| :(): | | | :/\: |
| ()() | | | (__) |
| '--'8| | | '--'6|
'------' | '------'
Художественный кредит шрифту на: http://patorjk.com/software/taag
code-golf
ascii-art
random
card-games
Урна волшебного осьминога
источник
источник
Each row must have 1 or more newlines inbetween them, more than one is acceptable, 0 is not.
... Но в ваших тестовых примерах нет новых строк между карточками ..?Ответы:
Древесный уголь ,
142133125 байтПопробуйте онлайн! Ссылка на подробную версию кода. Изменить: Сохранение 9 байтов путем улучшения моего кода случайной выборки. Сэкономили еще 8 байтов, улучшив код печати моего костюма. Объяснение:
Прочитайте количество карт в
q
.Цикл над каждым игроком.
Если это не первый игрок, выведите вертикальную линию между предыдущим и этим игроком.
Распечатать номер игрока.
Переверните каждую карту.
Распечатайте край карты.
Выберите карточный индекс, который еще не был выбран, и добавьте его в список выбранных карточных индексов.
Выберите и напечатайте ранг карты, циклически индексируя в строку действительных рангов карты (
2-9, T, J, Q, K, A
).Распечатать верхнюю часть костюма.
Напечатайте середину костюма, нарезав на ниточку. Срез начинается с карточного индекса по модулю 4 и занимает каждый 4-й символ до тех пор, пока не закончится строка (или не
f
будет достигнут = 1000-й символ). Поскольку 4 и 13 взаимно просты, это гарантирует, что все 52 карты возможны.Распечатайте нижнюю часть масти и копию ранга, а затем перейдите к точке, которая не слишком далеко от копии ранга, начала следующей карты или начала разделительной линии для следующий игрок
источник
Python 2 , 357 байт
Попробуйте онлайн!
Понятия не имею.
источник
Желе , 126 байт
Попробуйте онлайн!
источник
JavaScript (ES6),
328... 312 байтПринимает ввод в синтаксисе карри
(p)(q)
. Игроки 0 проиндексированы.демонстрация
Показать фрагмент кода
Как?
Это рекурсивная функция, строящая вывод снизу вверх. Во время основной части, в которой вытягиваются карты,
i
инициализируетсяp*q*6
и уменьшается до тех пор, пока не достигнет0
. Затем мы рисуем заголовок, уменьшаяi
его до тех пор, пока он не достигнет-p
.Искусство ASCII разбито на маленькие кусочки, хранящиеся в массиве
a[]
. В приведенной ниже таблице описывается содержимоеa[]
, облегчающее понимание остальной части кода.Отформатировано и прокомментировано
источник
Python 2 ,
382358346338332 байтаПопробуйте онлайн!
источник
SOGL V0.12 , 106 байт
Попробуй здесь!
Создание карты:
Перетасовка:
Работа:
источник
Рубин, 262 байта
Сложнее следовать, но короче!
Рубин, 279 байт
Создает формат для каждой строки, а затем использует
%
оператор likesprintf
для его заполнения.Факт, что ценность карты появляется в каждой 3-й строке, удобен. Значения карт представлены в шестнадцатеричном формате с
01BC
заменой цифр наTJQK
.Сохранено 4 байта из символов костюма, учитывая, что верхняя часть алмазов и пиков одинаковы, но добавлены 2 обратно для символов
-4
концаj%4*4-4
кода масти -4 0 4 или 8, где[-4,4]
означает 4 символа, начиная с 4-го последнего символа в строка.Возможно, сэкономит еще несколько байтов. Необходимость повторять код для идентификации игрока ужасна.
источник
PHP, 509 байт
Попробуйте онлайн!
Это моя первая попытка кода в гольф, так что, вероятно, его можно значительно улучшить. Я подумал, что мне нужно с чего-то начать. :)
источник
Java (OpenJDK 8) ,
784835843826815781775 байтПопробуйте онлайн!
Почему понизить, это соответствует спецификации
источник
Function<String,String>
: последний очень, очень дорогой. Как при создании, так и при использовании.n[c]=t<2?"A":t<10?""+t:""+"TJQK".charAt(t-10)
;for(j=0;j<p;j++){o+=...;l++;}
может бытьfor(j=0;j<p;l++,j++)o+=...;
; Вы можетеreturn o;
вместо тогоSystem.out.print(o);
, чтобы использовать секундуFunction
вместоConsumer
;,y=p*q
может быть удален, и вы можете использоватьp*q
два раза вместоy
. Без сомнения, в гольфе гораздо больше, но у меня нет времени сейчас на этоs[l]<2?":/\\:":s[l]<3?":/\\:"
может бытьs[l]<3?":/\\:"
иs[i*p+j]<1?":\\/:":s[i*p+j]<2?":\\/:"
может бытьs[i*p+j]<2?":\\/:"
. @ OlivierGrégoire И я знаю, что, скорее всего, его можно будет почти наполовину сократить, поэтому я понимаю отрицательный голос. Но это в основном нехватка опыта, и на самом деле не чтение всех советов несколько раз. Некоторые из вещей в ответе, которые я делал в прошлом, также, и это не очень простая задача для Java. Кстати, если у вас есть ответ размером 400-450 байт, почему бы вам не опубликовать его как отдельный ответ (если он достаточно разный)? У тебя будет мой голос. ;)Python 3, 332 байта
источник