Thách thức: thực hiện tính toán Số Delacorte bằng bất kỳ ngôn ngữ nào. Mã ngắn nhất sẽ thắng.
Đối với một ma trận vuông cho các số nguyên riêng biệt 1..n² (chiều dài cạnh có thể n ít nhất là từ 3 đến 27), Số Delacorte của nó là tổng của các sản phẩm gcd (a, b) × distance² (a, b) cho mỗi khác biệt cặp số nguyên {a, b}.
Ví dụ sau đây cho thấy hình vuông 3 × 3 với Số Delacorte là 160.
3 2 9
4 1 8
5 6 7
Trong hình vuông này, chúng ta có 36 cặp riêng biệt để tính toán, ví dụ cặp 4 và 6: gcd (4, 6) × khoảng cách ² (4, 6) = 4
Một ví dụ khác để thử nghiệm - cái này có Số Delacorte là 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
Số Delacorte được lấy từ cuộc thi lập trình này - xem tại đó để biết thêm chi tiết ... Cuộc thi kết thúc vào tháng 1 năm 2015. Thật vui!
Quy tắc:
Ngắt dòng cần thiết được tính là 1 char. Bạn có thể đăng giải pháp chơi gôn của mình với ngắt dòng, nhưng chúng chỉ được tính nếu cần thiết trong ngôn ngữ đó.
Bạn có thể chọn cách xử lý đầu vào và đầu ra và bạn không phải tính khuôn khổ cần thiết cho ngôn ngữ của mình, như tiêu đề bao gồm tiêu chuẩn hoặc chức năng chính. Chỉ tính mã thực tế (bao gồm cả định nghĩa phím tắt / bí danh), như trong ví dụ C # này:
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();
}
}
}
Bạn cũng có thể nhập hình vuông dưới dạng mảng 2 chiều hoặc từ dấu nhắc hoặc dưới dạng chuỗi hoặc một số loại bộ sưu tập tiêu chuẩn. Mảng 2 chiều là cách duy nhất không phải tự tính chiều dài cạnh của hình vuông.
Không yêu cầu chức năng phụ cho công việc thực tế, bạn cũng có thể đặt mã trực tiếp trong Main ().
Thậm chí nhiều sự chuẩn bị được cho phép miễn phí, như ở đây:
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();
}
}
Nếu bạn không chắc chắn liệu sự chuẩn bị lâu dài của bạn có theo tinh thần của các quy tắc này hay có thể được gọi là gian lận, chỉ cần hỏi :)
using
ví dụ của tôi - nếu nó được sử dụng để bao gồm một thư viện bởi vì nếu không bạn không thể gọi một số chức năng, thì nó là miễn phí. Nếu bạn sử dụng nó để xác định một số bí danh ngắn cho bất cứ điều gì, toàn bộ hướng dẫn sẽ được tính.