Часто, пока я играю в код, я хочу знать, каково значение ASCII для определенного персонажа. ASCIItable.com - один из моих любимых ресурсов для быстрого поиска всех печатных символов ASCII . Это действительно хорошее изображение, которое показывает не только печатные символы ASCII и их значения, но также непечатаемые и расширенные символы, а также значения в шестнадцатеричном, восьмеричном и HTML-кодах:
Сегодня задача состоит в том, чтобы воссоздать эту таблицу ASCII в виде таблицы ASCII вместо изображения. Для простоты мы не будем использовать управляющие символы (символы ниже 32) и будем показывать только десятичное значение и символ. Другими словами, ваша задача - написать либо полную программу, либо функцию, которая печатает или возвращает следующий текст:
Dec Chr | Dec Chr | Dec Chr
----------------------------------
32 Space | 64 @ | 96 `
33 ! | 65 A | 97 a
34 " | 66 B | 98 b
35 # | 67 C | 99 c
36 $ | 68 D | 100 d
37 % | 69 E | 101 e
38 & | 70 F | 102 f
39 ' | 71 G | 103 g
40 ( | 72 H | 104 h
41 ) | 73 I | 105 i
42 * | 74 J | 106 j
43 + | 75 K | 107 k
44 , | 76 L | 108 l
45 - | 77 M | 109 m
46 . | 78 N | 110 n
47 / | 79 O | 111 o
48 0 | 80 P | 112 p
49 1 | 81 Q | 113 q
50 2 | 82 R | 114 r
51 3 | 83 S | 115 s
52 4 | 84 T | 116 t
53 5 | 85 U | 117 u
54 6 | 86 V | 118 v
55 7 | 87 W | 119 w
56 8 | 88 X | 120 x
57 9 | 89 Y | 121 y
58 : | 90 Z | 122 z
59 ; | 91 [ | 123 {
60 < | 92 \ | 124 |
61 = | 93 ] | 125 }
62 > | 94 ^ | 126 ~
63 ? | 95 _ | 127 DEL
Конечные пробелы в каждой строке и завершающий символ новой строки разрешены. Поскольку это сложная задача Колмогорова , ваша заявка может не потребовать ввода или доступа к каким-либо внешним ресурсам (таким как файл или Интернет), и ваша цель - сжать код для вывода этого текста в максимально возможной степени.
Применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах. Удачного игры в гольф!
источник
Ответы:
Python 2,
185183175159 байтСохранено 8 байт благодаря FlipTack!
Все еще довольно плохо знакомы с игрой в гольф на Python.
Использует понимание вложенного списка для генерации тела таблицы.
Ungolfed:
Старая попытка,
185183175 байтUngolfed:
источник
Befunge,
176172 байтаПопробуйте онлайн!
источник
Pyth,
89857977 байтПопробуйте онлайн!
источник
JavaScript (ES6),
179173 байтаисточник
`${x='Dec Chr '}| ${x}| ${x}
в конце строки 2 на(x='Dec Chr ')+(' |'+x)*2+`
*
оператором. Или я как-то неправильно понимаю ваше предложение?V ,
98, 96, 94 байтаПопробуйте онлайн!
Просто едва поскрипывает под сотню. Я посмотрю, смогу ли я победить Пита, но я не буду давать никаких обещаний.
Вот hexdump:
И вот как это работает:
Вот где это интересно. Во-первых, позвольте мне объяснить трюк vim. В режиме вставки вставляются определенные символы (все печатные символы ASCII, большинство не отображенных символов выше
0x7f
и некоторые другие), но другие символы имеют побочный эффект. Например,0x1b
(<esc>
) выйдет в нормальный режим.0x01
(<C-a>
) вставит последний вставленный текст и т. д. Иногда мы хотим вставить эти символы буквально. Таким образом, чтобы вставить буквальный escape-символ, вы должны набрать<C-v><esc>
. Это работает для всех персонажей, которые имеют побочный эффект. По сути,<C-v>
это эквивалент обратной косой черты в языках со строковыми литералами, которые позволяют вам экранировать определенные символы в строке.Другой полезный прием
<C-v>
в режиме вставки заключается в том, что его можно использовать для вставки символов по кодам , в десятичном, шестнадцатеричном, восьмеричном или шестнадцатеричном юникоде. Так как у нас уже есть числа, которые соответствуют определенным значениям ASCII, нам просто нужно поставить<C-v>
перед этими символами a и запустить соответствующий текст как vim-нажатия клавиш. Это может быть достигнуто с помощью команды regex и команды "Do 'x' на каждой строке". Итак, мы:На данный момент буфер выглядит так
Теперь нам просто нужна общая очистка, которая составляет большую часть байтов в этом ответе.
источник
F #, 222 байта
Попробуйте онлайн!
источник
["ab"; "cd"] |> c |> p
это объединяет с "|" символы и печатает их, как «ab | cd», что является основной идеей для печати таблицы. Все остальное довольно просто, просто избегая пробелов, где это возможно.постоянный ток , 167 байт
Попробуйте онлайн!
Как это работает:
источник
Perl, 120 байт
Запустить с
-E
флагом:-2 байта благодаря @GB .
источник
C 179 байт
Попробуйте онлайн!
Semi-ungolfed:
источник
Рубин, 124 байта
источник
V ,
151150148136135130129125 байт12 байтов сохранено благодаря @ nmjcman101 за использование
<C-v>g<C-a>
вместо цифрline('.')
2 байта сэкономлено благодаря @DJMcMayhem за удаление строк с начальными пробелами с помощью
ÇÓ/d
и с помощьюdê
удаления лишних пробелов и перестановкиЭтот ответ конкурирует с V- ответом @ nmjcman101 (который использует
:set ve=all
).Но теперь я нашел способ удалить этиA ^[
и сохранил несколько байтов, и мы находимся на равном количествеПопробуйте онлайн!
HexDump:
Объяснение (неполное и устаревшее)
Стратегия здесь в том, что я использую номера строк для генерации кодовых точек ASCII.
Примечание:
^[
есть0x1b
,^V
естьC-v
Сначала мы генерируем все символы.
Текущий буфер выглядит так
Теперь мы вставляем новую строку между этими символами
источник
32 SPACE ... 127 DEL
части вашего кода: Попробуйте онлайн! Он использует эту аккуратную вещь, где вы можете выделить кучу чисел, а затемg^A
делает ее возрастающей последовательностью (новая в Vim 8?):set ve=all
а затем курсор переместится в места, где нет текста, что позволит вам легче вставлять трубы и копировать / вставлять в нужные вам места, не разбрызгивая ихA <esc>
вездеg^A
Спасибо, это сэкономило мне 12 байтов :)V ,
13012099 байтСаб 100 клуб. Я больше не убежден, что
:se ve=all
это лучший способ сделать это. Это лишние ... 11 байтов только для записи|
! Но это то, что у меня есть.Я публикую это почти в конкуренции с ответом @KritixiLuthos,
:se ve=all
чтобы избежать некоторыхA <esc>
. Я не уверен, что какой-либо из этих методов еще лучше, так что, надеюсь, это может вдохновить некоторых игроков в гольф на обеих сторонах, и посмотреть, какой метод принесет пользуЯ также наполовину ожидаю, что @DJMcMayhem наденет обе наши штаны
Попробуйте онлайн!
Hexdump для любопытных (если есть интерес, я просто изменю это на скрытый блок символов в стиле vim)
источник
dd
неявно, если вы просто делаетеd
. Вы также можете сделать то,<M-s>
что всегда эквивалентно\s
регулярному выражению. Таким образом , вы могли бы сократить его:ç^ó*/d
. Но если вы отключите глобальную команду для инверсии,:g!
вы можете искать каждую строку, не соответствующую непробельному символу.ÇÓ/d
что эквивалентно:g!/\S/normal dd
AWK , 200 байт
отформатирован:
Попробуйте онлайн!
источник
C 188 байт
Обычно выглядит так:
источник
C (249 байт)
Новые строки добавлены для ясности.
источник
P
beprintf(
, как показано здесь: repl.it/JBRDJava,
434422321 байтЯва, вероятно, не лучший язык для этого, так как есть накладные расходы на классы и метод main ...
Вы можете исключить метод main, используя статическую декларацию, уменьшив обратный отсчет байтов:
но это приводит к ошибке (после успешного запуска):
Число байтов в int включает переводы строки или отступы.
источник
void main(){
, а также междуwhile(s.length()<5)
иs+=" "
. (Если вы не учли это в подсчете байтов). И вы можете сохранить несколько байтов, изменяяd="Dec",c="Chr"
кd=p("Dec"),c=p("Chr")
и делая изменения ваших звонковp(d)
иp(c)
кd
иc
.Tcl , 233 байта
Попробуйте онлайн!
источник
32
например, (вместо '' 'Space
), и33!
(без пробела между33
и!
).R ,
235 228 221212 байтПопробуйте онлайн!
Я очень старался получить меньше 200 байт, но они
paste
иcollapse
убивают меня. Возвращает список строк.источник
JavaScript (ES6), 258 байт
источник
PowerShell , 159 байт
Попробуйте онлайн!
Первые две строки просто создают буквенные строки и оставляют их на конвейере. Первый использует оператор запятой
,
для создания массива, а затем-join
объединяет этот массив для создания заголовков. Второе - просто умножение прямой строки.Третья линия перебирает
32..63
и каждая итерация отправляет три значения$_
,($_+32)
и($_+64)
во внутреннем цикле. Внутренний цикл выполняет обработкуPadRight
значения (добавляет соответствующие пробелы для заполнения5
символов). Затем строка объединяется+
с результатом вложенного псевдо-троичного( )[ ]
. Псевдо-троичное выбирает либоchar
представление этого числа, либо другое,Space
или,DEL
если это подходящее значение. Опять мыPadRight
соответствующие персонажи.Эти три строки (например,
32 Space
,64 @
,96 `
) заключены в круглые скобки и-join
ред с маркерами столбцов в одну строку. Каждая из этих 32 строк затем остается на конвейере. В конце выполнения неявноWrite-Output
вставляет новую строку между элементами в конвейере, поэтому мы получаем это бесплатно.источник
Perl,
165155 байтисточник
Python 2,
1564218 байтМой первый гольф, извините за очевидные ошибки
Попробуйте онлайн!
Если вам интересно, первая версия была строкой в кодировке base64.
источник
ljust(6) for
.x in [
. И IIRC квадратные скобки внутриjoin
могут удалить.05AB1E ,
8276 байтПопробуйте онлайн!
Все еще игра в гольф, это может быть улучшено много.
žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø
толкает дополненные числа текстовым эквивалентом:vyð2×ý})3äøvy… | ©ý}
объединяет их в таблицу:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
заботится о заголовочной части таблицы:источник
PHP,
163 149147 байтсломать
Использование
%-N
стоит того байта, который сохраняют правые числа и символ.источник
Stax , 53 байта
Запустите и отладьте его
источник
T-SQL, 242 байта
отформатирован:
Пробовал несколько вариантов, включая замену различных общих строк другими переменными, но это была самая короткая версия, которую я нашел.
источник
Python 3 , 154 байта
Попробуйте онлайн!
источник
Атташе , 144 байта
Попробуйте онлайн!
источник