Mam problem z klawiaturą (bardziej prawdopodobny problem z przeglądarką). Czasami, gdy klikam nowe pole tekstowe i zaczynam pisać, cały mój tekst wychodzi do tyłu. Po bardzo krótkim czasie (na potrzeby wyzwania powiemy, że jest to 10 milisekund), wznawia pisanie do przodu. Wydaje się, że początkowo mój kursor nie porusza się, kiedy zaczynam pisać, więc wszystkie litery są wstawiane na początku pola tekstowego.
Na przykład, jeśli piszę python
i wpisuję pyt
pierwsze 10 milisekund, wynikiem będzie
hontyp
Zadanie
Twoim zadaniem jest symulacja tego zachowania w jak najmniejszej liczbie bajtów.
Wejście
Możesz wziąć wkład dowolną rozsądną metodą. Nie możesz jednak traktować danych wejściowych jako dwóch oddzielnych pól. 10 milisekundowe opóźnienie powinno rozpocząć się, gdy program zacznie zezwalać na wprowadzanie danych. Oznacza to, że możesz wykonać wstępne przetwarzanie przed zezwoleniem na wprowadzanie danych, czego nie należy liczyć do 10 milisekund.
Pewna łagodność jest dozwolona w taktowaniu tak długo, jak wynosi średnio 10 milisekund i jest wyłączana o więcej niż 1 milisekundę przez nie więcej niż 1% czasu na rozsądnie określonym komputerze.
Wynik
Możesz wyprowadzać ciąg znaków dowolną metodą, która uzna za stosowną. Możesz albo aktualizować na żywo, gdy użytkownik pisze lub wypisać wynik po zakończeniu wprowadzania danych (albo przez nową linię, albo na końcu pliku ^D
).
Przypadki testowe
Niektóre z nich zostały wygenerowane przez CMC w Dziewiętnastym bajcie
First 10 | after | result
bra in-flak in-flakarb
ap ple plepa
code- golf golf-edoc
no ne neon
we st stew
ai med media
draw back backward
Odpowiedzi:
VimScript,
4847 bajtówVim ma do tego kilka fajnych wbudowań. Wymaga Vima 8.
Oczekuje tekstu wprowadzonego w trybie wstawiania, co jest bardzo rozsądnym wprowadzeniem dla VimScript. Wyjaśnienie:
Moje początkowe podejście,
se ri|sl10m|se ri&
nie działa, ponieważ tekst jest buforowany do czasu po komendzie uśpienia i nie mogłem znaleźć sposobu na obejście tego.źródło
HTML (JS), 96 bajtów
Zaczyna mierzyć czas od 1s od pierwszego naciśnięcia klawisza, aby dać Ci szansę zobaczenia go w akcji.
źródło
JavaScript (ES6), 88 bajtów
Próbny
Sposób, w jaki działa fragment kodu, musisz kliknąć wewnątrz jego ramki, aby uzyskać ostrość po kliknięciu przycisku Uruchom i przed zaczniesz pisać.
Nie da się tego zrobić w mniej niż 10ms. Więc ustawiłem opóźnienie na 1 sekundę w tym demo - i mimo to lepiej się pospiesz.
Pokaż fragment kodu
źródło
Przetwarzanie,
167165146 bajtówPobiera dane jako naciśnięcia klawiszy i dane wyjściowe do konsoli. Aktualizuje każdą klatkę.
Wyjaśnienie
źródło
asdf
+ghjk
. Gdyby wszystko było w jednej zmiennej, to po 10 milisekundach mielibyśmyfdsa
ten jeden ciąg. Następnie, pog
wpisaniu, łańcuch będzie poprzedzałg
i stał sięgfdsa
. Następnie, gdyh
zostanie wpisany, nie mogę wstawićh
do zmiennej (ponieważ wtedy dane wejściowe są nadal odwrócone), będę musiał użyćsubstring
s i obliczyćlength
zmienną String. Będzie to kosztować dużo bajtów.a
ib
). Nawet jeśli przypiszę wynik do zmiennej temp, wynikowa liczba bajtów jest jeszcze większa.C - 169 bajtów
Cóż nie jest do tego najlepszy, ponieważ nie ma na to sposobu niezależnego od platformy. Działa pod MSVC.
Trochę hacky podejście, jeśli możesz wpisać więcej niż 9 znaków w 10 ms, to się zawiesi. Aktualizacje po znaku nowej linii.
źródło
Python 2 ,
112106Jeśli chcesz, aby wyjście było wyrównane, bez zalewania liniami, użyj
print'\r'+a+b,
zamiast tegoMusisz go zabić, aby go zatrzymać
źródło