Wprowadzenie
W matematyce liczba wieloboczna to liczba reprezentowana jako kropki lub otoczaki ułożone w kształt regularnego wielokąta. Kropki są uważane za alf (jednostki). Są to jeden typ dwuwymiarowych liczb figuratywnych.
Na przykład liczba 10 może być ułożona w trójkąt:
* ** *** ****
Ale 10 nie może być ułożone w kwadrat. Z drugiej strony liczba 9 może być:
*** *** ***
Niektóre liczby, na przykład 36, można ułożyć zarówno jako kwadrat, jak i trójkąt:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
Zgodnie z konwencją 1 jest pierwszą liczbą wielokątną dla dowolnej liczby stron. Zasadą powiększania wielokąta do następnego rozmiaru jest przedłużenie dwóch sąsiadujących ramion o jeden punkt, a następnie dodanie wymaganych dodatkowych boków między tymi punktami. Na poniższych schematach każda dodatkowa warstwa jest pokazana na czerwono.
Numery trójkątne:
Numery kwadratowe:
Wieloboki o większej liczbie boków, takie jak pięciokąty i sześciokąty, mogą być również budowane zgodnie z tą zasadą, chociaż kropki nie będą już tworzyć idealnie regularnej siatki, jak powyżej.
Liczby pięciokątne:
Liczby sześciokątne:
Źródło: Wikipedia
Twoje zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą N (1 <= N <= 1000), wydrukuj każdy typ liczby wielobocznej N, zaczynając od liczb trójkątnych, aż do liczb icosagonalnych (20-gonowych).
Na przykład liczba 10 jest liczbą trójkątną i liczbą dziesiętną, więc wynik powinien być podobny (możesz wybrać własny format wyjściowy, ale powinien on wyglądać mniej więcej tak):
3 10
Przypadki testowe
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Dla odniesienia, n
-ty k
-numeryczny to:
Źródło: xnor
Pamiętaj, to jest kodowanie w golfa , więc wygrywa kod z najmniejszą liczbą bajtów.
źródło
n
th k-gonal liczba to(k-2)*n*(n-1)/2 + n
.Odpowiedzi:
Python 3, 68 bajtów
Dla każdego potencjalnego liczbie boków
s+2
rozwiązuje kwadratowego wzoruR=s*n*(n-1)/2 + n
on
, czy wynik jest liczbą całkowitą.Porównaj (73 bajty):
Alternatywne podejście do rozwiązywania
s
daje 62 bajty w Pythonie 3, ale kończy się niepowodzeniemR=1
.źródło
JavaScript (ES6), 90 bajtów
Rozwiązuje równanie kwadratowe. 73 bajty w nowych, wystarczających wersjach Firefoksa:
źródło
> <>, 62 + 3 = 65 bajtów
Oczekuje wejścia na górze stosu, więc +3 bajty dla
-v
flagi.To jest mój pierwszy program w> <>, więc może brakuje mi oczywistych sztuczek, aby skrócić kod.
Wyjaśnienie:
Inicjalizacja
Przenosi N do rejestru, wypycha licznik do stosu (rozpoczynając od
1
, co odpowiada liczbom trójkątnym), i rozpoczyna sekwencję od wartości0
i1
.Główna pętla
Porównuje górę stosu z rejestrem. Jeśli jest równy, przejdź do procedury drukowania. Jeśli jest większy, przejdź do procedury resetowania. W przeciwnym razie weź różnicę między dwoma górnymi elementami stosu, dodaj licznik i dodaj do poprzedniego elementu najwyższego stosu. Oblicza to następną liczbę wielokątną.
Wydrukować
Drukuje licznik + 2, następnie znak nowej linii, a następnie przechodzi do procedury resetowania.
Resetowanie
Usuwa dwa górne elementy stosu i zwiększa licznik. Kończy program, jeśli licznik jest większy niż 18, w przeciwnym razie wypycha numery początkowe
0
i1
stos i wraca do głównej pętli.źródło
Galaretka , 22 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Axiom 203 bajty
tutaj jest mniej golfa i rutyny, które pokazują liczby
źródło
AWK , 67 bajtów
Wypróbuj online!
Próbowałem rozwiązać równanie kwadratowe, ale sprawdzanie każdej wartości, aby sprawdzić, czy działa, jest krótsze (i mniej podatne na błędy)
źródło
R,
6866 bajtówCzyta
N
ze standardowego. Oblicza pierwszeN
k-gonalne liczby i uzyskuje miejsce, wk
którym są one równeN
, za pomocą wzoru xnor; jednak zapisuje bajty w nawiasach, używając1:18
zamiast3:20
i dodając2
na końcu.expand.grid
domyślnie nazywa kolumnyVar1
,Var2
..., jeśli nie podano nazwy.$
indeksuje przez częściowe dopasowanie, więcm$V
odpowiadam$Var2,
drugiej kolumnie.stara wersja:
Wypróbuj online!
źródło
Pari / GP , 34 bajty
Pari / GP ma wbudowane narzędzie do testowania, czy liczba jest liczbą wieloboczną.
Wypróbuj online!
źródło
Galaretka , 20 bajtów
Właśnie zacząłem pisać skuteczny duplikat tego wyzwania (aczkolwiek obejmujący wszystkie k> 1 nie tylko [1,20]) ... więc zamiast tego odpowiem!
Pełny program drukujący wyniki galaretki na liście wyników *
Wypróbuj online!
* Brak wyników niczego nie drukuje;
pojedynczy wynik drukuje tylko tę liczbę;
wiele wyników drukuje
[]
zamkniętą,,
oddzielną listę liczbW jaki sposób?
źródło