Wprowadzenie:
Myślę, że wszyscy wiedzą, co to jest lampa lawowa, ale w przypadku, gdy nie:
Są to w zasadzie szklane rurki, które zawierają wosk w półprzezroczystej cieczy. Dolna część jest podgrzewana po włączeniu lampy, co powoduje zmianę gęstości, a wosk unosi się na górze. Kiedy ostygnie, ponownie spada, powodując efekt, który widzimy powyżej.
Zazwyczaj podstawa lampy potrzebuje około 45-60 minut, aby temperatura wzrosła wystarczająco wysoko, aby zmienić stały wosk na ciekły wosk (jeśli lampa znajduje się w obszarze o temperaturze pokojowej).
Wyzwanie:
Biorąc pod uwagę dodatnią liczbę całkowitą n
wskazującą liczbę minut, które upłynęły od włączenia lampy Lava, generuj losowy stan lampy Lava na podstawie liczb całkowitych na pięciu poziomach.
W tym wyzwaniu powiemy, że lampa Lava zawiera łącznie 1000 jednostek wosku i mamy pięć poziomów, na których może znajdować się wosk.
1) Jeśli n
jest poniżej 45, lampa lawowa nadal się nagrzewa, więc na wyjściu będą cztery puste linie z 1000
dolnym:
1000
2) Jeśli n
znajduje się w tym zakresie, [45, 60)
lampa lawy wzrosła do temperatury wystarczającej do poruszania się wosku, ale jeszcze nie jest bardzo wysoka. Wosk może osiągnąć poziom trzeci włącznie.
3) Jeśli n
jest 60
wyższy lub wyższy, wosk może znajdować się na dowolnym z pięciu poziomów.
Więc biorąc pod uwagę dodatnią liczbę całkowitą n
jako dane wejściowe, wyprowadzimy stan losowy z uwzględnieniem trzech powyższych reguł.
Oto kilka przykładowych wyników:
Możliwe wyniki dla każdego, n
który jest >= 45
:
523
106
371
913
87
Możliwe wyniki dla każdego, n
który jest >= 60
:
73
113
312
5
497
284
55
637
24
Stałe wyjście dla n
tego jest <= 44
(i możliwe wyjście dla dowolnego n
):
1000
Zasady konkursu:
- Mogą być puste linie, nawet jeśli poziom nad nim nie jest pusty.
- Po prostu
0
nie jest dozwolone na żadnej linii. Zamiast tego powinien być pusty. - Dane wyjściowe są dość elastyczne. Możesz wyprowadzać listę / tablicę ciągów / obiektów zamiast wyniku rozdzielanego znakiem nowej linii, jak wyżej. Powód, dla którego mówię, że łańcuchy / obiekty wynika z powyższej reguły. Pusta linia powinna być
""
,null
,[]
, itd., Ale nie może być0
lub liczba całkowita ujemna (ani nie może byćfalse
) (Ie["", "", 913, "", 87]
dlan >= 45
). Możesz także odwrócić dane wyjściowe (tj.1000\n\n\n\n
Zamiast\n\n\n\n1000
lub[87, null, 913, null, null]
zamiast[null, null, 913, null, 87]
). - Wszystkie liczby powinny być liczbami całkowitymi. Mogą być ułamkami
0
dziesiętnymi o wartości dziesiętnej, ale żadna z liczb nie powinna zawierać cyfr dziesiętnych, a liczby całkowite powinny zawsze sumować dokładnie1000
. - Wszystkie możliwe losowe wyjścia oparte na
n
powinny mieć niezerową szansę wystąpienia. - Końcowy nowy wiersz (więc jest sześć wierszy wyniku) jest dozwolony.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
0
liczby ujemnej lubfalse
.n < 60
?n < 45
tylko 1 poziom jest wypełniony (górny lub dolny w zależności od kolejności, w jakiej go wypisujesz), czyli1000
. Z45 <= n < 60
trzema z pięciu i zen >= 60
wszystkimi pięcioma. Ale wynik zawsze będzie zawierał pięć „linii”.Odpowiedzi:
MathGolf ,
2120 bajtówWypróbuj online!
To jest moja pierwsza odpowiedź w moim nowym języku. Oparłem swoje rozwiązanie na rozwiązaniu Emigna 05AB1E, ale wykorzystałem kilka ciekawych funkcji MathGolf, aby nieco go skrócić.
Wyjaśnienie
źródło
Python 2 ,
117113108107106105 bajtówWypróbuj online!
Zwraca listę odwróconą (najpierw na dole)
Wersja inspirowana odpowiedzią stackoverflow w komentarzach (bardziej prawdopodobne są edgecases):
Python 2 , 129 bajtów
Wypróbuj online!
źródło
333
lub200
na 3 lub 5 części odpowiednio. Nie widzę żadnych skoków / wartości odstających w kierunku0
lub1000
. Czy są szanse dla tych po prostu astronomicznie małych (ale wciąż niezerowych) w porównaniu do liczb całkowitych bliskich333
i200
?0
lub0-2
lub0-4
) i liczona. Szanse na to, że nikt nie wejdzie w któreś z nich, są bardzo małe.JavaScript (ES6), 78 bajtów
Zwraca odwróconą tablicę, w której puste poziomy są wypełnione spacją.
Wypróbuj online!
Skomentował
źródło
R ,
8584 bajtów-1 bajt dzięki @Giuseppe
Wypróbuj online!
Objaśnienie (bez golfa):
źródło
NA
jest dozwolony jako pusty wiersz / element, oto rozwiązanie 77-bajtowe ( Wypróbuj online! ) Lub rozwiązanie 80-bajtowe ( Wypróbuj online! ), Jeśli nazwy elementów stanowią problemC (gcc) ,
131,116,90,89, 87 bajtówWypróbuj online!
Aktualizacja : Naprawiono błąd w oryginale. Włączono funkcję pomocniczą, zmniejszając dodatkowe 15 bajtów.
Aktualizacja 2 : -25 bajtów dzięki ErikF.
Aktualizacja 3 : -1 bajtów dzięki pułapkowi cat.
Degolf
źródło
puts()
, łącząc drukowanie w jedenprintf()
i umieszczając odejmowanie na końcu pętli. Ponadto myślę, że możeszsrand()
zainicjować dzwoniącego. Wypróbuj online!05AB1E ,
272625 bajtówOszczędność bajtu dzięki Adnanowi .
Zaoszczędził kolejny bajt dzięki Kevin Cruijssen .
Wypróbuj online!
Wyjaśnienie
źródło
5Å0
iǝ
, iε0Û
na końcu. Próbowałem wymyślić coś krótszego, ale nie jestem w stanie. Mam wrażenie, że można w jakiś sposób grać w golfa, ale obecnie go nie widzę (być może nie jest to możliwe i jest to tylko przypadkowe uczucie).•A–•60в
jest o 1 bajt dłuższy niż44 59‚
zamiast krótszy. Iε0Û
zastąpić0
sz pustych strun również wydaje się być jak najkrótszy, gdyż0K
po prostu usuwa 0-przedmioty i całkowicie0м
usuwa cyfrę0
we wszystkich liczb.44 59‚
, ale nie mogę go znaleźć (•H|•2ô
to ta sama liczba). Moje poprzednie rozwiązanie (również 27 bajtów), stosowane45
i60
które są łatwiejsze do wytworzenia w różny sposób, ale myślę, że był nieważny wyjściowych 1 , 3 lub 5 poziomów w zależności od wejścia nie zawsze 5 .•H|•2ô
to rzeczywiście sprytny sposób, nie myślałem o tym. I rzeczywiście powinien generować 5 linii. Rzeczywiście widziałem twoją poprzednią odpowiedź i miałem zamiar skomentować, że wypisała tylko 1 linięn < 45
, ale potem ją usunąłeś. Cieszę się, że znalazłeś kolejne 27-bajtowe rozwiązanie. :)ŽH|2ô
tego szukasz?JavaScript (Node.js) ,
8786 bajtówWypróbuj online!
83-bajtowe rozwiązanie (
(n/15-2|0)*s<4
) jest zarezerwowane jako pierwsze, ponieważ muszę sprawdzić, czy jest większyn
.AKTUALIZACJA: Tak,
(n/15-2|0)*s<4
nie działało, ponieważ dla większych,n
ponieważn
wystarczająco duży sprawia, że suma nie osiąga 1000.źródło
PHP, 92 bajty
Uruchom jako potok z
-R
lub spróbuj online .źródło
Czysty , 215 bajtów
Wypróbuj online!
Więc mam w końcu znalazł krótszą drogę, aby uzyskać losowych niż importu
System._Unsafe
,System.Time
a za pomocątoInt(accUnsafe time)
...I chłopiec jest to naprawdę w duchu codegolf - Osadzanie wezwanie do C, ignorując typ państwa światowego zwykle używane w celu zapewnienia oceny porządek takich rzeczy.
źródło
Java (JDK 10) ,
121117113111 bajtówWypróbuj online!
Jest tendencyjny do nakładania większej ilości wosku u góry, ale teoretycznie możliwe jest pojawienie się dowolnego prawnego układu wosku.
edycja: 4 bajty zostały zapisane przez @KevinCruijssen
W czytelnej dla ludzi Javie:
źródło
Math.random()*(w+1)
może byćMath.random()*-~w
dla -2 bajtów. Tutaj odpowiednia wskazówka jako odniesienie dlaczego. . Niezła odpowiedź! +1 ode mnie EDYCJA: Właściwie, można zapisać jeszcze 2 bajty, używającj
zmiennej tymczasowej jako zmiennejw+1
(ponieważ i tak zostanie ona nadpisana zaraz po wydruku) i użyj jejj*=Math.random()
zamiast tego, abyś nie potrzebował rzutowania na(int)
( 117 bajtów ).&i>2
warunek nie jest koniecznyPowerShell ,
188162 bajtówWypróbuj online!
-2 bajty @Kevin Cruijssen
-4 bajty przez usunięcie opcjonalnego komendy Get- czasownik
-20 bajtów poprzez zwarcie pętli i usunięcie spacji
źródło
else{if($t-ne 1e3){Get-Random(1000-$t)}}
sięelseif($t-ne 1e3){Get-Random(1000-$t)}
? Widzę, że użyłeśelseif
wcześniej kodu, więc powinno to zaoszczędzić 2 bajty. A może może Wskazówki dotyczące gry w golfa w PowerShell lub Wskazówki dotyczące gry w golfa w <wszystkich językach> mogą dać trochę inspiracji na więcej? Miłego pobytu! :)Pascal (FPC) ,
192190 bajtówWypróbuj online!
Zastosowanie metody pakowania do pojemników firmy TFeld . Drukuje najpierw dolny wiersz ze znakiem nowej linii.
Wygląda na to, że FPC nie ma problemów
random(0)
, więc dodałem tam niezwykłe elementy.Moje oryginalne zgłoszenie, golfem do 209 bajtów:
Wypróbuj online!
źródło
Węgiel drzewny , 37 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla dwa razy, dwa razy. Alternatywnie mógłbym podzielić liczbę całkowitą indeksu pętli przez 2 dla tej samej liczby bajtów.
Jeśli indeks zewnętrzny plus piętnasta temperatura jest większa niż trzy ...
... następnie przesuń losową liczbę całkowitą do 1000 włącznie - jak do tej pory. Niestety węgiel drzewny nie może obliczyć sumy pustej listy, więc zamiast tego muszę zastąpić pusty ciąg.
Wciśnij pozostałą kwotę do listy.
Konwertuj listę na ciąg znaków, ale użyj pustego ciągu zamiast zera.
źródło
Galaretka , 28 bajtów
Pełny program drukujący wynik (do góry nogami, jak to było dozwolone).
Wypróbuj online! - zmieniono to na użycien > 59 Lista 1015 5-krotek jest budowany, a następnie filtrowany, z którego można wybrać)
7
zamiastȷ
(1000), ponieważ implementacja jest powolna pod względem golfowym! (...dlaW jaki sposób?
źródło
1000\n\n\n\n
Zamiast\n\n\n\n1000
lub[87, null, 913, null, null]
zamiast[null, null, 913, null, 87]
). ” Tak, możesz używać wersji 28-bajtowej bezṚ
.Gałązka , 126 bajtów
To było naprawdę zabawne wyzwanie!
Ten kod tworzy makro, które należy zaimportować.
Aby go zaimportować, wykonaj następujące czynności:
To powinno załatwić sprawę.
Możesz to wypróbować na https://twigfiddle.com/t4dfgy
Uwaga : Z powodu usuwania białych znaków na stronie byłem zmuszony dodać
-
na końcu wiersza, aby udowodnić, że wyświetla on prawidłową liczbę wierszy.Podczas zwykłej instalacji po prostu zobaczysz nowe wiersze bez problemów.
źródło
Perl 6 , 62 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera ciąg znaków i zwraca listę liczb całkowitych z
Nil
lub pustą listą ([]
) zamiast0
s.Wyjaśnienie:
źródło
PHP ,
113108999793 bajtyWypróbuj online!
-11 bajtów dzięki @titus
-9 bajtów, ponieważ wszystko jest ciągiem
źródło
J ,
565554484340 bajtówWypróbuj online!
-3 bajty dzięki FrownyFrog
Kolejna miła pod względem koncepcyjnym metoda, która jest nieco dłuższa, ale gwarantuje idealnie równomierny rozkład we wszystkich możliwościach, według metody tutaj :
J , 53 bajty
Wypróbuj online!
źródło
$!.a:
tak{.
?PowerShell ,
11510598 bajtów-17 bajtów dzięki mazzy
Wypróbuj online!
Gra w uroczą odpowiedź Edwina . Jeśli ci się to podoba, oceń go.
źródło
Rubin ,
6255 bajtówWypróbuj online!
Testy są ograniczone do 0-99 stopni, ponieważ lampy lawowe mogą być niebezpieczne w wyższych temperaturach:
źródło
0
dla pustych linii. Puste wiersze w tablicy może być wszystko z wyjątkiem0
,false
lub liczbą ujemną. Więc to może byćnull
,""
,[]
, itd., Ale nie0
. Nie jestem pewien, czy Ruby ma tablice / listy obiektów, więc możesz przekształcić je0
w coś innego, ale jeśli nie, będziesz musiał je wydrukować zamiast zwracać tablicę / listę.