Стандартная доска Scrabble - это сетка 15 × 15 для размещения буквенных плиток. Большинство пробелов являются пустыми, но некоторые представляют собой двойные баллы (розовый), тройные баллы (красный), двухбуквенные (светло-голубой) и трехбуквенные (синие). Обычно в центре находится звезда (которая считается двойной оценкой).
Напишите программу или функцию, которая выводит стандартную пустую доску Scrabble в форме ASCII, где:
.
представляет собой пустое пространствоD
представляет счет двойного словаT
представляет тройную оценку словаd
представляет двойную буквуt
представляет тройной счет буквыX
представляет звезду центра
То есть ваш точный вывод должен быть
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T
необязательно сопровождаемый завершающим переводом строки.
Самый короткий код в байтах побеждает.
источник
X
и не*
представлять звезду? : o*
слишком высокий и могучий★
? : DОтветы:
MATL ,
595452 байтаПопробуйте онлайн!
объяснение
Код состоит из трех основных этапов:
Создать матрицу 8x8
Расширить его до матрицы 15х15
Индексируйте строку
'DtdTX.'
с этой матрицей, чтобы получить желаемый результат.Шаг 1
Теперь нам нужно заполнить ненулевые недиагональные записи. Мы будем заполнять только те, что ниже диагонали, а затем использовать симметрию, чтобы заполнить остальные.
Для заполнения каждого значения мы используем линейное индексирование (см. Этот ответ , фрагмент длины 12). Это означает доступ к матрице, как если бы она имела только одно измерение. Для матрицы 8 × 8 каждое значение линейного индекса относится к записи следующим образом:
Итак, следующее присваивает значение 4 нижнему левому элементу:
Код для значения 3 аналогичен. В этом случае индекс является вектором, потому что нам нужно заполнить несколько записей:
И для 2:
Теперь у нас есть матрица
Для заполнения верхней половины мы используем симметрию:
Шаг 2
Стек теперь содержит матрицу 8 × 8, полученную на шаге 1. Чтобы расширить эту матрицу, мы используем индексирование, на этот раз в двух измерениях.
Шаг 3
Стек теперь содержит матрицу 15 × 15, полученную на шаге 2.
источник
Рубин,
10397 байтСпасибо Митчу Шварцу за 6-байтовое улучшение итераций.
Подобный, но значительно отличающийся подход к моему первоначальному ответу ниже. Как и прежде, мы используем тот факт, что письмо должно быть напечатано, если
i%7-j%7
оно равно 0 или 4. Но здесь мы сохраняем эту разницуd
и используем формулуi+j+d*d/3
чтобы дать целое число, уникальное (с точностью до симметрии) этому конкретному цветному квадрату. Тогда мы просто смотрим в волшебную строку.Просто для удовольствия: C версия этого подхода, 120 байт
Руби,
115113 байт2 байта сохранены благодаря Value Ink.
объяснение
Происхождение считается центром доски.
Письмо должно быть напечатано, если координаты x и y квадрата имеют величины, которые идентичны или отличаются на 4. Единственные исключения находятся на внешнем краю доски, но они следуют той же схеме, что и центральная строка / столбец таблицы. доска, поэтому мы можем использовать то же условие, если мы берем координаты х и у по модулю 7.
Выбор отображаемой буквы основан на координате минимальной величины. Таким образом, двойные и тройные числа в (1,5) и (2,6) следуют тому же правилу, что и в (1,1) и (2,2), и получаются из 7-символьной строки.
"#{formula}dtDDDD"
Это не охватывает все варианты для квадратов ребер и центральной линии, поэтому первый символ строки рассчитывается по формуле'XdTdT'[(i+j)/3]
.источник
(k=-7..7).map{|y|k.map{...
на 2 байта короче, чем ваша двойная-7.upto(7)
техника.a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
Брейнфук ,
598596590 байтГольф советы приветствуются.
объяснение
Инициализируйте ленту на [10 116 68 46 100 84 92], т.е. [nl t D. д т \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Затем каждая строка печатает одну строку доски.
Средняя линия также уменьшается
92 to 88 i.e. \ to X
Попробуйте онлайн!
источник
PowerShell v2 +, 147 байт
Использует преимущества того, как значение
Write-Output
по умолчанию в конце выполнения программы обрабатывает массивы (т. Е. Вставляет новую строку между элементами). Может быть, лучший способ создать середину доски - я все еще работаю над этим.Первая строка выводит верхнюю строку доски, также сохраняя ее в
$x
для последующего использования.Следующая строка генерирует все строки двойного слова, беря левую «половину» каждой, отражая их (
-join$_[6..0]
инструкцию) и сохраняя их как элементы в массиве$y
.Следующая строка - средний ряд, с
X
серединой, благодаря-replace
.Следующая строка выводит
$y
в обратном порядке, давая нам нижние строки двойного слова.Финальная строка просто
$x
снова.источник
> <> (Рыба), 153 байта
Ужасно, ужасно, неэффективный способ делать вещи. В настоящее время ищем способ укоротить его, отражая как по горизонтали, так и по вертикали.
Попробуйте онлайн! (Если вы не хотите быть там весь день, убедитесь, что вы установили максимальную скорость выполнения или работаете без анимации.)
источник
C
146145142138 байтПопробуйте онлайн!
1 байт5 байтов сохранено благодаря Level River StЭто использует диагональный рисунок платы для кодирования. В частности, если мы возьмем верхний левый квадрант доски и выровняем диагональ, мы получим:
... много столбцов теперь выстраиваются в линию. Если мы закодируем столбцы в строке следующим образом:
... то плата шаблон может быть свернут в строку в 15 символов:
T..12..0..12..0
; и нам просто нужны правильные отображения для каждого ряда.Имея это в виду, вот расширенная версия с комментариями:
источник
i,r,c;f()
все в порядке. 2.(i%16-7)%8
->i%16-7&7
3. Я думаюc-48
->c%4
работает, не так ли?f()
потребуется дополнительнаяi=0
функция внутри функции, чтобы она ничего не сохраняла.%8
использует отрицательные модули реализации для сопоставления% 16 значений от 0..15 до -7..7;&7
отобразит это в 0..7,0..7). Но да, 3 будет абсолютно работать ... будет обновляться, когда я получу шанс05AB1E ,
5753 байтаКод
Использует кодировку CP-1252 . Попробуйте онлайн!
Объяснение (устарело)
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
Распаковывает на этот номер:С
4ÝJ".TdtD"‡
помощью этого большого числа мы транслитерируем следующее:Мы раздваиваем всю строку, оставляя строку и строку перевернутыми в стеке, и соединяем их,
"X"
используяý
. Мы разбиваем всю строку на части по 15 с помощью th-15ô
кода и соединяем весь массив с помощью новых строк»
.источник
û€û
должен быть встроенным;).Python 3, 138 байт
источник
list(map(A))
на[*map(A)]
, экономит 3 байта (требуется Python 3.5+).05AB1E ,
4944 байтаПопробуйте онлайн!
Разъяснение:
От себя:
1003000104000200004000303004000300004000020002000030003010030005
Разделить на куски по 8, палиндромизировать каждый.
Палиндромиз снова.
Заменить цифры на символы.
Другая идея (кто-то попробует это в MATL)
Видя, что ВСЁ гарантированно имеет промежуток между ними ...
Подсчитайте количество нулей между каждой частью:
131424334342233135 => w\F6ß¿
Взятие отсчетов нулей проходит:
23134312344343123 => ì:¼˜¾
Тогда вы расшифровываете и переносите их вместе.
Использование их в 05AB1E (приводит к увеличению на 5 байт):
05AB1E , 27 байт
Попытайся...
Meta-golfed entry:
05AB1E , 104 байта
Попытайся!
Мета-golfed с помощью моего мета-гольфист для ASCII искусства: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
источник
Javascript (ES6), 150 байт
Как это работает
Строка
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
описывает доску от ее верхнего левого угла до квадрата непосредственно перед 'X', с последовательными пустыми квадратами, закодированными как цифры.replace()
Функция и распаковывает пустые квадраты и строит строку зеркалаr
для нижней части доски. Затем обе части соединяются и символы возврата каретки вставляются каждые 15 символов.демонстрация
источник
JavaScript (ES6), 221 байт
Так как я занялся созданием этого, я решил опубликовать его в любом случае, даже несмотря на то, что существует явно превосходящее решение.
источник
C 234 байта
Вот вывод:
источник
Древесный уголь , 33 байта (неконкурентный)
Вся заслуга в этом ответе принадлежит @DLosc .
Попробуйте онлайн!
Подробный
Попробуйте онлайн!
источник
Haskell, 114 байт
g
в неточечной версии естьg x = x ++ (reverse (init x))
. Он применяется один раз на (половину) строки и снова на результат.источник
sh + coreutils, 119 байт
Это бинарный файл. Показано как hexdump:
Вот форма base64, чтобы вы могли скопировать / вставить ее:
источник
C
230228 байтпопробуйте это на Ideone
Это попытка улучшить исходную опубликованную версию C, в которой четверть доски сохранена в массиве C. Не так коротко, как я надеялся. В этой версии хранится только одна восьмая часть доски.
Ungolfed:
источник
GNU sed,
219205 байтИспользуя зеркальную симметрию платы, вторая половина является первой, которая была сохранена в обратном порядке в пространстве удержания.
источник