Napisz program lub funkcję do wyjścia sumę liczb nieparzystych kwadratowych (OEIS # A016754) mniej niż wejście n
.
Pierwsze 44 liczby w sekwencji to:
1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089,
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481,
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569
Wzór na sekwencję to a(n) = ( 2n + 1 ) ^ 2
.
Notatki
- Zachowanie programu może być niezdefiniowane
n < 1
(tzn. Wszystkie prawidłowe dane wejściowe są>= 1
.)
Przypadki testowe
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Tomasz
źródło
źródło
Odpowiedzi:
Galaretka, 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
tło
Dla wszystkich dodatnich liczb całkowitych k mamy 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Ponieważ są m C r = m! ÷ ((mr)! R!) R - kombinacje zbioru m elementów, powyższe można obliczyć jako (2k + 1) C 3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2k + 1) ÷ 3.
Aby zastosować formułę, musimy znaleźć najwyższe 2k + 1 takie, że (2k - 1) ² <n . Ignorując przez chwilę parzystość, możemy obliczyć najwyższą m taką, że (m - 1) ² <n jako m = ceil (srqt (n)) . Aby warunkowo zwiększyć wartość m, jeśli jest równa, wystarczy obliczyć wartość m | 1 (bitowe LUB z 1 ).
Jak to działa
źródło
JavaScript (ES6), 30 bajtów
31 bajtów, jeśli
f(1)
trzeba zwrócić zero zamiast false:źródło
05AB1E ,
108 bajtówKod:
Wyjaśnienie:
Może się przydać:
t;L·<nO
.Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Haskell, 30 bajtów
Zaskakująco normalnie wyglądający.
źródło
C #,
126131 bajtówZmodyfikowana wersja zgodna z nowym pytaniem:
Korzystanie z ustalonego limitu:
źródło
# Language name, number bytes
spójność.Console.Read
na końcu?namespace
Nie są wymagane dla pojedynczych plików.System.Console.Write(s);
jeśli to działa, a jeśli nie potrzebujeszConsole.Read
.Galaretka, 7
Wypróbuj online lub wypróbuj zmodyfikowaną wersję dla wielu wartości
Ćśś ... Dennis śpi ...
Dzięki Sp3000 na czacie za pomoc!
Wyjaśnienie:
źródło
R,
3836 bajtów@Giuseppe zapisał dwa bajty, przechodząc
x
do listy argumentów, aby zapisać nawiasy klamrowe. Fajny pomysł!Nie golfił
Wypróbuj online!
źródło
x
do domyślnego argumentu funkcji, a następnie możesz usunąć nawiasy klamrowe.C,
51, 5048 bajtówBo dlaczego nie golf w jednym z najbardziej pełnych języków? (Hej, przynajmniej nie jest to Java!)
Wypróbuj online!
Pełny program bez golfa, z testowym wejściem / wyjściem:
źródło
most verbose languages
Bardziej golfowy niż Python, C #, LISP, Forth itp., C jest naprawdę całkiem dobry do gry w golfa< 50 bytes
. Ponadto, nie jest istotne meta post tutaj .Właściwie 7 bajtów
Wypróbuj online!
Również dla 7 bajtów:
Wypróbuj online!
Wykorzystuje to tę samą formułę, co w odpowiedzi Jelly'ego na Jelly.
Wyjaśnienie:
źródło
Literally
?Oktawa, 23 bajty
Testowanie:
źródło
CJam, 15 bajtów
Wypróbuj online!
Zakodowane 10000 rozwiązań:
12 bajtowe rozwiązanie Martina:
Moje oryginalne 13-bajtowe rozwiązanie:
Wypróbuj online!
źródło
Pyth, 10 bajtów
Zestaw testowy
Wyjaśnienie:
źródło
s<#Q%2t^R2
Mathcad, 31 „bajtów”
Zauważ, że Mathcad używa skrótów klawiaturowych do wprowadzania kilku operatorów, w tym definicji i wszystkich operatorów programowania. Na przykład ctl-] wchodzi w pętlę while - nie można jej wpisać i można ją wprowadzić tylko za pomocą skrótu klawiaturowego lub z paska narzędzi Programowanie. „Bajty” to liczba operacji na klawiaturze potrzebnych do wprowadzenia elementu Mathcad (np. Nazwa zmiennej lub operator).
Ponieważ nie mam szans na wygraną w tym konkursie, pomyślałem, że dodam trochę urozmaicenia dzięki bezpośredniej wersji formuły.
źródło
Rakieta, 57 bajtów
źródło
MATL , 10 bajtów
EDYCJA (30 lipca 2016 r.): Połączony kod zastępuje się
9L
przez,1L
aby dostosować się do ostatnich zmian w języku.Wypróbuj online!
źródło
Python, 39 bajtów
Jeśli, na
n=1
, to ważny do wyjściaFalse
zamiast0
, to możemy uniknąć konwersji przypadku bazowego, aby uzyskać 37 bajtówTo dziwne, że nie znalazłem krótszą drogę do zdobycia
0
dlai*i>=n
i niezerowe inaczej. W Pythonie 2 wciąż dostaje się 39 bajtówźródło
bool
jest podklasą językaint
Python, co oznacza, żeFalse
jest akceptowalną wartością dla0
.Python,
4238 bajtówźródło
Python 2, 38 bajtów
Na podstawie wzoru Dennisa , z
s==-2*k
. Wysyła liczbę zmiennoprzecinkową. W efekcie dane wejściowe są pierwiastkowane, zmniejszane, a następnie zaokrąglane w górę do następnej liczby parzystej.źródło
PARI / GP ,
333226 bajtówZaadaptowano z kodu Dennisa :
Mój pierwszy pomysł (30 bajtów), używając prostej formuły wielomianowej:
Jest to wydajna implementacja, właściwie nie bardzo różna od wersji bez golfisty, którą napisałbym:
Alternatywna implementacja (37 bajtów), która zapętla się nad każdym z kwadratów:
Inne alternatywne rozwiązanie (35 bajtów) demonstrujące sumowanie bez zmiennej tymczasowej:
Jeszcze inne rozwiązanie, niezbyt konkurencyjne (40 bajtów), wykorzystujące normę L 2 . Byłoby lepiej, gdyby istniało wsparcie dla wektorów ze wskaźnikami wielkości kroku. (Można sobie wyobrazić składnię,
n->norml2([1..((n-1)^.5+1)\2..2])
która zrzuci 8 bajtów).źródło
Haskell,
3231 bajtówPrzykład użycia:
(#1) 9802
->166650
.Edycja: @xnor zapisał bajt ze sprytnym zrozumieniem listy. Dzięki!
źródło
n#x=sum[x^2+n#(x+2)|x^2<n]
Julia, 29 bajtów
Jest to funkcja rekurencyjna, która przyjmuje liczbę całkowitą i zwraca liczbę całkowitą.
Indeks rozpoczynamy od 1, a jeśli jego kwadrat jest mniejszy niż wartość wejściowa, bierzemy kwadrat i dodajemy wynik ponownego użycia do indeksu + 2, co zapewnia pomijanie liczb parzystych, w przeciwnym razie zwracamy 0.
źródło
Oracle SQL 11.2, 97 bajtów
źródło
Julia, 26 bajtów
To konstruuje zakres wszystkich nieparzystych, dodatnich liczb całkowitych poniżej n i tablicę kwadratów liczb całkowitych w tym zakresie, a następnie oblicza sumę liczb całkowitych w obu iterowalnych.
Wypróbuj online!
źródło
Reng v.3.3, 36 bajtów
Wypróbuj tutaj!
Wyjaśnienie
1: inicjalizacja
Ustawia
c
na0
(licznik) i dane wejścioweI
dom
siekiery.1ø
przechodzi do następnej linii.2: pętla
:
powiela bieżącą wartość (kwadratową liczbę nieparzystą) i [Im
kładziem
siekierę w dół. Użyłem mniej niż lewy w innej odpowiedzi , której tu używam.%:1,e
sprawdza, czy STOS <TOS. Jeśli tak,q^
idzie w górę i wychodzi z pętli. Inaczej:c
odkłada licznik,2*
podwaja go,1+
dodaje jeden i podnosi²
go do kwadratu.c1+#C
zwiększa sięc
, a pętla znów się uruchamia.3: końcowy
$
upuszcza ostatnią wartość (większą niż pożądana),a+¡
dodaje, aż długość stosu wynosi 1,n~
wysyła i kończy.źródło
Clojure, 53 bajty
Możesz to sprawdzić tutaj: https://ideone.com/WKS4DA
źródło
Mathematica 30 bajtów
Ta nienazwana funkcja
Range[1,Sqrt[#-1],2]
podnosi do kwadratu wszystkie liczby nieparzyste mniejsze niż input ( ) i dodaje je.źródło
PHP, 64 bajty
Rozszerzony:
Na każdej iteracji
for
pętli, doda 2 k i sprawdzić czy k 2 jest mniejsza niż$i
, jeśli jest to dodatek k 2 do$a
.źródło
R, 60 bajtów
Robi dokładnie tak, jak opisano w pytaniu, w tym zwraca 0 dla przypadku n = 1. Degolfed, ”;” reprezentuje podział linii w R, zignorowany poniżej:
źródło
Java 8,
12811911711149 bajtówNa podstawie rozwiązania C # @Thomas .
Wyjaśnienie:
Wypróbuj online.
źródło
Python 2, 49 bajtów
To skończyło się na krótszym niż a
lambda
.Wypróbuj online
Moi najkrótsze
lambda
, 53 bajtów :źródło