Herausforderung: Berechnung einer Delacorte-Zahl in einer beliebigen Sprache durchführen. Kürzester Code gewinnt.
Für eine gegebene quadratische Matrix von verschiedenen ganzen Zahlen 1..n² (mögliche Seitenlänge n mindestens zwischen 3 und 27) ist ihre Delacorte-Zahl die Summe der Produkte gcd (a, b) × distance² (a, b) für jedes einzelne ganzzahliges Paar {a, b}.
Das folgende Beispiel zeigt ein 3 × 3-Quadrat mit einer Delacorte-Zahl von 160.
3 2 9
4 1 8
5 6 7
In diesem Quadrat haben wir 36 verschiedene Paare zu berechnen, zum Beispiel das Paar 4 und 6: gcd (4, 6) × distance ² (4, 6) = 4
Ein weiteres Beispielquadrat zum Testen - es hat eine Delacorte-Nummer von 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
Die Delacorte-Nummern stammen aus diesem Programmierwettbewerb - siehe dort für weitere Details ... Der Wettbewerb endete im Januar 2015. Es hat großen Spaß gemacht!
Regeln:
Notwendige Zeilenumbrüche zählen als 1 Zeichen. Sie können Ihre Golf-Lösung mit Zeilenumbrüchen veröffentlichen, diese werden jedoch nur bei Bedarf in dieser Sprache gezählt.
Sie können wählen, wie Sie mit Ein- und Ausgaben umgehen möchten, und müssen nicht das erforderliche Framework für Ihre Sprache wie Standard-Includes oder Hauptfunktionsheader zählen. Es zählt nur der tatsächliche Code (einschließlich Verknüpfungen / Alias-Definitionen), wie in diesem C # -Beispiel:
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();
}
}
}
Sie können das Quadrat auch als zweidimensionales Array oder über eine Eingabeaufforderung oder als Zeichenfolge oder einen Standardauflistungstyp eingeben. Ein zweidimensionales Array ist die einzige Möglichkeit, die Seitenlänge des Quadrats nicht selbst berechnen zu müssen.
Eine Unterfunktion für die eigentliche Arbeit ist nicht erforderlich, Sie können den Code auch direkt in Main () einfügen.
Noch mehr Vorbereitungen sind kostenlos möglich, wie hier:
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();
}
}
Wenn Sie nicht sicher sind, ob Ihre langwierige Vorbereitung im Sinne dieser Regeln ist oder als Betrug bezeichnet werden könnte, fragen Sie einfach :)
usingBeispiel - wenn es verwendet wird, um eine Bibliothek einzuschließen, weil Sie sonst keine Funktion aufrufen könnten, ist es kostenlos. Wenn Sie damit einen kurzen Alias für irgendetwas definieren, zählt die gesamte Anweisung.