我的数组应该等于这个,但事实并非如此!


21

给定一个整数数组,a其中包含n个整数和一个整数x;从中删除最少的元素a,使之和a等于x。如果a不能形成的组合,则x返回假值。

正如评论中指出的那样,这是x的总和的最大值,对不起我的小数学头脑。自大学以来,我忘记了很多条款。


示例(真实):

f([1,2,3,4,5,6,7,8,9,10], 10) = [1,2,3,4]

f([2,2,2,2,2,2,2,2,2], 10) = [2,2,2,2,2]

f([2,2,2,2,-2,-2,-2,-4,-2], -8) = [2,2,-2,-2,-2,-4,-2]

f([-2,-4,-2], -6) = [-4,-2] OR [-2,-4]

f([2,2,2,4,2,-2,-2,-2,-4,-2], 0) = [2,2,2,4,2,-2,-2,-2,-4,-2] (不变)

f([], 0) = [] (零和的情况不变)


示例(错误,任何一致的非数组值):

不可能提出理由: f([-2,4,6,-8], 3) = falsy (E.G. -1)

零和案例: f([], non-zero number) = falsy (E.G. -1)

  • 注意:像这样的任何值[-1]都不能有效地伪造,因为它可能是真实的输出。

规则:

  • 输入可以采用数组形式,也可以作为参数列表,最后一个或第一个为x
  • 输出可以是任何定界的整数列表。EG 1\n2\n3\n[1,2,3]
  • 除整数数组外,任何值都可以用作虚假指示符。
  • 您的代码必须最大化结尾数组的大小,顺序无关紧要。
    • 例如,对于f([3,2,3],5)双方[2,3][3,2]同样有效。
    • 例如,对于f([1,1,2],2)你只能返回[1,1][2]较短。
  • 的总和a和的值都x将小于2^32-1和大于-2^32-1
  • 这是,最低字节数获胜。
  • 如果有多个相同大小的有效子数组,则不能全部输出。您必须选择一个并输出该一个。

让我知道是否已发布,找不到。

我发现这样的帖子:相关但已关闭,...


1
我想“错误,任何一致的非数组值”包括引发错误?
乔纳森·艾伦

除了整数数组之外,任何值都可以用作虚假指示符。 ”是否包括空数组?
毛茸茸的

@shaggy []表示潜在的真实值,对吧?允许该元规则比明显的真实和虚假更重要吗?
魔术章鱼缸

@JohnathanAllan,如果在真实的情况下无法引发该错误,我想。但是我觉得这是有意尝试扩大规格。如果我将措辞从指标更改为返回值,那还好吗?
魔术

我确实相信,虽然每个元数据都将一致的退出值算作返回值?
魔术章鱼缸

Answers:


7

Brachylog,8个字节

h⊇.+~t?∧

在线尝试!

每月Brachylog答案。false.如果不可能,则返回。

说明

h⊇.           The output is a subset of the head of the input
  .+~t?       The sum of the elements of the output must equal the tail of the input
       ∧      (Avoid implicit unification between the output and the input)

6

Python 2中108个 104字节

lambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
from itertools import*

在线尝试!

-4个字节,感谢Jonathan Allan


Python 2中108个 106字节

def f(a,n):
 q=[a]
 while q:
  x=q.pop(0);q+=[x[:i]+x[i+1:]for i in range(len(x))]
  if sum(x)==n:return x

在线尝试!

-2个字节,感谢Janathan Frech


1
你可以使用range(-len(a),1)-l保存2,但lambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]可以节省4
乔纳森·艾伦

@JonathanAllan谢谢:)
TF


@JonathanFrech谢谢,昨天我一定很累;)
TFeld



4

