数字出现


12

输入:

整数列表(永远不会包含零)

输出:

相同大小的列表,其计数基于以下内容:

  • 如果当前项目为负:查看该项目之前的所有项目,并计算该数字在这些其他数字中出现了多少次
  • 如果当前项目为正:则查看此项目之后的所有项目,并计算该数字在其他数字中出现了多少次

有一种说法:如果列表的大小为偶数,则我们仅对每个数字计数一次(即使它与多个数字匹配),如果列表的大小为奇数,则为当前项的每个数字计算数字的每个数字(重复数字被多次计数)。

让我们举一些例子来澄清这一点:

带有偶数列表的示例:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

列表的大小为偶数,因此我们只对每个数字计数一次。

  • 4:这是积极的,所以我们很期待。有包含数位三数442-9428374)。因此,我们从开始3
  • 10:这是积极的,所以我们很期待。有两个数字,分别包含数字1和/或0-10-200)。因此,第二个输出是2
  • 42:再次肯定,如此向前。有含有任一数字四个数字4和/或2-9428374728-200)。因此,第三个输出是4
  • -10:这一次是负面的,所以我们往后看。只有一个数字包含数字1和/或0(我们忽略减号)(10)。因此,第四输出是1
  • 等等

带有奇数列表的示例:

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

列表的大小为奇数,因此我们计算每个数字。

  • 382:这是积极的,所以我们很期待。有一个3在其他数字(381),六8的在其他的数字(-82, -8, 381, 228, 28, -28),和六2的在其他的数字(-82, 228, 28, -28, 2)。因此,我们从开始13
  • -82:这是负面的,所以倒退。有一个3在另一个号码(382)和一个8在其它数目(382)。因此,第二个输出是2
  • ...
  • 228:这是积极的,所以向前。有三个2的在其他的数字(28-28-2),和另外三个2的,两个8的在其他的数字(28-28)。因此,此输出为8
  • 等等

挑战规则:

  • 您可以假定输入将永远不包含0为项目,因为它既不是正数也不是负数。
  • 您可以假设输入列表将始终包含至少两个项目。
  • I / O是灵活的。输入/输出可以是整数的数组/列表,定界字符串,数字/字符矩阵等。
  • 如果列表中的第一个数字是负数,或者列表中的最后一个数字是正数,那么在结果列表中它将是0。
  • 对于奇数列表,将多次计算包含相同数字的数字,就像228上面的奇数示例中的结果是8(3 + 3 + 2)而不是5(3 + 2)一样。

通用规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于您的答案,因此允许您使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。
  • 默认漏洞是禁止的。
  • 如果可能的话,请添加一个带有测试代码的链接。
  • 另外,如有必要,请添加说明。

测试用例:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9,  1,   7,  3,   5,  5,   3,  7,   1,  9  ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2,   8,  4,   5,  6,   3,  8,   1,  10,  0 ]

Input:  [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8,  9,   3,    9,    3,   4,     5,   4,   12    ]

Input:  [-1, 11, 11, 1]
Output: [0,  2,  1,  0]

Input:  [1, 11, 11, -1]
Output: [3, 2,  1,  3 ]

Input:  [-1, 11, 1]
Output: [0,  2,  0]

Input:  [1, 11, -1]
Output: [3, 2,  3 ]

Answers:



5

Python 2中149个 148 121 116 111 107字节

lambda l:[sum([any,sum][len(l)%2](map(`n`.count,`abs(v)`))for n in l[:i:2*(v<0)-1])for i,v in enumerate(l)]

在线尝试!


4

Java(JDK 10),204字节

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

在线尝试!

学分


[1,11,-1]应该回来[3,2,3]。这是一个奇怪的列表,所以所有数字都算在内。第一1:期待,1总共三秒:11,-1。第二11:期待每个数字:1 1+ 1 1。第三-1:向后看,1总共三秒:-1,11。(对于奇数列表,您应该查看每个数字,即使是相同的数字。我也会在挑战中对此进行澄清,但对带有数字的奇数示例则可以228对此进行澄清。)
Kevin Cruijssen

@KevinCruijssen应该现在修复。
奥利维尔·格雷戈雷

确实如此。我已经担心最初的解释在发布时可能还不太清楚。现在,我将看看您能否回答所有问题。;)
Kevin Cruijssen

1
我也没有很多时间,但是您可以打高尔夫的一件事是添加一个新变量,t并更改i+(a[i]>0?1:-1)i+(t=a[i]>0?1:-1),然后简单地使用j+=t代替j+=a[i]>0?1:-1
凯文·克鲁伊森

1
如果声明例如t = 10,则可以保存2,并将所有10替换为t,尽管这不太容易理解
Java Gonzar





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.