Quinean Regex Tester


13

Thử thách này khá đơn giản. Là đầu vào, bạn có một biểu thức thông thường.

Sau đó, bạn đưa ra một sự thật / falsey về việc liệu mã nguồn của bạn có khớp với biểu thức thông thường hay không. Nó đơn giản mà! Chỉ hai điều nữa:

  • Không có nội dung quine; tuy nhiên, bạn có thể truy cập mã nguồn của mã bằng tệp IO, v.v.
  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Thí dụ

Nếu mã nguồn của bạn được nói, abcmột đầu vào a\wcsẽ trả về true và đầu vào của a\dcsẽ trả về false.


Làm ơn ví dụ?
Mama Fun Roll

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ không, không sao đâu.
Maltysen

2
1. Tôi không nghĩ chỉ cần một BRE với các lớp nhân vật đơn giản là đủ cụ thể. Những tính năng BRE nào phải được hỗ trợ? 2. \dkhông đặc biệt trong BRE; nó phù hợp với nhân vật d. 3. Chọn một hương vị regex cụ thể sẽ hạn chế thách thức của bạn đối với các ngôn ngữ hỗ trợ nó và một số ngôn ngữ hỗ trợ BRE. Đó có phải là cố ý?
Dennis

2
Tôi khuyên bạn nên để nó cho người trả lời. Nếu ngôn ngữ x sử dụng regex hương vị y theo mặc định, hãy để nó sử dụng hương vị rằng trong thử thách này.
Dennis

6
@Maltysen Tại sao bạn không thêm một ví dụ chuỗi con vào phần thân câu hỏi?
frageum

Câu trả lời:


14

Vỏ Z, 12 byte

grep "$@"<$0

Các điều kiện Zsh chỉ hiểu mã thoát và các tập lệnh thoát với 0 hoặc 1 tương ứng.

Ngoài ra, điều này in một chuỗi không trống (mã nguồn) cho một kết quả khớp và một chuỗi trống cho một sự không phù hợp, có thể là các giá trị trung thực / giả mạo kết hợp với test/ [.

Chương trình đọc tệp riêng của mình, nhưng theo nhận xét này của OP, điều này được cho phép.


3
Aaand Dennis đã thắng. ¯ \ _ (ツ) _ /
Conor O'Brien

Điều này không hoạt động. Nó phá vỡ các mô hình với không gian trong đó.
frageum

@feersum Rất tiếc! Cảm ơn đã chỉ ra rằng. Tôi đã chỉnh sửa câu trả lời của tôi.
Dennis

2
Bây giờ nó bị hỏng nếu nó được ghi vào một tệp có khoảng trắng trong tên. Hoặc một tập tin được gọi là -v. Hoặc ...
Ben Millwood

@BenMillwood Tôi thường nói không lưu nó với tên tệp như vậy , nhưng chuyển sang zsh làm cho nó chống đạn mà không tăng số byte.
Dennis


9

Python 3, 119 byte

Điều này trông có vẻ mát mẻ hơn, IMO (và nó không đọc tệp).

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

Python 3, 67 byte

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

Đã thêm sau khi đọc bình luận này .


intngắn hơn bool.
con mèo

7

Julia, 64 54 byte

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

Julia biểu thức thường xuyên sử dụng PCRE. Mặc dù đọc mã nguồn của tệp là một lỗ hổng tiêu chuẩn cho các quines, nhưng trong trường hợp này, nó đã được cho phép rõ ràng. Đưa đầu vào không có dòng mới.


3

Japt, 22 byte

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

Khung quine chuẩn với một vài byte được thêm vào để phù hợp với thử thách này. Truthy = match (es), falsy = null. Hãy thử trực tuyến!

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

Toán học, 63 byte

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

Lưu ý không gian dấu. Sử dụng cơ chế chuẩn Mma quine và kiểm tra nếu nó phù hợp với biểu thức chính quy.


2

Perl, 21 byte

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

17 byte cộng với 4 byte cho -pl0. Chạy như thế này:

echo open | perl -pl0 quinean

Tệp nguồn phải chỉ chứa mã ở trên (không có shebang, không có dòng mới). Đầu ra1 nếu regex khớp và chuỗi trống nếu không (chuỗi trống là falsey trong Perl).


Bốn byte có thể được lưu nếu đầu vào được đảm bảo không kết thúc trong một dòng mới:

open 0;say<0>=~<>

Chạy như thế này:

echo -n open | perl -M5.010 quinean

sayyêu cầu Perl 5.10+ và phải được bật với -M5.010. Theo Meta , "-M5.010 , khi cần, là miễn phí", cho số điểm 17 byte.

Làm thế nào nó hoạt động

Đây là một biến thể đơn giản trên tiêu chuẩn "gian lận":

open 0;print<0>

Điều này sẽ mở tập tin có tên trong $0và đọc nội dung với<0> .

$_=<0>=~$_đọc một dòng từ tệp nguồn, thực hiện một biểu thức chính quy phù hợp với nội dung của $_(được đọc bởi -pcờ) và gán kết quả cho $_. -pin $_tự động ở cuối


2

Jolf, 18 15 byte

Hỗ trợ hương vị JS của RegEx, tôi hy vọng điều đó ổn. Hãy thử nó ở đây! .

 h$code.value#i

Đã bình luận:

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

Trong trình duyệt này hoạt động? Cả Chrome và Firefox đều phàn nàn rằng đó x.stepkhông phải là một chức năng.
Dennis

@Dennis Huh. Tôi đã phải phá vỡ phiên dịch tối qua. Điều gì khác là sai? Tôi hiện không thể gỡ lỗi, đang ở trường.
Conor O'Brien

Tốt Bây giờ thêm một lối tắt đến "mã" phần tử của tài liệu để chúng tôi có thể làm cho nó ngắn hơn.
dùng48538

@ CᴏɴᴏʀO'Bʀɪᴇɴ Nó cũng đưa ra lỗi tham chiếu cho math.
Dennis

@Dennis Ah, đó là lý do tại sao. Tôi quên cập nhật HTML, tôi đã thêm math.js. Tôi sẽ sửa lại khi về đến nhà, nếu chưa quá muộn. (Trong khoảng 4 giờ sáng)
Conor O'Brien

1

, 14 ký tự / 26 byte (không cạnh tranh)

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

Try it here (Firefox only).

Sử dụng một phiên bản với sửa lỗi được viết sau khi thử thách.

Giải trình

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

LƯU Ý: Sao chép khối KHÔNG phải là toán tử quine. Chúng có nghĩa là thay thế linh hoạt hơn cho khai báo biến.


1
Tôi nghĩ bạn có thể tiết kiệm một byte bằng cách thay đổi thành 10.
lirtosiast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.