ถาม: ใช้การคำนวณหมายเลข Delacorte ในภาษาใด ๆ รหัสที่สั้นที่สุดชนะ
สำหรับเมทริกซ์จตุรัสที่กำหนดของจำนวนเต็มชัดเจน1..n² (ความยาวด้านที่เป็นไปได้nอย่างน้อยระหว่าง 3 และ 27) หมายเลข Delacorte ของมันคือผลรวมของผลิตภัณฑ์gcd (a, b) ×distance² (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
อีกตัวอย่างสแควร์สำหรับการทดสอบ - นี้มีจำนวน 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 นำมาจากการแข่งขันเขียนโปรแกรมนี้ - ดูรายละเอียดเพิ่มเติมที่นั่น ... การประกวดสิ้นสุดลงในเดือนมกราคม 2558 มันสนุกมาก!
กฎ:
ตัวแบ่งบรรทัดที่จำเป็นจะนับเป็น 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();
}
}
}
นอกจากนี้คุณยังสามารถป้อนสแควร์เป็นอาร์เรย์ 2 มิติหรือจากพรอมต์หรือเป็นสตริงหรือบางประเภทคอลเลกชันมาตรฐาน อาเรย์สองมิติเป็นวิธีเดียวที่ไม่ต้องคำนวณความยาวด้านของสี่เหลี่ยมจัตุรัสด้วยตัวคุณเอง
ไม่จำเป็นต้องใช้ฟังก์ชั่นย่อยสำหรับงานจริงคุณสามารถใส่รหัสลงใน 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
ตัวอย่างของฉัน- ถ้ามันถูกใช้เพื่อรวมไลบรารีเพราะมิฉะนั้นคุณไม่สามารถเรียกบางฟังก์ชันได้ฟรี หากคุณใช้เพื่อกำหนดนามแฝงสั้น ๆ สำหรับสิ่งใด ๆ คำสั่งทั้งหมดจะนับ