挑战:以任何语言实现Delacorte数的计算。最短的代码获胜。
对于不同整数的一个给定的方阵1..n²(可能边长Ñ在3和27之间至少),其德拉科特数是产品的总和满足gcd(A,B)×distance²(A,B)为每个不同的对整数{a,b}。
以下示例显示了Delacorte数为160的3×3正方形。
3 2 9
4 1 8
5 6 7
在这个正方形中,我们有36个不同的对来计算,例如对4和6:gcd(4,6)× 距离 ²(4,6)= 4
另一个用于测试的示例正方形-的Delacorte数为5957:
10 8 11 14 12
21 4 19 7 9
5 13 23 1 16
18 3 17 2 15
24 22 25 6 20
Delacorte Numbers摘自该编程竞赛 -有关详细信息,请参阅此处。竞赛于2015年1月结束。这真是太好了!
规则:
必要的换行符计为1个字符。您可以在打高尔夫球的解决方案中添加换行符,但是只有在必要时才使用该语言进行计数。
您可以选择处理输入和输出的方式,而不必计算必要的语言框架,例如标准包含或主函数标头。仅实际的代码计数(包括快捷方式/别名定义),例如此C#示例:
namespace System
{
using Collections.Generic;
using I=Int32; //this complete line counts
class Delacorte
{
static I l(I[]a){return a.Length;} //of course this complete line counts
static void CalculateSquare(int[] a, out int r)
{
r=0;for(I i=l(a);i-->0;)r+=a[i]; //here only this line counts
}
static void Main()
{
int result;
CalculateSquare(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, out result);
Console.Write(result); //should output 140 for the example
Console.ReadKey();
}
}
}
您也可以将正方形输入为二维数组,也可以从提示输入,也可以输入为字符串或某些标准收集类型。二维数组是不必自己计算正方形的边长的唯一方法。
不需要用于实际工作的子函数,您也可以将代码直接放在Main()中。
甚至可以免费进行更多准备,例如:
using System;
unsafe class Delacorte
{
static void CalculateSquare(int* a, out int r)
{
r=0;while(*a>0)r+=*a++; //only this line counts
}
static void Main()
{
var input = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; //adding a terminator
int result;
fixed (int* a = &input[0]) //necessary in C#
CalculateSquare(a, out result);
Console.Write(result);
Console.ReadKey();
}
}
如果您不确定自己的冗长准备是否符合这些规则的精神,或者可以称为作弊,请询问:)
听起来,就Python而言,所有包含项都是免费的吗?这可能会导致一些奇怪的优化 ...
—
Falko 2014年
@Falko,问题是,标准包括什么?请尝试理解规则的精神,并使其适应您的语言。所以,不:请看我的
—
maf-soft 2014年
using示例-如果它用于包含库,因为否则您无法调用某些函数,那么它是免费的。如果使用它为任何东西定义一些简短的别名,那么整个指令就很重要。
@Optimizer:距离函数的含义在链接中有些隐蔽:这是两个字段之间的欧几里德距离的平方。
—
Falko 2014年
我提供了一个示例,而不是确切定义@Optimizer,因此您可以确定它的含义。我认为就足够了,并增加了乐趣……
—
maf-soft 2014年
我必须说,尽管这是一个合法问题,但看来您已经将它张贴在这里,终于可以进入比赛了;)
—
Optimizer