2Col sözdizimini doğrulayın!


11

Son zamanlarda birkaç kişinin fark ettiği gibi , Braingolf'un gelişimini büyük ölçüde terk ettim, çünkü sıkıcı ve ilhamsız ve biraz daha ilginç olan ve bir golf dili olarak tasarlanmamış 2Col'a geçtim .

2Col'un tanımlayıcı özelliği, satırsonu hariç her kod satırının tam olarak 2 karakter uzunluğunda olması gerektiğidir. Bu, 2Col programının uzunluğunun her zaman programdaki satır sayısının 3n-1nerede nolduğu gibi hesaplanabileceği anlamına gelir .

İşte benim meydan okuma: Bir dize olarak 2Col kodu verildiğinde, geçerli 2Col kodu ise doğrulukla çıktı alın (Her satır tam olarak 2 karakterdir ve 3n-1formüle uygundur ), aksi takdirde falsey.

Giriş

Giriş tek bir dize veya bir karakter dizisi olarak alınmalıdır.

Çıktı

Girdi dizesi geçerli bir düzen ise doğruluk değeri, aksi halde bir falsey değeri.

Kodunuz hangi doğruluk / falsey değerlerini kullandığında tutarlı olmalıdır

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

puanlama

Bu kadar az bayt kazanır!


@Shaggy hayır, herhangi bir nedenden dolayı kullandığınız dil yanlış trueve falsegerçeği göz önünde bulundurmadıkça değil
Skidsdev

1
@StephenS Yapacak
Skidsdev

@Mayube teşekkürler, özür dilerim, xD'nin önüne "yapabilir misin" eklemeyi unuttum
Stephen

Sana bir test vakası eklemenizi tavsiye: puzzle. Bu, modulo 3 dizgisinin tüm uzunluğunu yapan, daha sonra (mevcut tüm test durumları için çalışan) negatif olan çözümleri geçersiz kılacaktır.
SparklePony Yoldaşı

@ComradeSparklePony yapacak
Skidsdev

Yanıtlar:


6

Brachylog (2), 4 bayt

ṇl₂ᵐ

Çevrimiçi deneyin!

Tam program (çünkü bu bir ; Brachylog tam programları false., bir onaylama hatası varsa, true.biri olmadan çıktı ).

açıklama

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

Üzerindeki abonelikler lBrachylog'un en yeni özelliklerinden biridir (yine de meydan okumadan daha eski olsa da) ve bu onları kullanmak için iyi bir meydan okumadır.


Rağmen ṇlᵛ2ve ṇlᵛ²de işe yarayacak.
İlişkisiz String

3

JavaScript (ES6), 24 28 25 24 bayt

@ PunPun1000 sayesinde program düzeltildi ve üç bayt traş edildi

@Shaggy sayesinde bir bayt tıraş edildi

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

Geçerliyse true değerini, değilse false değerini döndürür.

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

t=
`22
22
22
22
22`

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


Sadece buna baktığımda, iki test vakası için işe yaradığını düşünmüyorum (sadece 2 karakterli ve yeni satır içermeyen doğru olan ve sondaki satırsonu olan falsey olan). Bununla birlikte s=>s.match(/^(..\n)*..$/), 25
baytta

@ PunPun1000 teşekkür ederim, haklısın.
Stephen

Ne yazık ki bu 2 çıkış değeri tutarlı olmadığından geçersizdir. Ancak, bunu düzeltebilmeli vetest yerine bir bayt kaydedebilmelisiniz match.
Shaggy

@Shaggy teşekkürler - cevap verdiğimde görmediğim nedeni, çünkü bu sadece düzenlendi
Stephen

Biliyorum, bu yüzden işaret ettim;) Dönüş değerlerinizdeki notu güncellemek isteyebilirsiniz.
Shaggy

2

Cubix , 20 bayt

Doğruluk için 1 döndürür ve falsey için hiçbir şey döndürmez

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

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq tüm girişi karıştırın, ters çevirin ve EOI'yi (-1) yığının altına itin
  • >;; Döngüye girin ve öğeleri yığından kaldırın
  • ? EOI (-1) testi.
    • Eğer bulunursa 1uO@yığına 1 itin, u-tamsayı çıkışına çevirin ve durun
    • Aksi takdirde , şerit değişimine yönlendiren _yönlere geri yansıtın?w
  • N-!$@;U hat beslemesini (10) istif üzerine itin, çıkarın, test sonucu, yanlışsa durmayı atlayın, sonucu kaldırın ve u-dönüş yapın
  • ;;> satır beslemelerini yığından kaldırın ve döngüye yeniden yönlendirin.

Çevrimiçi deneyin!


2

Python, 51

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

Test senaryosu koşucusu:

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 bayt

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

İlhamımı başka çözümlerden aldım, zekice bir numara ekleyerek "\n".


Bunu düzelttim, ama kısa çözümümü RIP.
Program adam



1

JavaScript (ES6), 35 24 bayt

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

Dene

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! Evet (ve benimki muhtemelen uygun değil)
Stephen


1

J-uby , 19 18 bayt

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

:=~&normal ifadeyle eşleşirse veya başka bir şekilde xdöndüren anonim bir işlev yapar .0/^(..\n*)..$/mnil


0

Java (OpenJDK 8) , 25 bayt

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

Çevrimiçi deneyin!

Giriş dizesinde herhangi bir sayıda satır ve ardından bir satır beslemesi ve bir tane olmadan bir son satır olup olmadığını kontrol eder (en az bir satır sağlar)


0

Bash + GNU yardımcı programları, 13

grep -qv ^..$

Bu, kabuk dönüş değerini (içinde erişilebilir $?) false için 0 ve true için 1 olarak ayarlar . Bu aslında normal kabuk kurallarına kıyasla tam tersidir , bu yüzden bunu doğru yapmak için yapmanız gerekenler:

Bash + GNU yardımcı programları, 15

! grep -qv ^..$


0

Japt , 7 6 bayt

·eÈʶ2

Çevrimiçi deneyin


açıklama

     :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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.