Quinean Regex Test Cihazı


13

Bu meydan okuma oldukça basit. Girdi olarak, normal bir ifade alırsınız.

Ardından, kaynak kodunuzun normal ifadeyle eşleşip eşleşmediğine dair bir doğruluk / falsey çıkarırsınız. Bu kadar basit! Sadece iki şey daha var:

  • Hiçbir kınamak yerleşikler; ancak, kodun kaynak koduna G / Ç dosyası vb. yoluyla erişebilirsiniz.
  • Bu , bayt en kısa kod kazanır!

Misal

Kaynak kodunuz söylenirse, abcbir girdisi a\wctrue değerini ve bir girdisi a\dcfalse değerini döndürür.


Örnek lütfen?
Mama Fun Roll

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ hayır, sorun değil.
Maltysen

2
1. Basit karakter sınıflarına sahip bir BRE'nin yeterince spesifik olduğunu düşünmüyorum . Hangi BRE özellikleri desteklenmelidir? 2. \dBRE'de özel değildir; karakterle eşleşir d. 3. Belirli bir normal ifade lezzetinin seçilmesi, meydan okumayı onu destekleyen dillerle sınırlandırır ve birkaç dil BRE'yi destekler. Bu kasıtlı mı?
Dennis

2
Yanıtlayana bırakmanızı tavsiye ederim. X dili varsayılan olarak regex lezzetini y kullanıyorsa, bu zorlukta bu lezzeti kullanmasına izin verin.
Dennis

6
@Maltysen Neden soru gövdesine bir alt dize örneği eklemiyorsunuz?
feersum

Yanıtlar:


14

Z kabuğu, 12 bayt

grep "$@"<$0

Zsh koşullarında yalnızca çıkış kodları anlaşılır ve komut dosyaları buna göre 0 veya 1 ile çıkar.

Buna ek olarak, bir maç için bu baskı boş olmayan bir dizge (kaynak kodu) ile kombinasyon halinde truthy / falsy değerleri olarak olabilir bir uyumsuzluk için boş bir, test/ ' [.

Program kendi dosyasını okur, ancak OP tarafından yapılan bu yoruma göre buna izin verilir.


3
Aaand Dennis kazandı. ¯ \ _ (ツ) _ / ¯
Conor O'Brien

Bu işe yaramıyor. İçlerinde boşlukları olan kalıpları kırar.
feersum

@feersum Hata! Bunu işaret ettiğiniz için teşekkürler. Cevabımı düzenledim.
Dennis

2
Şimdi adında boşluklar olan bir dosyaya yazılırsa kırılır. Veya adlı bir dosya -v. Veya ...
Ben Millwood

@BenMillwood Normalde böyle bir dosya adıyla kaydetmeyin, zsh'ye geçmek bayt sayısını arttırmadan kurşun geçirmez hale getirir.
Dennis


9

Python 3, 119 bayt

Bu sadece daha havalı görünüyor , IMO (ve dosyayı okumuyor).

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

Python 3, 67 bayt

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

Bu yorumu okuduktan sonra eklendi .


intdaha kısadır bool.
kedi

7

Julia, 64 54 bayt

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

Julia'nın düzenli ifadeleri PCRE kullanıyor. Dosyanın kaynak kodunu okumak, quines için standart bir boşluk olsa da, bu durumda açıkça izin verilir. Sondaki yeni satır olmadan girdi alır.


3

Japt, 22 bayt

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

Bu zorluğa uyması için birkaç bayt içeren standart quine çerçevesi . Gerçek = eşleşmeler, yanlış = boş. Çevrimiçi deneyin!

         // 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 bayt

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

Sondaki boşluğa dikkat edin. Standart Mma quine mekanizmasını kullanır ve normal ifadeyle eşleşip eşleşmediğini test eder.


2

Perl, 21 bayt

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

17 bayt artı 4 bayt -pl0. Şu şekilde çalıştırın:

echo open | perl -pl0 quinean

Kaynak dosya sadece yukarıdaki kodu içermelidir (hiçbir şey yok, son satır sonu yok). Normal ifade 1eşleşirse ve boş dize eşleşmezse (boş dize Perl'de falseydir) çıkar.


Girişin yeni bir satırda bitmeyeceği garanti edilirse dört bayt kaydedilebilir:

open 0;say<0>=~<>

Şu şekilde çalıştırın:

echo -n open | perl -M5.010 quinean

sayPerl 5.10+ gerektirir ve ile etkinleştirilmelidir -M5.010. Meta'ya göre , " -M5.010ihtiyaç duyulduğunda ücretsizdir", 17 baytlık bir puan veriyor.

Nasıl çalışır

Bu standart "hile" quine basit bir varyasyon:

open 0;print<0>

Bu, adlı dosyayı açar ve $0içeriğini ile okur <0>.

$_=<0>=~$_kaynak dosyadan bir satır okur, $_( -pbayrak tarafından okunan) içeriğiyle bir regex eşleşmesi yapar ve sonucu atar $_. sonunda otomatik olarak -pyazdırır $_.


2

Jolf, 18 15 bayt

RegEx JS lezzetini destekler, umarım bu iyi. Burada deneyin! .

 h$code.value#i

Yorumlananlar:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)

Bu hangi tarayıcıda çalışıyor? Hem Chrome hem de Firefox x.stepbunun bir işlev olmadığından şikayet ediyor .
Dennis

@Dennis Huh. Dün gece tercümanı kırmış olmalıyım. Başka ne yanlış? Şu anda hata ayıklayamıyorum, okuldayım.
Conor O'Brien

İyi. Şimdi belgenin "kod" öğesine bir kısayol ekleyin, böylece onu kısaltabiliriz.
user48538

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ayrıca bir referans hatası verir math.
Dennis

@Dennis Ah, bu yüzden. HTML'yi güncellemeyi unuttum, math.js ekledim. Eve geldiğimde revize edeceğim, eğer çok geç değilse. (Yaklaşık 4 saat içinde)
Conor O'Brien

1

𝔼𝕊𝕄𝕚𝕟, 14 karakter / 26 bayt (rekabetçi değil)

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

Try it here (Firefox only).

Meydan okumadan sonra yazılan hata düzeltmeleri içeren bir sürüm kullanma.

açıklama

⟮‼(ⒸⅩ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

NOT: Kopyalama blokları satır operatörleri DEĞİLDİR. Değişken beyanlara daha çok yönlü alternatifler olmaları amaçlanmaktadır.


1
Sanırım 10 olarak değiştirerek bir bayt kaydedebilirsiniz .
lirtosiast
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.