Ihre heutige Aufgabe ist es, ein Zeitlimit für das Einholen von Eingaben festzulegen, eine Aufgabe, die ich in den meisten Sprachen als ärgerlich empfunden habe.
Sie erstellen eine Programmfunktion, die den Benutzer zur Eingabe auffordert. Drucken Sie die Nachricht sofort aus, nachdem der Benutzer Eingaben eingegeben hat, input received
und beenden Sie die Ausführung / Rückkehr. Wenn der Benutzer jedoch länger als 10 Sekunden auf die Eingabe wartet, geben Sie die Nachricht aus no input received
und beenden Sie die Ausführung / Rückkehr.
Die Eingabe muss von stdin
(der Konsole) oder einer gleichwertigen Quelle erfolgen , nicht von Funktions- oder Programmargumenten. Die Ausgabe kann jedoch entweder auf stdout
den Rückgabewert Ihrer Funktion oder auf eine andere akzeptierte Ausgabemethode erfolgen.
Sie können nach einer beliebigen Anzahl von Eingaben fragen. Dies kann ein einzelnes Zeichen, eine Zeile, ein Wort oder eine beliebige Methode sein, die in Ihrer Sprache am kürzesten ist, solange auf mindestens ein Zeichen gewartet wird.
Sie müssen sofort nach Eingang der Eingabe ausgeben, nicht nach Ablauf der 10 Sekunden.
Nach 10 Sekunden vergangen sind, Sie müssen beenden, können Sie nicht weiter auf eine Eingabe wartet , nachdem no input received
gedruckt wurde.
Sie können davon ausgehen, dass die Eingabe nicht in der Zeit zwischen 10 Sekunden und dem Ausdruck von Text auf dem Bildschirm übergeben wird, da dies ein äußerst kleines Fenster ist. Sie können auch davon ausgehen, dass das eingebaute Äquivalent Ihrer Sprache sleep
durchweg absolut perfekt ist.
Das ist Code-Golf , die wenigsten Bytes gewinnen!
sleep
Funktionen Ihrer Sprache zu 100% perfekt sind.Antworten:
Bash, 38 Bytes
Hierbei wird die
-t
Option (timeout) zum Bashing verwendetread
, wodurch ein Fehler auftritt und ein Beendigungscode ungleich Null zurückgegeben wird, wenn in der angegebenen Anzahl von Sekunden keine Eingabe erfolgt.quelle
Haskell,
97-89BytesWenn die
timeout
Zeit abgelaufen ist, wird es zurückgegebenNothing
undJust Char
(Char
weil wir es verwendengetChar
) anders. Dieser Rückgabewert wird in"no "
oder""
nach Funktion konvertiertmaybe "no " mempty
. Anhängen"input received"
und ausdrucken.Edit: @BMO vorgeschlagen
maybe
und einige Bytes gespeichert.quelle
g
mitlet
:let g Nothing="no ";g _=""
, dann wird der Funktionsaufruftimeout....
funktioniert gut für mich.g
durchmaybe"no "(pure"")
welche kürzer ist und Sie können es sogar Inline - Sie 6 Bytes speichern.mempty
statt(pure"")
ist noch kürzer.POSIX C99,
7163 BytesUngolfed:
Da
poll
bei Erfolg 1 zurückgegeben wird, multiplizieren wir das Ergebnis mit 3 und verschieben den String entsprechend. Dann verwenden wir die Tatsache, dassstruct pollfd
das folgende Layout hat:Und das
STDIN_FILENO
ist0
,POLLIN
ist1
zu ersetzen ,pfd
mit derint pfd[] = {0,1}
, die wir schließlich eine Verbindung Litteral machen (wie von C99 erlaubt).quelle
poll.h
Header nicht Teil des C99-Sprachstandards ist.Applescript, 113
Applescript liest nicht wirklich aus STDIN. Hoffentlich
display dialog
ist a hier akzeptabel:quelle
APL (Dyalog) ,
41 bis40 BytesDies ist eine anonyme implizite Funktion, für deren Ausführung ein Dummy-Argument erforderlich ist .
'no input received'
die ganze Saite↓⍨
lassen Sie so viele Zeichen von vorne fallen, wie die Zahl vom zurückgegeben wurde{
anonyme explizite Funktion (⍵
bezeichnet das Argument)⎕RTL←10
Set R esponse T ime L imit bis zehn Sekunden3*⍨
Erhöhe diese Zahl (zehn) auf die Potenz von drei (tausend bedeutet "alle")::
bei diesen Ausnahmen (alle),0
0 zurückgeben⋄
Versuchen:⍞
Eingabe abrufen3⊣
verwerfe das und gib stattdessen 3 zurück}
Ende der Funktion (beachten Sie, dass das Argument⍵
nie erwähnt wurde)quelle
Perl ,
7467 BytesAlte Version
(Ausführen über Perl -M5.10.1 ...)
quelle
\n
.-M5.10.1
. Sie können einfach ersetzen-e
mit-E
. (wenn nötig-M5.10.1
, müssten Sie eine Strafe zu Ihrer Punktzahl hinzufügen)\n
liegt amdie
Verhalten von: "Wenn das letzte Element von LIST nicht in einer neuen Zeile endet, werden auch die aktuelle Skriptzeilennummer und die Eingabezeilennummer (falls vorhanden) gedruckt und eine neue Zeile angegeben." Wenn dies nicht der Fall ist, wird in Zeile 1 "keine Eingabe empfangen" angezeigt. Aber es könnte natürlich ein buchstäblicher Zeilenumbruch in der Zeichenfolge sein. Außerdem werden die Leerzeichen zwischendie
undsay
und ihren Parametern nicht benötigt. Gleiches gilt für das Finale;
. Und<>
es reicht aus, von der Standardeingabe zu lesen.eval
von STDIN lesen, können Sie vermeiden, einedie
Nachricht zu benötigen . Tatsächlich funktioniert ein Laufzeitfehler genauso gut:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 BytesVersuchen Sie es ohne Eingabe
Versuchen Sie es mit Eingabe
Versuchen Sie es ohne Eingabe
Versuchen Sie es mit Eingabe
quelle
start
und entfernen{
?start
, also nein..new
daraufC #,
180171148131 Bytes17 Bytes dank @VisualMelon gespart.
Voll / Formatierte Version:
quelle
namespace
und nicht eineusing
Richtlinie?using
Thread.Join(int)
(c
Klammernvar t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
1e4
aber das ist eindouble
und ich würde ein brauchen,int
also müsste ich tun(int)1e4
:(TI-BASIC,
8477 Bytes-7 danke an @ kamoroso94
Wartet, bis eine Nummer gedrückt wird.
Ich versuche herauszufinden, wie man die Sequenz spielt
{72,73,74,82,83,84,92,93,94}
. Es nimmt viel Platz ein.quelle
Repeat K or 10=checkTmr(T
tun würde.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
an einem Computer auf den Schlüssel warten . Wenn Sie die letzten 4 Zeilen mit Ihrer Methode kürzen, erhalten Sie die gleiche Bytezahl wie mit meiner. Ich mag deine Methode allerdings.or
in der repeat - Anweisung, verwenden Sie diese stattdessen für -7 Bytesabs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
NodeJS,
105103101 Bytes-2 dank @apsillers Bytes
-2 Bytes , die durch Bewegen
console.log()
inexit()
Führen Sie das Programm aus, indem Sie es in einer Datei speichern und mit node ausführen, oder führen Sie es direkt über die Befehlszeile aus
node -e "<code>"
quelle
console.log()
Aufruf tatsächlich in den Parameter von zu verschiebenexit()
. Das sind jetzt zwei weniger.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 ByteVersuch es
Erfordert ein Closing
>
aminput
, um in einem Snippet arbeiten zu können.quelle
10
statt1e4
?10
wäre 10 Millisekunden, die Challenge Challenge sagt 10 Sekunden , das sind also 10000 Millisekunden1e4
.10 != 1e4
weil ich einVB.Net - 174 Bytes
COBOL-Version kommt morgen ;-)
quelle
:
. Dies benötigt die gleiche Anzahl von Bytes wie ein Zeilenumbruch, verringert also nur die Lesbarkeit, ohne den Golf-Score zu verbessern.:
Zeilenumbruch-Ersetzung so sein kann, dass der Treading-Aufruf ohne Wiederholung als inline deklariert wird - aber ich bin nicht positiv, meine Hauptsprache ist VBA, das Threading oder Lesen von der <strike> -Konsole <nicht unterstützt / strike> Unmittelbares Fenster zum Zeitpunkt der Funktionsdefinition oder des Aufrufs: PLos, 149 Bytes
quelle
AHK ,
6765 Bytes2 Bytes von Blauhirn gespeichert
AHK hat eine eingebaute Zeitüberschreitung für Eingabefelder.
Ich habe versucht , schlau zu bekommen und verwenden
!o
statt ,ErrorLevel
aber das schlägt fehl , wenn die Benutzereingaben einen Falsey Wert.Fast die Hälfte der Antwort sind nur die Befehlsnamen und der feste Text.
quelle
Timeout
ist fast der letzte Parameter:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 BytesVersuchen Sie zuerst, Golf zu spielen.
-4 für
any()
, -7 für das Schneiden, danke @ user2357112!-6, komme
select()
vonpty
stattselect
.quelle
"no input received"
string:"no input received"[3*bool(...):]
.any(...)
anstelle von verwendenbool(...[0])
.pty
Modul ist nur auf Linux-Plattformen verfügbar, aber ich benutze es nur, weil sein Name kurz ist und esselect
verfügbar macht . Version 2 funktioniert wahrscheinlich besser unter Windows.PowerShell, 110 Byte
quelle
Python 3, 158 Bytes
Ich habe versucht, Seths Python 3-Antwort auszuführen, aber unter Windows wird sie ausgelöst
ModuleNotFoundError: No module named 'termios'
. Da ich seine Antwort nicht kommentieren kann, habe ich mich stattdessen für eine Lösung entschieden, die plattformunabhängig sein sollte.Es ist mein erstes Mal, dass ich Golf spiele, also bin ich sicher, dass es verbessert werden könnte.
quelle
Tcl, 99 Bytes
quelle
SmileBASIC 3, 74 Bytes
"Akzeptiert Eingaben", indem auf einen beliebigen Tastendruck gewartet wird (dies sollte als Eingabe gelten.)
quelle
Scratch 2 / 3.x, 41 Punkte ( Erklärung )
1: Wenn GF geklickt hat
1: frag [] und warte
1 + 14 Zeichen: Sagen Sie [Eingang erhalten]
1: stop [all v] (Anmerkung: da "all" die Standardeinstellung war, habe ich den Block als 1 gezählt)
1 + 2 Ziffern: Warten Sie (10) Sekunden
1 + 17 Zeichen: say [keine Eingabe erhalten]
1: stop [all v]
quelle
> <> , 43 + 6 = 49 Bytes
Probieren Sie es online!
+5 für das
-t.08
Flag, das das Häkchen auf 0,08 Sekunden setzt, und +1 für dasa
Flag, das Leerzeichen und übersprungene Anweisungen als Häkchen zählt.Das Programm prüft etwa jede Sekunde auf Eingaben und verlässt die Schleife, wenn Eingaben erkannt werden. Wenn keine Eingabe empfangen wird, wird die Schleife von unten verlassen und
no
an den Anfang der Zeichenfolge angehängt. Zunächst/
soll sichergestellt werden, dass die letzte Überprüfung für die Eingabe genau auf der 10-Sekunden-Marke liegt.Es dauert dann ungefähr 5-6 Sekunden, um die Zeichenfolge selbst zu drucken.
quelle
-at.08
um ein Byte zu speichern.Java 1.4+, 284 Bytes
Ungolfed:
Bitte schlagen Sie keine versionsspezifischen Java-Verbesserungen vor. Dies ist eine generische Java-Antwort, die in allen derzeit stabilen Java-Umgebungen (1.4 und höher) funktioniert.
Sehr verdammt wortreich ... Der Fang ist erforderlich, ich kann ihn nicht werfen. Der Systemimport nimmt ab wie 5 Bytes ... Überladen ist auch wortreich, so dass es zu einem wortreichen, schlecht aussehenden Durcheinander kommt.
quelle
10000L
und nicht10000
? Ich dachte, Ints würden automatisch in Sehnsüchte umgewandelt.Julia 0,6 , 78 Bytes
Länger als ich erwartet hatte. Siehe Kommentare für den TIO-Link "Keine Eingabe erhalten".
Probieren Sie es online!
quelle
SmileBASIC,
7473 BytesNimmt 1 Zeichen der Eingabe auf.
Und eine 39-Byte-Lösung, die wahrscheinlich nicht gültig ist (akzeptiert keine Texteingabe, hat nur einen OKKnopf, den Sie drücken können)
quelle