tło
echo
Program jest tak czysty. Możesz coś na to powiedzieć, a za każdym razem doskonale powtarza twoje słowa! Jakie to jest świetne! Rozczarowujące, powtarza to wejście naraz, niezależnie od prędkości pisania, co nie jest zbyt realistyczne. Będziemy musieli to naprawić.
Zadanie
Twój program pobiera dane wejściowe ze STDIN lub najbliższego odpowiednika. Powinien odczytywać wiersze od użytkownika jeden po drugim, być może wyświetlać jakieś monity, dopóki nie wejdzie w pusty wiersz. Następnie wypisze linie do STDOUT lub najbliższego odpowiednika, w tej samej kolejności, w jakiej zostały podane. Ostatnia (pusta) linia nie jest drukowana, a ostatnia drukowana linia nie musi mieć końca nowej linii.
Ponadto program zachowuje przedziały czasowe między poszczególnymi liniami: jeśli x
wejście linii zajęło x
sekundom użytkownika, wydrukowanie go zajmie kilka sekund. Dotyczy to również pierwszego i ostatniego wiersza; pusta linia nie jest drukowana, ale program i tak czeka przed zakończeniem.
Przykład
Oto przykładowa sesja z programem. Wszystkie działania, które nie powodują wygenerowania tekstu, są opisane w nawiasach, a monit (opcjonalny) jest wyświetlany jako >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Bez działań sesja wygląda następująco:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Zasady i punktacja
Czasy oczekiwania powinny być dokładne z dokładnością do 0,01 sekundy (w praktyce, jeśli przeciętny człowiek nie potrafi odróżnić, nic ci nie jest). Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone. Jeśli twój język ma wbudowaną funkcję dokładnie do tego zadania, nie możesz go używać.
yum yum
, co było dość kłopotliwe.Odpowiedzi:
CJam,
4541393634 bajtówOczywiście to nie ma sensu w tłumaczu online, ale działa w tłumaczu Java.
Nie wyświetla monitu.
Wyjaśnienie
źródło
JavaScript,
119112 bajtówMam nadzieję znaleźć jeszcze kilka bajtów do wycięcia.
źródło
j=i=[]
(++
nadal będzie działać!), Równieżwhile
nie potrzebujesz,!=''
ponieważ jest to fałsz! Tak rozczarowany, że tęskniłemmap
! +1!=''
. Był zaniepokojony, jeśli dane wejściowe były0
, ale wydaje się, że poradzi sobie z tym dobrze. Już wcześniej zauważyłem[]
możliwość zwiększenia, ale byłem głupi i starałem sięj++
z tym zrobić . Robi++j
prace, ponieważ[]++
najwyraźniej 0 XD Dzięki!do...while
w JS były pętleJavaScript, 120 bajtów
Przy takim podejściu nie ma szans na zbliżenie się do CJam, ale prosty skrypt.
źródło
Pyth, 68 bajtów
Zmarnowałem dużo bajtów na wywołanie
sleep
, ponieważ Pyth nie ma żadnejsleep
funkcji.źródło
Ruby, 74
Sztuczki:
*a
w pierwszym wierszu inicjuje pustą tablicę. Mógłbym$*
zamiast tego użyć, ale jest dość szkicowy, ponieważ jest zapełniony niektórymi inwokacjami i oszczędza mi tylko bajt.$/
jest nową linią i$_
jest ostatnią linią pobraną przezgets
.Edycja: Spanie na końcu kosztuje 20 bajtów więcej, prawdopodobnie sposób na grę w golfa
źródło
Time.now
wystarczająco dużo razy, używającdef n;Time.now;end
, oszczędzając całe 2 bajtyPython 3, 124
Działa tylko na platformach Windows
Przechowywanie danych wejściowych i czasów na osobnych listach kosztuje mnie jeszcze 3 bajty . Prawdopodobnie nie najlepsze podejście.
129-bajtowa wersja uniksowa, z podziękowaniami dla Mego :
źródło
time()
zamiastclock()
zapisać 2 bajty?SWI-Prolog, 185 bajtów
Gra w golfa jest prawdopodobnie bardzo duża, ale na razie wystarczy ...
źródło
PowerShell,
26119012195 bajtówRekwizyty dla TessellatngHeckler i tomkandy za pomoc w golfie i inspirację
Jest to bardzo podobne pojęcie do 121-bajtowej wersji poniżej, po prostu dynamicznie tworzymy i budujemy listę obiektów, zamiast przechodzić przez pętlę while, aby przechowywać je w jawnej tablicy
$a
. W obu przypadkach ta lista obiektów zostaje potokowana w tej samej pętli foreach|%{...}
. Indeksowanie do selektora tablic wyników($b=!$b+!$_)
jest tym razem sformułowane w celu wyeliminowaniaif($_){$_}
poniższych iteracji, co pozwala zaoszczędzić jeszcze kilka bajtów.Poprzednio 121 bajtów
Rozszerzony i wyjaśniony:
Poprzednio, 190 bajtów
Poprzednio, 261 bajtów
Święta gadatliwość, Batman! Rozbijmy to:
źródło
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
z tej tablicy, ponieważ nie jest to potrzebne w tym kontekście, więc do 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- i ze zmianą przełącznika, dzięki czemu gdy łańcuch jest pusty, nie przełącza się i zamiast tego śpi - 98do{...}while($l)
pętlę i upuść,$l=1;
aby uzyskać 95 )Perl 6, 70 znaków
Interpreter Perla 6 definiuje tylko trzy zmienne symboliczne (w przeciwieństwie do szaleństwa Perla 5). Aby być dokładnym,
$/
,$!
, i$_
. Ten program wykorzystuje je wszystkie, aby uniknąć kosztów deklarowania zmiennychmy
.get
czyta wiersz ze STDIN. Nie zawiera nowej linii, w przeciwieństwie do Perla 5.now
wbudowany zwraca bieżącą godzinę. Po odjęciu daje interwał, który można przekazać do łańcucha.Metoda bez niczego po lewej stronie (jak
.push
i.map
w tym kodzie) działa$_
.Korzystając z
repeat while
pętli (znanej jakdo while
w innych językach programowania), Perl 6 zapisuje bieżący znacznik czasu$/
i wypycha odebraną linię (do której również przechowuje$!
) oraz różnicę między bieżącym czasem i znacznikiem czasu$/
. Ze względu na kolejność parametrównow
nie jest obliczany, dopóki nie zostanie odebrany wiersz.Do
while
kontroli stanu jeśli linia nie jest pusty (w Perl 6,"0"
jest prawdziwa wartość, w przeciwieństwie Perl 5).Po uzyskaniu wszystkich znaczników czasu i linii, po prostu dostarczam te do
map
oddzwaniania, które trochę śpi i mówi, co zostało powiedziane.źródło
Groovy, 202 bajty
Rodnik.
Wersja bez golfa:
źródło
JavaScript (ES6) 102
Łącząc wysiłki Mwr247 i Dom Hastings (CW)
źródło
MATLAB,
10799I bez golfa:
Nie będzie to w 100% dokładne taktowanie, ponieważ nie uwzględnia czasu potrzebnego na wyświetlenie każdego łańcucha, ale powinno to być dość szybkie, więc czas powinien być dość zbliżony.
Po szybkiej wizycie zapisałem kilka bajtów, usuwając dwuwarstwową tablicę głębokich komórek. Okazuje się, że wszystko, czego potrzebowałem, to
;
prawidłowe rozdzielenie podczas pakowania.źródło
Java, przy użyciu wersji 1.04 tej biblioteki , 385 bajtów
źródło
Caché ObjectScript, 123 bajty
Jak zwykle zakłada to czystą tablicę symboli przed uruchomieniem
d r
.Ten problem nie może zostać rozwiązany w ANSI MUMPS, ponieważ standard ANSI wymaga tylko rozdzielczości drugiego poziomu dla właściwego czasu
$H[OROLOG]
. Na szczęście Intersystems Caché, która jest obecnie wiodącą w branży platformą dla MUMPS, zapewnia wewnętrzną definicję implementacji$ZT[IME]S[TAMP]
, która zapewnia rozdzielczość na poziomie mikrosekund.(Wynik był wcześniej 105 bajtów, ale wystąpił błąd).
źródło
C ++ 11,
343338 bajtówChciałem zobaczyć, ile bajtów potrzebny jest do tego kod w c ++. O wiele więcej niż się spodziewałem. Może zbyt skomplikowałem rozwiązanie.
Zobaczmy, czy mogę to jakoś zmniejszyć.
źródło
#include
ws i deklarację typu dlamain
. To 7 bajtów - niewiele, ale początek. Możesz także być w stanie używaćauto
zamiaststring
dos
.c
dlatego nie musimy tego określać. Próbowałem początkowo użyćauto s
... ale wygląda na to, że jest przekonwertowany naconst char *
i niestd::string
. Zastanawiam się, czy mogę utworzyć alias dlawhile
.while
użycia#define
może.Bash,
9190 bajtówSpowoduje to utworzenie pliku tymczasowego
t
. Zastąpi istniejący plik o tej samej nazwie.Sam pomysł jest dość krótki, ale radzenie sobie ze znakami specjalnymi na wejściu dodaje około 15 bajtów ...
źródło
VBA,
233228 bajtówJestem pewien, że można dużo grać w golfa. nie określili, ile wejść, więc na stałe zakodowałem moje długości tablicy, ponieważ są one krótsze
Redim preserve
.Wejście jest przez okienko, wyjście
debug.print
ponieważmsgbox
wytwarza modalnych i zatrzymuje kod.Nie wiem, jak sprawdzić, czy jest to dokładne z dokładnością do 0,01 s. Być może ktoś może przetestować, ale podaję komendę oczekiwania w taki sposób, że POWINNA ona używać milisekund, ale VBA nie jest znana z robienia tego, co powinna.
If goto
Może być w stanie być podstawiony oraz golfedDo Loop While
.źródło
SmileBASIC, 122 bajty
Myślę, że można to nieco skrócić.
źródło
C UNIX, 272 bajty
Szczegółowy
źródło