Narysuj program lub funkcję, która zapisze STDOUT
n
czasy (każdy dla jednego kroku) ciąg znaków zawierający kropkę .
w miejscu chodzika. Program musi także zapisywać linię co s
sekundę (lub odczekać s
sekundy po każdej linii).
Losowy spacer jest matematyczną formalizacją ścieżki, która składa się z szeregu losowych kroków ( wiki ), tak że każdy nowy krok będzie ostatnim krokiem plus nową wartość, więc każda t
wartość kroku jest tylko sumą wszystkich losowych wartości przed ir plus wartość początkowa.
Program powinien przyjmować 2 dane wejściowe i będzie używać tylko spacji " "
i kropek "."
na wyjściu. Wartość początkowa Walkera będzie 20
taka, że wynik powinien być kropką po 19 spacjach.
. #19 spaces then a dot
Przy każdym kolejnym kroku wartość będzie ostatnią wartością chodzika plus jeden z nich [-2-1,0,1,2]
(każda szansa 20%). Po wydrukowaniu nowej pozycji program powinien poczekać s
kilka sekund i przejść do następnego kroku. Jeśli krok zabierze spacerowicza poza zasięg 1 to 40
, należy go po prostu zignorować, a pozycja spacerowicza pozostanie taka sama. Liczba spacji będzie zawsze liczbą od 0 do 39.
Przykład
#input
Mywalk(s = 0.1, n = 30)
#output
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Uwagi
Możesz wziąć dane wejściowe jako dowolny rozsądny format
Najkrótszy kod wygrywa
W porządku, jeśli twój program akceptuje tylko sekundy jako liczby całkowite
n
że liczba kroków?1 to 40
, ponieważ liczba spacji jest zawszeposition-1
.Odpowiedzi:
Pyth, 39 lat
Pobiera
s
jako pierwszy wiersz danych wejściowych in
jako drugi. Działa w wierszu poleceń, ale nie z tłumaczem online. Mój pierwszy program w Pythonie! Wskazówki dotyczące gry w golfa są mile widziane.źródło
Q
iE
dla dwóch wejść zamiast fohQ
ieQ
, jeśli nowa linia oddzielisz wejścia.Matlab, 112
Podstawową ideą jest wygenerowanie listy możliwych następnych pozycji, a następnie równomierne narysowanie jednej z nich. Jeśli jesteśmy np. W pozycji $ l = 1 $, możliwe kroki to
[-1,0,1,2,3]
oczywiście, jeśli byśmy wybrali-1
że byłoby to nieprawidłowe i musielibyśmy pozostać na tej samej pozycji. Właśnie dlatego zastępujemy nieprawidłowe pozycje bieżącą pozycją[1,0,1,2,3]
, a następnie losowo wybieramy element z tej zaktualizowanej listy.OP poprosił nas o losowanie programu, więc zaczynamy:
Transkrypcja:
źródło
Perl,
1361281161061019086Wymaga, aby sekundy były liczbą całkowitą.
Biegnij z
perl <filename> <second delay> <number of steps>
.Tutaj może być więcej możliwości gry w golfa, chociaż szczerze mówiąc, jestem zaskoczony, że zaszło tak daleko. (Daj spokój, tylko 6 bajtów więcej, aby pokonać odpowiedź bash ...)
Zmiany
$s
i$n
używając zwykłego$ARGV[0]
i$ARGV[1]
$"
i nie musiałem specjalnie definiować$u
jako$undef
.$x
jego użycia oraz za pomocąmap
zamiastfor
.say
zamiastprint
.źródło
Python 2,
124119 bajtów@janrn i @ Steve Eckert: Nie mam wystarczającej reputacji, aby skomentować twoją odpowiedź, ale zasadniczo twoja wersja została skrócona. Zadaniem jest narysowanie programu lub funkcji , więc używając
f(s,x)
możesz zaoszczędzić sporo bitów, a także możesz użyć,max(0,min(x,39))
aby uniknąć dodatkowejif
klauzuli. Sprowadziłem się do:źródło
Bash, 81
Edycja: Jeśli krok zabierze piechura poza zakres od 1 do 40, należy go po prostu zignorować, a pozycja spacerowicza pozostanie niezmieniona .
Dane wejściowe z opcji wiersza polecenia. Na przykład:
źródło
Ruby, 84
źródło
Python 2.7,
198162143133Podczas wywoływania skryptu za
python script.py
pomocą pierwszego wejścia podawana jest liczba kroków, a drugie wprowadzania czasu między krokami (przyjmuje zmienną lub int). Wszelkie sugestie dotyczące ulepszenia?Edycje
print ' '*p+'.'
używanemu dzięki @corsiKlause Ho Ho Ho;
miarę możliwościp=max(1,min(p+r.randint(-2,2),40))
(nie mogę również skomentować twojej odpowiedzi, ale dziękuję; nie chcę jej całkowicie kopiować)źródło
' '*p
powtórzyć łańcucha?Przetwarzanie,
150147Stosowanie:
Uwaga:
1000
nie można zmienić na1e3
ze względu na typ.źródło
Lua, 140 bajtów
Uwaga: ten program wymaga pakietu LuaSocket.
źródło
Perl 6 , 92 bajtów
Stosowanie:
źródło
JavaScript (ES6), 125 bajtów
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
k4, 61 znaków
przykładowy przebieg:
źródło
Mathematica,
122117 bajtówRekurencyjna funkcja anonimowa, pobiera dane wejściowe w określonej kolejności. Prawdopodobnie można by dalej grać w golfa.
źródło
Python 3, 154 bajtów
Wygeneruj ciąg spacji większy niż maksymalna wymagana długość, następnie wydrukuj TYLKO ciąg znaków do znaku o indeksie „g”, a następnie wydrukuj „.”. Zakończ, zwiększając g o losową wartość z zakresu [-2: 2], i powtórz.
Byłbym wdzięczny, gdyby ktokolwiek mógł mi pomóc w grze w ten przerażający blok wejściowy.
źródło
sys.argv
?while z:
, dlaczego nie użyćfor i in range(1,z)
?sys.argv
i importu nie widzę, jak mogę zaoszczędzić na tym bajty. I nawet z dodatkowymi wierszami do zadeklarowania,c
a następnie zmniejszenia,c
iz
nadal jest to tańsze, według mojego obliczenia.Funkcja C, 114
Prawie bezpośrednie tłumaczenie mojej odpowiedzi na bash .
Pełny program testowy:
źródło