Mój pies szczeka na mnie, ale jestem zbyt leniwy, aby zabrać go na spacer. Mam pomysł! Sprawię, że ludzie w Code Golf zrobią to za mnie!
Twoim wyzwaniem jest symulacja spaceru psa. Oto zasady wyprowadzania psa:
- Człowiek (
H
) rozpocznie się0,0
na (kartezjańskiej) płaszczyźnie współrzędnych i co sekundę będzie losowo przechodził o jedno pole w górę, w lewo, w prawo lub w dół. - Pies (
D
) zacznie się w tym samym miejscu i będzie przechodził zero, jedną, dwie lub trzy spacje w górę, w lewo, w prawo lub w dół co sekundę (oczywiście losowo). Pies jest mniej przewidywalny i czasami będzie biec szybciej lub całkowicie się zatrzyma. - Pies nigdy nie odbierze człowiekowi więcej niż pewnej liczby jednostek (w odległości euklidesowej), czyli długości smyczy (
L
). Na przykład, jeśliL
jest6
, prawidłowa pozycja toH(0,0) D(4,4)
(ponieważ odległość wynosi około 5,65 jednostek), ale nieH(0,0) D(5,4)
(około 6,4 jednostek).- Jeżeli pies porusza się, narusza on wymaganą odległość smyczy, musi iść najdalej, jak to możliwe, w wyznaczonym kierunku, co nie narusza wymogu odległości. Na przykład, jeśli pozycja jest,
H(0,0) D(3,4)
a pies losowo zdecyduje się przesunąć 3 pola w prawo, przejdzie doD(4,4)
, ponieważ jest to najdalej, na jaką może pójść, nie oddalając więcej niż 6 jednostek. (Należy pamiętać, że może to spowodować ruch o 0 pól, czyli brak ruchu!)
- Jeżeli pies porusza się, narusza on wymaganą odległość smyczy, musi iść najdalej, jak to możliwe, w wyznaczonym kierunku, co nie narusza wymogu odległości. Na przykład, jeśli pozycja jest,
- Różne zasady: człowiek porusza się pierwszy. Człowiek nie może przekraczać długości smyczy w swoim ruchu. Jeśli tak, musi wybrać inny kierunek. „Losowy” oznacza „z równomiernym rozkładem i bez wzorów”.
Dane wejściowe zostaną podane w tym formacie (może to być STDIN, parametr funkcji, plik itp.):
"<amount of seconds the walk will last> <leash length>"
Na przykład:
300 6 // a 5 minute walk with a 6 yard leash
Musisz podać dane wyjściowe w tym formacie (może to być STDOUT, wartość zwracana przez funkcję, plik itp.):
H(0,0) D(0,0)
H(0,1) D(2,0)
H(1,1) D(2,1)
H(1,0) D(2,-1)
...
(Ilość wyjściowych wierszy będzie seconds + 1
, ponieważ H(0,0) D(0,0)
wiersz się nie liczy.)
To jest golf golfowy , więc wygra najkrótszy kod w bajtach!
Odpowiedzi:
GolfScript, 140 znaków
Przykład uruchomienia (spróbuj online ):
źródło
CoffeeScript - wywołanie funkcji 324 +
Demo (za pomocą smyczy 10):
Kod:
Długi kod:
źródło
Ruby,
189177Mogę to trochę upuścić. Nie kocham
j
.Nie golfowany:
źródło
Mathematica 285
Grał w golfa
Przykład
UnGolfed
W tekście poniżej jest kilka komentarzy. Dołączyłem również wydruk, który umożliwia śledzenie niektórych obliczeń.
Przykład
[Pokazano część wydruku, aby pokazać, jak działa kod. ]
źródło