Tantangan: mengimplementasikan perhitungan Nomor Delacorte dalam bahasa apa pun. Kode terpendek menang.
Untuk matriks persegi yang diberikan bilangan bulat berbeda 1..n² (panjang sisi yang mungkin n setidaknya antara 3 dan 27), Nomor Delacorte-nya adalah jumlah dari produk gcd (a, b) × jarak² (a, b) untuk setiap perbedaan sepasang bilangan bulat {a, b}.
Contoh berikut menunjukkan kotak 3 × 3 dengan Delacorte Number 160.
3 2 9
4 1 8
5 6 7
Dalam kotak ini kita memiliki 36 pasangan berbeda untuk dihitung, misalnya pasangan 4 dan 6: gcd (4, 6) × jarak ² (4, 6) = 4
Contoh kuadrat lain untuk pengujian - ini memiliki Nomor 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 diambil dari kontes pemrograman ini - lihat di sana untuk detail lebih lanjut ... Kontes berakhir pada Januari 2015. Itu sangat menyenangkan!
Aturan:
Jeda baris yang diperlukan dihitung sebagai 1 karakter. Anda dapat memposting solusi golf Anda dengan jeda baris, tetapi mereka hanya dihitung jika perlu dalam bahasa itu.
Anda dapat memilih bagaimana menangani input dan output dan Anda tidak perlu menghitung kerangka kerja yang diperlukan dari bahasa Anda, seperti standar-termasuk atau header fungsi utama. Hanya kode aktual yang dihitung (termasuk pintasan / alias definisi), seperti dalam contoh C # ini:
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();
}
}
}
Anda juga dapat memasukkan kotak sebagai array 2 dimensi atau dari prompt atau sebagai string atau beberapa tipe koleksi standar. Array 2 dimensi adalah satu-satunya cara untuk tidak menghitung panjang sisi kotak sendiri.
Sub-fungsi untuk pekerjaan yang sebenarnya tidak diperlukan, Anda juga bisa meletakkan kode langsung di dalam Main ().
Bahkan lebih banyak persiapan diperbolehkan secara gratis, seperti di sini:
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();
}
}
Jika Anda tidak yakin apakah persiapan panjang Anda sesuai dengan aturan ini atau bisa disebut curang, tanyakan saja :)
using
contoh saya - jika digunakan untuk memasukkan perpustakaan karena jika tidak Anda tidak dapat memanggil beberapa fungsi, itu gratis. Jika Anda menggunakannya untuk mendefinisikan beberapa alias pendek untuk apa pun, seluruh instruksi diperhitungkan.