Napisz program, który wyświetla ruchomą piłkę ASCII *
wewnątrz prostokąta (20 na 10 znaków łącznie z ramką). Piłka nie może przekroczyć prostokąta, np. Odbić się od ściany. Scena musi być czyszczona i przerysowywana co 0,1 sekundy, a piłka musi przesuwać się o 1 znak w kierunku xiy co klatkę. Wygrywa najkrótszy program napisany w dowolnym języku.
Przykładowe dane wyjściowe (ramka 1)
+------------------+
|* |
| |
| |
| |
| |
| |
| |
| |
+------------------+
Przykładowe dane wyjściowe (ramka 2)
+------------------+
| |
| * |
| |
| |
| |
| |
| |
| |
+------------------+
Przykładowe dane wyjściowe (ramka 8)
+------------------+
| |
| |
| |
| |
| |
| |
| |
| * |
+------------------+
Przykładowe dane wyjściowe (ramka 9)
+------------------+
| |
| |
| |
| |
| |
| |
| * |
| |
+------------------+
1080x1920
rozdzielczością :)Odpowiedzi:
Ruby 1.9, 115 znaków
Logika ruch jest dość podobna do Danko jest odpowiedź .
Ta wersja została przetestowana tylko w systemie Linux.
źródło
puts"\e[2J"
po prostu drukuje←[2J
(i nową linię) na ekranie.cls
nie działa dla mnie, alesystem ("cls")
działa.PowerShell, 144 znaki
Na podstawie doskonałej odpowiedzi Joeya , wykorzystując fakt, że współrzędne kulkowe są funkcją indeksu klatki (i), więc jeśli masz coś takiego
x=n-abs(n-(i mod (2*n)))
, x zmieni się z 0 na n, z powrotem na 0 itd.źródło
if(-1,18-eq$x){$a*=-1;$x+=2*$a}if(-1,8-eq$y){$b*=-1;$y+=2*$b}
który zastąpił czteryif
s wcześniej ;-). Byłem jednak pewien, że musiała istnieć formuła.Python 2, 234
Jestem pewien, że można więcej grać w golfa, ale muszę iść, więc oto, co mam sofar. popracuję nad tym później
Uwaga: działa w konsoli poleceń systemu Windows. Inne systemy operacyjne mogą używać innych poleceń niż
cls
do czyszczenia ekranu, npclear
źródło
print "\e[H\e[2J"
pracę w systemie Windows?Rubin (
179174147)EDIT pozbył się kilku dodatkowych znaków:
EDYCJA ogoliła niektóre znaki, teraz 174:
Nie golfowany:
źródło
sleep .1
też działać?SyntaxError: (irb):1: no .<digit> floating literal anymore; put 0 before dot
. Ale wrócę do tego, jeśli będę tego potrzebować w przyszłości, dzięki!?*
Zamiast'*'
itp.←[2J←[f+------------------+
pierwszą linię.$> << "\e[2J\e[f"+f
na'cls';$><<f
(użyj backticksacls
)JavaScript (275
283)Demo: http://jsfiddle.net/eKcfu/2/
Napisałem to dość szybko, więc jestem pewien, że jest jeszcze sporo do zrobienia. Sugestie są mile widziane :)
Edycja 1 : Usuń niepotrzebne osobne wywołanie funkcji, osadzone bezpośrednio w
setInterval
.źródło
Haskell, 212 znaków
Używa bardziej funkcjonalnego podejścia do obliczania współrzędnych, tworząc nieskończoną sekwencję dla każdej współrzędnej osobno, a następnie łącząc je razem (linie 2 i 3). Reszta to rysowanie kodu.
źródło
PowerShell, 184
185215Tylko częściowo golfa, ponieważ mój mózg nie działa prawidłowo, gdy jestem chory ...
Jednak kilka fajnych sztuczek.
[Edytuj]: Pętla nad polem jest znacznie krótsza.
źródło
QBasic (QB64),
178173 bajtów-5 bajtów dzięki DLosc
źródło
DO ... LOOP
w miejscuWHILE 1 ... WEND
i zaoszczędzić 5 bajtów.Perl 5, 141 znaków
Nie uruchamia się w lewym górnym rogu, jak przykładowe wyjście, ale nie jest to wymagane.
źródło
Ruby 1.9, 162 znaków
35 znaków wstydzi się odpowiedzi @ Ventero, ale byłem pod wrażeniem, że udało mi się zejść tak daleko, wciąż stosując stosunkowo proste podejście do rzeczywistej logiki. ^ [To dosłowny ESC (1 znak).
źródło
R, 233 znaków
źródło
Kolejny wpis bash -
213204 znakówNaprawdę nie jest zdobywcą nagrody, ale i tak było fajnie. Do rysowania używa sekwencji znaków vt100. (kod podany tutaj używa 215 znaków dla czytelności, 2 znaki można usunąć poprzez zmianę znaczenia, np. „*” -> \ *
źródło
PowerShell, 139 bajtów
Zainspirowany Danko Durbić za odpowiedź .
Ten skrypt używa
-replace
operatora do rysowania*
wewnątrz prostokąta.Mniej golfowy skrypt wyjaśniający, jak to działa:
źródło
Bash 278
300, 296Symbol \ e w linii
echo -e "\e[$2;$1H$3"
może być wygenerowany przezzastąpić to. Jako binarny 0x1b jest on o 3 znaki krótszy; Liczę tylko 1 dla „\ e”, ponieważ tylko oprogramowanie do układania zmusza mnie do użycia
\e
.źródło
$
symbole((...))
i zastąpićx=$(($x+$p))
je((x+=p))
i podobnie w poniższym wierszu. (Zasugerowali także użycie\e
znaku ucieczki).\*
może działać jako zamiennik"*"
.1,337
musi zostać na stałe zablokowane: PTI Basic,
169167 bajtówStrasznie wolne, ale działa.
źródło
(X=20)→S
może być(X=20→S
i możesz skorzystać z Ans, aby zaoszczędzić kilka bajtów w końcowym For (pętla. Mam pozytywne linie 8 i 9 można grać w golfa, ale nie jestem pewien, jak w tej chwili."| \ Output(O,1,Ans \ Output(O,20,Ans
powinno działać.Ans
to jednobajtowy token wpisany za pomocą2nd
(-)
. W rezultacie zaoszczędzisz jeden bajt, ponieważ|
token ma dwa bajty na kalkulatorze.PHP,
196 186148 bajtówUsunąłem, unikając przepełnienia liczb całkowitych, aby zaoszczędzić 6 bajtów. Będzie działać przez 29 miliardów lat, zanim nastąpi przelanie; wciąż 6,8 lat w systemie 32-bitowym. Powiedziałbym, że jest to do przyjęcia.
Obliczanie pozycji zamiast jej korygowania znacznie oszczędzało, przygotowując kompletny szablon na raz inną partię.
Biegnij z
-nr
. Wymaga PHP 7.1.podział :
źródło