Pyth,8个字节

  • 8-byterTry it!)–仅输出一种可能的解决方案。对于无法解决的输入,它不会将任何内容输出到STDOUT,这是一个空字符串,从技术上讲在Pyth中是假的,但会写入STDERR。感谢FryAmTheEggman提出的建议(忽略STDERR并仅关注STDOUT输出),从而节省了1个字节。

    efqz`sTy    
    
  • 9 byter试试吧!) -输出只有一个可能的解决方案,包裹在一个单列表,默认允许的(例如([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]])。对于无法解决的输入,它返回[],在Pyth中为false。

    >1fqz`sTy
    
  • 10个字节试试看!)–为了获得更清晰的输出,而无需使用单例列表规则,并且使用0而不是[]伪造的值。

    e+0fqz`sTy
    

说明

首先,代码计算输入列表(所有可能的有序子集合)的幂集。然后,它仅保留总和等于输入数字的那些集合。应该注意的是,集合是从最短到最长生成的,因此我们重点关注最后一个。要获得它:

  • 8 byter只需使用内置的,它抛出一个错误,但STDERR可以忽略按照我们网站的规则,输出到标准输出是一个空字符串,这是falsy。
  • 9-byter需要的最后一个元素,但使用等效Python代码lst[-1:]代替lst[-1]以避免错误被抛出不可解输入。
  • 10-byter预先考虑一个0到滤波的子集的列表,然后采取该集合(最后一个元素)的端部。如果输入不可解,则自然会使用0

[]是虚假的?整齐。为什么Pyth这么做[]
魔术章鱼缸

@MagicOctopusUrn Pyth 实际上是从Python继承过来的:在线尝试
Xcoder先生18年

@FryAmTheEggman不会在测试用例中输出空白列表f([], 0) = []吗?
Sok

@FryAmTheEggman感谢您的建议!我已经进行了必要的更改:)
Xcoder先生,18年


3

Perl 6的38 37个字节

{*.combinations.grep(*.sum==$_).tail}

在线尝试!

咖喱函数。


等等,;甚至有必要吗?
Jo King

@JoKing在较早的迭代中,有必要避免“格式错误的双闭包”错误。但是由于某种原因,现在可以将其省略。(我认为在替换$^x$_。之后)
nwellnhof

3

Brachylog,4个字节

⟨⊇+⟩

在线尝试!

只需约相当于Fatalize的h⊇.+~t?∧,除很多短,由于谓词性成分,其根据特征引用的编辑历史是一项正在进行的工作,直到1月8日,通过两个多月的以后生效答案。⟨⊇+⟩是一个三明治,扩展到{[I,J]∧I⊇.+J∧},在这种情况下,括号不相关,因为无论如何三明治都是独立的。

                The input
[I,J]           is a list of two elements I and J.
        .       The output,
         +J     which sums to J
           ∧    (which we don't unify with the output),
      I⊇        is a sublist of I
     ∧          (which we don't unify with [I,J]).

Fatalize答案的戏剧性变化要小得多,它使用相同的谓词和相同的变量,但比采用不同的组织方式要短一个字节:

Brachylog,7个字节

h⊇.&t~+

在线尝试!

           The input
h          's first element
 ⊇         is a superlist of
  .        the output,
   &       and the input
    t      's last item
     ~+    is the sum of the elements of
           the output.

(此外,如果有人想看到奇怪的东西,请将测试用例中的任何下划线都更改为连字符。)



1
当然,这些历史挖掘都不重要,因为自提出挑战以来的语言已经被允许了多年。
pppery


2

干净,89字节

import StdEnv,Data.List,Data.Func
$n=find((==)n o sum)o sortBy(on(>)length)o subsequences

在线尝试!

如果没有适当的元素组合,则定义$ :: Int -> [Int] -> (Maybe [Int])返回的函数Nothing(Just [elements...])否则返回。


2

JavaScript(ES6),108个字节

将输入作为(array)(n)。返回数组或false

a=>n=>a.reduce((a,x)=>[...a,...a.map(y=>1/r[(y=[...y]).push(x)]||eval(y.join`+`)-n?y:r=y)],[[]],r=!n&&[])&&r

在线尝试!


2

这开始很酷而且很小,但是边缘情况让我受益匪浅。无论发生什么事,我都为此感到自豪。

Python 3中169间161 154字节

from itertools import*
def f(a,x):
	if sum(a)==x:return a
	try:return[c for i in range(len(a))for c in combinations(a,i)if sum(c)==x][-1]
	except:return 0

在线尝试!


请记住,这是[code-golf],因此您应尽量减少字节数!您拥有领先的换行符和其他一些琐碎的空白高尔夫,并且我敢打赌其他人知道python可以进一步打败它。
朱塞佩

@Giuseppe感谢您让我想起领先的空白。我花了一些时间尝试合并其中的某些部分,但同时决定将其发布,以防其他人可以提出修改建议。
Gigaflop

没问题!自从我做任何Python到现在已经有5年了,但是没有range(x)生成(0...x-1)?因此,您range(len(a))是否没有让阵列保持不变的可能性?
朱塞佩

@Giuseppe Eureka,做到了。我可能一直在专注于正在使用的新材料。
Gigaflop

代替if a==[] and x==0使用if sum(a)==x。然后,你也可以删除+1range
Vedant Kandoi '18年


1

附件,28字节

${(y&`=@Sum\Radiations@x)@0}

