... Не так ли? Задача проста, выведите следующий текст:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
Это клавиатура будущего, потому что в будущем пробелы не имеют значения, равно как и пробелы.
Чтобы вам было легче:
0123456789ABC...XYZ-=[]\;',./
- Эти символы на клавишах длиной 6 (включая отступы).TAB / BS / ENTER
- Эти клавиши имеют длину 10 (включая отступы).CAPS
- Этот ключ имеет длину 11 (включая отступ).SHIFT
- Этот ключ имеет длину 13 (включая набивку с обеих сторон).
Каждый отдельный ключ выглядит примерно так:
____
||* ||
||__||
|/__\|
Тем не менее, вы должны отметить, что два последовательных ключа не являются:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Но они "соединены"
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
Эта задача не должна быть слишком плохой, удачи вам; не пропустите злоупотребление повторением! Но не стоит недооценивать и «специальные» клавиши;).
Победа?
Самый короткий код выигрывает, потому что это код-гольф, вы знаете.
code-golf
ascii-art
kolmogorov-complexity
Урна волшебного осьминога
источник
источник
Ответы:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 байтовПопробуйте онлайн!
Этот ответ теперь в твиттере!
Смотреть это бежать! Это слегка измененная версия, которая обновляется по мере запуска, чтобы вы могли видеть, как она работает. Это устаревшая версия, так как я еще не успел перезаписать ее, но общий подход идентичен.
Это, наверное, самый длинный V-ответ, когда-либо написанный. Конечно, это не помогло тому, что интерпретатор V очень медленный. Мне потребовалось около часа, чтобы написать первую ревизию, но я неоднократно возвращался к ней, чтобы каждый раз сбрасывать пару байтов. Поскольку полная клавиатура составляет 1215 байт, в настоящее время этот ответ на 91% короче выходного, поэтому я очень доволен результатами.
Поскольку он содержит некоторые непечатаемые символы и большое количество не ASCII, вот hexdump:
Как, черт возьми, это работает?
Хорошо, это объяснение будет глупым. Вы готовы? Прежде всего, нам нужно ввести буквы, чтобы мы могли построить ключи вокруг них. Это
Какие вставки:
Это довольно просто, но есть несколько приемов, которые мы используем для сохранения персонажей. Например,
¬19
ввод "123456789",³
ввод трех пробелов, и мы дублируем сдвиг, чтобы нам не нужно было вводить его несколько раз.Обратите внимание, что буквы здесь строчные. Это сделано для того, чтобы мы могли легко различать прописные клавиши, такие как «ENTER», и отдельные буквы. Написание их таким образом облегчает определение того, какие символы ставить раньше, и добавляет только один байт, чтобы преобразовать их в нижний регистр позже. Поэтому мы выполняем команду замены, чтобы преобразовать их в верхний регистр, и добавляем один пробел после каждого из них:
Теперь мы берем каждую последовательность клавиш (любой запуск без пробелов) и ставим три бара до и после них:
На данный момент буфер выглядит так:
Наличие трех столбцов в первом и последнем столбцах на самом деле очень удобно и в конечном итоге экономит много байтов в долгосрочной перспективе.
И вот здесь мы запускаем одну гигантскую петлю. Это преобразует что-то вроде этого:
в нечто вроде этого:
Все между двумя экземплярами
ò
будет работать до тех пор, пока не произойдет ошибка, которая произойдет, когда мы попытаемся подняться на линию, которая еще существует. Так как мы только что выполнили глобально заменяющую команду, наш курсор находится на последней строке, и мы преобразуем их, работая вверх.Это
линия.
Это
Линия.
Это:
Линия.
Теперь у нас есть полная клавиатура, но каждая строка содержит либо дополнительную полосу, дополнительную косую черту (вперед или назад) или дополнительное подчеркивание. Супер легко исправить
После всего этого безумия буфер печатается неявно.
источник
Lua 5.3,
416394 Bytes.Разгулялся и с комментариями.
Выход
Я собираюсь быть уничтоженным другими языками, но я думал, что сделаю это. Хорошая сумма сложности, и, по крайней мере, она короче, чем клавиатура!
источник
Жевательная резинка , 191 байт
Попробуйте онлайн!
источник
Haskell, 263 символа (353 байта UTF-8)
Поскольку было много дискуссий о счете в свете этих символов Юникода ... вот та же программа, сокращенная до полностью ASCII:
Haskell, 263 символа (263 байта UTF-8)
источник
ENTER
длиннее, чем символы↩︎
.ENTER
и↩︎
, пробел отступы делает его такой же длины.PHP, 303 байта
Ленивый, но эффективный. :)
источник
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Компрессор: sandbox.onlinephpfunctions.com/code/… Декомпрессор: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 байт
источник
"".join(...) + f[0]
во внутреннем цикле. Заменаformat
порядка аргументов и соответствующих заполнителей в строке также сохраняет еще два байта.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
короче, чем использованиеsplit
.Пакет,
465452 байта:c
Подпрограмма обрабатывает строку ключей. Ключи , содержащие дополнительные пробелы должны быть заключены в кавычки, как это делают=
,;
,,
ключи, возможно , из - за ошибки вshift
команде. Первый и последний параметры - это строки_
s той же длины, что и первый и последний ключ, для облегчения конкатенации.t
затем заканчивается как_
s, общие для первой, третьей и четвертой строк, с#
s, отмечающими объединение, которые соответствующим образом заменяются перед добавлением начальных и конечных символов, в то времяs
как вторая строка, но с|
s заменяется на!
s по мере уменьшения количество"
с, что мне нужно. Редактирование: 1 байт был сохранен путем печати всех четырех строк в одном операторе, а 12 байт - путем оптимизации назначенияs
переменной.источник
Рубин, 226 байт
Улучшения следующие:
1.Нет пустых строковых элементов в начале и конце массива. Вместо этого массив дублируется, образуя 3 параллельные клавиатуры. После преобразования в строку у нас есть 3 клавиатуры с отсутствующими внешними краями. Это усечено для отображения только среднего, в комплекте с краями.
2. Измененная версия Ruby. Используется Ideone вместо 1.9.3, установленного на моей машине. Это средство
.chars.to_a
можно сократить до всего.chars
.Рубин, 239 байт
Из этого есть еще несколько байтов. Посмотрим завтра.
ungolfed
источник
C #, 357 байт (в одной строке и включает большинство предложений)
Или 353 с интерполяцией строк и всеми другими предложениями
Ungolfed (без интерполяции строк):
источник
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
на<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 байт
Я наполовину смущен тем, что публикую этот ответ, учитывая, насколько короткими являются ответы на PHP и Python, не говоря уже о ответе на C #, но я не могу сделать этот метод короче. Другие подходы могут дать лучшие результаты.
По сути, это просто гигантская многострочная строка с переменными (
$a
и т.п.), заменяющими различные подстроки, и пара символов-replace
в конце, чтобы завершить ее. Блоки$(...)
скрипта вставляются там, где необходимо ввести новые переменные.Попробуйте онлайн!
источник
Python,
493458 байт.Функционально эквивалентный, но несколько более читаемый:
К сожалению, это уже дольше, чем ответ, предоставленный в Lua.
источник
p
функцию в одну строку, разделенную точкой с запятой. Кроме того, я думал, что вы не можете сделать первую строчкуk=[['|']*75]*16
, вы знаете, почему?'_'
и' '
для переменной, чтобы сохранить несколько байтов.range(16)
на[0]*16
.for l in k:print ' '.join(l)
наfor l in k:print''.join(l)
.PHP,
316312 байтЯ уверен, что этот подход не может быть использован в дальнейшем. Но если кто-нибудь найдет еще 10 байтов ...: D
Беги с
-r
.сломать
источник
Bash (в OSX),
128 + 221 + 1 =234230 байтДа, я знаю, сжатие. Но это работает, нет?
Требуется файл с именем «f» в текущем каталоге со следующим содержимым (для удобства PPCG поместите его в base64 - сначала вы можете декодировать его в файл «f»):
источник
gunzip<f
.zcat f
и 2 байта, удалив два завершающих нулевых байта (gzip жалуется, но выдает желаемый результат).zcat<f
тогда точно . В Linux zcat без конечных нулей заставляет gzip жаловаться («gzip: stdin: неожиданный конец файла»), но только после печати желаемого результата.JavaScript (ES6), 286
Анонимная функция без параметров
Меньше гольфа
источник
Swift, 777 байт
Свифт, как правило, не очень
хорошийязык для игры в гольф, так что, будучивдвое меньше, чем текущий наименьший ответ(который был быстрым), это хороший вызов здесь!Ungolfed:
источник
SOGL V0.12 ,
131128127 байтов ( соревнуются? )У SOGL есть свои
2*2/
и2/2*
причуды, но они слишком похожи на встроенные в эту задачу.Попробуй здесь!
источник
Python 2,
394388380 байтПросто строит большую строку, представляющую всю клавиатуру, заменяет * на% s для специальных клавиш, затем использует форматирование строки для обновления спец.
редактировать
Теперь в конце вывода есть завершающий символ новой строки, но я не вижу нигде, где это не разрешено.
Попробуйте онлайн!
источник
C #, 376 байт (в одной строке)
Это полностью основано на ответе Клингера на C #. У меня недостаточно представителей, чтобы комментировать его ответ, иначе я бы.
Мне удалось уменьшить код Клингера на 5 байт, изменив начальный цикл foreach и удалив лишние скобки.
источник
м4, 456
Ungolfed:
(На самом деле это первый раз, когда я одновременно играю в код и играю в m4).
источник
сложено , 228 байт
Попробуй это здесь!
Или чуть более читабельно:
Это работает, определяя функцию,
p
которая создает ключ, затем используяhcat
несколько ключей.источник
Хаскелл, 255
Оглядываясь назад, по концепции похож на этот ответ на Haskell , но производя клавиатуру ASCII и немного отличную игру в гольф.
Отформатирован и переименован:
источник
tcl, 368
Как подсчитано в http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ с помощью « считать разрывы строк как пробелы». включен, он занимает
505496452451439403401396391388385384382379378377369368Демо: http://rextester.com/live/NTVAV88033
Негольф:
Живое сотрудничество на http://rextester.com/live/UDO43692
Любой желающий может бесплатно улучшить мою версию на сайтах сотрудничества в реальном времени, но, пожалуйста: не редактируйте мой оригинальный ответ здесь; просто скажите, что вы редактировали в комментариях, и люди будут переходить по ссылкам.
UPDATE 1: Заменено
for
наforeach
, потому что последняя производит более короткий кодUPDATE 2: Заменено
foreach
наlmap
, поскольку последний производит короткий кодUPDATE 3: бритая один символ , потому что я Заменено
" "
на\
ОБНОВЛЕНИЕ 4: Что касается первого комментария, я изменил все 2-байтовые символы Unicode 1-й строки на 1-байтовые символы ASCII.
ОБНОВЛЕНИЕ 5: несколько
puts
строк превращаются только в однуОБНОВЛЕНИЕ 6: используйте непосредственно
split
команды, возвращающие значения вlmap
вызове вместо использования переменных промежуточного спискаОБНОВЛЕНИЕ 7: цитаты вокруг
ENTER
не нужныОБНОВЛЕНИЕ 8:
string map
это достаточно долго и повторяется несколько раз, что стоит инкапсулировать его вproc
ОБНОВЛЕНИЕ 9:
split $x \n
это достаточно долго и повторяется несколько раз, что стоит инкапсулировать его вproc
ОБНОВЛЕНИЕ 10: На «замену» можно использовать
&
вместо строки\1
, потому что в этом случае оба совпадают; Еще одно следствие этого - позволяет избавиться от()
«совпадающей» строки.ОБНОВЛЕНИЕ 11: Используйте
@
вместо\n
разделителя строк для дальнейшего использования вsplit
инструкциях. Хотя «матч» строка удлиняется от\S
до[^@]
окупается, в зависимости от числа повторенийОБНОВЛЕНИЕ 12: Заменили первую
regsub
строку "match"{[^@|]}
на,\[^@|]
чтобы сбрить один символ. К сожалению, не мог сделать то же самое со вторымregsub
, потому что инструкция находится внутри пары[]
:(ОБНОВЛЕНИЕ 13: побрили два Введите символы, концентрируя
lmap
тело с его собственным заголовком.ОБНОВЛЕНИЕ 14: Использовал вызов к
split
основанной процедуреN
вместо прямого вызова кstring map
основанной процедуре,N
который позволяет сократить на 3 символаОБНОВЛЕНИЕ 15: был ненужный
пробел. Убрал его, чтобы сбрить один полукок.
ОБНОВЛЕНИЕ 16:
set h
может быть встроено, чтобы избавиться$h
, сбрить одного персонажа.ОБНОВЛЕНИЕ 17:
set h
заявление действительно можно сбрить.ОБНОВЛЕНИЕ 18:
puts
аргумент изменен с...\n...\n...\n...
формата наформат.
Спасибо людям, которые помогли мне сократить это, особенно evilotto и аспект канала IRC tcl!
источник
tcl, 369
Первоначально основано на версии Tcl's Sergiol.
(Обратите внимание, что многие оставленные пробелы являются частью "природы" tcl)
источник
foreach
вхождения наlmap
!interp alias
подход, чтобы сократить мою версию, но самое короткое, что я смог получить при этом, было 398 :( rextester.com/live/NTVAV88033lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
C (gcc) ,
378342330 байтов-10 байт благодаря потолку.
Первый удар в это. Повторный g () предлагает пространство для улучшения.
Редактировать: там мы идем.
Попробуйте онлайн!
источник
Python 2, 672 байта
Используя сжатую строку zlib:
источник
len("print 'x\x9c...'")
которого будут отменены символы\x
, что приведет к неправильному количеству байтов. Вы можете получить правильный счет, считая с помощью,len(r"print 'x\x9c...'")
но самое простое решение, как всегда, это посмотреть, что говорит ваш текстовый редактор или файловая система.Powershell,
249242 байтаUngolfed & объяснил
Миддот
·
использует вместо пробелов, чтобы уточнить исходную строку.Дополнительно: клавиатура с пробелом и выравниванием по правому краю, 278 байт
Я добавил пару байтов в регулярное выражение для обработки пробела (старый regexp
(.[a-z ]*)
, новый~|(.[a-z ]*)
). Это один маленький шаг для регулярного выражения, один гигантский скачок для решения: теперь вы можете отображать пробел и метки клавиш, выровненные по правому краю (см. SHIFT, CTRL и BS на правой стороне клавиатуры).Выход:
источник
/// , 360 байт
Попробуйте онлайн!
источник
Mathematica 323 байта
Скучно и не креативно. Строка - это просто вывод встроенной
Compress
команды, примененной к желаемому выводу.источник
Wolfram Language (Mathematica) , 293 байта
Попробуйте онлайн!
Относительно просто: кодирует ряды ключей в виде списков
(key name)|(key width)
источник
Perl 5
-MList::Util=pairmap
, 313 байтПопробуйте онлайн!
источник