Zorluk: herhangi bir dilde bir Delacorte Numarası hesaplamasını uygulayın. En kısa kod kazanır.
1..n² (olası yan uzunluk n en az 3 ve 27 arasında) verilen belirli bir kare matris için , Delacorte Numarası her bir farklı için gcd (a, b) × mesafe² (a, b) ürünlerinin toplamıdır tam sayı çifti.
Aşağıdaki örnek, Delacorte Sayısı 160 olan 3 × 3 kareyi göstermektedir.
3 2 9
4 1 8
5 6 7
Bu karede hesaplamak için 36 farklı çiftimiz var, örneğin 4 ve 6 çifti: gcd (4, 6) × mesafe ² (4, 6) = 4
Test için başka bir örnek kare - bunun Delacorte 5957 sayısı vardır:
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 Numaraları bu programlama yarışmasından alınmıştır - daha fazla bilgi için oraya bakınız ... Yarışma Ocak 2015'te sona erdi. Çok eğlenceliydi!
Kurallar:
Gerekli satır sonları 1 karakter olarak sayılır. Golf çözümünüzü satır sonları ile gönderebilirsiniz, ancak bunlar yalnızca bu dilde gerekliyse sayılır.
Giriş ve çıkışın nasıl ele alınacağını seçebilirsiniz ve standart içerikler veya ana işlev başlıkları gibi dilinizin gerekli çerçevesini saymanız gerekmez . Bu C # örneğinde olduğu gibi yalnızca gerçek kod (kısayol / takma ad tanımları dahil) sayılır:
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();
}
}
}
Kareyi ayrıca 2 boyutlu dizi olarak veya bir bilgi isteminden veya dize veya bazı standart toplama türü olarak girebilirsiniz. 2 boyutlu bir dizi, karenin yan uzunluğunu kendiniz hesaplamak zorunda kalmanın tek yoludur.
Gerçek iş için bir alt fonksiyon gerekli değildir, ayrıca kodu doğrudan Main () içine de koyabilirsiniz.
Burada olduğu gibi daha fazla hazırlığa ücretsiz izin verilir:
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();
}
}
Uzun hazırlıklarınızın bu kuralların ruhunda olup olmadığından emin değilseniz veya hile olarak adlandırılabilirseniz, sormanız yeterlidir :)
using
- aksi takdirde bazı işlevleri çağıramayacağınız için bir kitaplık eklemek için kullanılıyorsa, ücretsizdir. Herhangi bir şey için kısa bir takma ad tanımlamak için kullanırsanız, talimatın tamamı önemlidir.