Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 高尔夫代码:弗罗贝尼乌斯号码_Language Agnostic_Code Golf_Rosetta Stone - Fatal编程技术网

Language agnostic 高尔夫代码:弗罗贝尼乌斯号码

Language agnostic 高尔夫代码:弗罗贝尼乌斯号码,language-agnostic,code-golf,rosetta-stone,Language Agnostic,Code Golf,Rosetta Stone,编写一个最短的程序,计算给定一组正数的Frobenius数。Frobenius数是不能作为集合中数的正倍数之和写入的最大数 示例:对于鸡McNuggetTM尺寸[6,9,20]的集合,Frobenius数为43,因为方程a*6+b*9+c*20=43(a,b,c>=0)没有解,43是该属性的最大值 可以假设给定集合存在一个Frobenius数。如果情况并非如此(例如[2,4]),则预计不会出现任何特殊行为 参考资料: [编辑] 我决定接受GolfScript版本。虽然MATHEMATIC

编写一个最短的程序,计算给定一组正数的Frobenius数。Frobenius数是不能作为集合中数的正倍数之和写入的最大数

示例:对于鸡McNuggetTM尺寸[6,9,20]的集合,Frobenius数为43,因为方程a*6+b*9+c*20=43(a,b,c>=0)没有解,43是该属性的最大值

可以假设给定集合存在一个Frobenius数。如果情况并非如此(例如[2,4]),则预计不会出现任何特殊行为

参考资料:

[编辑]
我决定接受GolfScript版本。虽然MATHEMATICA版本可能被认为是“技术上正确的”,但它显然会让比赛失去乐趣。也就是说,其他解决方案给我留下了深刻的印象,特别是Ruby(它是通用语言的简称)

Haskell155个字符
函数
f
执行此工作,并希望列表被排序。例如
f[6,9,20]=43

b x n=sequence$replicate n[0..x]
f a=last$filter(not.(flip elem)(map(sum.zipWith(*)a)(b u(length a))))[1..u] where
    h=head a
    l=last a
    u=h*l-h-l

另外,由于这是我第一次提交代码高尔夫,我不确定如何处理输入,规则是什么

对Haskell解决方案的不同理解。我是Haskell的新手,所以如果不能缩短,我会感到惊讶

m(x:a)(y:b)
 |x==y=x:m a b
 |x<y=x:m(y:b)a
 |True=y:m(x:a)b
f d=l!!s-1where
 l=0:foldl1 m[map(n+)l|n<-d]
 g=minimum d
 s=until(\n->l!!(n+g)-l!!n==g)(+1)0
m(x:a)(y:b)
|x==y=x:mab

|xGolfScript47/42个字符

更快的解决方案(47)

Mathematica 0个字符(或19个字符计数调用命令) 调用wtih

FrobeniusNumber[{a,b,c,...}]
范例

In[3]:= FrobeniusNumber[{6, 9, 20}]
Out[3]= 43
是唱片吗?:)

Perl 105 107 110 119 122 127 152 158个字符

solve
最新编辑:复合作业对你有好处

$h{0}=$t=1;$t*=$_ for@ARGV;for$x(1..$t){$h{$x}=grep$h{$x-$_},@ARGV}@b=grep!$h{$_},1..$t;print pop@b,"\n"
说明:

$t = 1;
$t *= $_ foreach(@ARGV);
$t
设置为所有输入数字的乘积。这是我们的上限

foreach $x (1..$t)
{
  $h{$x} = grep {$_ == $x || $h{$x-$_} } @ARGV;
}
对于从1到
$t
的每个数字:如果它是一个输入数字,请使用
%h
散列标记它;否则,如果后面有一个标记的条目(差异是输入中的任何内容),则标记该条目。所有标记的条目都不是Frobenius编号的候选项

@b=grep{!$h{$_}}(1..$t);
提取所有未标记的条目。这些是弗罗贝尼乌斯的候选人

print pop @b, "\n"
…最后一个,最高的,是我们的Frobenius数。

Ruby100 86 80个字符

(不需要换行符) 使用frob.rb 6 9 20调用

