Монопольный совет
Для этого испытания кода-гольфа мы будем строить настольную игру «Монополия».
Правила:
- Не принимайте никаких данных.
- Выведите доску 11x11, где каждый символ ASCII, образующий доску, является первой буквой каждого пробела в американской версии монопольной доски.
- Символы должны быть разделены пробелами.
Go
должно начаться в правом нижнем углу.
Точная строка для производства
F K C I I B A V W M G
N P
T N
C C
S P
P S
V C
S P
E L
S B
J C V C O R I B C M G
Обратите внимание, что справа налево внизу квадраты выглядят следующим образом:
G --> Go
M --> Mediterranean Avenue
C --> Community Chest
B --> Baltic Avenue
I --> Income Tax
...
J --> Jail
Редактировать Вау! вам, ребята, наверняка понравился этот! :)
code-golf
string
ascii-art
kolmogorov-complexity
board-game
jacksonecac
источник
источник
Ответы:
Сетчатка , 74 байта
Третья, последняя и последняя строки должны содержать один пробел.
Попробуйте онлайн!
объяснение
Это заменяет (пустой) ввод строкой во второй строке.
Это разделенная стадия, которая разбивает строку вокруг совпадений регулярного выражения
(._.)
(то есть любых трех символов с символом_
в середине). Причина, по которой мы помещаем все регулярные выражения в группу, состоит в том, что разделенные этапы также возвращают результаты захвата групп. Например , расщеплениеabcd
вокругbc
дает[a, d]
, но расщепление его вокругb(c)
дает[a, c, d]
. Таким образом, мы получаем все._.
части в отдельных строках, а также 11-символьные части в начале и конце. Мы используем_
опцию, чтобы пропустить пустые результаты между отдельными._.
матчами. Результат будет таким:Далее мы обрабатываем подчеркивания:
Это заменяет каждое подчеркивание девятью
1
с. Причина, по которой мы1
тут используем s вместо пробелов, заключается в том, что теперь легче вставить пробел.Помните, что во второй строке есть пробел. Это вставляет пробел в каждую позицию, которая не является границей слова, то есть везде, кроме начала и конца строк.
И, наконец, мы заменяем все эти
1
s пробелами.источник
(._.)
.Желе , 44 байта
Попробуйте онлайн!
идея
Если мы удалим каждый второй столбец и транспонируем строки со столбцами, мы получим следующую доску.
Теперь мы можем повернуть каждый столбец на одну единицу вправо, переместив все оставшиеся пробелы вправо.
Затем убираем оставшиеся пробелы и заменить символы новой строки с буквой D .
Теперь мы заменим каждую букву на 1-й индекс в алфавите.
Затем мы преобразуем этот массив цифр из биективного основания 23 в целое число.
Теперь мы конвертируем это целое число в биективное основание 250 .
Наконец, мы используем эти цифры для индексации кодовой страницы Jelly .
Это закодированные данные, которые мы включим в программу ( 29 байт ). Чтобы получить желаемый результат, нам нужно просто повторить шаги, описанные выше.
Код
источник
z
) с заполнителем.05AB1E ,
4847 байтСпасибо Emigna за сохранение байта!
Объяснение:
Сначала немного сжатия.
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•
является сжатой версией следующего номера:После этого он преобразуется в базу 33 , что приводит к следующей строке:
Нули заменяются 9 пробелами , используя следующий код
¾9ð×:
. После этого мыS
разбиваем строку на символы и разрезаем их на части по 11 элементов (сделано с помощью11ô
). Мы получаем следующий 2-мерный массив:Мы объединяем этот массив в сетку и выводим
»
его неявно.Использует кодировку CP-1252 . Попробуйте онлайн!
источник
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•33B¾9ð×:S11ô»
Python 2, 89 байт
Создает шаблон
подставить в буквы через форматирование строки. Шаблон использует два типа линий:
l
из 11 копий буквы-плюс-пробел, затем новая строка . Это также используется для первой и последней строки. У него есть пробел.Python 3.5 может сохранить байт с распаковкой кортежа
(*'...',)
.источник
PowerShell v2 +,
13112311411099 байтЭто просто буквальная строка с символами новой строки, размещенными на конвейере, с небольшим
-replace
в конце, чтобы превратить их0
в19
пробелы. Первая и последняя строки просто дословно. Всего с 10 пробелами и небольшим повторением в противном случае было недостаточно места для игры в гольф. Эта строка остается в конвейере, и вывод через неявныйWrite-Output
происходит при завершении программы.источник
Javascript ES6 REPL ,
105102101 байтЗдесь не так много интересного. Вставьте в консоль, чтобы увидеть желаемые результаты
Сохранено 3 байта благодаря @Arnauld
Сохранено еще 1 байт благодаря @Neil
Показать фрагмент кода
источник
1
s пробелами и используйте вместо этого следующее регулярное выражение:.replace(/.( ?)/g,`$& `+`$1`.repeat(17))
1
s пробелами и использовать вместо этого эту функцию:a=>a-1?a.repeat(18):a+' '
/// ,
10098 байтПопробуйте онлайн!
По какой-то загадочной причине после
G
s появляются пробелы . Без них мой код был бы 96 байтов.Спасибо 42545 (ETHproductions) и 56258 (daHugLenny) за сокращение 1 байта каждый!
источник
G
s в первой и последней строке?Turtlèd , 72 байта
Попробуйте онлайн
>
вращает черепаху,"foo"
пишет строки на сетке. последний"
был приемлемымисточник
V ,
75, 62, 59 байтовПопробуйте онлайн!
Поскольку этот кодекс содержит не-ASCII символы, вот шестнадцатеричный код:
Объяснение. Сначала мы вводим следующий текст:
Затем мы
<esc>
вернемся к нормальному режиму. В этот момент курсор находится на третьей строке последнейG
. Удобно, что есть команда, чтобы поместить нас в первый столбец строки прямо над курсором. Эта команда есть-
. Затем, как только мы окажемся во второй строке (вN
), мы запустим следующий цикл:Объяснение:
Теперь буфер выглядит так:
Теперь мы используем сжатое регулярное выражение для замены каждого символа этим символом и пробелом. Это
Í./&
часть. Это переводит к следующему регулярному выражению vim:Что значит:
источник
R
149146 байтНе очень впечатляет, но также не уверен, как это будет в гольфе. Как-
paste
то эксплуатировать это мое первое предположение. Сравните с необработанным текстом из 241 байта.R-скрипка
источник
Python 2, 108 байт
Немного отличается от другого ответа Python, не используя замен, только строковые объединения.
источник
Perl, 90 байт
Довольно скучный подход, не могу придумать лучшего способа уменьшить ... Требуется
-E
без дополнительных затрат. Выводит дополнительный пробел в конце каждой строки. -2 байта благодаря @ Дада !использование
источник
perl -E 'say"FKCIIBAVWMG\nNZP\nTZN\nCZC\nSZP\nPZS\nVZC\nSZP\nEZL\nSZB\nJCVCORIBCMG"=~s/Z/$"x9/ger=~s/./$& /gr'
. (Замените\n
буквальными символами новой строки, чтобы получить 90).Джольф, 72 байта
Заменить все
♣
с\x05
, или попробовать его здесь!Это дает желаемую строку.
источник
Java 7,
177165142131 байт-15 байт благодаря @BassdropCumberwubwubwub .
-11 байт благодаря @Numberknot .
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
String c(){String s=" ";return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace(""," ").replace("_",s);}
за 150 (обратите внимание, что stackexchange удаляет лишние пробелы)s
но stackexchange удалил их. Вот идеон , теперь даже на 142 байтаs=" "
. В этом случае это действительно короче. И.replace(""," ").replace("_",s);
может быть.replace("_",s).replace(""," ");
вместо этого для дополнительных -8 байтовString c(){return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace("_"," ").replace(""," ");}
( 131 байт )Befunge, 120 байт
Первая строка содержит строку, которая должна быть напечатана в обратном порядке (похоже, что это не так, но код идет в обратном направлении в этой строке). Вторая строка печатает верхний и нижний ряды. Третья строка и левая сторона четвертой строки печатают средние строки, а небольшой фрагмент в правом нижнем углу делает интересную вещь: он перемещает курсор назад во вторую строку, чтобы распечатать последнюю строку, но после ее завершения он квиты.
Как видно из первой строки, строки разделены пробелами, чтобы различать первую, среднюю и последнюю строки. Пробелы могут быть чем угодно, и если бы я использовал символы ASCII 0-9, я бы легко сохранил 4 байта. $, Который вы видите - это просто символ мусора, который должен быть там и может быть заменен на что угодно, кроме пробела.
источник
J,
7773 байтаОбратите внимание, что 43 байта, более половины общего объема, используются только для строки
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
.объяснение
Сначала составьте список
Тогда сделайте свой стол
Затем проверить на равенство с нуля
Выровняйте его, найдите кумулятивные суммы и умножьте поэлементно
Затем объедините с нулями, разбейте его на подсписки длиной 22, отбросьте заголовок каждого подсписка и используйте значения в качестве индексов в строке.
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
источник
(' ',@,.~]);._1';FKCIIBAVWMG;N_P;T_N;C_C;S_P;P_S;V_C;S_P;E_L;S_B;JCVCORIBCMG'rplc'_';9#' '
_11,@,.&' '\'FKCIIBAVWMGN_PT_NC_CS_PP_SV_CS_PE_LS_BJCVCORIBCMG'rplc'_';9#' '
На самом деле , 74 байта
Попробуйте онлайн!
Эта программа работает по тому же базовому принципу, что и ответ xnor на Python 2 .
Пояснение (новые строки заменены
\n
для ясности):источник
C # 6,
192190 байтБез конечного пробела; без завершающего перевода строки.
Простое решение. Начните с буквенной строки.
Replace
!
на 9 мест. ЗатемSplit
в 11 строк~
, а затем вchar
s (внутреннийSelect
). Добавьте пробел к каждому символу, а затемJoin
вернитесь к 11 строкам. Наконец еще одинJoin
символ новой строки.источник
Руби, 92
Полная программа, печать в стандартный вывод
$> <<
Всего 40 сюжетов. Буквы с 10 по 28 чередуются между последующим переводом строки или
' '*19
. Более ранние и поздние буквы разделены пробелами.источник
Perl,
115112 байтПроизводит следующий вывод:
Первые и последние строки вывода имеют завершающий пробел. В коде используются замены регулярных выражений и тот факт, что если объекты не определены, они интерпретируются как строки (например, FKCIIBAVWMG обрабатывается как «FKCIIBAVWMG». Не удалось извлечь кавычки из последней строки из-за предшествующей новой строки, которая Я не мог найти где-нибудь еще.
Редактировать 1: 3 байта были сохранены путем замены
" "
на$"
, удаления внешних скобок и вставки пробела после печати, удаления скобок вокруг$"x19
и добавления пробела после этого (чтобы их.
не интерпретировали как десятичную)источник
s/(.)/\1 /
можно заменить наs/./$& /
. Оставьте последнюю точку с запятой. Используйтеsay
вместоprint
(для этого вам нужно либо добавить,-M5.010
либо использовать-E
вместо-e
, но оба они бесплатны (см. Здесь )). Буквальные переводы строк вместо\n
.Древесный уголь , 66 байт
Попробуйте онлайн!
Box(21, 11, 'F K C I I B A V W M GPNCPSCPLBG M C B I R O C V C JSESVPSCTN')
,Неконкурентный, 36 байт
источник
Python 2, 116 байт
Довольно просто, по любой причине, хотя замена строк настолько многословна, что это было лучшее, что я мог придумать. Возможно использование
re
может быть короче.источник
print'F K C I I B A V W M G\nN@P\nT@N\nC@C\nS@P\nP@S\nV@C\nS@P\nE@L\nS@B\nJ C V C O R I B C M G'.replace('@',' '*19)
также 116 байтов без использования соединения, если вы хотите быть более простым. Альтернативно,print' '.join('FKCIIBAVWMG!N@P!T@N!C@C!S@P!P@S!V@C!S@P!E@L!S@B!JCVCORIBCMG').replace('! ','\n').replace('@',' '*17)
это 115 байт, если разрешены пробелы в конце. (Аргумент для замены - «!» Вместо «!».)Пакет, 171 байт
источник
Язык GameMaker, 148 байт
Я знаю, что это довольно просто, но я не думаю, что это можно победить в GML ...
источник
GDScript
языкеGodot
игрового движка. Но, не уверен, что это будет хорошо :)string_repeat(" ",19)
такой же длины, как" "
.Пип , 64 байта
63 байта кода, +1 для
-S
флага.Попробуйте онлайн!
объяснение
Операторы использовали:
.
(двоичный) объединяет (работает поэлементно в списках).X
(двоичная) строковое умножение. (s
переменная, предварительно инициализированная для" "
.)^
(Унарный) разбивает строку в список символов..*
это еще один способ разбить строку на символы. Он состоит из унарных символов.
, которые не могут использоваться в строках в паре с*
мета-оператором, который отображает унарный оператор для каждого элемента в его (повторяемом) операнде. Использование.*"..."
позволяет сохранить байт поверх(^"...")
- скобки потребуются, поскольку.
приоритет выше, чем^
.PE
добавляет элемент в список.AE
добавляет элемент в список.С этим фоном, вот код шаг за шагом:
Когда этот результат печатается автоматически,
-S
флаг объединяет подсписки в пробелах и основной список в новых строках, давая желаемый результат.источник
C
171156 BytesВыводит также и нового персонажа новой строки ... Возможно, это еще немного.
источник
Perl 5,
9286 байтИспользует
sprintf
, заполнение и оператор повтора строкиx
.источник
\n
буквальными символами новой строки, вам не нужны пробелы междуx
оператором и последующим числом, и, наконец, заменяетеsplit//,xxx
наxxx=~/./g
.Haskell,
128125114 байтовПопробуй здесь
((:" ")=<<)
isconcatMap (\a -> [a,' '])
- дополняет, добавляя пробел после каждой буквы в своем входеисточник
Powershell, 95 байт
Вдохновленный @ AdmBorkBork в ответ .
объяснение
Первый заменяющий оператор создает прямоугольник
11x11
.Второй оператор замены вставляет пробел после каждого символа. В результате есть пробелы.
источник