Напишите программу, которая будет генерировать «истинный» вывод, если ввод соответствует исходному коду программы, и который генерирует «ложный» вывод, если ввод не соответствует исходному коду программы.
Эта проблема может быть описана как связанная с quines, так как программа должна быть способной каким-то образом вычислять собственный исходный код в процессе.
Это код гольф: применяются стандартные правила. Ваша программа не должна иметь доступа к каким-либо специальным файлам, таким как файл собственного исходного кода.
Изменить: Если вы выберете, true / false можно заменить на True / False или 1/0.
пример
Если исходный код вашей программы bhiofvewoibh46948732));:/)4
, то вот что ваша программа должна делать:
Ввод (стандартный)
bhiofvewoibh46948732));:/)4
Выход (Stdout)
true
вход
(Anything other than your source code)
Выход
false
code-golf
quine
decision-problem
PhiNotPi
источник
источник
true
/false
output сильным требованием или приемлемы также варианты (True
/False
,1
/0
)?Ответы:
JavaScript: 26
Я не знаю, действительно ли файл JavaScript квалифицируется как «программа».
источник
.toString()
метод в JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 символов
Это единственный (гольфовый) способ сделать это в JS. ES6 просто заставляет брать супер меньше персонажей
Запустите это в последней веб-консоли Firefox:
Пример использования:
источник
f=x=>f==x
и неx=>f==x
, в то время как версия DENYS Séguret в действительно проверить весь источник.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(в основном оценивают код в консоли, а затем оцениваютf.toSource()
в браузере, который поддерживает этот метод.x=>f==x
) РЕДАКТИРОВАТЬ: не имеет значения, ссылка на f внутри функцииХаскель, 72 персонажа
Примечание: в конце скрипта нет символа конца строки.
источник
GolfScript, 11 символов
Без этого
=
этот код был бы quine, который генерирует свой собственный исходный код в виде строки.=
Позволяет сравнить эту строку ввода и вывода ,1
если они совпадают и0
если они этого не делают. Обратите внимание, что сравнение является точным - в частности, завершающий символ новой строки в конце ввода приведет к сбою.Объяснение:
{ }
является литералом блока кода в GolfScript;.
дублирует этот блок кода и~
выполняет вторую копию (оставляя первую в стеке);`
строковый блок кода, и к нему".~"
добавляется +.~
;=
сравнивает полученную строку с входными данными (которые помещаются в стек в виде строки интерпретатором GolfScript до запуска программы) и возвращает результат,1
если они совпадают, а0
если нет.источник
Perl,
Infinity4138 персонажейОбновление: программа больше не заканчивается новой строкой, что означает, что она будет правильно работать с многострочными файлами. Вы должны ввести ввод из STDIN, не нажимая Enter. В Windows я мог сделать это только путем чтения из файла.
Оригинальное решение:
источник
(cat id.pl; echo foo)|perl id.pl
> <> , 68 байт
Рыбы любят есть рыбные какашки. Теперь мы знаем, что они могут отличить их от своих друзей.
Вы можете попробовать это онлайн !
источник
1
для любого префикса кодаPython 2, 55
Проверено:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
источник
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
на__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Это всего 40 байт, использует вашraw_input()
подход, но читает его код.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 байтМинус два байта благодаря Нейлу.
31 байт, если мы должны принять ввод через приглашение.
38 байт, если мы должны вывести через оповещение.
Это правильный способ сделать это, так как ответ Оптимизатора не принимает весь исходный код.
источник
'$='+$
.;$()
потому что вызов функции является частью квин. Это также означает, что вам нужно переключитьсяprompt
на учетную запись для ввода.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Вы проверяете это, сохраняя его в файл
f.js
(точное имя не имеет значения) и используя(который выводит false) или
(который выводит true)
Я также сделал другую версию на основе eval:
Сейчас у него 72 символа, я постараюсь сократить это, когда у меня будет время.
источник
Smalltalk (диалект Pharo 2.0)
Реализуйте этот метод с 41 символом в String (безобразное форматирование для code-golf):
Затем оцените это в рабочей области (напишите традиционным способом Smalltalk)
Ввод не читается из stdin, это просто строка, в которую мы отправляем сообщение (что еще может быть программа в Smalltalk?):
Но мы обманываем, sourceCode читает некоторый исходный файл ...
Вот вариант с 51 символом, который не делает:
И проверить с:
Если строка в рабочей области не считается допустимым вводом, то давайте посмотрим, как использовать какое-либо диалоговое окно в 116 символов.
Просто оцените это предложение:
Поскольку формат декомпиляции включает CR и TAB, мы изменяем это с помощью SeparatorsCompacted.
Затем мы пропускаем первые 7 символов 'doIt ^'
Наконец, вариант с 105 символами, использующий stdin, просто интерпретируйте это предложение из командной строки, чтобы почувствовать себя более распространенным:
источник
flex - 312 символов
Возможно, его можно сделать короче, но он работает с многострочным вводом (необходимо, так как исходный код состоит из нескольких строк) и даже для входов, которые содержат программу в качестве подстроки. Кажется, что многие ответы до сих пор не отвечают ни одному, ни обоим из них.
Команда компиляции:
flex id.l && gcc -lfl lex.yy.c
источник
D (133 символа)
источник
JavaScript (V8), 35
позвоните
i()
и он подскажет для вводаисточник
+[]
должно быть необязательным, так как JS автоматически приведёт его к типуGolfScript - 26
Вдохновленный из http://esolangs.org/wiki/GolfScript#Examples
Другая версия:
Жаль, что
\
это и своп, и побег ...источник
Python 2, 47 байт
Простой Quine с добавленной проверкой.
источник
print
это функция Python 3. Вам нужно было бы сделатьprint(_%%_==input())';print(_%_==input())
или изменить ее на Python 2.CJam , 12 байтов
Попробуйте онлайн!
объяснение
Это просто использует стандартную CJam Quine Framework.
Что делает блок:
источник
Tcl, 111 символов
источник
Perl, 52 символа
источник
Python, 187 байт
Осторожно, чтобы не добавлять новую строку в конце. Кто-то с лучшим Python-fu может сократить его.
источник
C=chr
чтобы сбросить несколько байтов. Кроме того, сократить имя переменнойcode
.Шелуха , 11 байт
Попробуйте онлайн!
объяснение
Объяснение используется
¨
для разделения строк (чтобы избежать нечитаемого экранирования):Удалив функцию,
=
вы можете убедиться, что она действительно будет соответствовать только самому источнику.источник
> <> , 24 байта
Попробуйте онлайн!
Обтекание строкового литерала с последующей проверкой идентичности ввода стеку с окончательной проверкой отсутствия ввода.
источник
Желе , 10 байт
Попробуйте онлайн!
источник
05AB1E , 15 байтов
Изменяет квайн
0"D34çý"D34çý
по умолчанию , добавляяQ
(проверка на равенство с неявным входом)Попробуйте онлайн.
Объяснение:
Охладить 15 байт альтернатива обеспечивается @Grimy :
Попробуйте онлайн.
Объяснение:
источник
187745012D27BJQ
галстукC -
186176 знаковОдин лайнер:
С пробелами (обратите внимание, что это нарушает программу):
источник
Python 2 , 40 байт
Попробуйте онлайн!
источник
Stax , 26 байт
Запустите и отладьте его
источник
q, 8 байтов
Возвращает логическое значение при вводе, соответствующем самореференциальному .zs
источник
Рунический , 11 байт
Попробуйте онлайн!
TIO обновлен, и больше нет проблем с чтением входных данных (и больше не требуется конечный пробел).
объяснение
Решение JoKing:
объяснение
источник
r
обратного хода"
слева - единственное место, куда он может пойти, потому что наличие его в другом месте усложняет ситуацию. (Но только сейчас мне пришлось запустить его в моем отладчике, чтобы посмотреть, что он делает ...)R , 54 байта
Попробуйте онлайн!
body
получает тело функции (немного ее разбивая, так чтоbody(f)[3]
это все , что нужноpaste0
). Интересно, чтоbody
форматирует код, добавляя пробелы после запятой и т. Д. Таким образом, это редкий случай ответа R golf с пробелом после запятой.Это работает, потому что
body(f)
это объект типаlanguage
, иas.character
для этого типа существует метод. С другой стороны,f
иargs(f)
имеют типclosure
, и не могут быть преобразованы в тип символов, насколько я могу судить. Пожалуйста, не спрашивайте меня, для чего предназначен тип языка ...источник
PowerShell, 28 байт
Очень похоже на этот ответ JavaScript , использует функцию провайдера .
пример
источник