Celem jest obliczenie wszystkich kwadratów x
z dodawaniem i odejmowaniem.
Zasady:
- Kod musi być funkcją, która generuje całkowitą liczbę kwadratów i zwraca tablicę zawierającą wszystkie te kwadraty.
- Można nie używać łańcuchów, struktur, mnożenie, dzielenie, lub wbudowanych funkcji do obliczania kwadraty.
- Możesz używać tylko tablic, liczb całkowitych (liczb całkowitych), dodawania, odejmowania. Żaden inny operator nie jest dozwolony!
To jest pytanie do golfa , więc wygrywa najkrótszy kod w bajtach!
Odpowiedzi:
APL - 10
Przykładowe użycie:
ngn demo APL
źródło
+\1+⍳+⍳
C,
5552 bajtówpo prostu sumuje liczby nieparzyste
n
: liczba kwadratów do obliczeniar
: tablica wyjściowa do przechowywania wynikówj
: przyjmuje kolejne wartości 1, 3, 5, 7, ...i
: zwiększa się oj
przy każdej iteracjiEdytować
4 znaki można zapisać za pomocą niejawnej deklaracji int (> C99), ale kosztuje to 1 znak, ponieważ
for
inicjatory nie mogą zawierać deklaracji w> C99. Następnie kod staje sięStosowanie
Wynik
źródło
GolfScript, 17 znaków
Zastosowanie (patrz także przykłady online ):
Uwaga:
*
jest pętlą, a nie operatorem mnożenia.źródło
,
pobiera dane wejściowe i konwertuje je na tablicę[0 1 ... n-1]
. Następnie*
wstrzykuje podany blok kodu do tablicy. Ten blok najpierw podwaja bieżący element (.+
), odejmuje jeden ((
), a następnie dodaje poprzedni wynik1$+
(innymi słowy, dodaje2j-1
do poprzedniego numeru kwadratu).[]
obejmuje wszystko, aby zwrócić nową tablicę.Pakiet Windows, 115 bajtów
Powinno to zostać umieszczone w pliku wsadowym zamiast uruchamiać się z cmd i wyświetla listę w konsoli. Pobiera liczbę kwadratów do utworzenia z pierwszego argumentu wiersza poleceń. W przeważającej części używa
&
zamiast nowego wiersza, jednak jeden jest nadal potrzebny i liczy się jako dwa bajty.Wymaga włączenia opóźnionego rozszerzania zmiennych, można to zrobić za pomocą
cmd /v:on
. Zakładając, że tak nie jest,setlocal enabledelayedexpansion&
na początku potrzebna była dodatkowa (bez niego skrypt ma 83 bajty).źródło
Haskell - 30
Wykorzystuje to fakt
(n+1)^2=n^2+2n+1
źródło
Perl, 27 bajtów
Matematyka:
Skrypt wywoływania funkcji w celu wydrukowania 10 kwadratów:
Wynik:
Edycje:
pop
zamiastshift
(-2 bajty, dzięki skibiranski )źródło
JavaScript - 32 znaki
Zakłada, że zmienna
x
istnieje i tworzy tablicęa
kwadratów dla wartości1..x
.ECMAScript 6 - 27 znaków
Wywołanie
f(x)
zapełni tablicęb
kwadratami wartości0..x
.źródło
i+++i
na końcu ...?k+=i+++i
jest taki sam jak ten,k += i + (++i)
który jest taki sam, jakk+=i+i+1
po którym następujei=i+1
b=[f=i=>b[i]=i&&i+--i+f(i)]
.).Julia - 33
Dowolną liczbę kwadratową można zapisać przez zsumowanie liczb nieparzystych:
źródło
C ++
9981788078moja pierwsza próba gry w golfa kodowego
Kod ten jest oparty na
a = 2 Xn - 1
, gdzie n jest liczba Term jest n p określenie w serii 1, 3, 5, 9, 11, 13, ..... suma pierwszych 2 względem = 2 do kwadratu
suma pierwszych 3 haseł = 3 do kwadratu
i tak dalej ...
źródło
{}
pofor
pętli, ponieważ istnieje tylko jedna instrukcja. Może to zmniejszyć liczbęaddition, subtraction
, używam tylko tychZespół DCPU-16 (90 bajtów)
Napisałem to w asemblerze dla fikcyjnego procesora, bo dlaczego nie?
Oczekuje się, że liczba będzie w rejestrze X, a inne rejestry będą wynosić 0. Wyniki są wypychane na stos, pęknie, gdy osiągnie 65535 z powodu architektury 16-bitowej. Możesz dodać
SUB PC, 1
do końca, aby go przetestować. Skompilowany program powinien mieć 20 bajtów (10 słów).źródło
Haskell
To w zasadzie wymyśla mnożenie, używa samego siebie i odwzorowuje je na wszystkich liczbach.
f 10
=[0,1,4,9,16,25,36,49,64,81]
. Równieżf 91
=[0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]
.źródło
Haskell, 34/23
lub, jeśli import jest w porządku:
Wynik:
źródło
JavaScript 47
function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}
r=[];f(12,r);console.log(r)
zwroty :[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
źródło
f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
.Smalltalk, 52
Zwraca nową tablicę (tzn. Nie wypełnia ani nie dodaje do istniejącej).
połączenie:
wartość f: 10
-> # (1 4 9 16 25 36 49 64 81 100)
źródło
python - 39
Zastąp
5
dowolną wartością. Jakieś sugestie?źródło
Bash -
928562615957Wynik:
Edycja: zastąpiłem wewnętrzną pętlę algorytmem z rozwiązania Haskell @ mniip.
źródło
Ta sama metoda, jak powyżej, w APL i J:
APL:
F←{+\1+V+V←¯1+⍳⍵}
(17 znaków) działa z większością wariantów APL (spróbuj tutaj )a nawet mniej (tylko 14 znaków) z NGN APL:
F←{+\1+V+V←⍳⍵}
(patrz tutaj )J:
f=:+/\@(>:@+:@:i.)
(18 znaków)edycja: lepsze rozwiązanie w APL:
F←{+\¯1+V+V←⍳⍵}
(15 znaków)źródło
C # (82)
źródło
C # - 93
Wywołany z innej metody tej samej klasy, zwróci tablicę -
[1,4,9,16,25,36...]
aż dol
elementu.źródło
int[]
isq
? Nie znam C #, ale myślę, że powinno działać.int[]sq
zamiastint[] sq
iint[]res
zamiastint[] res
. Pomaga to zaoszczędzić dwa znaki i nie wystąpiły przy tym żadne błędy kompilacji. Powinieneś także używać identyfikatorów jednoznakowych dlasq
ires
jak sugerowałeś.Fortran II | IV | 66 | 77,
134122109105Edycja: usunięto wewnętrzną pętlę i zamiast niej użyto algorytmu Haskell @ mniip.
Edycja: Zweryfikowano, że podprogram i sterownik są ważne w Fortran II i IV
Kierowca:
Wynik:
źródło
Python - 51
Tutaj definiuję funkcję zgodnie z wymaganiami reguł.
Używanie
sum
liczb nieparzystych:To używa tylko
sum
(wbudowane, które wykonuje dodawanie) irange
(wbudowane, które tworzy tablice przy użyciu dodawania). Jeśli sprzeciwisz sięsum
, możemy to zrobić za pomocąreduce
:źródło
PHP, 92 bajty
To oczywiście musi mieć włączoną opcję „krótkich tagów” (aby zgolić 3 bajty na początku).
Wynik:
źródło
Dalej - 48 bajtów
Stosowanie:
Wynik:
źródło