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.Jawaban:
APL (38)
Ini adalah fungsi yang mengambil matriks sebagai argumen yang tepat, seperti:
Penjelasan:
⊂¨⍳⍴Z←⍵
: simpan matriks diZ
. Buat daftar masing-masing pasangan koordinat yang memungkinkan diZ
.∘.{
...}⍨
: untuk setiap pasangan koordinat, dikombinasikan dengan setiap pasangan koordinat:+/⊃×⍨⍺-⍵
: menghitungdistance^2
: kurangi pasangan koordinat pertama dari yang kedua, kalikan keduanya sendiri dan jumlah hasilnya∨/Z[⍺⍵]
: dapatkan nomorZ
untuk kedua pasang koordinat, dan temukan GCD×
: kalikan satu sama lain+/∊
: jumlah elemen dari hasil itu.5×
: kalikan dengan 0,5 (karena kami menghitung setiap pasangan bukan nol dua kali sebelumnya)sumber
Mathematica (
838279696766)Persiapan
Kode
Jika kami menghitung menggunakan karakter Unicode: 62 :
sumber
->
mengambil 2 karakter dan
mengambil 1 karakter, namun,->
mengambil 2 byte dan
mengambil 3 byte di UTF-8. Jadi mungkin lebih lama tergantung pada metrik.Python -
128 112 90 8988Persiapan:
Menghitung Nomor Delacorte (baris yang diperhitungkan):
Keluaran:
Hasil:
sumber
for
loop menjadi satu generator dansum
sekaligus. Selain itu, Anda dapat menyimpanP(R,R)
ke variabel dengan*x,=product(R,R)
menggunakan penugasan berbintang untuk membuat salinan. Bahkan lebih baik, Anda bisa menjadikannya produk empat kali lipatproduct(R,R,R,R)
dan lakukan sajafor j,n,i,m in product(*[R]*4)
.*[R]*4
adalah apa yang saya cari sendiri tetapi tidak bisa mulai bekerja.from fractions import gcd as g
menyimpan byte di bagian penting?Pyth 43
Jawaban ini hampir dapat dipastikan golf lebih lanjut; Saya khususnya tidak suka perhitungan jarak.
Untuk mengatur ini, simpan array linear-ized dalam variabel J. Anda dapat melakukan ini dengan menulis:
Cobalah online .
Output mengapung. Saya pikir ini sah, tolong beri tahu saya jika saya melanggar aturan :)
Penjelasan:
sumber
CJam, 55
Mengambil matriks sebagai STDIN dalam format berikut:
Cobalah online di sini
sumber
{}
untuk membuat blok daripada menggunakan stdin. Juga, apakah Anda membuang matriks ke array satu dimensi? Saya pikir Anda dapat mengambil matriks yang sudah diformat, lihat contoh OP. (Saya tidak mengenal CJam dengan baik, jadi ambillah ini dengan sebutir garam;))q~]
bagiannya. yang lebih pendek dibandingkan dengan ketika saya membuat kode dan menggunakan blok (saya kira)