Кто-нибудь здесь твердолобый поклонник Bethesda? Может быть, вы предпочитаете Obsidian Entertainment? Что ж, если вы - одна из тех вещей, то следующая картина должна быть вам относительно знакома.
Я взял на себя смелость подготовить довольно уникальный вызов ASCII-Art, так что вот первая подсказка о том, что я собираюсь сделать, чтобы вы делали:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: | |
| | | |
| | 0x01 | 0x0D | |
| | 0x02 | 0x0E | |
| | 0x03 | 0x0F | |
| | 0x04 | 0x10 | |
| | 0x05 | 0x11 | |
| | 0x06 | 0x12 | |
| | 0x07 | 0x13 | |
| | 0x08 | 0x14 | |
| | 0x09 | 0x15 | |
| | 0x0A | 0x16 | |
| | 0x0B | 0x17 | |
| | 0x0C | 0x18 | |
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Это очень простой (пустой) шаблон для дизайна терминала RobCo Fallout в чистом ASCII, ваша работа будет заключаться в следующем:
- Сначала создайте этот шаблон.
- Затем предоставляется список строк
l
и номер0 <= n <= 4
для его заполнения!
Две динамические части хакерского терминала:
Количество попыток
- Количество оставшихся попыток (обозначено полями с пробелами).
- Для этой задачи вы будете использовать
X
вместо■
.
- Для этой задачи вы будете использовать
Пароли
- Пароли, определенные
l
, перемежаются случайными печатными символами ASCII. - Пароли, как вы можете видеть на примере, могут переносить несколько строк (
NAMES
). - Все пароли на экране терминала должны иметь одинаковый шанс быть где угодно.
- Можно ожидать, что все пароли будут одинаковой длины, хотя это не имеет значения.
- Список символов используемых для разделения паролей:
!"#$%&'()*+/:;<=>?@[\]^_{|}
. - Все пароли
l
должны быть одинаковой длины. - ПАРОЛЯМ ДОЛЖНЫ ИМЕТЬ ПОТЕНЦИАЛ, КОТОРЫЙ ОБРАТИТСЯ ОТ ОБОИХ КОЛОНН.
- Это также относится к строкам, но только по старшему байтовому адресу (0x18-> 0x01 недопустимо).
- Поле для отображения паролей с обеих сторон имеет ширину 15 (с пробелом с обеих сторон).
- Вы можете предположить, что никакие слова
l
не будут длиннее этого.
- Вы можете предположить, что никакие слова
- Пароли только в алфавитном порядке, то есть только буквы.
Пример:
l = ["SMART","ENACT","SWORE","PITYS","SMELL","CARTS","RACES"]
, n = 4
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: X X X X | | # N = 4 drives these X's.
| | | |
| | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} | |
| | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% | |
| | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( | |
| | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ | |
| | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" | |
| | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" | |
| | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} | |
| | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% | |
| | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ | |
| | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ | |
| | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! | |
| | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] | | # Notice how PITYS wrapped.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Если n = 2
на том же примере:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: X X | | # N = 2 drives these X's.
| | | |
| | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} | |
| | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% | |
| | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( | |
| | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ | |
| | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" | |
| | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" | |
| | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} | |
| | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% | |
| | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ | |
| | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ | |
| | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! | |
| | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] | | # Notice how PITYS wrapped.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Эти примеры были созданы вручную, поэтому распределение не рандомизировано, извините.
Это код-гольф , самый низкий счетчик байтов будет признан победителем. Я получу вознаграждение через 3 дня, если не было получено ответов на общую сумму 250 REP.
источник
NAMES
пункт 2 пули? « Можно ожидать, что все пароли будут одинаковой длины, хотя это не имеет значения. » Или « Все пароли в l должны быть одинаковой длины. »? Может быть, я просто слепой (опять же!), Но я не вижуRACES
ни в одном из выводов - следует ли нам принять это, чтобы означать, что должна быть возможность не использовать пароль? Является лиMath.random
(и эквиваленты) достаточно случайным для целей этой задачи?Ответы:
JavaScript (ES8),
575568564 байтаСохранено 3 байта благодаря @Shaggy
Принимает ввод в синтаксисе карри
(r)(a)
, где r - количество оставшихся попыток, а a - массив паролей.Подсветка синтаксиса отключена специально. Понятия не имею, что с этим делать.
демонстрация
Показать фрагмент кода
источник
Attempts Remaining:${" X".repeat(r).padEnd(8)}
?Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:
oof ... Я должен был перефразировать, чтобы сохранить байты не-гольфа.SOGL V0.12 , 225 байт
Попробуй здесь!
Ожидается ввод массива в стек и число,
→"
вводимое входом, поэтому он добавлен в онлайн-программу для простоты использования.источник
Perl 5 ,
588560 + 1 (-a) =589561 байтВырезать 28 байтов с предложениями, указанными Домом
Попробуйте онлайн!
Ранее:
Попробуйте онлайн!
Ввод в одну строку, разделенные пробелом: сначала строки, затем число
Как?
источник
.
он не использовался в качестве десятичной точки. Также, чтобы получить пунктуацию, вы можете использовать что-то вроде этого(grep/[^\w,.`-]|_/,map{chr}33..125)
и вам не нужно вызыватьint
индекс массива! Изменениеwhile
цикла на постфикс и использование&&
вместоif
должно также сохранить несколько. Когда вы строите$s
, если у вас есть$s.=
внутри карты вместо использованияjoin
капель еще несколько. Надеюсь, это поможет!Python 3 , 585 байт
Попробуйте онлайн!
-70 байт благодаря Джонатану Аллану
-9 байт благодаря себе (наконец-то!)
-72 байт благодаря notjagan
источник
JavaScript (ES8), 639 байт
Шестнадцатеричные метки в нижнем регистре; если требуется верхний регистр, это будет дополнительные 14 байтов для
.toUpperCase()
.Тестовый фрагмент
Лучше просматривать на CodePen .
источник
repeat
.