Sfida: implementare il calcolo di un numero Delacorte in qualsiasi lingua. Il codice più corto vince.
Per una data matrice quadrata di interi distinti 1..n² (possibile lunghezza laterale n almeno tra 3 e 27), il suo numero Delacorte è la somma dei prodotti gcd (a, b) × distanza² (a, b) per ogni distinto coppia di numeri interi {a, b}.
L'esempio seguente mostra un quadrato 3 × 3 con un numero Delacorte di 160.
3 2 9
4 1 8
5 6 7
In questo quadrato abbiamo 36 coppie distinte da calcolare, ad esempio le coppie 4 e 6: gcd (4, 6) × distanza ² (4, 6) = 4
Un altro quadrato di esempio per i test: questo ha un numero Delacorte di 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
I numeri di Delacorte sono tratti da questo concorso di programmazione - vedi qui per ulteriori dettagli ... Il concorso si è concluso a gennaio 2015. È stato molto divertente!
Regole:
Le interruzioni di riga necessarie valgono come 1 carattere. È possibile pubblicare la soluzione golfata con interruzioni di riga, ma vengono conteggiate solo se necessario in quella lingua.
Puoi scegliere come gestire l'input e l'output e non devi contare il framework necessario della tua lingua, come le inclusioni standard o le intestazioni delle funzioni principali. Conta solo il codice effettivo (comprese le definizioni collegamento / alias), come in questo esempio 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();
}
}
}
È inoltre possibile inserire il quadrato come matrice bidimensionale o da un prompt o come stringa o un tipo di raccolta standard. Un array bidimensionale è l'unico modo per non dover calcolare da soli la lunghezza laterale del quadrato.
Non è richiesta una sotto-funzione per il lavoro effettivo, è inoltre possibile inserire il codice direttamente in Main ().
Ancora più preparazione è consentita gratuitamente, come qui:
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();
}
}
Se non sei sicuro che la tua lunga preparazione sia nello spirito di queste regole o possa essere chiamato imbroglio, chiedi semplicemente :)
usingesempio - se viene usato per includere una libreria perché altrimenti non potresti chiamare alcuna funzione, è gratuito. Se lo usi per definire un breve alias per qualsiasi cosa, l'intera istruzione conta.