取一个由数字或数组组成的数组,如果只包含2
s 则输出。
输出应为真或假值(很抱歉,如果这样会破坏答案)
真实的测试案例
[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]
虚假测试用例
[1]
[22]
[2,2,2,1]
[[1,2],2]
禁止使用标准漏洞。
默认IO规则适用。
代码高尔夫球,最少字节获胜!
[[2]]
并没有包含两项。
取一个由数字或数组组成的数组,如果只包含2
s 则输出。
输出应为真或假值(很抱歉,如果这样会破坏答案)
[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]
[1]
[22]
[2,2,2,1]
[[1,2],2]
禁止使用标准漏洞。
默认IO规则适用。
代码高尔夫球,最少字节获胜!
[[2]]
并没有包含两项。
Answers:
2=
对于空矩阵失败,还是?
2=p
工作正常。最后的较短版本2=
不是。另外,“奇怪的边缘情况”是两个测试情况。:-)
我闻到... 递归。
感谢Emigna和Leaky Nun节省了10个字节!
a([]).
a([X|T]):-(X=2;a(X)),a(T).
对于非Prolog用户,列表格式如下:[Head | Tail]
。
的Head
是列表的第一个元素,和尾部是剩余的列表。 在这里测试!。这里的一个重要情况是,具有1个元素的列表的尾部等于[]
。您可以在这里进行测试。
% State that an empty array is truthy.
a([]).
% If the list is not empty (covered by the previous line), we need to check
% whether the Head is equal to 2 or whether the head is truthy.
% After that, we only need to check if the remaining list is truthy.
a([Head | Tail]) :- (Head = 2; a(Head)), a(Tail).
2
工作,而不是的Y
?
2
也可以。我只喜欢其中没有数字的事实:)
a=>!/[^2,]|22/.test(a)
f=
a=>!/[^2,]|22/.test(a)
console.log(" "+f([2])+": "+JSON.stringify([2]))
console.log(" "+f([2,2])+": "+JSON.stringify([2,2]))
console.log(" "+f([[2],[2,2],2])+": "+JSON.stringify([[2],[2,2],2]))
console.log(" "+f([])+": "+JSON.stringify([]))
console.log(" "+f([[],[]])+": "+JSON.stringify([[],[]]))
console.log(f([1])+": "+JSON.stringify([1]))
console.log(f([22])+": "+JSON.stringify([22]))
console.log(f([2,2,2,1])+": "+JSON.stringify([2,2,2,1]))
console.log(f([[1,2],2])+": "+JSON.stringify([[1,2],2]))
∧/2=∊
∧/ Only
2= 2s are equal to
∊ any of the elements in the enlisted form of the right argument
Cases[t=Flatten@#,2]==t&
纯函数返回True
或False
。在Flatten
嵌套数组并调用它之后t
,Cases[t,2]
返回与“模式”匹配的元素列表2
,并==t
检查是否就是整个列表。
(#//.{2->{},{{}..}->{}})=={}&
不那么短,但是更有趣。从输入开始,将#
应用两个替换规则,直到结果停止更改(//.
):首先,将所有2
s替换为{}
s。然后将所有条目均为空集({{}..}
)的列表替换为空集(重复)。如果其余为空集(=={}
),我们将获胜。
匿名函数,接受String
并返回Bool
。
用于 (all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]"
all((==2).fst).(reads=<<).scanr(:)[]
scanr(:)[]
生成字符串的所有后缀的列表。(reads=<<)
尝试在每个后缀的开头解析一个数字,然后将成功组合成一个元组列表(n,restOfString)
。all((==2).fst)
检查所有解析的数字是否为2
。not.all(`elem`"2,[]")
?
22
。
->x{x.flatten-[2]==[]}
尽管“扁平化”的确很长,但它仍然比基于正则表达式的解决方案或必须挽救基本情况下的错误的递归方法要短。Ruby内置的集合和数组的混合有时非常有用。
[]
或的测试用例[[],[]]
。[2,*x].flatten.uniq==[2]
稍长一点
x.flatten-[2]==[]
还短一些。谢谢你的提示!
function(x)!any(unlist(x)-2)
unlist(x)
将(嵌套的)列表转换为向量。然后2
从该向量中减去。any
将数字(带有警告)转换为逻辑并检查是否存在TRUE
s。这!
与输出反相。
这适用于嵌套列表,因为unlist
默认情况下会递归地取消列出初始列表的所有列表条目。
这也适用于空列表,因为unlist(list())
变为numeric()
,是一个空数值向量。通过强制any
使其logical()
,这被解释为FALSE
通过any
,然后逆转TRUE
的!
。
pryr::f(!any(unlist(x)-2))
保存几个字节。
all(unlist(x)==2)
。
any(unlist(x)-2)
,TRUE
如果在展平的数组中有一个非2值,则返回一个一致性;如果FALSE
所有值均为2
... ,则返回一个一致性
TRUE
算作假:/
_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)
由于@Shaggy,节省了5个字节!
let f =
_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)
console.log(f([2]))
console.log(f([2,2]))
console.log(f([[2],[2,2],2]))
console.log(f([]))
console.log(f([[],[]]))
console.log(f([1]))
console.log(f([22]))
console.log(f([2,2,2,1]))
console.log(f([[1,2],2]))
f([])
并且f([[],[]])
应该是真实的
!c
代替来保存几个字节c==""
。
s->s.matches("(\\W|2\\b)+")
@KritixiLithos的端口惊人的Retina答案(不包括)^...$
,因为它String#matches
始终匹配整个String并^...$
隐式添加。
-2个字节,感谢@Jakob提醒我^...$
不需要String#matches
。
boolean c(java.util.List l){return(l+"").matches("^(\\W|2\\b)+$");}
会工作,对不对?只是想指出这一点,以防您打算进一步打高尔夫清单解决方案。
^
和$
在正则表达式中可能会丢失2个字节String.matches
。
^...$
。忘了这一点,尽管我已经使用了相当多的时间在过去..
注意到x
作为列表的字符串表示。这也假定像示例中的表示一样没有空格。
lambda x:set(x)<=set("[],2"*0**("22"in x))
这两个都接受输入的字符串表示形式中的字符,并确定除 [], 2
。他们通过强制转换为一组并将这些字符与一组字符进行比较来做到这一点。但是,如果我们有一个非2的数字而只有2的数字(例如22或222),则此操作将失败,为了修补这种情况,我们将用于创建集合的字符串乘以是否x
包含的取反"22"
。如果包含它,它将是空集,否则将与以前相同。
[22]
[]
lambda x:set(x)<=set("[],2"*-~-("22"in x))
对于-1
<?=!preg_match('/:"(?!2")/',serialize($_GET));
$_GET
作为字符串传递?
<?=!preg_match('/:"(?!2")/',$argn);
和输入是串行化阵列的字符串表示- 11字节
输入为JSON编码的字符串数组
<?=!ereg("22|[013-9]",$argn);
使用不推荐使用的功能ereg
<?=!ereg("22|[013-9]",json_encode($_GET));
打印1为真,否为假
-1字节用于其他明智的删除 !
或+ 1个字节,表示true 1,false 0在+
前面加上!
<?=!preg_match('#22|[013-9]#',json_encode($_GET));
$r
变量:<?array_walk_recursive($_GET,function($i){$i-2&¨})?>1
。