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!

Skidsdev
sumber
@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.


sumber
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)));

Stephen
sumber
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!

MickyT
sumber
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
Łukasz Rogalski
sumber
2

Haskell, 23 52 32 byte

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

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

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

Jelly , 6 byte

ỴL€=2Ṃ

Cobalah online!

Penjelasan:

ỴL€=2Ṃ
Ỵ       Split at newlines
 L€     Length of each...
   =2   ...equals two.
     Ṃ  Minimum.
Kamerad SparklePony
sumber
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>

Shaggy
sumber
There's gotta be a shorter way to do this with RegEx! Yup (dan milik saya mungkin tidak optimal)
Stephen
1

05AB1E , 6 byte

¶¡D2ùQ

Cobalah online!

¶¡D2ùQ   Argument s
¶¡       Split s on newlines
  D      Duplicate
   2ù    Keep only elements of length 2
     Q   Compare
kalsowerus
sumber
1

J-uby , 19 18 byte

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

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

Cyoce
sumber
0

Java (OpenJDK 8) , 25 byte

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

Cobalah online!

Memeriksa apakah string input memiliki sejumlah baris yang diikuti oleh umpan baris dan baris terakhir tanpa satu (memastikan setidaknya satu baris)

PunPun1000
sumber
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 ^..$
Trauma Digital
sumber
0

Ruby, 22 byte

->s{s=~/^(..\n*)..$/m}
Cyoce
sumber
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
Shaggy
sumber