在线尝试!

备择方案

34个字节f[x,y]:=({y=Sum@_}\Radiations@x)@0

30个字节First@${y&`=@Sum\Radiations@x}

29个字节{(_&`=@Sum\_2)@0}#/Radiations

29个字节${({y=Sum@_}\Radiations@x)@0}

29个字节`@&0@${y&`=@Sum\Radiations@x}

29个字节{_}@@${y&`=@Sum\Radiations@x}

说明

${(y&`=@Sum\Radiations@x)@0}
${                         }    function receiving two arguments, x and y
            Radiations@x        calculate the radiations of x
                                (simulates removing all possible subslices of x)
           \                    keep those radiations
        Sum                     ...whose sum...
     `=@                        ...equals...
   y&                           ...y
  (                     )@0     select the first one (always the longest)

0

APL(NARS),65个字符,130个字节

{m←⍺=+/¨v←1↓{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}⍵⋄0=↑⍴b←m/v:⍬⋄b⊃⍨n⍳⌈/n←⍴¨b}

使用↓是因为集合的第一个元素将是一个无效集合(此处为⍬Zilde),由于似乎+ /⍬为零,所以需要消除它。

如果找不到或出错,将返回⍬或以打印文本显示:

  o←⎕fmt
  o ⍬
┌0─┐
│ 0│
└~─┘

测试:

  z←{m←⍺=+/¨v←1↓{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}⍵⋄0=↑⍴b←m/v:⍬⋄b⊃⍨n⍳⌈/n←⍴¨b}

  o 1 z ,1
┌1─┐
│ 1│
└~─┘
  o 2 z ,1
┌0─┐
│ 0│
└~─┘
  o 10 z 1 2 3 4 5 6 7 8 9 10
┌4───────┐
│ 1 2 3 4│
└~───────┘
  o 10 z 2,2,2,2,2,2,2,2,2
┌5─────────┐
│ 2 2 2 2 2│
└~─────────┘
  o ¯8 z 2,2,2,2,¯2,¯2,¯2,¯4,¯2
┌7──────────────────┐
│ 2 2 ¯2 ¯2 ¯2 ¯4 ¯2│
└~──────────────────┘
  o ¯6 z ¯2,¯4,¯2
┌2─────┐
│ ¯4 ¯2│
└~─────┘
  o 0 z 2,2,2,4,2,¯2,¯2,¯2,¯4,¯2
┌10───────────────────────┐
│ 2 2 2 4 2 ¯2 ¯2 ¯2 ¯4 ¯2│
└~────────────────────────┘
  o 10 z 1 2 3 4
┌4───────┐
│ 1 2 3 4│
└~───────┘
  o 10 z 1 2 3
┌0─┐
│ 0│
└~─┘
  o 0 z ⍬
┌0─┐
│ 0│
└~─┘
  o +/⍬  
0
~
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.