Quinean Regex Tester


13

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

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

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

пример

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


Пример пожалуйста?
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 делает это пуленепробиваемым без увеличения числа байтов.
Деннис


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.

2

Mathematica, 63 байта

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

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


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печатает $_автоматически в конце.


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. Предполагается, что они являются более универсальными альтернативами объявлениям переменных.


1
Я думаю, что вы можете сохранить байт, изменив на 10.
lirtosiast
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.