Answers:
Ordering[Count@0/@#,1]&
lambda a:a.index(min(a,key=lambda r:r.count(0)))
削减了6个字节。旧解决方案:
lambda a:min(range(len(a)),key=lambda i:a[i].count(0))
解:
(*)(<)sum(+)0=/:
例:
q)(*)(<)sum(+)0=/:enlist(1;0)
0
q)(*)(<)sum(+)0=/:(0 -1;0 0)
0
q)(*)(<)sum(+)0=/:(1 1 0 0 0;0 0 5 0 0;2 3 0 0 0;0 5 6 2 2)
3
q)(*)(<)sum(+)0=/:(0 4 1 0;0 0 -6 0;0 1 4 -3;2 0 0 8;0 0 0 0)
2
说明:
first iasc sum flip 0=/: / ungolfed
/: / each right, apply a function to each item to the right
0= / returns boolean 1b or 0b if item in each list is equal to zero
flip / flip (rotate) the output
sum / sum these up
iasc / return indices if we were to sort ascending
first / take the first one
笔记:
问题很简单,这种解决方案感觉太复杂了。当我点击提交时,我意识到我的方式的错误。
奖金:
这是ak解决方案,权重为16 10 9字节-几乎完全相同,但短了7个字节,这是因为使用k内置函数时不需要括号,因此,结果比q关键字短(例如+/
用于sum
(将(+/)
在q中)。
*<+/+0=/:
{0fe=_:e>#}
>
应该<
代替...无论如何都要感谢。:)
òø0
jòÚDuu/"
dGؾ
与大多数V答案不同,这是0索引的。
00000000: f2f8 300a 6af2 da44 7575 2f12 220a 6447 ..0.j..Duu/.".dG
00000010: d8be ..
对于没有数字支持的语言来说还不错! ;P
我还发现count命令的大写变体(即)Ø
被严重破坏了。
def f(x):
for e in x:
e.sort()
y=x[:]
y.sort()
return x.index(y[-1])
首先对每一行[0,0,..,0,x,x,x]
进行排序,以便对条目进行排序,然后对整个矩阵进行排序,以便最后一个条目y
是我们要查找的行。该副本y=x[:]
是必需的,因为它.sort()
可以在原地工作,因此我们不知道排序后的原始索引。
感谢您提供有关如何进一步解决此问题的帮助。由于每行中的空格,大多数字节会丢失。代码本身只有68个字节长。
def f(a):b=list(map(sorted,a));return b.index(sorted(b)[-1])
0
s并使用min()
代替max()
input()
代替def
lambda
和哈希映射的使用 lambda x:x.index(min(x,key=lambda n:n.count(0)))
min
与key
参数一起使用
0索引。将2D数组作为输入。
a=>(a=a.map(x=>x.filter(y=>y).length)).indexOf(Math.max(...a))
filter
隐式“过滤”零?
filter
只是要确定一下。
xQh/D0
我没有找到具有非零元素最多的行,而是找到了具有最少零元素的行。
/D0
:D
按/
零(0
)的计数()排序()。隐式应用于Q
,输入。
h
:采用第一个也是最小的元素。
xQ
:x
在该Q
元素的输入()中找到索引()。
import java.util.*;m->{int t=0,s=0,i=0,r=0;for(;i<m.size();i++){List l=(List)m.get(i);for(;l.remove(0L););s=l.size();if(s>t){t=s;r=i;}}return r;}
丑陋,但是行得通..
说明:
import java.util.*; // Required import for List
m->{ // Method with List parameter and integer return-type
int t=0,s=0,i=0, // Temp integers
r=0; // Result integer
for(;i<m.size();i++){ // Loop over the List of Lists
List l=(List)m.get(i); // Get the inner List
for(;l.remove(0L);); // Remove all zeros
s=l.size(); // Get the size of the List
if(s>t){ // If this size is larger than the previous
t=s; // Set `t` to this size
r=i; // And set the result to the index of this row
}
} // End of loop
return r; // Return result-integer
} // End of method
m->{int i=m.length,M=0,I=0,c;for(;i-->0;){c=0;for(int x:m[i])if(x!=0)c++;if(c>M){M=c;I=i;}}return I;}
Java,那冗长的语言:)
感谢您保存18个字节,@KevinCruijssen;)
j
以及其他更长的部分j=m[i].length,
,m[i][j]
例如:m->{int i=m.length,M=0,I=0,c;for(;i-->0;){c=0;for(int x:m[i])if(x!=0)c++;if(c>M){M=c;I=i;}}return I;}
(101 bytes)
m->m.indexOf(m.stream().map(z->{z.removeIf(x->x==0);return z;}).max((q,r)->q.size()-r.size()).get())
列表和流的力量!(并且没有导入,要启动!)
让我们把这个小lambda分解成小块:
m.stream().map(z->{z.removeIf(x->x==0);return z;}
我们将列表列表(问题中的矩阵)转换为流,并遍历每个元素,从每个子列表中删除所有讨厌的零。我们每次都需要在此处显式返回子列表,因为Stream.map()
将Stream中的每个对象都转换为映射返回的内容,并且我们不想更改它们。
.max((q,r)->q.size()-r.size()).get()
我们遍历新近归零的子列表,然后简单地检查它们彼此相邻的大小,使我们成为最大的子列表。之所以这样,.get()
是因为Stream.max()
返回的是Optional,需要额外的函数调用。
m.indexOf()
我们选择了最大的子列表,并在主列表中找到它,从而为我们提供了结果!
如果外部列表为空,这会中断,但是我正在
您可以假设只有一行具有最多非零的元素。
暗示将总是至少有一行。如果我错了纠正我。
Ā
代替Ä0›
-2。