У меня есть сто хранилищ, каждое внутри другого. Каждое хранилище имеет пароль, состоящий из одного номера.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Запоминать все эти пароли слишком сложно, и хранить пароли на листе бумаги небезопасно. Единственное решение, которое я могу придумать, - это использовать программу с ровно сотней символов. Пароль к n
хранилищу будет найден путем обработки первых n
символов кода как программы.
Таким образом, первый символ программы, если он запускается как программа, должен выводиться 95
. Первые два символа сами должны быть выведены 43
. Вся программа должна выводить 97
.
Я признаю, что это действительно сложно. Так что просто делай все возможное. Постарайтесь, чтобы ваша программа работала для максимально возможного количества хранилищ , и я запомню все остальные пароли.
правила
- Если есть ничья, победителем считается самое раннее представление.
- Стандартные лазейки запрещены. Это включает в себя чтение из других файлов или из Интернета.
- У вас есть несколько вариантов кода:
- Полная программа, которая печатает правильный номер
- Функция, которая возвращает или печатает это
- Выражение, которое оценивает его (например, в C,
4+3
оценивает в7
)
- Вы можете предполагать среду REPL
- Вы можете использовать различные методы для каждого значения
n
. Например, вы можете использовать разные языки для каждогоn
, или иногда использовать полную программу, а иногда и функцию.
Примечание. Этот сценарий полностью вымышленный. Если у вас есть аналогичная проблема, не размещайте свои пароли в Интернете.
The only solution I can think of is to use a program with exactly one hundred characters.
Значит ли это, что каждая программа должна содержать ровно 100 символов?Ответы:
> <> (Рыба), 95
Начиная после размещения
'
всех символов в стеке и в конце строки, он оборачивается; закрывает строку с тем же'
; выводит вершину стека как число (n
) и завершает выполнение (;
).Символы для 13 и 10 были изменены на пробел, чтобы не портить компоновку кода (так как fish - это двумерный язык).
Некоторые непечатные ASCII исчезают в ответе. Правильная программа здесь.
Спасибо за Мартина Бюттнера и Sp3000 за улучшения в 2 и 5 байтов.
Шестнадцатеричный дамп:
источник
'
для разбора строк,"
и в программе есть несколько"
s, которые необходимо заменить./fish.py <(head -c 99 raw.php)
которойraw.php
это имя , которое каким - то образом оказался на исходный файл я скачал. Ухоженная! Я не могу сказать, что понимаю это еще ...CJam, 40
Я просто использовал жадный подход (большую часть времени), чтобы напечатать следующий возможный номер (каретки отмечают правильные окончания программы):
Следующие цифры напечатаны правильно:
Проверьте это здесь.
источник
CJam, 56
Вот несколько более сложный подход. Он правильно печатает последние 56 номеров:
Скорее всего, SE проглотил некоторых персонажей, так что вот пастбина . Вы можете попробовать код здесь .
Он использует тот факт, что вызов запрашивает программы в символах, поэтому я использую символы Unicode для кодирования последних 56 символов в функции, которая затем оставляет правильный элемент в стеке, увеличивая переменную при каждом вызове. и выбрав соответствующий элемент. Остальная часть кода просто вызывает функцию несколько раз.
Первая правильная программа - это та, которая заканчивается на втором
F
в коде. Я возился с длиной символов, которые нужно закодировать, пока не достигну правильного баланса, чтобы использовать как можно больше. Еще один или два могут быть возможны с этим подходом.источник
Pyth,
9293Вышеприведенный код, очевидно, будет испорчен, потому что SE удаляет управляющие символы, поэтому найдите действительный код здесь
Логика проста, строка является символьным представлением каждого числа, за исключением первых 3, которые используются логикой преобразования и некоторыми кавычками и переводами строки, которые я заменил на фиктивные символы.
Я постараюсь увеличить счет здесь.
Попробуйте онлайн здесь
источник
(vintage) C - 88
No need for all these silly dedicated golfing languages. Better go back to the good old days, before the quiche eaters and their "program = algorithm+data" nonsense ruined all the fun.
The code is a C function, stored as a string.
It returns the binary value as an integer.
Run it in DosBox with Borland Turbo C 2.0.
There are no control characters in the string, so a copy-paste should work.
Compile with
tiny
memory model or else...If you disassemble the start of the string, you'll see something like:
since
si
is used as function address, it points directly to the code, followed by the passwords.All values are shifted by 35 to avoid escaping control characters and double quotes.
The code is 11 bytes long, so it will work up to 12 characters.
Unfortunately, the 11th value (34) is too low to produce a valid password with an increased shift value (
ret
opcode is 195, so you would need a shift of 161, and the maximal shift to avoid a rollover is 255-99=156).11 characters will produce a wrong value, and your virtual PC will experience severe (and usually lethal) undefined behaviours with 10 characters or less.
источник
Matlab
3739You can use part (without the semicolons) of this idea with any programming language you like, that prints the results directly to console. This will produce at least 39 times the right answers. (I did not check those where only a half number might give a correct answer, but I've found two so far.)
источник
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- it shows only 28 matches‌​
after00+
012345679+-*;
Outside of competition: Javascript, 173
Here's a "solution", which doesn't follow the rules in the sense that it contains a program way longer than required, but at a base length of 152 characters will output
95
, and for every subsequent numerical character added to it, up to 22, it will display an additional password:Sadly, it only works up to 22 characters (at least in node REPL anything above that seems to be disregarded), which I believe is a limitation of the number representation in the language. If it wasn't for this limitation, using the full password string of
(bringing the total length to 329 chars) would allow this logic to output every password.
The code is not particularly smart, it only shaves off a few characters compared to the most trivial solutions, using:
Mostly I was just interested in writing a Javascript program which is valid with varying length, as the language is not too well suited for golfing in general.
I'm new to codegolf, I apologize if posting such clearly invalid solutions is frowned upon.
источник
Python 2, 39
I wrote a script that tries lots of combinations of expressions, and tests them against the safe combinations. The best I could manage was 39 matches. I was surprised how many combinations resulted in the score of 39. I have included a sample in my answer.
I tried including the logical
^&|
operators but the precedence rules got complicated.источник
DEBUG.COM, 93
Usage:
and the result appears in
AL
источник