Dla każdej liczby całkowitej k
, niech d(k)
oznaczają liczbę dzielników k
. Na przykład, d(6)
to 4
, ponieważ 6
ma 4
dzielniki (mianowicie 1
, 2
, 3
, 6
).
Biorąc dodatnia N
, wyświetli „skyline” w sztuce ASCII za pomocą stałego charakteru, tak że wysokość „budynek” znajduje się w pozycji poziomej k
jest d(k)
za k = 1, ..., N
. Zobacz przypadki testowe poniżej.
Zasady
- Można konsekwentnie stosować dowolny znak inny niż biały, niekoniecznie
#
jak pokazano w przypadkach testowych. - Algorytm powinien teoretycznie działać na dowolnie wysoki
N
. W praktyce dopuszczalne jest, jeśli program jest ograniczony czasem, pamięcią, rozmiarem typu danych lub rozmiarem ekranu. - Dopuszczalne są spacje lub znaki nowej linii prowadzące poziomo lub pionowo lub końcowe.
- Dane wejściowe i wyjściowe można przyjmować dowolnymi rozsądnymi środkami .
- Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
- Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
N = 10
:
# # #
# # ###
#########
##########
N = 50
:
#
# #
# # # # # #
# # # # # #
# # # # # # # # # # ## # #
# # # # # # # # # # # ## # #
# # # # ### # ### # ### # ##### ### # ### # #
# # ### # ### # ### ##### # ##### ### # ### ###
#################################################
##################################################
N = 200
:
#
#
# # #
# # # #
# # # # #
# # # # #
# # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # ## # # # # # # # # # # # # # # # # # # ## # ## # #
# # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # ## # # # # # # # # # # # # # # # # # # ## # ## # #
# # # # # # # # # # ## # # # # # # ## # # # # ## # # # # # # # ### # ## # # # # ## # # # # # # ## # # # ## # ### # # # ## # ### ### # # # # ### # ## # #
# # # # # # # # # # # ## # # # # # # ## # # # # ## # ## # # # # # ### # ## # # # # ## # # # # # # ## # # # ## # ### # # # ## # ### ### # # # # ### # ## # #
# # # # ### # ### # ### # ##### ### # ### # ### ##### # ##### ### # ##### ### ##### ####### ### # ### # ### ####### ##### ### ##### # ######### # ##### ##### ### # ### ##### # ######### # ### # #
# # ### # ### # ### ##### # ##### ### # ### ##### ##### # ##### ### # ##### ### ##### ####### ### # ### # ### ############# ### ##### # ######### # ##### ##### ### ##### ##### # ######### # ### # #
#######################################################################################################################################################################################################
########################################################################################################################################################################################################
C,
9995929190 bajtówZobacz, jak to działa tutaj .
źródło
Oktawa,
414032 bajtówDzięki @StewieGriffin zaoszczędzono 8 bajtów.
Wypróbuj online!
Poprzednie odpowiedzi:
Wypróbuj online!
Wypróbuj online!
Wyjaśnienie:
źródło
@(N)" #"(sort(~mod(k=1:N,k')+1))
oszczędza ci kilka bajtów :) Dostajesz jednak kilka wiodących nowych linii, nie jestem pewien, jakie są reguły w tym zakresie.@(N)['',35*sort(~mod(k=1:N,k'))]
.mod(1:N,(1:N).')
akceptowalny w MATLAB?Haskell , 71 bajtów
f
bierzeInt
i zwraca aString
.Wypróbuj online!
m
toN
OP (zmienne Haskell muszą być pisane małymi literami).l=[1..m]
jest używany w opisach zagnieżdżonej listy do iteracji po wszystkich wierszach, kolumnach i potencjalnych dzielnikach. Oznacza to dodatkowe początkowe wiersze wypełnione białymi spacjami.n
jest kolumna (również zaznaczona liczba),i
jest wiersz.['#'|0<-mod n<$>l]
to lista'#'
znaków o długości i liczbie dzielnikówn
.źródło
Oktawa, 61 bajtów
Wyjaśnienie:
Kilka rzeczy, które chciałbym podkreślić
Co dzieje się w pętli (załóżmy, że dane wejściowe
6
)1,2,4
)1,2,3,6
)Wreszcie możemy odwrócić go i konwertuje go na sznurku, zmieniając w sposób dorozumiany
0
do32
:źródło
Python 3 , 111 bajtów
Wypróbuj online!
Daje to kilka wiodących białych znaków pionowych
źródło
APL (Dyalog) , 19 bajtów
Wypróbuj online!
⎕
uzyskaj ocenę wejścia ( N )⍳
1 ... N∘.|⍨
tabela reszty podziału z 1 ... N zarówno jako pionową, jak i poziomą osią0=
gdzie jest równa zero (tzn. dzieli się)+⌿
zsumuj kolumny (tzn. podaje liczbę dzielników dla każdej liczby)'#'⍴¨⍨
użyj każdej liczby, aby zmienić kształt znaku skrótu (daje listę ciągów znaków)↑
mix (lista ciągów w tabeli wierszy)⍉
transponować⊖
odwróć do góry nogamiźródło
Mathematica,
5957 bajtówźródło
50
ze#
i dopisywania&
. Możesz także zapisać niektóre bajty z zapisem infix:X~Table~#&
oraz0~DivisorSigma~Range@#
C #,
333281 bajtówZ podziałami linii:
Chociaż jestem pewien, że jest to również możliwe krócej, mam nadzieję, że wspólnie wypracujemy krótsze rozwiązanie;)
Za pomocą Raznagul uratowałeś 52 bajty
źródło
using
-statement.using System.Linq;using C=System.Console;n=>{var v=new int[n];for(var k=1,i;++k<=n;)for(i=1;i<k;)if(k%i++==0)v[k-1]++;for(var i=0,u;i<v.Length;i++)for(u=v.Max()-v[i];u<v.Max();){C.SetCursorPosition(i, u++);C.Write("#");}};
Kompiluj doAction
, przesuwaj przyrosty i kilka innych drobnych poprawek. Nie testowałem tego, ale powinno działać.Mathematica, 99 bajtów
dla N = 50
źródło
(T=0~DivisorSigma~Range@#;Row[Column/@Table[Join[Table[,Max@T-T[[i]]],$~Table~T[[i]]],{i,1,#}]])&
Węgiel ,
232220 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: zapisane jeden bajt w pętli
k
od0
celui-1
i dodając1
wewnątrz pętlę. Zapisano kolejne dwa bajty, nie zapisując danych wejściowych w zmiennej. Wyjaśnienie:Edycja: Ten 18-bajtowy „jednowierszowy” (link do pełnej wersji kodu) nie działałby z wersją Węgla drzewnego w chwili przesłania pytania: Wypróbuj online!
źródło
05AB1E , 12 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
ζ
zamiast.Bø
? Ponadto postać nie musi być#
ζ
wtedy nie istniało.Python 2 , 101 bajtów
Wypróbuj online!
To tworzy (dużo) wiodących białych znaków. Drukuje w sumie
N
linie, z których większość jest zwykle pusta.źródło
Japt ,
34 33 1614 bajtówZaoszczędź 17 bajtów dzięki produktom @ETH
Wypróbuj online!
źródło
z
na wypełnienie:õ_â lã'#pX÷z w
J , 28 bajtów
Definiuje czasownik monadyczny. Wypróbuj online!
Wyjaśnienie
źródło
PHP, 126 bajtów
Wypróbuj online!
źródło
Brachylog , 34 bajty
Wypróbuj online!
źródło
Alice , 33 bajty
Wypróbuj online!
Dane wejściowe są (niestety) w postaci punktu kodowego . Przynajmniej odczytuje znak UTF-8, więc możesz użyć większych danych wejściowych niż 255, ale nadal są one ograniczone i jest to dość bolesny format wejściowy. W przypadku trzech dodatkowych bajtów możemy odczytać dziesiętną liczbę całkowitą:
Wypróbuj online!
Znakiem innym niż biały znak na wyjściu jest
!
.Zauważ, że rozwiązanie drukuje również masę wiodących białych znaków (zawsze zaczyna się od pustej linii, a następnie drukuje
NxN
siatkę, więc dla większychN
, będzie wiele linii odstępów przed pierwszymi!
s.)Wyjaśnienie
Użyłem już i wyjaśniłem
&w...k
budowę (na przykład tutaj ). Jest to schludny mały idiom, który wyskakuje na liczbę całkowitą n, a następnie uruchamia kawałek kodu n + 1 razy (w związku z tym zwykle służyt&w...k
do uruchamiania pętli n razy, zt
obniżaniem wartości wejściowej). Odbywa się to poprzez pracę ze stosem adresów zwrotnych (RAS).w
wypycha bieżący adres IP do RAS, a jeśli go powtórzymy,&
adres zostanie wypchnięty n razy.k
wyskakuje jeden adres z RAS i wskakuje tam z powrotem. Jeśli RAS jest pusty, nic nie robi i pętla zostaje zakończona.Można zauważyć, że zagnieżdżanie tych pętli nie jest trywialne, ponieważ na końcu wewnętrznej pętli stos nie jest pusty, więc
k
nie staje się brakiem operacji . Zamiast tego IP przeskakuje z powrotem na początek zewnętrznej pętli. Ogólny sposób rozwiązania tego problemu polega na zawinięciu wewnętrznej pętli we własny podprogram. Ale jeśli możemy tak ustawić zagnieżdżoną pętlę, że zewnętrzna pętla kończy się wewnętrzną, możemy faktycznie skorzystać z tego zachowania, a nawet zaoszczędzić na jednymk
!Więc ta konstrukcja:
Jest działającą zagnieżdżoną pętlą, która uruchamia
XYYYXYYYXYYY...
(dla pewnej liczbyY
s w każdej iteracji). To całkiem fajne, że możemy zakończyć obie pętle jednymk
, ponieważ będzie pobierał adres zewnętrzny z RAS za każdym razem, gdy adresy wewnętrzne zostaną wyczerpane.Ten idiom jest używany w programie do uruchamiania pętli nad siatką wyjściową.
źródło
Właściwie 25 bajtów
Wypróbuj online!
Wersja 22-bajtowa z wieloma wiodącymi nowymi liniami
Wypróbuj online!
źródło
R,
8382 bajtów-1 bajt dzięki MickyT
Czyta
N
ze standardowego.Wypróbuj online!
źródło
!=0
może być>0
Pyth , 16 bajtów
Wypróbuj online!
źródło
SpecBAS - 149 bajtów
Tablica śledzi liczbę dzielników, a następnie drukuje odpowiednią liczbę znaków do pozycji ekranu 50.
źródło
PHP, 99 bajtów
drukuje jedną wiodącą przestrzeń; uruchom jako potok z
php -nr '<code>'
lub spróbuj online .awaria
źródło
PowerShell, 101 bajtów
Skrypt testu mniej golfowego:
Wynik:
źródło
SOGL V0.12 , 8 bajtów
Wypróbuj tutaj!
źródło
Wolfram Language (Mathematica) ,
4644 bajtówWypróbuj online! Ale może wypróbuj to online! z ColumnForm zamiast Grid , ponieważ
Grid
nie działa w TIO. W Mathematica wygląda lepiej:Trzecie rozwiązanie Mathematica ...
Divisors@Range@#
znajduje wszystkie dzielniki w żądanym zakresie, a następnie mnożymy0
i odejmujemy" "
, dzięki czemu każdy dzielnik jest równy-" "
.PadLeft
dodaje zera po lewej, tworząc boczną linię horyzontu, której orientację ustalamy za pomocą
=\[Transpose]
. Wreszcie, dodając" "
do wszystkiego sprawia, że wszystkie wpisy albo0
albo" "
.Alternatywnie, 59-bajt
""<>Riffle[PadLeft["X"-" "+0Divisors@Range@#]+" ","\n"]&
wytwarza ciąg znaków.źródło
Dodaj ++ , 58 bajtów
Wypróbuj online!
Jak to działa
g
k
g
k
pobiera listę znaków i łączy je w pojedynczy ciąg.#
źródło