Wyzwanie: wdrożyć obliczenia liczby Delacorte w dowolnym języku. Najkrótszy kod wygrywa.
Dla danej macierzy kwadratowej różnych liczb całkowitych 1..n² (możliwa długość boku n co najmniej od 3 do 27), jej liczba Delacorte jest sumą produktów gcd (a, b) × odległość² (a, b) dla każdej odrębnej para liczb całkowitych {a, b}.
Poniższy przykład pokazuje kwadrat 3 × 3 z liczbą Delacorte 160.
3 2 9
4 1 8
5 6 7
W tym kwadracie mamy 36 różnych par do obliczenia, na przykład pary 4 i 6: gcd (4, 6) × odległość ² (4, 6) = 4
Kolejny przykładowy kwadrat do testowania - ma on liczbę 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
Numery Delacorte zostały zaczerpnięte z tego konkursu programistycznego - zobacz tam więcej szczegółów ... Konkurs zakończył się w styczniu 2015 roku. To była świetna zabawa!
Zasady:
Niezbędne podziały linii liczą się jako 1 znak. Możesz opublikować swoje rozwiązanie w golfa z podziałem linii, ale są one liczone tylko w razie potrzeby w tym języku.
Możesz wybrać sposób obsługi danych wejściowych i wyjściowych i nie musisz liczyć niezbędnej struktury swojego języka, na przykład nagłówków standardowych lub głównych funkcji. Liczy się tylko rzeczywisty kod (w tym definicje skrótów / aliasów), jak w tym przykładzie 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();
}
}
}
Możesz również wprowadzić kwadrat jako tablicę dwuwymiarową lub z wiersza polecenia lub jako ciąg znaków lub inny standardowy typ kolekcji. Dwuwymiarowa tablica to jedyny sposób, aby samodzielnie nie obliczać długości boku kwadratu.
Podfunkcja do faktycznej pracy nie jest wymagana, możesz także umieścić kod bezpośrednio w Main ().
Jeszcze więcej przygotowań jest dozwolone za darmo, jak tutaj:
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();
}
}
Jeśli nie masz pewności, czy twoje długie przygotowania są zgodne z duchem tych zasad, czy można je nazwać oszustwem, po prostu zapytaj :)
using
przykład - jeśli jest używany do dołączenia biblioteki, ponieważ w przeciwnym razie nie można wywołać jakiejś funkcji, jest darmowy. Jeśli użyjesz go do zdefiniowania jakiegoś krótkiego aliasu, liczy się cała instrukcja.Odpowiedzi:
APL (38)
Jest to funkcja, która przyjmuje prawidłowy argument macierzy, na przykład:
Wyjaśnienie:
⊂¨⍳⍴Z←⍵
: zapisz macierz wZ
. Zrób listę każdej możliwej pary współrzędnych wZ
.∘.{
...}⍨
: dla każdej pary współrzędnych w połączeniu z każdą parą współrzędnych:+/⊃×⍨⍺-⍵
: obliczdistance^2
: odejmij pierwszą parę współrzędnych od drugiej, pomnóż je przez siebie i zsumuj wynik∨/Z[⍺⍵]
: pobierz numerZ
dla obu par współrzędnych i znajdź GCD×
: pomnóż je przez siebie+/∊
: zsumuj elementy tego wyniku.5×
: pomnóż przez 0,5 (ponieważ każdą niezerową parę policzyliśmy dwa razy wcześniej)źródło
Matematyka (
838279696766)Przygotowanie
Kod
Jeśli policzymy używając znaków Unicode: 62 :
źródło
->
zajmuje 2 znaki i
zajmuje 1 znak, jednak->
zajmuje 2 bajty i
zajmuje 3 bajty w UTF-8. Może więc być dłuższy w zależności od wskaźników.Python -
128 112 90 8988Przygotowanie:
Obliczanie liczby Delacorte (linia, która się liczy):
Wynik:
Wynik:
źródło
for
pętle w jeden generator isum
raz. Możesz także zapisaćP(R,R)
w zmiennej*x,=product(R,R)
, używając kopii oznaczonej gwiazdką. Co więcej, możesz sprawić, że będzie to czterokrotny produktproduct(R,R,R,R)
i po prostu zróbfor j,n,i,m in product(*[R]*4)
.*[R]*4
tego szukałem sam, ale nie mogłem dostać się do pracy.from fractions import gcd as g
zapisanie bajtów w ważnej sekcji?Pyth 43
Ta odpowiedź prawie na pewno mogłaby być dalej golfa; Szczególnie nie lubię obliczania odległości.
Aby to ustawić, zapisz liniową tablicę w zmiennej J. Możesz to zrobić, pisząc:
Wypróbuj online .
Wysyła liczbę zmiennoprzecinkową. Myślę, że to uzasadnione, proszę powiedzieć, czy złamałem regułę :)
Wyjaśnienie:
źródło
CJam, 55
Przyjmuje macierz jako STDIN w następującym formacie:
Wypróbuj online tutaj
źródło
{}
do utworzenia bloku zamiast używać standardowego wejścia. Ponadto, czy zrzucasz macierz do jednowymiarowej tablicy? Myślę, że możesz wziąć matrycę już sformatowaną, zobacz przykłady PO. (Nie znam dobrze CJama, więc weź to zq~]
częścią. który jest krótszy w porównaniu do tego, kiedy go