Задача: осуществить подсчет числа Делакорта на любом языке. Самый короткий код выигрывает.
Для данной квадратной матрицы различных целых чисел 1..n² (возможная длина стороны n, по крайней мере, между 3 и 27) его число Делакокера является суммой произведений gcd (a, b) × расстояние² (a, b) для каждого отдельного пара целых чисел {a, b}.
В следующем примере показан квадрат 3 × 3 с номером Delacorte 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
пример - если он используется для включения библиотеки, потому что в противном случае вы не можете вызвать какую-либо функцию, она бесплатна. Если вы используете его для определения какого-либо короткого псевдонима, вся команда будет иметь значение.