Quinean Regex Tester

13

Эта задача довольно проста. В качестве входных данных вы берете регулярное выражение.

Затем вы выводите правду / ложь о том, соответствует ли ваш исходный код регулярному выражению. Это так просто! Еще две вещи:

  • Нет встроенных quine; вы можете, однако, получить доступ к исходному коду кода через файл ввода-вывода и т. д.
  • Это , поэтому выигрывает самый короткий код в байтах !

пример

Если в вашем исходном коде было сказано, abcвход a\wcвозвращал бы true, а вход a\dcвозвращал бы false.

Maltysen
источник
Пример пожалуйста?
Mama Fun Roll
1
@ C'O'Bʀɪᴇɴ нет, все в порядке.
Maltysen
2
1. Я не думаю, что просто BRE с простыми классами символов достаточно специфичен. Какие функции BRE должны поддерживаться? 2. \dне является особенным в BRE; это соответствует характеру d. 3. Выбор конкретного варианта регулярного выражения ограничивает вашу задачу языками, которые его поддерживают, и немногие языки поддерживают BRE. Это намеренно?
Деннис
2
Я бы рекомендовал оставить это до ответчика. Если язык x использует регулярное выражение y по умолчанию, пусть он использует этот вариант в этой задаче.
Деннис
6
@Maltysen Почему бы вам не добавить пример подстроки в тело вопроса?
feersum

Ответы:

14

Z shell, 12 байтов

grep "$@"<$0

Условные выражения Zsh понимают только коды выхода, а сценарии завершают работу с 0 или 1 соответственно.

Кроме того, это печатает непустую строку (исходный код) для совпадения и пустую строку для несоответствия, которые могут быть как значения истина / ложь в сочетании с test/[ .

Программа читает свой собственный файл, но согласно этому комментарию OP это разрешено.

Деннис
источник
3
Аа Деннис победил. ¯ \ _ (ツ) _ / ¯
Конор О'Брайен
Это не работает Это ломается на образцах с пробелами в них.
feersum
@feersum Ой! Спасибо что подметил это. Я отредактировал свой ответ.
Деннис
2
Теперь он ломается, если записывается в файл с пробелами в имени. Или файл называется -v. Или ...
Бен Милвуд
@BenMillwood Обычно я бы сказал, что не сохраняйте его с таким именем файла , но переключение на zsh делает это пуленепробиваемым без увеличения числа байтов.
Деннис
10

JavaScript (ES6), 39

(f=_=>!!`(f=${f})()`.match(prompt()))()
n̴̖̋h̷͉a̷̭̿h̸̡̅ẗ̵̨d̷̰ĥ̷̳
источник
Просто собираюсь опубликовать это, но вы меня опередили. Прекрасная работа!
Mama Fun Roll
12
Начало вашего кода похоже на меня, когда я пытаюсь понять это: (f = _ =)
Нико
9

Python 3, 119 байт

Это выглядит круче, IMO (и не читает файл).

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

Python 3, 67 байт

print(bool(__import__('re').search(input(),open(__file__).read())))

Добавлено после прочтения этого комментария .

Зак Гейтс
источник
intкороче чем bool.
кот
7

Юлия, 64 54 байта

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

Юлия Регулярные выражения используют PCRE. Хотя чтение исходного кода файла является стандартной лазейкой для quines, в этом случае это было явно разрешено. Принимает ввод без завершающей строки.

Алекс А.
источник
3

Japt, 22 байта

"+Q ³sAJ fU"+Q ³sAJ fU

Стандартная структура Quine с добавлением нескольких байтов для решения этой задачи. Истина = совпадение (я), ложь = ноль. Попробуйте онлайн!

         // Implicit: U = input string, A = 10, J = -1, Q = quotation mark
"..."+Q  // Take this string and concatenate a quotation mark.
³        // Repeat three times.
sAJ      // Slice off the first 10 and last 1 chars.
fU       // Match U to the result.
ETHproductions
источник
2

Mathematica, 63 байта

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

Обратите внимание на завершающий пробел. Использует стандартный механизм Mma quine и проверяет, соответствует ли он регулярному выражению.

LegionMammal978
источник
2

Perl, 21 байт

open 0;$_=<0>=~$_

17 байтов плюс 4 байта для -pl0. Запустите так:

echo open | perl -pl0 quinean

Исходный файл должен содержать только приведенный выше код (без шебанга, без завершающей строки). Выводится, 1если регулярное выражение совпадает, и пустая строка, если это не так (пустая строка в Fall - falsey).


Четыре байта могут быть сохранены, если гарантируется, что ввод не заканчивается новой строкой:

open 0;say<0>=~<>

Запустите так:

echo -n open | perl -M5.010 quinean

sayтребует Perl 5.10+ и должен быть включен с -M5.010. По словам Меты , « -M5.010когда это необходимо, это бесплатно», давая оценку 17 байт.

Как это устроено

Это простая вариация стандартной «читерской» квинны:

open 0;print<0>

Это открывает файл с именем в $0и читает содержимое с <0>.

$_=<0>=~$_читает одну строку из исходного файла, сопоставляет регулярное выражение с содержимым $_(которое было прочитано -pфлагом) и присваивает результат $_. -pпечатает $_автоматически в конце.

ThisSuitIsBlackNot
источник
2

Джольф, 18 15 байт

Поддерживает JS-вкус RegEx, надеюсь, все в порядке. Попробуй это здесь! ,

 h$code.value#i

комментарии:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)
Конор О'Брайен
источник
В каком браузере это работает? И Chrome, и Firefox жалуются, что x.stepэто не функция.
Деннис
@ Денис Ха. Должно быть, я сломал переводчика прошлой ночью. Что еще не так? В настоящее время я не могу отладить, я в школе.
Конор О'Брайен
Хорошо. Теперь добавьте ярлык к элементу «code» документа, чтобы мы могли сделать его короче.
user48538
@ CᴏɴᴏʀO'Bʀɪᴇɴ Это также дает ошибку ссылки для math.
Деннис
@ Денис, вот почему. Я забыл обновить HTML, я добавил math.js. Я вернусь, когда приеду домой, если еще не поздно. (Примерно через 4 часа)
Конор О'Брайен
1

𝔼𝕊𝕄𝕚𝕟, 14 символов / 26 байтов (неконкурентные)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

Использование версии с исправлениями ошибок, написанными после испытания.

объяснение

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

ПРИМЕЧАНИЕ. Блоки копирования НЕ являются операторами quine. Предполагается, что они являются более универсальными альтернативами объявлениям переменных.

Mama Fun Roll
источник
1
Я думаю, что вы можете сохранить байт, изменив на 10.
lirtosiast