Jest taka gra, w którą lubię grać. Dzieje się to na siatce o skończonych rozmiarach (ale jest owinięty jak kula). Na tej siatce wybierany jest losowy (tylko liczba całkowita) punkt. Następnie ja, użytkownik, otrzymuję monit o podanie współrzędnych. Jeśli mój wkład dokładnie pasuje do losowego punktu, powiedziano mi, że wygrałem. W przeciwnym razie powiedziano mi o punktowej odległości między moim wejściem a punktem losowym. Na przykład, jeśli zgadłem, (2,2)
a losowy punkt był w (4,3)
, wtedy odległość byłaby sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
Gra trwa, dopóki gracz nie dotrze do właściwej lokalizacji punktu.
Cel Utwórz funkcjonalną wersję gry opisaną powyżej. Aby to zrobić, musisz utworzyć pełny program. Oto, co powinien zrobić Twój program:
- Poproś o dwa dane wejściowe: wysokość i szerokość tablicy. Początek znajduje się w lewym górnym rogu planszy. Te dane wejściowe nie przekroczą
1024
. - Wybierz losowy punkt na tej planszy; to będzie punkt do zgadnięcia.
- Zaakceptuj wejście symulujące zakręt. Wejście będzie albo oddzieloną spacją liczbą całkowitą, albo dwoma oddzielnymi wejściami całkowitymi. W odpowiedzi na te dane wejściowe program wykona jedną z dwóch czynności:
- Jeśli wejście odpowiada wybranemu losowo punktowi, wyślij komunikat sygnalizujący zwycięstwo użytkownika. Sugerowałbym „Wygrałeś!”.
- W przeciwnym razie wyświetl odległość między punktem wejściowym użytkownika a punktem losowym.
- Gdy użytkownik osiągnie zwycięstwo, wyświetl liczbę wykonanych przez niego obrotów. Program następnie kończy pracę.
Bonusy
Bonusy są stosowane w kolejności, w jakiej występują na tej liście
- -150 bajtów, jeśli twój program przyjmuje całkowitą liczbę wejściową
D
opisującą wymiar, w którym gra się odbywa. Np. JeśliD = 3
, to utworzysz losowy punkt3
liczb całkowitych, weź wartości3
całkowite i wyprowadzisz odległość między tymi punktami. - -50% (lub + 50%, jeśli
score < 0
), jeśli zapewnisz graficzną reprezentację planszy (ASCII lub obraz), która pokazuje, gdzie użytkownik wcześniej odgadł na siatce o podanych wymiarach i licznik obrotów. (Jeśli wybierzesz pierwszą premię, ta premia dotyczy tylko trybów2D
i1D
. Jeśli dodasz wyjście graficzne 3D, otrzymasz dodatkowe -50%.) - -60 bajtów, jeśli możesz podać tryb gry (wybrany przez wejście na początku; to znaczy, jeśli podano
0
, wykonaj zwykły tryb gry; jeśli podano1
, wykonaj ten tryb gry), w którym punkt przesuwa się o 1 jednostkę w losowym kierunku ortogonalnym na turę
Więcej na temat pakowania
Zawijanie następuje tylko wtedy, gdy w trzeciej premii punkt ruchu przesuwa się przez dowolną granicę; w tym przypadku punkt ruchomy jest wypaczony do odpowiedniego punktu, tak jak:
... ...
..R (move right) R..
... ...
To zachowanie owijania nie wpływa na zgadywanie użytkownika, poza tym, że punkt zmienił kierunek.
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, losowy punkt to (9,4)
, jak sądzę (2,2)
, odległość sqrt(13)
lub sqrt(53)
? (Uwaga na przyszłość: jeśli robisz coś dziwnego, nie dołączaj losowości, ponieważ prawie niemożliwe jest dostarczenie przypadków testowych). 2. Czy w trzeciej premii należy obliczyć odległość i wyprowadzić ją przed lub po przesunięciu punktu?