验证2Col语法!


11

正如最近可能有几个人注意到的那样,我很大程度上放弃了Braingolf的开发,因为它既无聊又没有灵感,而是转到了2Col,它有点有趣,而且并不是设计成一种高尔夫语言。

2Col的定义功能是每行代码必须正好2个字符长,换行符除外。这意味着,一个2Col程序的长度总是可以被计算为3n-1,其中n是在程序行数。

所以这是我的挑战:给定2Col代码作为字符串,如果有效的2Col代码(每行正好是2个字符且符合3n-1公式),则输出true,否则输出false 。

输入值

输入应视为单个字符串或字符数组。

输出量

如果输入字符串是有效的布局,则为真实值,否则为假值。

您的代码应在使用的真实/错误值上保持一致

测试用例

======
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没有,没有,除非出于某种原因,你使用的语言考虑truefalsey和falsetruthy
Skidsdev

1
@StephenS会做
Skidsdev

@Mayube谢谢,对不起,我忘了在xD前面添加“你能”吗
Stephen

我建议您添加一个测试用例:puzzle。这将使以字符串3为模的整个长度的解决方案无效,然后取反(适用于所有当前测试用例)。
SparklePony同志'17

@ComradeSparklePony将会做
Skidsdev

Answers:


6

Brachylog(2),4个字节

ṇl₂ᵐ

在线尝试!

完整程序(因为这是一个false.如果断言失败,则Brachylog完整程序将输出,true.没有一个)。

说明

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

下标l是Brachylog的最新功能之一(尽管仍比挑战更旧),使用下标是一个很好的挑战。


虽然ṇlᵛ2ṇlᵛ²也将工作。
不相关的字符串,

3

JavaScript(ES6),24 28 25 24字节

固定程序并通过@ PunPun1000削减了三个字节

@Shaggy减少了一个字节

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

如果有效,则返回true,否则返回false。

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谢谢,您是正确的。
斯蒂芬,

不幸的是,这是无效的,因为2个输出值不一致。但是,您应该能够解决该问题,使用test代替来保存一个字节match
毛茸茸的

@Shaggy谢谢-我回答时没有看到它的原因,因为那是刚刚编辑的
Stephen

我知道,这就是我指出的原因;)您可能想更新返回值上的注释。
毛茸茸的

2

Cubix,20个字节

对于真实,返回1,对于虚假,则不返回1

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

集中化

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq 吸入所有输入,反转输入并将EOI(-1)推到堆栈底部
  • >;; 进入循环并从堆栈中删除项目
  • ? 测试EOI(-1)。
    • 如果找到1uO@,则将1压入堆栈,然后掉头进入整数输出并暂停
    • 否则,请_反射回?重定向到w车道偏移的
  • N-!$@;U 将换行(10)推入堆栈,减去,测试结果,如果为false,则跳过暂停,删除结果并掉头
  • ;;> 从堆栈中删除换行符,然后重定向到循环中。

在线尝试!


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"


我已经解决了,但是请速写一下简短的解决方案。
节目负责人,



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! 是的(和我可能不是最优的)
史蒂芬·


1

J-uby19 18字节

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

:=~&使一个匿名函数获取x并返回(0如果它与regex匹配)/^(..\n*)..$/mnil否则返回。



0

Bash + GNU实用程序,13

grep -qv ^..$

这会将shell返回值(可在中访问$?)设置为0(对于false)和1(对于true)。这实际上是相反的意思与普通的shell约定相比,,因此要正确执行此操作,您需要执行以下操作:

Bash + GNU实用程序,15

! grep -qv ^..$


0

Japt7 6字节

·eÈʶ2

在线尝试


说明

     :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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.