Opis wyzwania
Musisz pokazać symulację deszczu w terminalu.
W podanym poniżej przykładzie jego losowe dodanie 100 kropel deszczu (użyj domyślnej funkcji losowej, którą oferuje Twój język) współrzędnych, odczekaj 0,2 sekundy, a następnie przerysuj ponownie, aż upłynie określony czas. Każda postać może być używana do reprezentowania kropli deszczu.
Parametry
- Czas oczekiwania między przerysowaniem w sekundach.
- Czas, przez który będzie widoczny deszcz. To tylko liczba całkowita reprezentująca liczbę iteracji. [Czas netto, przez który będzie widoczny deszcz, to liczba całkowita pomnożona przez czas oczekiwania]
- Komunikat wyświetlany po zakończeniu deszczu. (To musi być wyśrodkowane)
- Liczba kropel deszczu wyświetlanych na ekranie.
Zasady
- Jeden bajt powinien być używany do reprezentowania kropli deszczu i może to być wszystko, nawet koty i psy.
- Nie musi reagować na wielkość terminala, co oznacza, że nie musisz obsługiwać błędu dla różnych rozmiarów terminali. Możesz samodzielnie określić szerokość i wysokość terminala.
- Obowiązują standardowe zasady gry w golfa.
Próbka i wyjście kodu
To jest wersja bez golfisty napisana w Pythonie 2.7 przy użyciu ncurses.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Wyjście -
Odpowiedzi:
MATL , 52 bajty
Dane wejściowe są w następującej kolejności: przerwa między aktualizacjami, liczba zrzutów, komunikat, liczba powtórzeń. Monitor ma rozmiar 80 × 25 znaków (na stałe).
GIF lub tak się nie stało! (Przykład z wejściami
0.2
,100
,'THE END'
,30
)Lub spróbuj w MATL Online .
Wyjaśnienie
źródło
why
:)JavaScript (ES6),
268261 bajtówPrzynajmniej w mojej przeglądarce dane wyjściowe są zaprojektowane tak, aby pasowały do obszaru fragmentu stosu bez konieczności przechodzenia do „Pełnej strony”, więc jeśli poprosisz o więcej niż 702 kropli deszczu, nastąpi awaria.
Edycja: Zapisano 7 bajtów, używając węzła tekstowego jako mojego obszaru wyjściowego.
źródło
setInterval
. Ponadto, dlaczego używasztextContent
zamiastinnerHTML
?R
196 192185 bajtówTylko próbna wersja, którą napisałem na podstawie opisu. Mam nadzieję, że nieco tego szukał OP.
Zapisano kilka bajtów dzięki @plannapus.
Argumenty:
w
: Czas oczekiwania między ramkamit
: Całkowita liczba ramekm
: Niestandardowy komunikatn
: Liczba kropel deszczuPrzykład
Dlaczego wygląda na to, że pada w górę?
Edycja: Powinienem wspomnieć, że jest to moja niestandardowa konsola R-studio 23x100 znaków. Wymiary są zakodowane na stałe w funkcji, ale można w zasadzie użyć,
getOption("width")
aby uczynić ją elastyczną w stosunku do wielkości konsoli.Nie golfił i wyjaśnił
źródło
rep()
automatycznie wyrzucatimes
argument na argument, więc też nie ma takiej potrzeby. Zapisano kolejne 7 bajtów!runif
zamiastsample
losowo zapełniać macierz. Tak jak:f=function(w,t,m,n,x,y){for(i in 1:t){r=matrix(" ",x,y);r[runif(n)*x*y]="/";cat("\f",rbind(r,"\n"),sep="");Sys.sleep(w)};cat("\f",g<-rep("\n",y/2),rep(" ",(x-nchar(m))/2),m,g,sep="")}
C 160 bajtów
Wersja bez golfa:
źródło
R, 163 znaki
Z wcięciami i znakami nowej linii:
Jest dostosowany do rozmiaru terminala 24 linii na 80 kolumn.
w
to czas oczekiwania,t
liczba ramek,n
liczba kropel deszczu im
końcowa wiadomość.Różni się on od @ odpowiedź billywob jest w innym użycia
sample
: jeśli wielkość wyjściowa jest pominięty,sample
daje permutacji wektora wejściowego (tutaj wektor zawierający wymaganą liczbę kropel oraz odpowiadająca jej liczba miejsc, dzięki temu, że argumenttimes
z funkcjarep
jest wektoryzowana). Ponieważ rozmiar wektora odpowiada dokładnie rozmiarowi ekranu, nie ma potrzeby dodawania nowych linii ani wymuszania kształtu w matrycy.źródło
NodeJS:
691158148 bajtówEdytować
Zgodnie z życzeniem usunięto dodatkowe funkcje i wprowadzono grę w golfa.
Reguły określają ignorowanie wielkości, ale ta wersja zawiera usterkę dla kilku pierwszych ramek. Ma 129 bajtów.
Poprzednia odpowiedź
Być może nie najlepsza gra w golfa, ale trochę mnie poniosło. Ma opcjonalny kierunek wiatru i współczynnik deszczu.
node rain.js 0 0.3
Zobacz, jak działa webm tutaj
źródło
Noodel , niekonkurencyjne 44 bajty
Miałem centralny tekst na mojej liście rzeczy do zrobienia, odkąd stworzyłem ten język ... Ale byłem leniwy i nie dodałem go po tym wyzwaniu. Tutaj nie konkuruję, ale dobrze się bawię z tym wyzwaniem :)
Rozmiar konsoli jest zakodowany na stałe na 25 x 50, co nie wygląda dobrze w edytorze online, ale działa w przypadku fragmentu kodu.
Spróbuj:)
Jak to działa
źródło
Ruby + GNU Core Utils, 169 bajtów
Parametry funkcji to czas oczekiwania, liczba iteracji, komunikat i liczba kropel deszczu w tej kolejności. Nowe linie dla czytelności.
Potrzebne były podstawowe narzędzia
tput
iclear
.źródło
Python 2.7,
254251 bajtówTo moja własna próba bez użycia ncurses.
Dziękuję @ErikTheOutgolfer za poprawienie i zapisanie mi bajtów.
źródło
for
pętli w jednej linii (tak jak masz w40)];for i in u(
).'[2J'
Myślę, że potrzebujesz również znaku ESC . Ponadto było w nim dodatkowe miejsceu(n): r[y
. Nie wiem jednak, jak policzyłeś 249. Wszystkie znalezione przeze mnie problemy zostały naprawione tutaj .<esc>
zagrać w golfa jeszcze bardziej :) Ale musisz dodać notatkę poniżej swojego kodu, określającą dosłowny bajt 0x1B ESC. Liczba bajtów to 242 , a nie 246.SmileBASIC, 114 bajtów
Rozmiar konsoli wynosi zawsze 50 * 30.
źródło
Perl 5, 156 bajtów
Kod 154 bajtów + 2 dla
-pl
.Używa stałego rozmiaru 160 x 50.
Zobacz online!
Perl 5, 203 bajtów
Kod 201 bajtów + 2 dla
-pl
.Wykorzystuje się
tput
do określenia rozmiaru terminala.źródło