Завдання: здійснити обчислення числа Делакорте будь-якою мовою. Найкоротший код виграє.
Для даної квадратної матриці різних цілих чисел 1..n² (можлива довжина сторони n щонайменше між 3 і 27) її число Делакорте є сумою добутків gcd (a, b) × відстань² (a, b) для кожного окремого пара цілих чисел {a, b}.
Наступний приклад показує квадрат 3 × 3 з числом Делакорта 160.
3 2 9
4 1 8
5 6 7
У цьому квадраті маємо 36 різних пар для обчислення, наприклад, пари 4 і 6: gcd (4, 6) × відстань ² (4, 6) = 4
Ще один приклад квадрата для тестування - це номер Делакорта 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 взяті з цього конкурсу програмування - дивіться там детальніше ... Конкурс закінчився в січні 2015 року. Це було дуже цікаво!
Правила:
Необхідні розриви рядків вважаються 1 знаком. Ви можете розмістити своє рішення для гольфу з перервами на лінії, але вони рахуються лише у разі необхідності на цій мові.
Ви можете вибрати, як обробляти вхід і вихід, і вам не доведеться рахувати необхідні рамки вашої мови, як-от стандартні заголовки, що включають в себе стандарт або функції. Тільки фактичні підрахунки коду (включаючи визначення ярликів / псевдонімів), як у цьому прикладі 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();
}
}
}
Ви також можете ввести квадрат як двовимірний масив або з підказки або у вигляді рядка або якогось стандартного типу колекції. Двовимірний масив - єдиний спосіб не потрібно самостійно обчислювати бічну довжину квадрата.
Підфункція для фактичної роботи не потрібна, ви також можете поставити код безпосередньо в Main ().
Ще більше підготовки дозволено безкоштовно, як тут:
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();
}
}
Якщо ви не впевнені, чи тривала ваша підготовка в дусі цих правил, чи це можна назвати обманом, просто запитайте :)
using
приклад - якщо він використовується для включення бібліотеки, оскільки в іншому випадку ви не можете викликати якусь функцію, вона безкоштовна. Якщо ви використовуєте його для визначення деяких коротких псевдонімів для чого-небудь, вся інструкція враховується.