Twoim dzisiejszym zadaniem jest wprowadzenie limitu czasowego na uzyskanie danych wejściowych, co w większości języków wydaje mi się irytujące.
Utworzysz funkcję programu, która monituje użytkownika o wprowadzenie danych. Natychmiast po tym, jak użytkownik poda dane wejściowe, wydrukuj wiadomość input received
i zakończ wykonywanie / zwrot. Jeśli jednak użytkownik czeka dłużej niż 10 sekund na wprowadzenie danych, wyślij komunikat no input received
i zakończ wykonywanie / powrót.
Dane wejściowe muszą pochodzić z stdin
(konsoli) lub równoważne, a nie argumenty funkcji lub programu, jednak dane wyjściowe mogą być albo do stdout
wartości zwracanej przez funkcję, albo innej przyjętej metody wyjściowej.
Możesz poprosić o dowolną ilość danych wejściowych, może to być pojedynczy znak, wiersz, słowo lub dowolna metoda najkrótsza w twoim języku, o ile czeka na co najmniej jeden znak.
Musisz wyprowadzać dane natychmiast po otrzymaniu danych wejściowych, a nie po upływie 10 sekund.
Po upływie 10 sekund musisz zakończyć, nie możesz kontynuować oczekiwania na dane wejściowe po no input received
wydrukowaniu.
Możesz założyć, że dane wejściowe nie są przekazywane w czasie między upływem 10 sekund a drukowaniem tekstu na ekranie, ponieważ jest to wyjątkowo małe okno. Możesz również założyć, że wbudowany odpowiednik twojego języka sleep
jest konsekwentnie, absolutnie doskonały.
To jest golf golfowy , wygrywa najmniej bajtów!
sleep
100% założyć, że twój język odpowiada funkcjom.Odpowiedzi:
bash, 38 bajtów
Używa opcji
-t
(timeout) do bash'uread
, co powoduje, że kończy się ona niepowodzeniem i zwraca niezerowy kod wyjścia, jeśli nie podano danych wejściowych w określonej liczbie sekund.źródło
Haskell,
9789 bajtówJeśli
timeout
upłynie limit czasu, zwracaNothing
iJust Char
(Char
ponieważ używamygetChar
) inaczej. Ta zwracana wartość jest konwertowana na funkcję"no "
lub""
według funkcjimaybe "no " mempty
. Dołącz"input received"
i wydrukuj.Edycja: @BMO zasugerował
maybe
i zapisał niektóre bajty.źródło
g
zlet
:let g Nothing="no ";g _=""
, a następnie wywołanie funkcjitimeout....
działa dobrze dla mnie.g
,maybe"no "(pure"")
który jest krótszy, a nawet wstawić go - oszczędzając Ci 6 bajtów.mempty
zamiast(pure"")
jest jeszcze krótszy.POSIX C99,
7163 bajtówNie golfowany:
Ponieważ
poll
w przypadku sukcesu zwróci 1, mnożymy wynik przez 3 i odpowiednio przesuwamy ciąg. Następnie wykorzystujemy fakt, którystruct pollfd
ma następujący układ:i to
STDIN_FILENO
znaczy0
, żePOLLIN
należy1
go zastąpić,pfd
zint pfd[] = {0,1}
którego w końcu wykonujemy złożoną ściółkę (na co pozwala C99).źródło
poll.h
nagłówek nie jest częścią standardu językowego C99.Jabłkowy, 113
Applescript tak naprawdę nie czyta ze STDIN. Mam nadzieję, że tutaj
display dialog
jest do przyjęcia:źródło
APL (Dyalog) ,
4140 bajtówJest to anonimowa ukryta funkcja, której uruchomienie wymaga fałszywego argumentu .
'no input received'
pełny ciąg↓⍨
upuść tyle znaków z przodu, ile liczba zwrócona przez{
anonimowa funkcja jawna (⍵
oznacza argument)⎕RTL←10
ustaw R esponse T ime L imit na dziesięć sekund3*⍨
podnieś tę liczbę (dziesięć) do potęgi trzech (tysiąc oznacza „wszyscy”)::
na tych wyjątkach (wszystkie),0
zwróć 0⋄
próbować:⍞
uzyskać dane wejściowe3⊣
odrzuć to i zamiast tego zwróć 3}
koniec funkcji (zauważ, że argument⍵
nigdy nie został wymieniony)źródło
Perl ,
7467 bajtówStara wersja
(Uruchom przez perl -M5.10.1 ...)
źródło
\n
.-M5.10.1
. Można po prostu zastąpić-e
z-E
. (jeśli potrzebujesz-M5.10.1
, musisz dodać karę do swojego wyniku)\n
jest tam z powodudie
zachowania: „Jeśli ostatni element LISTY nie kończy się nową linią, drukowany jest również numer bieżącej linii skryptu i numer linii wejściowej (jeśli istnieje) i dostarczana jest nowa linia.” Bez tego wyświetliłby się „brak danych wejściowych w -e linii 1.”. Ale oczywiście może to być dosłowne przerwanie linii w łańcuchu. Poza tym, przestrzenie pomiędzydie
asay
i nie potrzebne są ich parametry. To samo dotyczy finału;
. I<>
wystarczy odczytać ze standardowego wejścia.eval
czytasz ze STDIN, możesz uniknąć potrzebydie
wiadomości. W rzeczywistości, błąd wykonania działa równie dobrze:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 bajtówWypróbuj bez wprowadzania
Wypróbuj z wprowadzaniem
Wypróbuj bez wprowadzania
Wypróbuj z wprowadzaniem
źródło
start
i{
?start
, więc nie..new
jąC #,
180171148131 bajtówZaoszczędź 17 bajtów dzięki @VisualMelon.
Wersja pełna / sformatowana:
źródło
namespace
nieusing
dyrektywa?using
Thread.Join(int)
(pozbyć sięc
, stracić nawiasy klamrowe itp.):var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
(Wydaje się, że VB.NET już to robi)1e4
ale to jestdouble
i potrzebowałbym,int
więc musiałbym zrobić(int)1e4
:( Niezły pomysłTI-BASIC,
8477 bajtów-7 dzięki @ kamoroso94
Czeka na naciśnięcie numeru.
Próbuję wymyślić, jak zagrać w golfa w tej sekwencji
{72,73,74,82,83,84,92,93,94}
. Zajmuje dużo miejsca.źródło
Repeat K or 10=checkTmr(T
zrobisz.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
klucz na komputerze. Również skrócenie ostatnich 4 wierszy za pomocą metody daje w rzeczywistości tę samą liczbę bajtów, co moja. Jednak podoba mi się twoja metoda.or
w swoim powtórzeniu użyj tego zamiast -7 bajtów:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
NodeJS,
105103101 bajtów-2 bajty dzięki @apsillers
-2 bajty poprzez przejście
console.log()
doexit()
Uruchom, zapisując plik i uruchamiając go z węzłem lub uruchom bezpośrednio z wiersza poleceń, wykonując
node -e "<code>"
źródło
console.log()
wywołanie do parametruexit()
. To teraz dwa mniej.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 bajtówSpróbuj
Wymaga zamknięcia
>
nainput
w celu podjęcia pracy w urywek.źródło
10
zamiast1e4
?10
będzie to 10 milisekund, wyzwanie wyzwanie mówi konkretnie 10 sekund , czyli 10000 milisekund1e4
.10 != 1e4
ponieważ jestem głupcemVB.Net - 174 bajty
Wersja COBOL już jutro ;-)
źródło
:
. To zajmuje tyle samo bajtów co podział linii, więc po prostu zmniejsza czytelność bez poprawiania wyniku golfowego.:
podstawienie podziału linii może być tak, że wywołanie kroczące może zostać zadeklarowane w linii bez powtarzania - ale to powiedziawszy, nie jestem pozytywny, moim głównym językiem jest VBA, który nie obsługuje wątkowania lub czytania z <strike> konsoli < / strike> natychmiastowe okno pomocy przy definicji funkcji lub wywołaniu: PIdź, 149 bajtów
źródło
AHK ,
6765 bajtów2 bajty zapisane przez Blauhirna
AHK ma wbudowany limit czasu dla pól wejściowych.
Starałem się być sprytny i używać
!o
zamiast,ErrorLevel
ale to się nie udaje, jeśli użytkownik wprowadzi wartość falsey.Prawie połowa odpowiedzi to tylko nazwy poleceń i stały tekst.
źródło
Timeout
jest prawie ostatnim parametrem:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 bajtówNajpierw spróbuj golfa.
-4 za
any()
, -7 za krojenie, dzięki @ user2357112!-6, pobierz
select()
zpty
zamiastselect
.źródło
"no input received"
ciąg:"no input received"[3*bool(...):]
.any(...)
zamiastbool(...[0])
.pty
Moduł jest dostępny tylko na platformach Linux, ale ja tylko go używać, ponieważ jego nazwa jest krótka, a to sprawia, żeselect
jest dostępna. Wersja 2 prawdopodobnie działa lepiej w systemie Windows.PowerShell, 110 bajtów
źródło
Python 3, 158 bajtów
Próbowałem uruchomić odpowiedź Pythona 3 dla Setha, ale w Windowsie to rzuca
ModuleNotFoundError: No module named 'termios'
, a ponieważ nie mogę skomentować jego odpowiedzi na ten temat, postanowiłem zamiast tego znaleźć rozwiązanie, które powinno być niezależne od platformy.Po raz pierwszy gram w golfa, więc jestem pewien, że można to poprawić.
źródło
Tcl, 99 bajtów
źródło
SmileBASIC 3, 74 bajty
„Akceptuje wprowadzanie”, czekając na naciśnięcie dowolnego przycisku (które powinno się liczyć jako wejście)
źródło
Scratch 2 / 3.x, 41 punktów ( objaśnienie )
1: Po kliknięciu GF
1: zapytaj [] i poczekaj
1 + 14 znaków: powiedz [otrzymane dane wejściowe]
1: stop [all v] (uwaga: ponieważ „all” było ustawieniem domyślnym, policzyłem blok jako 1)
1 + 2 cyfry: poczekaj (10) sekund
1 + 17 znaków: powiedz [nie otrzymano żadnych danych wejściowych]
1: stop [wszystkie v]
źródło
> <> , 43 + 6 = 49 bajtów
Wypróbuj online!
+5 dla
-t.08
flagi, która ustawia tyknięcie na 0,08 sekundy, i +1 dlaa
flagi, która liczy białe spacje i pomija instrukcje jako tiki.Program sprawdza wejście co około raz na sekundę i wychodzi z pętli, jeśli zostanie wykryty. Jeśli dane wejściowe nie zostaną odebrane, wyjdzie z pętli od dołu, dopisując
no
na początku łańcucha. Początkowa/
polega na upewnieniu się, że ostatnia kontrola danych wejściowych znajduje się dokładnie na znaku 10 sekund.Następnie wydrukowanie samego ciągu zajmuje około 5-6 sekund.
źródło
-at.08
aby zapisać bajt.Java 1.4+, 284 bajty
Nie golfowany:
Nie sugeruj ulepszeń Java specyficznych dla wersji, jest to ogólna odpowiedź Java, która działa we wszystkich obecnie stabilnych środowiskach Java (1.4 i nowszych).
Bardzo cholernie dziwny ... Połów jest wymagany, nie można go rzucić. Import systemu goli jak 5 bajtów ... Przeładowanie jest również trudne, więc kończy się bałaganem o kiepskim wyglądzie.
źródło
10000L
i nie10000
? Myślałem, że ints automatycznie rzucają długie.Julia 0.6 , 78 bajtów
Dłużej niż się spodziewałem. Zobacz komentarze do linku TIO „brak danych wejściowych”.
Wypróbuj online!
źródło
SmileBASIC,
7473 bajtyPobiera 1 znak wejściowy.
I 39 bajtowe rozwiązanie, które prawdopodobnie nie jest poprawne (w rzeczywistości nie akceptuje wprowadzania tekstu, ma tylko OKprzycisk, który można nacisnąć)
źródło