a=$*.map &:to_i;
p ((1..eval(a*"*")).map{|i|a<<i if(a&a.map{|v|i-v})[0];i}-a)[-1]
a=$*.map&:to_i;
p((1..eval(a*“*”)).map{i|a Mathematica程序-28个字符
好吧,这是一个真实的(不必要的)程序。正如Mathematica的另一个条目清楚地显示的那样,你可以不编写程序就计算出答案……但它在这里

f[x__]:=FrobeniusNumber[{x}]
援引

f[6, 9, 20]

43

FrobeniusScript5个字符

solve
遗憾的是,这种语言还没有任何编译器/解释器

没有参数,解释器将处理:

$ echo solve > myProgram  
$ frobeniusScript myProgram
6
9
20
^D
Your answer is: 43
$ exit
C#,360个字符

using System;using System.Linq;class a{static void Main(string[]b)
{var c=(b.Select(d=>int.Parse(d))).ToArray();int e=c[0]*c[1];a:--e;
var f=c.Length;var g=new int[f];g[f-1]=1;int h=1;for(;;){int i=0;for
(int j=0;j<f;j++)i+=c[j]*g[j];if(i==e){goto a;}if(i<e){g[f-1]++;h=1;}
else{if(h>=f){Console.Write(e);return;}for(int k=f-1;k>=f-h;k--)
g[k]=0;g[f-h-1]++;h++;}}}}
使用System;使用System.Linq;类a{static void Main(string[]b)
{var c=(b.Select(d=>int.Parse(d)).ToArray();int e=c[0]*c[1];a:--e;
var f=c.Length;var g=newint[f];g[f-1]=1;int h=1;for(;){int i=0;for
(int j=0;j=f-h;k--)
g[k]=0;g[f-h-1]++;h++;}}
我相信还有比这个更短的C#解决方案,但这就是我想到的


这是一个完整的程序,它将值作为命令行参数并将结果输出到屏幕。

对集合(尤其是其大小)是否有任何限制?如果不存在Frobenius数,预期的输出是什么?@mfukar:只要这些数的gcd为1(没有一个数可以将所有数分开),总有一个Frobenius数字。也就是说……即使不打高尔夫球,这也可能是一个困难的问题,特别是如果数字很大(比如说,3或4个数字)。@ShreevatsaR:我知道这很难,但我认为我们在“J中的9个字符”上遇到的问题已经够多了答案。如果问题变得太难,我们仍然可以将其限制在一个合适的范围内,但我建议先看看我们是否得到了“完整”的解决方案。我认为会有一些,因为算法不需要efficient@Chris:如果gcd为x>1,则所有数字均为nx+c(0@jethro当前位置我不确定罗塞塔斯通(我想表明这应该是语言不可知论,但有人可以纠正我,因为我可能错了).Code golf是一种编程挑战,你想用你选择的语言以最少的击键次数来解决问题,通常需要编写不可读的代码,做不安全的事情,执行速度慢,或者以上任何一种或任何其他事情的组合函数名和括号…:-(@Platinum)这只是调用代码。如果您决定对其进行计数,则还应(例如)对之前发布的golfscript解决方案中的´$echo“[6 9 20]”golfscript frobenius.gs´进行计数。还要注意,规范中不包含“输入”规范。我只是不明白,当你必须用一定的击键次数键入函数名时,你怎么能调用它0个字符。这完全没有意义。就是这样。你没有编写任何程序,因此你的解决方案无法计数。一个程序可能会有函数调用和一些I/O例程。这至少是19个字符,但是为什么会有这么多人投反对票?这个答案是“为工作使用正确的编程语言”的一个很好的例子.这里似乎有人在玩anon boss游戏。为什么对一个笑话投反对票?我看不出规则中有任何地方规定使用哪种语言。这完全在允许的范围内,目前是赢家。。)否决票是怎么回事?如果你认为笑话条目很傻很好,那么我反驳一下:这是一篇讽刺性的评论,说明了高尔夫的代码有多么有缺陷。知道如何用一些为简洁语法设计的深奥语言(ahem golfscript)编程不应该让你成为一个更具创新性的人
$ echo solve > myProgram  
$ frobeniusScript myProgram
6
9
20
^D
Your answer is: 43
$ exit
using System;using System.Linq;class a{static void Main(string[]b)
{var c=(b.Select(d=>int.Parse(d))).ToArray();int e=c[0]*c[1];a:--e;
var f=c.Length;var g=new int[f];g[f-1]=1;int h=1;for(;;){int i=0;for
(int j=0;j<f;j++)i+=c[j]*g[j];if(i==e){goto a;}if(i<e){g[f-1]++;h=1;}
else{if(h>=f){Console.Write(e);return;}for(int k=f-1;k>=f-h;k--)
g[k]=0;g[f-h-1]++;h++;}}}}