ตรวจสอบไวยากรณ์ 2Col!


11

ในฐานะที่เป็นคนสองคนอาจสังเกตเห็นเมื่อเร็ว ๆ นี้ฉันได้ละทิ้งการพัฒนาBraingolfเป็นส่วนใหญ่เพราะมันน่าเบื่อและไม่มีใครสนใจและย้ายไปที่2Colซึ่งน่าสนใจกว่านี้เล็กน้อยและไม่ได้ออกแบบมาเพื่อเป็นภาษากอล์ฟ

คุณสมบัติการกำหนดของ 2Col คือทุกบรรทัดของรหัสต้องมีความยาว 2 ตัวอักษรโดยไม่รวมบรรทัดใหม่ ซึ่งหมายความว่าสามารถคำนวณความยาวของโปรแกรม 2Col ได้ตลอดเวลาโดย3n-1ที่nจำนวนบรรทัดในโปรแกรมอยู่เสมอ

นี่คือความท้าทายของฉัน: รับรหัส 2Col เป็นสตริงเอาท์พุทจริงถ้ามันเป็นรหัส 2Col ที่ถูกต้อง (ทุกบรรทัดมี 2 ตัวอักษรและสอดคล้องกับ3n-1สูตร) ​​และเท็จอย่างอื่น

อินพุต

ควรป้อนข้อมูลเป็นสตริงเดี่ยวหรืออาเรย์ของอักขระ

เอาท์พุต

ค่าความจริงหากสตริงอินพุตเป็นเลย์เอาต์ที่ถูกต้องและค่าความผิดพลาดเป็นอย่างอื่น

รหัสของคุณควรสอดคล้องในความจริง / ค่าเท็จที่ใช้

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

เกณฑ์การให้คะแนน

นี่คือดังนั้นไบต์ที่น้อยที่สุดจึงชนะ!


@Shaggy ไม่ไม่เว้นแต่ด้วยเหตุผลบางอย่างภาษาที่คุณใช้จะถือว่าเป็นtrueเท็จและเป็นfalseจริง
Skidsdev

1
@StephenS Will
Skidsdev

@Mayube ขอบคุณขอโทษฉันลืมที่จะเพิ่ม "คุณ" ต่อหน้า xD นั้น
สตีเฟ่น

puzzleผมขอแนะนำให้คุณเพิ่มกรณีทดสอบ: สิ่งนี้จะทำให้การแก้ปัญหาที่ทำตลอดความยาวของสตริงโมดูโล 3 แล้วเมื่อตะกี้ ​​(ซึ่งเหมาะสำหรับกรณีทดสอบปัจจุบันทั้งหมด) ไม่ถูกต้อง
สหาย SparklePony

@ComporSparklePony จะทำ
Skidsdev

คำตอบ:


6

Brachylog (2), 4 ไบต์

ṇl₂ᵐ

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ (เพราะนี่คือ Brachylog แสดงผลโปรแกรมเต็มรูปแบบfalse.หากมีความล้มเหลวในการยืนยันtrue.โดยไม่มีหนึ่ง)

คำอธิบาย

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

Subscripts on lเป็นหนึ่งในคุณสมบัติใหม่ล่าสุดของ Brachylog (แม้ว่าจะยังเก่ากว่าความท้าทาย) และนี่เป็นความท้าทายที่ดีในการใช้งาน


แม้ว่าṇlᵛ2และṇlᵛ²ยังจะทำงาน
สตริงที่ไม่เกี่ยวข้อง

3

JavaScript (ES6), 24 28 25 24 ไบต์

แก้ไขโปรแกรมและลบจำนวนสามไบต์ด้วย @ PunPun1000

ลบออกหนึ่งไบต์ด้วย @Shaggy

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

ผลตอบแทนจริงถ้าถูกต้องและเท็จถ้าไม่

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

t=
`22
22
22
22
22`

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


