Défi: implémenter le calcul d'un numéro Delacorte dans n'importe quelle langue. Le code le plus court gagne.
Pour une matrice carrée donnée d'entiers distincts 1..n² (longueur de côté possible n au moins entre 3 et 27), son nombre Delacorte est la somme des produits pgc (a, b) × distance² (a, b) pour chaque distinct paire d'entiers {a, b}.
L'exemple suivant montre un carré 3 × 3 avec un nombre Delacorte de 160.
3 2 9
4 1 8
5 6 7
Dans ce carré, nous avons 36 paires distinctes à calculer, par exemple la paire 4 et 6: pgcd (4, 6) × distance ² (4, 6) = 4
Un autre exemple de carré pour les tests - celui-ci a un numéro Delacorte de 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
Les numéros Delacorte sont tirés de ce concours de programmation - voir ici pour plus de détails ... Le concours s'est terminé en janvier 2015. C'était très amusant!
Règles:
Les sauts de ligne nécessaires comptent pour 1 caractère. Vous pouvez publier votre solution golfée avec des sauts de ligne, mais ils ne sont comptés que si nécessaire dans cette langue.
Vous pouvez choisir comment gérer les entrées et les sorties et vous n'avez pas à compter le cadre nécessaire de votre langage, comme les en-têtes standard ou les fonctions principales. Seul le code réel compte (y compris les définitions de raccourci / alias), comme dans cet exemple 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();
}
}
}
Vous pouvez également saisir le carré sous forme de tableau à deux dimensions ou à partir d'une invite ou sous forme de chaîne ou d'un type de collection standard. Un tableau à deux dimensions est le seul moyen de ne pas avoir à calculer vous-même la longueur du côté du carré.
Une sous-fonction pour le travail réel n'est pas requise, vous pouvez également placer le code directement dans Main ().
Encore plus de préparation est autorisée gratuitement, comme ici:
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();
}
}
Si vous ne savez pas si votre longue préparation est dans l'esprit de ces règles ou pourrait être qualifiée de tricherie, demandez simplement :)
usingexemple - s'il est utilisé pour inclure une bibliothèque car sinon vous ne pourriez pas appeler une fonction, c'est gratuit. Si vous l'utilisez pour définir un alias court pour quoi que ce soit, l'instruction entière compte.