Вы были наняты за свои технические знания в качестве помощника Секретного агента, чтобы гарантировать, что хороший парень сможет выполнить свою работу и спасти мир.
Это ваша последняя миссия перед уходом на пенсию с высокой зарплатой и благодарностью всего мира. Но прежде чем вы должны разоружить Большую Чрезмерную Бомбу Злого Гения (кажется, что злой гений - умная задница, которая любит рекурсивные сокращения). В любом случае, вы и ваш друг находитесь в самом центре секретной базы Злого Гения, готовой разоружить БОМБУ, которая может уничтожить континент. В предыдущей миссии вам удалось получить код снятия с охраны, который, к вашему удивлению, просто «ПАРОЛЬ_01». Вы подключаете клавиатуру к БОМБЕ, но когда вы готовы к работе, приспешники Злого Гения входят со множеством пуль. К сожалению, одна из этих пуль воздействует на вашу клавиатуру. «Завершите работу, пока я отвлекаю этих д * сголов!» говорит твой приятель, а затем начинает стрелять из пистолета.
SPECS
- Напишите программу, которая выводит любым способом строку
PASSWORD_01
(в верхнем регистре). Так как ваша клавиатура попала в пулю, вы можете использовать только эти клавиши:
1 2 3 4 5
Q W E R T
A S D F G
< > Z X C
Ctrl Shift Tab Space
Используя Shiftклавишу, ваша клавиатура позволяет использовать следующие символы:
! " · $ %
У вас нет другого оборудования, кроме клавиатуры и экрана (например, мыши), а также файла с паролем, записанного на вашем компьютере.
У вас нет подключения к интернету.
Вы можете предположить, что у вас открыта оболочка интерпретатора / редактор исходного кода до того, как появились пули. К сожалению, вы ничего не написали до того, как нажали на клавиатуру.
У вас нет виртуальной клавиатуры. На самом деле БОМБА имеет детектор TOO_FUNNY, который взорвется, если вы попытаетесь использовать стандартные лазейки .
Поскольку ваш собеседник ждет, когда вы скоро закончите, чтобы сбежать с Секретной базы, вам придется написать наименьший возможный код (так что это ограниченный исходный код и код-гольф !).
Удачи, потому что обратный отсчет начался!
РЕЖИМ ПОМОЩИ: Также KEYчудесным образом выжил также (только одна Клавиша, которую вы хотите от клавиатуры, но не Shift + Клавиша или любая другая комбинация). Например: Вы можете использовать =, или 0или /... Этот дополнительный ключ не может быть любой из букв в PASSWORD_01
(поэтому вы не можете добавить Pили O). Назовите этот ключ в своем ответе. У вас есть штраф в 10 символов за использование этого ключа, независимо от того, сколько раз вы используете ключ.
источник
stewardesses
?Ответы:
CJam - 24 + 10 ( () = 34
Без дополнительного ключа - 39
Попробуйте это на http://cjam.aditsu.net/
источник
bash, vim и dc (343)
Я сижу в приглашении bash, которое было настроено Злым Гением, и, конечно, он имеет
VISUAL=vim
в среде по умолчанию. Использование привязки bash по умолчанию дляedit-and-execute-command
(C-x C-e
) bash вызывает$VISUAL
и выполняет содержимое буфера при выходе (ZZ
). Я набираю следующую последовательность (Примечание: kbd-mode - команды, выдаваемые в обычном режиме и управляющие последовательности):aкошка <<< 45 C-c4C-aaа
Теперь буфер vim содержит
cat<<<49a
. Продолжая ...45 C-c3C-aaа
55 C-c13C-aaа
Теперь буфер vim содержит
cat<<<49a48a95a68a
. Продолжая ...51 C-c31C-aaа
55 C-c25C-aaс> с
Теперь буфер Vim содержит
cat<<<49a48a95a68a82a79a87a83a83a65a80a>s
Выйти из режима вставки, сохранить и выйти
C-cZZ
Теперь
s
файл содержитdc
скрипт, который генерирует нужную строку в стеке, теперь нам нужно добавить команды печати.C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
Повторите вышеуказанную команду 9 раз.
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eaкошка <<< е >> с
Выполните скрипт dc:
C-xC-eaDC SC-cZZ
Выход:
Содержание
s
файла:источник
vim
сценарий из-заCtrl
характера; хорошо подумать, чтобы соединить это сdc
! Кроме того, отличное решение :)<Leader>k
переплетомmap <Leader>k i<kbd></kbd>^[F>a
, так что это было не так плохо, как кажется :-).Рубин, 57 + 10 (
*
) = 67Этот ответ использует
*
и%
для построения значений ASCII отсутствующих символов (и 0 как Fixnum) и помещает их в$*
(ARGV
). Этот массив затем используется в сочетании со строкой формата для генерации правильного пароля, который печатается с помощью$><<
($>
is stdout).Рубин, 62 + 10 (
.
) = 72, без разрыва строкиПримерно тот же принцип, что и в приведенной выше версии, за исключением того, что здесь массив построен из пустого массива literal (
%w%%
)..
Чтобы получить желаемый приоритет оператора, нужно немного поиграться с ним.источник
Пробелы (148 + 10 = 158)
Enter ключ должен быть использован здесь.
Объяснение моей нотации:
S
,+
,0
Пробелы.T
,1
являются вкладками.L
это новая линия.//
начинает комментировать.Каждая строка - это команда на языке пробелов.
демонстрация
источник
L
означает символ новой строки. Проверьте Демо для реального кода. То, что я отправил, является читаемой версией.Питон (
2200395 + 10)Мне понадобился
+
персонаж (стоимостью +10), который можно получить из цифровой клавиатуры (или на некоторых раскладках клавиш).Да, БОМБА, вероятно, сработала, когда я печатал это.
Основной подход заключается в создании все больших наборов символов с использованием
exec
и"%c"%(number)
. Есть четыреexec
вложенных друг в друга. Постепенно мой набор цифр прогрессирует оттак что в последней итерации можно выразить любой символ (так что самая внутренняя версия может вообще запустить любую программу).
Около 50% программы - это просто символы кавычек (
"%c"%34
это двойные кавычки), потому что вложенная природаexec
операторов требует агрессивного «экранирования» символов кавычек.источник
exec '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,51+54,55+55,1+115,32,4+35,25+55,11+54,31+52,31+52,32+55,24+55,31+51,13+55,41+54,3+45,4+45,4+35)
Бессонница
39353129Этот язык появился, когда я искал язык, который кодирует свои инструкции одним символом ASCII. Язык на самом деле работает с десятичным ASCII-кодом символа, поэтому он все еще достаточно гибок с половиной разрушенной клавиатуры.
Опустите его до 29 символов, что возможно после сокращения использования памяти и увеличения пространства поиска:
Я решил запустить свою настроенную программу на полном наборе разрешенных символов и сократить решение до 31 символа:
Я использовал программу для поиска этого решения. Это одно из многих решений, возвращаемых моей программой, с одинаковым размером.
Старая версия построена вручную. Я помню, что не ложился спать до утра, чтобы сделать это.
Вот переводчик Бессонницы для тестирования.
источник
Vim + PHP на некоторых оконных менеджерах
65 клавиш за 44 удара, с штрафом в 10 очков за использование =.
Разбивка:
aEACE<Alt+Tab>
: Войдите в режим добавления и вставьте «EACE». Выход.z=5<Alt+Tab>
: Выполнить исправление орфографии. Выберите 5, «МИР». Выход. ( Escкажется, работает как Enterздесь!)$xxxxaASSWRD<Alt+Tab>
: Перейти к концу строки. Удалить 4 символа и добавитьASSWRD
, в результатеPASSWRD
. Вернуться в нормальный режим. (Нет,4x
не сработает.)z=1<Alt+Tab>
:PASSWORD
Это , вероятно , станет первой коррекцией для этого. Выберите это.$a$aA<Alt+Tab>
: Перейти к концу строки и добавить$aA
. Вернуться в нормальный режим.==
: Хорошо отформатируйте эту строку PHP, изменив значение camelCase$aA
на$a_a
. Это также перемещает курсор назад к началу строки.wxx
: Вперед слово; Курсор теперь раньше$
. Удалите два символа -$
иa
-, чтобы сделатьPASSWORD_a
.$r1
: Перейти к концу строки и заменить текущий символ (т. Е.a
) На1
, в результате чегоPASSWORD_1
.^X
: Уменьшить целое число под курсором, в результате чегоPASSWORD_0
.a1
: Наконец, добавить1
, дляPASSWORD_01
!источник
==
команду, она просто переключает режим большого отступа в моей установке vi (debian 7, v7.3.547)Python 2, 75889 байт
Никакого лишнего персонажа!
К сожалению, код очень длинный. Вместо этого вот код для генерации программы:
Попробуйте онлайн
(чтобы запустить код, измените внешний
print
вexec
. Или, сгенерируйте программу, затем вставьте и запустите. Или скопируйте из ссылки, указанной ниже.)Объяснение:
Цель состоит в том, чтобы выполнить:
Чтобы избежать использования
()+
символов, мы должны использовать несколько операций формата строки, соединенных вместе. Это означает, что каждый добавленный шаг эффективно удваивает количество%
символов, необходимых для каждого предыдущего шага:Однако этого недостаточно, потому что некоторые из требуемых чисел не могут быть созданы, и мы не можем их создать
print
. Поэтому мы добавляем уровень абстракции с помощьюexec
forprint
и уровень для кодовых точек ASCII, которые мы не можем создать для форматирования. Следующее по сути является моим ответом, но с каждой строкой,%
уменьшенной до одной (обратите внимание, что%s%s%s%s%s
это не точное представление, не учитывающее обязательные литералы%
перед каждым):Первый шаг: Наружная
exec
:1>>1
:0
, используется для0
вPASSWORD_01
2531>>5
:79
, используется для внутреннего exec для созданияO
321>>2
:80
, используется для внутреннего exec для созданияP
1521>>4
:95
, используется для внутреннего exec для создания_
211>>1
:105
, используется для внутреннего exec для созданияi
221>>1
:110
, используется для внутреннего exec для созданияn
Второй шаг: подготовить внутренний
exec
После всего вышесказанного внутреннее
exec
выглядит примерно так:За исключением того, что вы не совсем поняли бы это. Тем не менее, с упрощениями, вы получите это:
Литерал
%
должен быть включен. Так что в основном мне пришлось добавить кучу из них перед каждым,%s
чтобы в итоге%
осталось буквальное после всего форматирования.2**11
из них. Раз пять.Остальные внешние
exec
операции форматирования строки являются%112%34%34%34%34
.112
Дляp
, и другие кавычки. После их применения результат будет примерно таким:Но на самом деле это имеет кучу больше
%
. Это так:Последний шаг - просто запустить его, после чего вы получите необходимый вывод.
Полный код здесь: http://pastebin.com/rSFs6DiH
источник
Баш + Вим (56)
Заимствуя Ctrl-XCtrl-Eтрюк bash из решения Тора, вот как я бы это сделал в bash + vim:
C-XC-E запускает редактор по умолчанию (обычно vim)
a запускает режим вставки
.space ASSW
C-Vx4f вставки
O
RD
C-Vx5f вставки
_
1
C-3эквивалентно escape(не только в vim, но и в любом месте терминала)
C-Xвычитает 1 из
1
я только что набралa снова вставьте режим
1 C-3
содержимое буфера сейчас
. ASSWORD_01
<< строка без отступа (без операции, поскольку строка не имеет отступа) и переместите курсор в 1-й столбец
a
C-X начать завершение слова
C-V в комплекте с бывшей командой
C-V Еще 9 раз выбирает запись
Print
C-3 вернуться в нормальный режим
XXXxx удалений
rint
< < вернуться к столбцу 1
sудалить
.
, запустить режим вставкиe c C-X C-Vеще раз завершение команды ex, запись
echo
уже выбрана, потому чтоec
я только что набралspace C-3 содержимое буфера сейчас
echo PASSWORD_01
Z Z сохранить буфер, закрыть vim, bash выполняет содержимое файла, т.е.
echo PASSWORD_01
Кстати: C-3имеет много полезных братьев: C-Jесть Enter, C-Iесть Tab, C-Hесть Backspace, C-2есть C-@(то есть нулевой байт). А для пользователей emacs приятно знать, что следующий Escapeза ним ключ соответствует Alt+ этому ключу. Таким образом, даже без, Escapeи Altвы все еще можете набрать Meta-x, как это:C-3x
источник
Perl, (31 + 10/41 + 10/64 + 10)
( ^ключ используется, 3 способа)
print
вместоdie
Скрипты используют битовый оператор XOR в Perl
^
, который выполняет XOR для символьных битов двух строк. Это позволяет мне воссоздать пропущенные символы для PASSWORD_01 и создать символы для системной команды.Я сделал три варианта в зависимости от того, насколько мягкими являются правила. Я предполагаю, что, поскольку варианты 2 и 3 фактически выводят слова на Ideone, решения являются действительными. Я удалил небольшую историю, которая была у меня здесь, так как я подумал, что никто не будет читать ее, но вы можете прочитать ее в редакции, если вам интересно!
источник
oOo код (300)
Легко. (Перевод строки не является обязательным, и просто здесь, чтобы сделать код «более читабельным») Используемый генератор кода:
Тот же код в менее глупой кодировке:
источник
ferNANDo, 179 + 10 = 189 байт
Попробуйте онлайн!
Enterиспользуемый. Я бы использовал
0
и1
сделать код более читабельным, но я не могу использовать0
.источник
JS-Forth, 103 байта
Строка будет возвращена в стек в виде массива символов.
Попробуйте онлайн - Комментируемая версия
Объяснение:
Сначала я нашел список разрешенных слов . По сути, единственное, что я мог бы использовать, это было бы полезно:
12345
Числовые константы<<
Сдвиг влево>>
Сдвиг вправоs>f
Нажмите сингл на стекf>d
Поп удвоить с поплавкаfsqrt
Квадратный корень на стеке поплавкаТак что я мог бы использовать числовые константы, сдвиг битов и вычислить квадратный корень, используя следующее (
>>
заменяетdrop
, сдвигая на,0
чтобы удалить0
):К счастью, я нашел возможные сдвиги битов для каждой необходимой мне константы, которые короче, чем использование квадратных корней. По большей части я искал, просто печатая каждое число в квадрате, или большую степень двух, если какая-либо из них содержала цифру
6-0
. Затем я понял, что могу использовать потерю точности,f>d
чтобы найти больше возможностей. (Я мог бы добавить к числу, но все равно получить тот же самый квадратный корень из целых чисел.) Чуть позже я начал использовать сдвиг битов, чтобы найти некоторые, а затем и все константы. Чем больше>>
битовое смещение, тем больше я могу добавить к «магическому числу» и все равно получить тот же результат. Поэтому я нашел самые маленькие битовые сдвиги, которые я мог использовать, чтобы получить необходимые результаты. Иногда можно было использовать<<
четные числа, пришлось использовать шансы>>
.Код комментария (
\
начинается комментарий):gForth не имеет слов
<<
или>>
. Вместо этого естьlshift
и тоrshift
, что я не мог использовать .источник
Десятичный ,
190180 + 10 = 190 байтПопробуйте онлайн! Десятичный это эзотерический язык, который использует только десятичные дроби и буквы
D
. Однако мне потребовался штраф +10, потому что почти каждая команда использует0
.К счастью, все команды, необходимые для печати
PASSWORD_01
, не требуют никаких чисел сверх6
:12...D
- нажать персонажа2
- введите значение41D
- вытолкнуть два верхних значения стека, умножить и сдвинуть результат301
- вывести DSI (индекс стека по умолчанию)Повторно нажимая символьные значения, которые используют только цифры от 1 до 5, затем добавляя их, я могу сделать символьные значения для каждой буквы в
PASSWORD_01
.Развернулся и прокомментировал:
источник
Пробел , оценка: 111 (101 байт + 10 за Enter)
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только для пояснения.Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Объяснение в псевдокоде:
Это решение короче, чем в существующем ответе « Пробел» ( @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ попросил меня опубликовать его как отдельный ответ, когда я предложил его в качестве гольфа), используя этот мой совет «Пробел» .
Константа
80
была сгенерирована с помощью этой Java-программы , которую я создал и использовал для моих предыдущих ответов о пробельных символах.источник
Stax , 91 + 10 байт
Попробуйте онлайн!
Использует ]для изготовления синглетонов.
объяснение
Давайте посмотрим, как
"P"
генерируется и как"ASSW"
добавляется без использования обычного+
.Остальные просто повторяют один и тот же трюк.
"a"EEE$"$"a$Re]R
меняет местами цифры"a"
или[97]
для создания[79]
или"O"
и добавляет их в строку."$""RD"R appends "RD"
,"$""a"EEEd$"$""5"Re]R
"a"
снова использует для получения"9"
и отбрасывания"7"
, затем комбинирует"9"
с литералом"5"
для формирования[95]
или"_"
и добавляет его к строке."$"1 !$R
получает ноль по логическому значению, отличному от 1, и добавляет его в строку."$""1"R
добавляем финал"1"
и все готово.Неявный вывод.
источник
бред , 400 + 10 (
+
) = 410 байтПопробуйте онлайн!
источник
MS-DOS .COM 8086 машинный код (72 байта)
Время драгоценно, так что нет времени на компиляцию или интерпретацию! Просто откройте текстовый редактор по вашему выбору и введите следующее (замените
\t
на TAB):Как hexdump:
Сохраните как файл .COM и запустите его, чтобы сохранить день.
Код предполагает определенные начальные значения для регистров , поэтому может не работать для всех разновидностей DOS. Просто надеюсь, что кто-то рискует быть уволенным, не купив IBM.
Чуть более понятное представление:
источник
Befunge-98, 43 +10 = 53 байта
Попробуйте онлайн!
10-байтовый штраф за использование
,
ключа (не уверен, почему это не может быть выполнено с Shift+ <, но это, кажется, правило). И хотя технически источником является 40 символов, эти три·
символа вносят дополнительные три байта из-за их кодировки UTF-8.источник
05AB1E ,
8786 байтПопробуйте онлайн!
Может быть, самый длинный код 05AB1E?К сожалению, язык не поддерживает такие вещи, как
"Q"<
«декремент Q, чтобы получить P»Мой дополнительный ключ V.
Спасибо @Kevin Cruijssen за -1 байт.
Код:
Для сравнения: самый короткий способ печати "ПАРОЛЬ_01" - это 6 байтов
Попробуйте онлайн!
источник
TR
вместо того ,1<1
для01
части выходного сигнала.Emacs, 26 байт (возможно, + 10 = 36 или - 2 = 24)
Дополнительный ключ , который необходим в этом ответе есть Esc. Это половина клавиатуры, которая все еще не повреждена, но по какой-то причине не упоминается в этом вопросе, поэтому может давать или не давать штраф к счету. ( Escи Altэквивалентны в Emacs; Altон также находится на неповрежденной половине клавиатуры, но не упоминается в вопросе, но его нужно удерживать, а не постукивать, чтобы я не мог использовать его в качестве дополнительной клавиши. Это сохранит два байта тем не менее, потому что у него более короткая кодировка, чем Escу.)
Сама программа (запятые ограничивают границы между байтами в формате «на проводе», который Emacs использует для приема ввода):
Кодирование этого как необработанные байты, чтобы доказать количество байтов:
(Примечание: некоторые детали могут различаться в зависимости от того, как сконфигурирован Emacs; для этого ответа необходимо установить значение quoted-char-radix равным 16, а для Emacs использовать словарь проверки орфографии, который по умолчанию установлен в моей системе британского английского языка. как разумные настройки конфигурации, но возможно, что ваша копия Emacs может быть настроена по-другому. Другой словарь, вероятно, все равно будет содержать 26-байтовую программу, но, возможно, придется использовать несколько иные орфографические ошибки, чтобы требуемые исправления могли быть приняты ключи без пули.)
объяснение
Я не уверен, должно ли это иметь какое-либо влияние на войны редакторов, но Emacs, кажется, побеждает vim, по крайней мере, в случае этого вопроса. Emacs довольно подходит для редактора гольфа, измеряемого в байтах, потому что он в значительной степени опирается на аккорды, которые занимают несколько нажатий клавиш, но только один байт (таким образом, программа Emacs часто медленнее набирает текст, чем эквивалентная программа Vim, но короче на диске). Кроме того, большинство наиболее важных команд Emacs находятся в левом нижнем углу клавиатуры, чтобы быть очень близкими Ctrl, очень полезными для такого вопроса, как этот.
«Вы можете предположить, что у вас открыта оболочка интерпретатора / редактор исходного кода до того, как появились пули. К сожалению, вы ничего не написали до того, как нажали на клавиатуру», поэтому я предполагаю, что у нас есть открытый файл в Emacs и Нужно ввести пароль в него. (Затем нам нужно сохранить файл и, возможно, выйти из Emacs, но байты для этого не учитываются в ответах других людей, поэтому я их здесь тоже не считаю. Это вполне выполнимо, используя левую часть клавиатура, хотя, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)
Принимая команду (или блок похожих команд) одновременно:
WS
в документ.WS
не настоящее слово, но оно находит много похожих двухбуквенных слов.WS
кPS
. (Когда проверка орфографии вызывается с помощью Alt- $, как это произошло здесь ( Escи Altэквивалентно Emacs), он проверяет только одно слово, поэтому после этого он деактивируется.)A
, подачаPSA
.PAS
.SRWD
, даяниеPASSRWD
.PASSRWD
вPASSWORD
. Обратите внимание, что мы не можем угадать слово, которое мы хотим с нашей первой попытки, как это было бы сPASSWRD
, потому что ключом для принятия ближайшего реального слова является то, 0что мы не можем нажать. В результате, чуть более экстремальное неправильное написаниеPASSRWD
используется для перевода нужного слова в положение 5, где мы можем его принять._
. Теперь документ читаетPASSWORD_
(или будет, когда мы начнем вводить следующую команду; до этого подчеркивание не появляется в случае, если мы вводим другую шестнадцатеричную цифру).10
.PASSWORD_10
.PASSWORD_01
, как вопрос просит.Если нам разрешено использовать Alt, мы, вероятно, можем закодировать команду «invoke spellchecker» как один байт,
a4
а не записывать ее как1b
24
; он появляется дважды, что приводит к экономии двух байтов. (Большинство современных терминалов используют1b
24
в качестве кодировки для Alt- $чтобы избежать конфликтов с UTF-8, но времяa4
от времени также встречается кодирование, иногда доступное в качестве опции конфигурации.)Возможная экономия байтов, вероятно, связана с ошибками игроков в гольф для исправления.
PSASWRD
было бы на байт короче, но, к сожалению, проверка орфографии, кажется, не способнаPASSWORD
извлечь из этого пользу , такPASSRWD
что это лучший подход, который я нашел до сих пор. Подход на основе регистров к получению10
также смехотворно громоздок, но в Emacs не так много способов создавать числа из ниоткуда, и0
это болезненный характер, чтобы заполучить иное. (По крайней мере, было несколько удивительно полезных совпадений: курсор, как оказалось, оказался в положении10
, которое содержит0
, когда это необходимо, и тот факт, что Emacs принимает избыточнуюg
операцию с регистром, чтобы вставить содержимое регистра в документ , в дополнение к более интуитивнымi
.)источник