เพียงแค่ดูที่นี้ฉันไม่คิดว่ามันจะใช้งานได้กับสองกรณีทดสอบ (อันที่จริงมีเพียง 2 ตัวอักษรและไม่มีบรรทัดใหม่ อย่างไรก็ตามs=>s.match(/^(..\n)*..$/)ควรจับคู่ทั้งสองอย่างถูกต้องและสั้นลงที่ 25 ไบต์
PunPun1000

@ PunPun1000 ขอบคุณคุณถูกต้อง
Stephen

น่าเสียดายที่นี่ไม่ถูกต้องเนื่องจากค่า 2 เอาต์พุตไม่สอดคล้องกัน แต่คุณควรจะสามารถแก้ไขปัญหาที่และประหยัดไบต์โดยใช้แทนtest match
Shaggy

@Shaggy ขอบคุณ - เหตุผลที่ฉันไม่เห็นว่าเมื่อฉันตอบเพราะนั่นเพิ่งได้รับการแก้ไขใน
สตีเฟ่น

ฉันรู้ว่านั่นเป็นเหตุผลที่ฉันชี้ให้เห็น;) คุณอาจต้องการอัปเดตบันทึกเกี่ยวกับค่าส่งคืนของคุณ
Shaggy

2

Cubix , 20 ไบต์

ผลตอบแทนที่ 1 สำหรับความจริงและไม่มีอะไรที่จะหลอก

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

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq ตบในอินพุตทั้งหมด, ย้อนกลับและผลัก EOI (-1) ไปที่ด้านล่างของสแต็ก
  • >;; ก้าวเข้าสู่วงและลบรายการออกจากสแต็ก
  • ? ทดสอบ EOI (-1)
    • หากพบว่า1uO@กด 1 ไปที่สแต็กกลับไปที่เอาต์พุตจำนวนเต็มและหยุด
    • มิฉะนั้นจะ_สะท้อนกลับไปสู่สิ่ง?ที่เปลี่ยนไปสู่การwเปลี่ยนเลน
  • N-!$@;U กดเส้นป้อน (10) ลงบนสแต็กลบผลการทดสอบข้ามหยุดถ้าเป็นเท็จลบผลลัพธ์และกลับรถ
  • ;;> ลบตัวดึงข้อมูลบรรทัดจากสแต็กและเปลี่ยนเส้นทางไปยังลูป

ลองออนไลน์!


2

Python 51

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

กรณีทดสอบวิ่ง:

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 ไบต์

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

ฉันได้รับแรงบันดาลใจจากโซลูชันอื่น ๆ และเคล็ดลับที่ชาญฉลาดเพิ่มสิ่ง"\n"นั้น


ฉันแก้ไขแล้ว แต่ RIP เป็นคำตอบสั้น ๆ ของฉัน
โปรแกรมชาย



1

JavaScript (ES6), 35 24 ไบต์

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

ลองมัน

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 (และของฉันไม่น่าจะเหมาะสม)
Stephen


1

J-uby , 19 18 ไบต์

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

:=~&ทำให้ฟังก์ชั่นที่ไม่ระบุชื่อที่ใช้xและผลตอบแทน0ถ้ามันตรงกับ regex /^(..\n*)..$/mหรือnilอย่างอื่น


0

Java (OpenJDK 8) , 25 ไบต์

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

ลองออนไลน์!

ตรวจสอบว่าสตริงอินพุตมีจำนวนบรรทัดใด ๆ ตามด้วยตัวดึงข้อมูลบรรทัดและบรรทัดสุดท้ายโดยไม่มีหนึ่งบรรทัด (รับรองอย่างน้อยหนึ่งบรรทัด)


0

ยูทิลิตี Bash + GNU, 13

grep -qv ^..$

สิ่งนี้ตั้งค่าการส่งคืนเชลล์ (เข้าถึงได้ใน$?) เป็น 0 สำหรับเท็จและ 1 สำหรับจริง นี่เป็นความรู้สึกตรงกันข้ามเมื่อเทียบกับการประชุมเชลล์ปกติดังนั้นเพื่อให้ถูกต้องคุณต้องทำ:

ยูทิลิตี Bash + GNU, 15

! grep -qv ^..$


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.