Xác thực cú pháp 2Col!


11

Gần đây, một vài người có thể nhận thấy, tôi đã từ bỏ sự phát triển của Braingolf vì nó nhàm chán và không có hứng thú, và chuyển sang 2Col , một điều thú vị hơn một chút, và không được thiết kế để trở thành ngôn ngữ chơi gôn.

Tính năng xác định của 2Col là mỗi dòng mã phải dài chính xác 2 ký tự, không bao gồm dòng mới. Điều này có nghĩa rằng độ dài của một chương trình 2Col luôn có thể được tính như 3n-1nơi nlà số dòng trong chương trình.

Vì vậy, đây là thách thức của tôi: Cho mã 2Col dưới dạng chuỗi, xuất ra sự thật nếu đó là mã 2Col hợp lệ (Mỗi dòng có chính xác 2 ký tự và nó phù hợp với 3n-1công thức) và ngược lại.

Đầu vào

Đầu vào nên được lấy dưới dạng một chuỗi hoặc một mảng các ký tự.

Đầu ra

Giá trị trung thực nếu chuỗi đầu vào là bố cục hợp lệ và giá trị falsey khác.

Mã của bạn phải nhất quán trong đó giá trị trung thực / falsey mà nó sử dụng

Tủ thử

======
F!
$^
----
truthy
======


======
*8
+1
Sq
----
truthy
======


======
nop
xt
----
falsey
======


======
+1
+1
#^

----
falsey
======


======
<empty string>
----
falsey
======


======
ye
----
truthy
======


======
no<space>
----
falsey
======


======
test
----
falsey
======


======
puzzle
----
falsey
======

Chấm điểm

Đây là nên ít byte nhất sẽ thắng!


@Shaggy không, trừ khi vì một số lý do ngôn ngữ bạn sử dụng coi truefalsey và sự falsethật
Skidsdev


@Mayube cảm ơn, xin lỗi, tôi đã quên thêm "bạn có thể" trước xD đó
Stephen

Tôi đề nghị bạn thêm một trường hợp thử nghiệm : puzzle. Điều này sẽ làm cho các giải pháp làm toàn bộ chiều dài của chuỗi modulo 3, sau đó bị phủ định (hoạt động cho tất cả các trường hợp thử nghiệm hiện tại) không hợp lệ.
Đồng chí SparklePony

@ComradeSparklePony sẽ làm
Skidsdev

Câu trả lời:


6

Brachylog (2), 4 byte

ṇl₂ᵐ

Hãy thử trực tuyến!

Chương trình đầy đủ (vì đây là ; Brachylog xuất chương trình đầy đủ false.nếu có lỗi xác nhận, true.không có lỗi).

Giải trình

ṇl₂ᵐ
ṇ     Split input into lines
   ᵐ  For each line:
 l₂     Assert that that line has length 2

Đăng ký trên llà một trong những tính năng mới nhất của Brachylog (mặc dù vẫn cũ hơn thử thách) và đây là một thử thách tốt để sử dụng chúng.


Mặc dù ṇlᵛ2ṇlᵛ²cũng sẽ làm việc.
Chuỗi không liên quan

3

JavaScript (ES6), 24 28 25 24 byte

Đã sửa lỗi chương trình và cạo ba byte nhờ @ PunPun1000

Đã tắt một byte nhờ @Shaggy

s=>/^(..\n)*..$/.test(s)

Trả về true nếu hợp lệ và false nếu không.

f=
s=>/^(..\n)*..$/.test(s)

t=
`22
22
22
22
22`

console.log(f(t));
console.log(f(t.slice(0, -1)));


Chỉ cần nhìn vào điều này tôi không nghĩ rằng nó hoạt động cho hai trong số các trường hợp thử nghiệm (trường hợp trung thực chỉ có 2 ký tự và không có dòng mới, và một con chim ưng có dòng mới). Tuy nhiên, s=>s.match(/^(..\n)*..$/)phải khớp chính xác cả hai thứ đó trong khi cũng ngắn hơn ở mức 25 byte
PunPun1000

@ PunPun1000 cảm ơn bạn, bạn đã đúng.
Stephen

Thật không may, điều này không hợp lệ vì 2 giá trị đầu ra không nhất quán. Tuy nhiên, bạn sẽ có thể sửa lỗi đó lưu một byte bằng cách sử dụng testthay vì match.
Xù xì

@Shaggy cảm ơn - lý do tôi không thấy điều đó khi tôi trả lời vì điều đó vừa được chỉnh sửa trong
Stephen

Tôi biết, đó là lý do tại sao tôi chỉ ra nó;) Bạn có thể muốn cập nhật ghi chú về các giá trị trả về của mình.
Xù xì

2

Khối , 20 byte

Trả về 1 cho sự thật và không có gì cho falsey

@1OuABq>;;?w-!$@;U_N

Tạo khối

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq nhét vào tất cả các đầu vào, đảo ngược nó và đẩy EOI (-1) xuống dưới cùng của ngăn xếp
  • >;; Bước vào vòng lặp và xóa các mục khỏi ngăn xếp
  • ? Kiểm tra EOI (-1).
    • Nếu tìm thấy 1uO@đẩy 1 vào ngăn xếp, hãy chuyển sang đầu ra số nguyên và tạm dừng
    • Mặt khác _phản xạ lại vào ?mà chuyển hướng đến sự wthay đổi làn đường
  • N-!$@;U đẩy nguồn cấp dữ liệu (10) lên ngăn xếp, trừ, kết quả kiểm tra, bỏ qua tạm dừng nếu sai, loại bỏ kết quả và lần lượt
  • ;;> loại bỏ các nguồn cấp dữ liệu từ ngăn xếp và chuyển hướng vào vòng lặp.

Hãy thử trực tuyến!


2

Con trăn, 51

lambda s:all(len(l)==2for l in(s+"\n").splitlines())

Người chạy thử trường hợp:

tcs = {
    "F!\n$^": 1,
    "*8\n+1\nSq": 1,
    "nop\nxt": 0,
    "+1\n+1\n#^\n": 0,
    "": 0,
    "ye": 1,
    "no ": 0,
    "test": 0,
    "puzzle": 0
}
f = lambda s:all(len(l)==2for l in(s+"\n").splitlines())
for tc, expected in tcs.items():
    assert f(tc) == expected




1

JavaScript (ES6), 35 24 byte

s=>!/^.?$|.../gm.test(s)

Thử nó

f=
s=>!/^.?$|.../gm.test(s)
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value=`F!
$^`)
<textarea id=i></textarea><pre id=o>


There's gotta be a shorter way to do this with RegEx! Yup (và của tôi có lẽ không tối ưu)
Stephen


1

J-uby , 19 18 byte

:=~&/^(..\n*)..$/m

:=~&tạo một hàm ẩn danh nhận xvà trả về 0nếu nó khớp với biểu thức chính quy /^(..\n*)..$/m, hoặc nilnếu không.


0

Java (OpenJDK 8) , 25 byte

s->s.matches("(..\n)*..")

Hãy thử trực tuyến!

Kiểm tra xem chuỗi đầu vào có bất kỳ số dòng nào được theo sau bởi một nguồn cấp dữ liệu và dòng cuối cùng không có một dòng không (đảm bảo ít nhất một dòng)




0

Japt , 7 6 byte

·eÈʶ2

Dùng thử trực tuyến


Giải trình

     :Implicit input of string "U"
·    :Split to array on newline
eÈ   :Maps over the array, checking that every item's ...
Ê    :length ...
¶2   :Equals 2
     :Implicit output of result
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.