Należy napisać program lub funkcję, która podawany był N
przez N
równo rozmieszczone kwadratowy siatki i stały wyjść wpisanego koła lub zwraca liczbę kwadratów siatki, które pokrywały się częściowo lub całkowicie przez stałego kręgu.
Zakładki wielkości 0 (tj. Gdy okrąg dotyka tylko linii) nie są liczone. (Te nakładki występują np N = 10
.)
Przykład
N = 8 (64 squares), Slices = 60
Wejście
- Liczba całkowita
N > 0
. (Siatka będzie miałaN * N
kwadraty).
Wynik
- Liczba całkowita, liczba ciągłych wycinków koła.
Przykłady
(pary wejścia-wyjścia)
Inputs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Outputs: 1 4 9 16 25 36 45 60 77 88 109 132 149 172 201
To jest golf golfowy, więc wygrywa najkrótszy wpis.
N^2
.Odpowiedzi:
Pyth,
2726Wypróbuj online: Pyth Compiler / Executor
Używam
2Nx2N
siatki i liczę zachodzące na siebie2x2
kwadraty. To jest trochę krótsze, ponieważ już znam promieńN
.I właściwie nie liczę nakładających się kwadratów. Liczę nie nakładające się kwadraty drugiego kwadrantu, mnożę liczbę przez 4 i odejmuję wynik
N*N
.Wyjaśnienie 27 rozwiązania:
Objaśnienie 26 rozwiązania:
Zauważyłem, że używam współrzędnych tylko raz i natychmiast odejmuję współrzędne
Q
. Dlaczego nie wygenerować wartościQ - coords
bezpośrednio?To się dzieje w
%2_UtQ
. Tylko jeden znak większy niż w poprzednim rozwiązaniu i oszczędza 2 znaki, ponieważ nie muszę odejmować-Q
.źródło
Python 2, 72
Nie golfowany:
Punkty siatki dla
(n+1)*(n+1)
kwadratu. Komórka nakłada się na okrąg, jeśli jej punkt siatki najbliżej środka znajduje się wewnątrz koła. Możemy więc liczyć punkty siatki, z wyjątkiem tego, że brakuje2*n+1
punktów siatki w osiach (zarówno dla parzystych, jak i nieparzystychn
), więc korygujemy to ręcznie.Kod zapisuje znaki, używając złożonych odległości do obliczenia odległości od środka, a pętla zwinięta w celu iteracji po jednym indeksie.
źródło
CJam,
36 35 3427 bajtówOkazało się, że jest to ten sam algorytm co xnor, ale zastanawiam się, czy jest jakiś lepszy.
Objaśnienie kodu :
AKTUALIZACJA : Używanie sztuczki 2N od Jakube wraz z kilkoma innymi technikami, aby zaoszczędzić 7 bajtów!
Wypróbuj online tutaj
źródło
Pyth
4436Próbuję go trochę wyczyścić, na wypadek, gdybym mógł ogolić kilka bajtów.
Wyjaśnienie
Muszę wyraźnie sprawdzić
n = 1
, ponieważ mój algorytm sprawdza tylko narożnik kwadratu najbliższego centrum (i żaden nie jest objętyn = 1
).źródło
Oktawa
(74) (66)(64)Oto wersja oktawowa. Zasadniczo znajdowanie wszystkich wierzchołków w okręgu, a następnie znajdowanie wszystkich kwadratów z jednym lub więcej prawidłowymi wierzchołkami za pomocą splotu. 64 bajty:
66 bajtów:
74 bajty:
źródło
R - 64
źródło