Validasi sintaks 2Col!


11

Seperti yang mungkin disadari oleh beberapa orang belakangan ini, saya meninggalkan pengembangan Braingolf karena membosankan dan tidak terinspirasi, dan beralih ke 2Col yang sedikit lebih menarik, dan tidak dirancang untuk menjadi bahasa golf.

Fitur pendefinisian 2Col adalah bahwa setiap baris kode harus panjangnya tepat 2 karakter, tidak termasuk baris baru. Ini berarti bahwa panjang dari program 2Col selalu dapat dihitung sebagai di 3n-1mana njumlah baris dalam program.

Jadi inilah tantangan saya: Diberikan kode 2Col sebagai string, hasilkan kebenaran jika kode 2Col valid (Setiap baris persis 2 karakter dan sesuai dengan 3n-1rumus), dan falsey sebaliknya.

Memasukkan

Input harus diambil sebagai string tunggal, atau array karakter.

Keluaran

Nilai sebenarnya jika string input adalah tata letak yang valid, dan nilai falsey sebaliknya.

Kode Anda harus konsisten dengan nilai kebenaran / kepalsuan yang digunakannya

Testcases

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


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


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


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

----
falsey
======


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


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


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


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


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

Mencetak gol

Ini adalah sehingga byte paling sedikit menang!


@Shaggy tidak, tidak kecuali kecuali karena suatu alasan bahasa yang Anda gunakan menganggap truefalsey dan falsetruthy
Skidsdev

1
@StephenS Akan melakukannya
Skidsdev

@Mayube terima kasih, maaf, saya lupa menambahkan "bisa Anda" di depan xD itu
Stephen

Saya sarankan Anda menambahkan kasus uji: puzzle. Ini akan membuat solusi yang melakukan seluruh panjang modulo string 3, kemudian dinegasikan (yang bekerja untuk semua kasus uji saat ini) tidak valid.
Kamerad SparklePony

@ComradeSparklePony akan melakukannya
Skidsdev

Jawaban:


6

Brachylog (2), 4 byte

ṇl₂ᵐ

Cobalah online!

Program lengkap (karena ini adalah masalah ; Program lengkap Brachylog menampilkan false.jika ada kegagalan pernyataan, true.tanpa satu).

Penjelasan

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

Langganan pada ladalah salah satu fitur terbaru dari Brachylog (meskipun masih lebih tua dari tantangan), dan ini merupakan tantangan yang baik untuk menggunakannya.


Meskipun ṇlᵛ2dan ṇlᵛ²juga akan berhasil.
String Tidak Terkait

3

JavaScript (ES6), 24 28 25 24 byte

Memperbaiki program dan mencukur tiga byte berkat @ PunPun1000

Dicukur satu byte berkat @Shaggy

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

Mengembalikan nilai true jika valid dan false jika tidak.

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

t=
`22
22
22
22
22`

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


Hanya melihat ini saya tidak berpikir itu berfungsi untuk dua kasus uji (yang benar dengan hanya 2 karakter dan tidak ada baris baru, dan yang palsu dengan baris baru tertinggal). Namun, s=>s.match(/^(..\n)*..$/)keduanya harus benar-benar cocok dengan keduanya dan juga lebih pendek pada 25 byte
PunPun1000

@ PunPun1000 terima kasih, Anda benar.
Stephen

Sayangnya ini tidak valid karena 2 nilai output tidak konsisten. Namun, Anda harus dapat memperbaikinya dan menyimpan byte dengan menggunakan testalih-alih match.
Shaggy

@Shaggy terima kasih - alasan saya tidak melihat itu ketika saya menjawab karena itu baru saja diedit
Stephen

Saya tahu, itu sebabnya saya tunjukkan;) Anda mungkin ingin memperbarui catatan tentang nilai pengembalian Anda.
Shaggy

2

Cubix , 20 byte

Mengembalikan 1 untuk kebenaran dan tidak untuk falsey

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

Kubus

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq menyeruput semua input, membalikkannya dan mendorong EOI (-1) ke bagian bawah tumpukan
  • >;; Masuk ke loop dan hapus item dari tumpukan
  • ? Tes untuk EOI (-1).
    • Jika ditemukan 1uO@dorongan 1 ke tumpukan, putar-u ke output integer dan berhenti
    • Kalau tidak, _pantulkan kembali ke ?yang diarahkan ke wlajur jalur
  • N-!$@;U umpan garis dorong (10) ke tumpukan, kurangi, hasil pengujian, lewati penghentian jika salah, hapus hasilnya dan putar u
  • ;;> hapus feed garis dari tumpukan dan arahkan ke loop.

Cobalah online!


2

Python, 51

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

Pelari ujian kasus:

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

2

Haskell, 23 52 32 byte

all((==2).length).lines.(++"\n")

Saya mendapatkan inspirasi dari beberapa solusi lain, trik pintar menambahkannya "\n".


Saya sudah memperbaikinya, tetapi RIP solusi singkat saya.
Program man



1

JavaScript (ES6), 35 24 byte

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

Cobalah

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 (dan milik saya mungkin tidak optimal)
Stephen


1

J-uby , 19 18 byte

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

:=~&membuat fungsi anonim yang mengambil xdan mengembalikan 0jika cocok dengan regex /^(..\n*)..$/m, atau nilsebaliknya.



0

Utilitas Bash + GNU, 13

grep -qv ^..$

Ini menetapkan nilai pengembalian shell (dapat diakses di $?) ke 0 untuk false dan 1 untuk true. Ini sebenarnya berlawanan dengan kebiasaan shell pada umumnya , jadi untuk memperbaikinya Anda harus melakukannya:

Utilitas Bash + GNU, 15

! grep -qv ^..$


0

Japt , 7 6 byte

·eÈʶ2

Cobalah online


Penjelasan

     :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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.