Brakuje Ci gotówki, więc postanowiłeś zbudować pączki dla The Donut Shop ™, największej na świecie cyfrowej firmy oferującej pączki, głównie dlatego, że sprzedają pączki każdej wielkości, jakie można sobie wyobrazić.
Teraz, biorąc pod uwagę, że obecnie standardy handlu są bardzo trudne, musisz napisać jak najkrótszy kawałek kodu, aby utworzyć te pączki, aby kod źródłowy, który je utworzył, mógł zostać umieszczony na zewnątrz pakietu.
Wyzwanie
Biorąc pod uwagę 4 dane wejściowe, promień pierścienia zewnętrznego, promień pierścienia wewnętrznego, możliwe posypki i szansę, że komórka będzie miała posypkę, wyjmij pączka pokrytego w tych posypkach, które mają prawidłowe promienie wewnętrzne i zewnętrzne.
- Dane wejściowe można pobierać według własnego uznania (argumenty funkcji, standardowe, argumenty programu) i w dowolnej kolejności.
- Kropienia będą podawane w postaci 1 znaku na każdy rodzaj kropienia
^+*-
jako wejście posypać byłaby lista 4 posypki,^
,+
,*
,-
- Szansa posypać zostaną wprowadzone jako wartości zmiennoprzecinkowej pomiędzy 0 a 1. np:
0.1
,0.23
- Musisz wydrukować dane wyjściowe na standardowe lub równoważne.
- Krople nie mogą znajdować się na krawędziach pączka.
- Każdy rodzaj posypki musi mieć jednakową szansę znalezienia się w każdej komórce.
- Promienie podano w jednostkach jednokomórkowych.
- Jeśli promień wewnętrzny jest równy 0 LUB promień zewnętrzny, mówi się, że pączek nie ma pierścienia.
- Oba promienie będą liczbami całkowitymi nieujemnymi.
- Wewnętrzne i zewnętrzne krawędzie pączka muszą być reprezentowane za pomocą skrótów (
#
) Test sprawdzający, czy punkt znajduje się na okręgu, biorąc pod uwagę promień, a środkiem koła jest:
(x-center)**2+(y-center)**2 < radius**2
Przykładowe wejście z wyjściem
(promień zewnętrzny, promień wewnętrzny, kropi, szansa na kropienie)
10, 4, „^ + * -”, 0,1
######### # # ## ++ * *## # # # ^^ - * # # ##### ^ # #+ # # # # # #- # # # # * # # # #+ # # # # # #^ +# # # # # # # # * ##### # # + - # # ^ # ## ^ + ## # ^ # #########
5, 2, „: ^ + *”, 0,9
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
To jest kod golfowy, wygrywa najkrótsza odpowiedź w bajtach
10, 4
i5, 2
są zupełnie inne. Zamierzałem zostawić komentarz do odpowiedzi, ale zdałem sobie sprawę, że tak naprawdę nie rozumiałem, jak powinien wyglądać wynik dla dowolnych wymiarów oprócz tych z przykładów. Jeśli chcesz zmienić swój pierwotny pomysł, dopasowując go do odpowiedzi z odpowiedzi, to zależy od ciebie, ale wyzwanie powinno jasno określać, jak narysować granice w obu kierunkach.Odpowiedzi:
MATLAB, 231 bajtów
Oto rozwiązanie Matlab:
Kilka przykładów:
źródło
Python, 263 bajty
Widziałem więc wyzwanie bez odpowiedzi, które wydawało się stosunkowo łatwe, ale również interesujące i pomyślałem sobie:
Hmm ... Jeśli tylko ja mam odpowiedź, będę wygrywać, dopóki nie pojawi się lepsza odpowiedź.
Usiadłem więc z Pythonem przez kilka minut i opracowałem wstępny szkic, który przy pomocy sugestii społeczności zmieniłem, aby zmniejszyć jego rozmiar.
W powyższych przykładach tworzy to
i
Bardzo wątpię, aby było to najkrótsze możliwe rozwiązanie, ale myślę, że całkiem dobrze się spisało w przypadku samouka nastolatka, który chciał zabić czas. Ponieważ został on zaprojektowany tak, aby był jak najmniejszy, nie dołączałem komentarzy i wprowadziłem skróty do każdej nazwy zmiennej, i jako taki, ten program jest bardziej przydatny niż czytelny.
Jeśli chcesz użyć tego kodu z jakiegoś nieznanego mi powodu, po prostu uruchom go w IDLE i wpisz polecenie
w formacie opisanym powyżej.
źródło
abs
wywołanie, ponieważ promienie są zagwarantowane jako nieujemne. Polecam również sprawdzenie Porady dotyczące gry w golfa w Pythonie, aby uzyskać dodatkowe wskazówki. Znowu witamy!N=False if I==0 or I>=O else True
może byćnot (I==0 or I>=O)
i funkcja C może być lambda. Ale to naprawdę dobry pierwszy wpis!P
więcej niż raz, więc nie ma sensu zapisywać*100
zmiennej.