Quinean Regex Tester


13

ความท้าทายนี้ค่อนข้างง่าย ในฐานะที่เป็นอินพุตคุณใช้เวลาในการแสดงออกปกติ

จากนั้นคุณส่งออกความจริง / เท็จว่าซอร์สโค้ดของคุณตรงกับนิพจน์ทั่วไปหรือไม่ มันง่ายมาก! อีกสองสิ่ง:

  • ไม่มีควินบิวอิน อย่างไรก็ตามคุณสามารถเข้าถึงซอร์สโค้ดของรหัสด้วยไฟล์ IO และอื่น ๆ
  • นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!

ตัวอย่าง

หากซอร์สโค้ดของคุณพูดว่าabcอินพุตของa\wcจะคืนค่าจริงและอินพุตของa\dcจะคืนค่าเป็นเท็จ


ตัวอย่างไหม
Mama Fun Roll

1
@ CᴏɴᴏʀO'Bʀɪᴇɴไม่เป็นไร
Maltysen

2
1. ฉันไม่คิดว่าเพียงแค่ BRE ที่มีคลาสของตัวละครที่เรียบง่ายมีความเฉพาะเจาะจงเพียงพอ ต้องรองรับฟีเจอร์ BRE ใดบ้าง 2. \dไม่ใช่พิเศษใน BRE dมันตรงกับตัวอักษร 3. การเลือกรสชาติที่เฉพาะเจาะจงของ regex จะจำกัดความท้าทายของคุณสำหรับภาษาที่รองรับและบางภาษารองรับ BRE มันตั้งใจหรือไม่
Dennis

2
ฉันแนะนำให้ทิ้งไว้กับผู้ตอบ หากภาษาxใช้รสชาติ regex yตามค่าเริ่มต้นให้ใช้รสชาตินั้นในความท้าทายนี้
Dennis

6
@Maltysen ทำไมคุณไม่เพิ่มตัวอย่างสตริงย่อยในเนื้อหาคำถาม
feersum

คำตอบ:


14

Z shell ขนาด 12 ไบต์

grep "$@"<$0

เงื่อนไข Zsh เข้าใจเฉพาะรหัสทางออกเท่านั้นและสคริปต์จะออกด้วย 0 หรือ 1 ตามลำดับ

นอกจากนี้พิมพ์นี้เป็นสายที่ไม่ว่างเปล่า (รหัสแหล่งที่มา) สำหรับการแข่งขันและเป็นหนึ่งที่ว่างเปล่าสำหรับไม่ตรงกันซึ่งอาจจะเป็นค่า truthy / falsy ร่วมกับ/test[

โปรแกรมอ่านไฟล์ของตัวเอง แต่ตามความคิดเห็นนี้โดย OP จะอนุญาตให้ทำได้


3
Aaand Dennis ชนะแล้ว ¯ \ _ (ツ) _ / ¯
Conor O'Brien

มันใช้งานไม่ได้ มันแบ่งในรูปแบบที่มีช่องว่างในพวกเขา
feersum

@feersum อ๊ะ! ขอบคุณสำหรับการชี้ให้เห็นว่า ฉันได้แก้ไขคำตอบของฉัน
Dennis

2
ตอนนี้มันจะหยุดถ้ามันถูกเขียนไปยังไฟล์ที่มีช่องว่างในชื่อ -vหรือไฟล์ที่เรียกว่า หรือ ...
เบ็นมิลวูด

@ BenMillwood ปกติแล้วฉันจะบอกว่าอย่าบันทึกด้วยชื่อไฟล์แต่การเปลี่ยนไปใช้ zsh ทำให้มันเป็น bullet bullet โดยไม่ต้องเพิ่มจำนวนไบต์
Dennis

10

JavaScript (ES6), 39

(f=_=>!!`(f=${f})()`.match(prompt()))()

กำลังจะโพสต์สิ่งนี้ แต่คุณเอาชนะฉันได้ เยี่ยมมาก!
Mama Fun Roll

12
จุดเริ่มต้นของรหัสของคุณดูเหมือนว่าฉันเมื่อพยายามที่จะเข้าใจสิ่งนี้: (f = _ =)
Nico

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())))

เพิ่มหลังจากอ่านความคิดเห็นนี้


intboolจะสั้นกว่า
แมว

7

Julia, 64 54 ไบต์

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

นิพจน์ทั่วไปของ Julia ใช้ PCRE ในขณะที่อ่านซอร์สโค้ดของไฟล์เป็นช่องโหว่มาตรฐานสำหรับ quines ในกรณีนี้มันได้รับอนุญาตอย่างชัดเจน รับอินพุตโดยไม่ขึ้นบรรทัดใหม่


3

Japt, 22 ไบต์

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

เฟรมเวิร์ก quine มาตรฐานที่เพิ่มสองสามไบต์เพื่อรองรับความท้าทายนี้ Truthy = match (es), falsy = null ลองออนไลน์!

         // 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 มาตรฐานและทดสอบว่ามันตรงกับ regex หรือไม่


2

Perl, 21 ไบต์

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

17 ไบต์บวก 4 -pl0ไบต์ ทำงานแบบนี้:

echo open | perl -pl0 quinean

ไฟล์ต้นฉบับจะต้องมีโค้ดด้านบนเท่านั้น (ไม่มี shebang, ไม่มีการขึ้นบรรทัดใหม่) ส่งออก1ถ้า regex จับคู่และสตริงว่างถ้ามันไม่ได้ (สตริงว่างคือเท็จใน Perl)


สามารถบันทึกสี่ไบต์ได้หากอินพุตรับประกันว่าจะไม่สิ้นสุดในบรรทัดใหม่:

open 0;say<0>=~<>

ทำงานแบบนี้:

echo -n open | perl -M5.010 quinean

sayต้อง Perl 5.10+ -M5.010และจะต้องเปิดใช้งานด้วย ตามที่Metaกล่าวว่า " -M5.010เมื่อจำเป็นต้องใช้นั้นฟรี" ให้คะแนน 17 ไบต์

มันทำงานอย่างไร

นี่คือรูปแบบที่เรียบง่ายใน quine "โกง" มาตรฐาน:

open 0;print<0>

นี้จะเปิดไฟล์ที่มีชื่อในและอ่านเนื้อหาที่มี$0<0>

$_=<0>=~$_อ่านหนึ่งบรรทัดจากแฟ้มแหล่งที่มาไม่ตรงกับที่ regex กับเนื้อหาของ$_(ซึ่งถูกอ่านโดย-pธง) $_และกำหนดผลให้ -pพิมพ์$_โดยอัตโนมัติในตอนท้าย


2

Jolf, 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ไม่ใช่ฟังก์ชั่น
Dennis

@Dennis Huh เมื่อคืนฉันต้องล่ามเสีย มีอะไรผิดปกติอีกไหม? ขณะนี้ฉันไม่สามารถดีบักได้ที่โรงเรียน
Conor O'Brien

ดี. ตอนนี้เพิ่มทางลัดไปยังองค์ประกอบ "code" ของเอกสารเพื่อให้เราสามารถทำให้สั้นลง
user48538

@ mathCᴏɴᴏʀO'Bʀɪᴇɴนอกจากนี้ยังให้ข้อผิดพลาดอ้างอิงสำหรับ
Dennis

@Dennis Ah นั่นเป็นสาเหตุ ฉันลืมอัปเดต HTML ฉันเพิ่ม math.js ฉันจะแก้ไขเมื่อฉันกลับถึงบ้านหากยังไม่สายเกินไป (ประมาณ 4 ชั่วโมงต่อชั่วโมง)
Conor O'Brien

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.