鉴于整数的非空有限列表,输出truthy如果恰好有两个相等的条目和所有其他条目是不同的值,并且falsey否则值。
例子
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
鉴于整数的非空有限列表,输出truthy如果恰好有两个相等的条目和所有其他条目是不同的值,并且falsey否则值。
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
Answers:
&=sp4=
感谢@Guiseppe,节省了一个字节!
说明:
&= % Table of pair-wise equality comparisons
%
% [1 0 0 0 0 0 0
% 0 1 0 0 0 0 0
% 0 0 1 0 0 0 0
% 0 0 0 1 1 0 0
% 0 0 0 1 1 0 0
% 0 0 0 0 0 1 0
% 0 0 0 0 0 0 1]
%
s % Sum each Column. Stack:
%
% [1 1 1 2 2 1 1]
%
p % Product of the array. Stack:
%
% [4]
%
4= % Compare the stack to '4'
s
is sum
和sum
sum沿着第一个非单维度(列),并且矩阵是对称的,所以这s
不是Xs
吗?
QL‘=L
QL‘=L - Main link, argument L (a list) e.g [1,6,3,4,4,7,9]
Q - Deduplicated elements [1,6,3,4,7,9]
L - Length 6
‘ - Increment 7
L - Length of the input 7 ([1,6,3,4,4,7,9])
= - Are they equal? 1
如果输出值可以是任何一致的值,则QL_L
可以正常工作,该输出可以输出真值,而-1
其他任何非正数都可以输出假值(感谢@JonathanAllan)
QL_L
将输出-1
为真值和小于-1
或0
为假的数字(例如,[1,6,3,4,4,7,9,9,9]
将返回-3
,而[1,6,3,4,7,9]
将返回0
)。
-2
。
简单执行检查是否len(set(list)) == len(list)-1
:
LtvuL^=#
说明:
\ Implicit: Put all input on stack
Ltv \ Get the stack length - 1, save in auxiliary stack
u \ Remove non-unique elements
L \ Get the new length
^= \ Compare with the previously saved length
# \ Print result
这是因为如果在初始列表中仅恰好有1个非唯一整数,则长度只会减少1。
这不是使用a group
或unique
方法解决其他许多问题,而是使用所有可能比较的“笛卡尔积”。
@(x)nnz(triu(x==x',1))==1
x==x' %create a matrix where the entry at (i,j) compares whether x(i) == x(ju)
triu(x==x',1) %only consider the strict upper triangular matrix
nnz(triu(x==x',1)) %count the number of nonzero entries
@(x)nnz(triu(x==x',1))==1 %check whether this number is actually 1
并且因为没有卷积就没有完整的程序(感谢@LuisMendo纠正错误):
@(x)nnz(~conv(sort(x),-1:2:1,'same'))==1
感谢Neil节省了1个字节。
D`
Mm2`^$
1
输入以换行分隔。(为了方便起见,测试套件使用逗号分隔。)
D`
对输入中的行进行重复数据删除,从而删除之前出现的所有整数(但保留周围的换行符)。
Mm2`^$
计算空行的数量,该数量等于我们删除的重复行的数量,但仅考虑前两个匹配项。因此,输出将仅为0
(无重复),1
(一个重复),2
(两个或更多重复)。
1
确保仅删除了一个重复项。
A`.
用来计算换行符,因为它会删除最后一行。)
A`.
,但是问题是您无法将一个空行与根本没有行区分开。如果有任何行,也许我应该考虑终止A
并G
使用换行符输出。尽管这应该是一个选择,因为我可以想象换行在其他情况下很烦人。
^$¶
。
A
是无论保留单个空行还是丢弃所有行,其输出都是相同的。
->(s){s.uniq.length==s.length-1}
Array#size
样
->s{s.uniq.size==s.size-1}
+18使用System.Linq
。
n=>n.Distinct().Count()==n.Length-1
不带Linq的67字节替代:
n=>new System.Collections.Generic.HashSet<int>(n).Count==n.Length-1
($args|sort -u).count-eq$args.count-1
带有nique标志的Sort-Object
命令(别名sort
)-u
仅提取输入的唯一组成部分。例如,对于输入@(1,3,3,2)
,结果为@(1,2,3)
。
因此,我们只需要确保在.count
该对象(即有多少元素它)是-eq
UAL到.count
我们的输入数组-1
(即我们恰好有一个重复的条目)。
由于正弦曲线,节省了3个字节。
修复了由于TessellatingHeckler而导致的错误。
1,2,1
- get-unique
仅适用于预先排序的输入。怎么样($args|sort -u).count-eq$args.count-1
,这也是37,但没有工作的所有测试用例,如果你这样称呼它f 1 2 1
,而不是f 1,2,1
?
@k{@F}++;say@F==1+keys%k
<?=count(array_unique($argv))==count($argv)-1;
计算其中的条目数,$argv
并将其与唯一条目数进行比较。如果前者比后者高1,则为真,否则为假。
$argv
是命令行参数的列表。因此:不,他不能随便使用$a
。
{¥>ΘO
{¥>ΘO # example input: [1, 6, 3, 4, 4, 7, 9]
{ # sort -> [1, 3, 4, 4, 6, 7, 9]
¥ # get deltas -> [ 2, 1, 0, 2, 1, 2 ]
> # increment -> [ 3, 2, 1, 3, 2, 3 ]
Θ # truthify (only 1 gives 1) -> [ 0, 0, 1, 0, 0, 0 ]
O # sum -> 1
1
作为05AB1E中唯一的真实值,我们可以在这里停止。(感谢@Emigna指出这一点。)
要仅获取两个不同的值,我们可以选择添加:
Θ # equals 1? -> 1
Θ
,这1
是05AB1E中唯一的真值。
¢
它将无法正常工作。因为找到in ,它将被[19,4,4,9]
视为虚假和[19,9]
真实。0
10
{¥_O
应该还可以。