删除多余的出现次数

2021-02-24 17:13

如果数组\$A\$中包含\$1\$到\$9\$之间的正整数和正整数\$n\$,请删除\$A\$中出现次数超过\$n\$次的所有整数。对于示例:[1,2,3,2,3,2,4,1,2],n=2发生率:1 1 2

解答动态

  • AWK,9 bytes a[$1]++lt;value>;。数组是从STDIN读取的。
    请联机尝试!

    • MATL,9 bytes tgt;~) a输入,然后n。联机试用!
      或验证所有测试用例。对于每种情况,这都需要包含所需输出的第三个输入。页脚代码检查程序输出是否等于所需的输出,并相应地打印正确或不正确的结果。
      其工作方式 以输入[1 2 3 2 3 2 4 1 2]和2为例。
      t%隐式输入:数组A。重复%堆栈:[1 2 3 2 3 2 4 1 2],[1 2 3 2 4 1 2] 0 0 1 0 1 0 0 0 0; 0 1 0 1 0 1 0 0 1; 0 0 1 0 1 0 0 0 0; 0 1 0 1 0 1 0 0 1; 0 0 0 0 0 01 0 0;1 0 0 0 0 0 1 0;0 1 0 1 0 1 0 0 1]R%上三角部分:将对角线下方的项设置为0%堆栈:[1 2 3 2 3 2 4 1 2],[1 0 0 0 0 0 0 1 0;0 1 0 1 0 0 1;0 0 1 0 0 0 0;0 0 0 1 0 1 0 0 1;0 0 0 0 0 1 0 0 0 0 0;0 0 0 0 0 0 1 0 0 1;0 0 0 0 0 0 0 1 0;0 0 0 0 0 0 0 1]s每列总和的百分比。对于A的每个条目,这给出了到该点的重复次数百分比堆栈:[1 2 3 2 3 2 2 4 1 2],[1 1 2 2 3 1 2 4]i%输入:数字A%堆栈:[1 2 3 2 4 1 2],[1 1 1 2 3 1 2 4],2>;~%小于或等于?元素类型%STACK:[1 2 3 2 3 2 4 1 2],[1 1 1 1 1 0 1 0])%Apply as a index(logical mask)%STACK:[1 2 3 3 3 4 1]%Implicit display

      • J,13 bytes (>;:1#.]=]\)\ 联机试用!

        • Stax,6 5 bytes °:?? u 运行并调试it
          作为一个码点字符串输出(因为Stax将所有数字数组打印为字符串)。可验证版本
          explanation cua*

          • bc复制列表u uniquify a将计数带到顶部*重复元素n次

            • b multiset intersect

              • 外壳,4 bytes n1*升级1联机试用!
                I尝试了几种不同的方法,但Razetime的方法在外壳中非常简洁。
                Explanation n1*u两个参数的函数:a=[6,9,7,6,7,9,9],n=2u唯一值a:[6,9,7]*重复n次:[6,9,7,6,9,7]n1与a:[6,9,7,7,9]

                • J相交,17 bytes 0-.~]-1amp;(]*(-:))NB的解决方案要短。左:n,右:A 1gt;r++[x

                  • sum[1

                    • ylt;n])[] 在线试用!

                      • Python 2,50 bytes lambda s,n:reduce(lambda r,x:r+x*(r.count(x)lt;=n] 在线尝试!
                        以字符列表的形式输入和输出。
                        55 bytes
                        f=lambda s,n:s和f(s[:-1],n)+s[-1][s.count(s[-1])>;n:] 联机试用!
                        重复获取并删除列表的最后一个元素,如果它在当前列表中最多出现n次,则保留它。
                        感觉应该有更好的方法来表达这一点,但我没有看到它。Python在处理列表末尾时很笨拙。虽然l[-k:]通常从末尾取最后k个元素,但对于k=0,它将取整个列表。所以,我没有找到一个很好的从列表末尾有条件地获取0或1个元素的片段。另外,执行l.pop()也有一个问题,即递归函数调用出现在需要最后一个元素的表达式之前。

                        • 外壳,9 bytes fm≤?Sz#?3 请联机试用!
                          f#filter input只保留m≤?#elements小于或等于Sz的arg2的真实值位置的元素??count arg1?3?的每个元素在arg1

                          • Python 3的前缀列表中的出现次数,57 bytes lambda a,n:[e代表i,e在enumerate(a)中,如果a[:i]。count(e)<;n] 联机试用!

                            • APL(Dyalog Unicode),2319字节 通过查看Bubbler如何否定他们答案中的掩码,节省了几个字节。
                              {?/?(?∨(≠?×~)???0} 不要在线尝试!因为TIO有一个没有唯一掩码的Dyalog APL的旧版本。
                              取左边的数组,n取右边的数组。
                              这利用了monadic≠的优势,它提供了一个掩码来获得唯一的元素。当≠A允许您在A中保留唯一的元素时,掩码1-≠A将其反转,并允许您在A中仅保留重复的元素。然后,A×1-≠A将唯一的元素替换为零(这是安全的,因为问题说明,A只包含数字1-9)。掩码≠A×1-≠A只给我们这个新数组中唯一的元素,但是因为我们替换了唯一的元素,所以它允许我们保留重复的元素(以及第一个元素,但是不管发生什么,它总是被保留)。(≠A)∨≠A×1-≠A否

                              • End

                              免责声明:

                              本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。