Wiesz - wyglądają tak:
Celem jest narysowanie ilustracji beatów muzycznych w następujący sposób:
= = =
= = = = =
== = == = == = ====
== ==== == === = = =======
======== == ==== = ========= =
=================================
Reguły są następujące:
- Szerokość ilustracji wynosi 33 symbole, ale jeśli potrzebujesz - dozwolone są wszelkie spacje końcowe przekraczające tę szerokość.
- Każda kolumna składa się ze znaków równości (
=
). - Każda kolumna ma losową wysokość (wysokość następnej kolumny nie powinna w żaden sposób zależeć od wysokości poprzedniej kolumny), od 1 do 6. Jest również w porządku, jeśli przynajmniej możliwe jest uzyskanie danych wejściowych bez ścisłego prawdopodobieństwo matematyczne (tzn. niektóre dane wejściowe mogą pojawiać się rzadziej niż inne).
- Kolumna nie może unosić się nad dnem i mieć w niej luki.
- Ponieważ każda kolumna ma minimalną wysokość 1, ostatni rząd również nie może mieć żadnych przerw - zawsze składa się z 33 znaków równości.
- Ponieważ nie można mieć żadnych kolumn o wysokości 6 (w końcu wszystko jest losowe): w tym przypadku nie trzeba mieć górnej linii ze spacjami. Ma zastosowanie do wszystkich przypadków krawędzi tego rodzaju: jeśli nagle twój kod nie podał żadnych kolumn o wysokości większej niż 1, nie musisz mieć dodatkowych linii składających się ze spacji powyżej dolnej linii.
- Nie bierzesz żadnych danych wejściowych .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
)Math.random()
można obliczyć bezpośrednio z jej poprzedniego wywołania, jeśli znane są parametry liniowego generatora kongruencjalnego, co oznacza, że musisz zmodyfikować większość wbudowanych funkcji losowych, aby spełnić te kryteria. Sugeruję, żeby to było lepiej sformułowane.Odpowiedzi:
Pyth , 13 bajtów
I wygram z galaretką .
Wypróbuj online!
źródło
Dyalog APL , 14 bajtów
Wyjaśnienie
33⍴6
33 powtórzenia z 6?
losowa liczba całkowita w zakresie [1, n ] dla każdej z 33 6s'='⍴¨⍨
symbol równości powtarzany za każdym razem tyle razy↑
konwertuj listę list do tabeli wierszy⍉
transponuj wiersze do kolumn, kolumny do wierszy⊖
odwróć do góry nogamiPrzykład działa
Wejście jest wcięte sześć spacji:
źródło
Galaretka, 14 bajtów
Wypróbuj tutaj.
źródło
6ṗ33X
działa również.JavaScript (ES6), 116 bajtów
Sprawdź to w animowanym fragmencie poniżej:
źródło
C, 87 bajtów
Jak zadzwonić
f();
. Ta odpowiedź polega na tym, że sześć kolejnych wywołańtime(0)
zwraca ten sam wynik (w sekundach). Jest to praktycznie zawsze prawda, ale prawdopodobnie warto o tym wspomnieć.źródło
x
iy
unikasz ich deklarowania jakoint
. Ponieważ nie ma danych wejściowych, czy jest to dozwolone? Jeśli tak, to fajny pomysł!f();
Thats nice! Nie wiedziałem, że C może to zrobić.Cheddar,
6865 bajtów (niekonkurencyjny)O_O Cheddar naprawdę ma się dobrze! Wykorzystuje
sprintf
iturn
wykonuje większość pracy.vfuse
jest bezpiecznikiem pionowym, co oznacza, że łączy się z tablicą, ale pionowo. To jest bardzo golfowe, ale także dość szybkie. Wersja jest w wersji wstępnej 1.0.0-beta.10 , która jest późniejsza niż wyzwanie.Wyjaśnienie
Niektóre przykłady działają:
źródło
05AB1E , 22 bajty
Bez automatycznego łączenia, bez automatycznego wypełniania podczas transpozycji, osabie jest skazana na to. Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Python 2, 95 bajtów
źródło
Python 3, 115 bajtów
Python nigdy nie miał nawet szansy ...
Jak to działa
Wypróbuj na Ideone
źródło
MATL,
20191817 bajtów1 bajt zapisany dzięki @Luis
Wypróbuj online
źródło
SpecaBAS - 76 bajtów
Drukuje znak równości na odpowiedniej współrzędnej ekranu.
z plamą koloru i
GOTO
pętlą staje sięźródło
K4, 18 bajtów
Zasadniczo port rozwiązania APL (nic dziwnego).
źródło
C #,
200117 bajtówPrzechodzę do algorytmu @Lynn i oszczędzam 83 bajty!
C # lambda bez danych wejściowych i gdzie wyjściem jest ciąg znaków. Wypróbuj online .
Kod:
źródło
Haskell, 164 bajtów
Będąc językiem czysto funkcjonalnym, Haskell był skazany od samego początku. Zrobiłem to i tak i okazuje się, że niezbędne koszty ogólne nie są tak duże.
Stosowanie:
Wyjaśnienie:
aby móc używać
newStdGen
irandoms
móc korzystać
transpose
definiuje funkcję, która wypisuje spację, jeśli jej pierwszy argument jest większy niż drugi, a w
=
przeciwnym razie. Jest wywoływany zmap (f m) [0..5]
podanym numeremm
i listą[0,1,2,3,4,5]
. (Patrz poniżej)Tworzy nowy standardowy generator liczb losowych
przyjmuje 33 losowe liczby całkowite.
Oblicza
m = n % 6
i mapuje(f m)
listę[0,1,2,3,4,5]
, co daje jeden z nich"======", " =====", ..., " ="
. Linie te są odwzorowane na listę 33 losowych liczb całkowitych, w wyniku czego powstaje tabela. (Tabela w Haskell to lista list)przełącza kolumny i wiersze tabeli
drukuje każdą linię w tabeli
źródło
CJam, 19 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 78 bajtów
Funkcja anonimowa. Nie pobiera danych wejściowych i zwraca ciąg wyjściowy. Znak Unicode to U + F3C7, reprezentujący
\[Transpose]
.źródło
R, 102 bajty
Wyjaśnienie
m=rep(" ",33)
zainicjuj pusty wektor dla nadchodzącej pętlin=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))
Jeśli=
w wierszu powyżej znajduje się znak, upewnij się, że miejsce poniżej również ma znak=
; w przeciwnym razie losowo wybierz. Losowe typy są ważone, aby upewnić się, że a) dolny rząd jest wszystkim=
ib) uzyskasz zgrabny kształt całej rzeczy.cat(n,"\n",sep="")
wypisuje ten wiersz do konsoli z nową linią na końcu i bez spacji między elementami!źródło
PHP,
959289 bajtówWłaściwie całkiem zadowolony z tego. Przez jakiś czas miałem wersję, która teoretycznie mogłaby generować dowolne dane wejściowe, ale w praktyce generowałaby tylko solidne bloki =, ale jest ona zarówno krótsza, jak i równo rozłożona!
Generuje 7 niezdefiniowanych powiadomień o treści za każdym razem, gdy je uruchomisz, ale to jest w porządku.
edycja: cóż, właśnie dowiedziałem się, że join jest aliasem implode, więc to miłe.
źródło
J, 18 bajtów
Bardzo proste rzeczy. Z poprawką z mil!
źródło
>:?33#6
aby uzyskać losowe liczby całkowite z zakresu [1, 6]. Ponadto, kopia w rankingu 0 będzie krótsza przy użyciu'='#~"0
. Powoduje to,|.|:'='#~"0>:?33#6
ale niestety, 2-bajtowe oszczędności zostały ostatecznie złagodzone przez włączenie operatora przyrostu.Perl, 64 bajty
Stosowanie
Perl, 68 bajtów
Alternatywna wersja, która wykorzystuje kody specjalne ANSI do przesuwania kursora, najpierw upuszczając 6 linii, a następnie zapisując oryginalną linię (wszystkie
=
s), przesuwając linię w górę i drukującs/=/rand>.4?$&:$"/ge
wielokrotnie ciąg znaków ( ), aż nie będzie więcej podstawień. Może to zakończyć się pisaniem więcej niż sześciu linii, ale ostatecznie zostanie zastąpione pustą linią.Uwaga: w
\x1b
rzeczywistości są znakami ASCII Esc.źródło
Rubin,
102998483 bajtyNowe i znacznie krótsze podejście, w którym zaczynam od ciągu pełnego nowych linii.
Starsza wersja...
... dał wynik dzięki wiodącej nowej linii. Moje pierwsze zgłoszenie w Rubim, przy użyciu podobnego podejścia do tego z @ Barbarossa, ale w pojedynczej pętli.
Co lubiłem w Ruby podczas pracy nad tym programem:
.times
pętlarand()
co jest dość krótkieNie podobało mi się (głównie pod względem golfowym):
obowiązkowenie tak obowiązkowe w$
dla zmiennych globalnych.times
pętliktóry można zastąpić blokiem jednowierszowymdo
iend
słowa kluczowe0
nie jest fałszemźródło
JavaScript, 179 bajtów
Nadal pracuję nad tym trochę. Lubię to, ponieważ jest to proste.
Stosowanie:
źródło
.map(n=>{return Math.floor(Math.random() * 6)+1})
z.map(n=>Math.floor(Math.random()*6)+1)
. Lambda sąif (n<=m+1){r[m]+="="}else
może byćif(n<=m+1)r[m]+="=" else
Dalej, 190 bajtów
Musiałem stworzyć swój własny PRNG , wzięty stąd Xor-shift . Słowo
f
to słowo, które wywołujesz wiele razy, aby zobaczyć wynik.Wypróbuj online - pamiętaj, że czas systemowy jest jedną z dwóch wartości, na podstawie których serwer (lub coś takiego) uruchamia kod. Poza tym z jakiegoś powodu nie zmieniają się w IDE online. Więc zobaczysz tylko dwa możliwe wyniki. Możesz ręcznie ustawić ziarno, zmieniając
utime
na liczbę całkowitą.Bez golfa
Ungolfed online
źródło
JavaScript, 165 bajtów
Nowe linie są niepotrzebne, ale ułatwiają sprawdzenie, co się dzieje. Nie jest to najbardziej optymalne rozwiązanie, ale przynajmniej ma dla mnie sens.
źródło