Su tarea hoy es implementar un límite de tiempo para obtener información, una tarea que he encontrado bastante molesta en la mayoría de los idiomas.
Creará una función de programa que solicita al usuario que ingrese. Inmediatamente después de que el usuario proporcione la entrada, imprima el mensaje input received
y finalice la ejecución / devolución. Sin embargo, si el usuario espera más de 10 segundos para proporcionar información, envíe el mensaje no input received
y finalice la ejecución / devolución.
La entrada debe ser de stdin
(la consola) o equivalente, no argumentos de función o programa, sin embargo, la salida puede ser stdout
el valor de retorno de su función o cualquier otro método de salida aceptado.
Puede solicitar cualquier cantidad de entrada, puede ser un solo carácter, una línea, una palabra o cualquier método que sea más corto en su idioma siempre que espere al menos un carácter.
Debe emitir tan pronto como se reciba la entrada, no después de que hayan pasado los 10 segundos.
Después de que hayan pasado 10 segundos, debe finalizar, no puede continuar esperando la entrada después de que no input received
se haya impreso.
Puede suponer que la entrada no se pasa en el tiempo transcurrido entre 10 segundos y el texto que se imprime en la pantalla, ya que esta es una ventana extremadamente pequeña. También puede suponer que el equivalente sleep
integrado de su idioma es consistentemente, absolutamente perfecto.
Este es el código de golf , ¡la menor cantidad de bytes gana!
sleep
funciones de su idioma perfectamente el 100% del tiempo.Respuestas:
bash, 38 bytes
Esto utiliza la
-t
opción (tiempo de espera) para bashread
, lo que hace que falle y devuelva un código de salida distinto de cero si no se proporciona ninguna entrada en el número de segundos especificado.fuente
Haskell,
9789 bytesSi el
timeout
tiempo de espera regresaNothing
yJust Char
(Char
porque estamos usandogetChar
) de lo contrario. Este valor de retorno se convierte"no "
ao""
por funciónmaybe "no " mempty
. Anexar"input received"
e imprimir.Editar: @BMO sugirió
maybe
y guardó algunos bytes.fuente
g
conlet
:,let g Nothing="no ";g _=""
entonces la llamada a la funcióntimeout....
funciona bien para mí.g
por unomaybe"no "(pure"")
más corto e incluso puede incluirlo en línea, ahorrándole 6 bytes.mempty
en lugar de(pure"")
es aún más corto.POSIX C99,
7163 bytesSin golf:
Como
poll
devolverá 1 en caso de éxito, multiplicamos el resultado por 3 y desplazamos la cadena en consecuencia. Luego, usamos el hecho de questruct pollfd
tiene el siguiente diseño:y
STDIN_FILENO
es0
,POLLIN
es1
reemplazarpfd
conint pfd[] = {0,1}
, que finalmente hacemos un compuesto literal (según lo permitido por C99).fuente
poll.h
encabezado no es parte del estándar de lenguaje C99.Apéndice, 113
Applescript realmente no lee de STDIN. Esperemos que a
display dialog
sea aceptable aquí:fuente
APL (Dyalog) ,
4140 bytesEsta es una función tácita anónima que necesita un argumento ficticio para ejecutarse .
'no input received'
la cadena completa↓⍨
suelte tantos caracteres desde el frente como el número devuelto por el{
función explícita anónima (⍵
denota el argumento)⎕RTL←10
establecer R espuesta T ime L IMIT a segundos diez3*⍨
elevar ese número (diez) a la potencia de tres (mil significa "todos")::
con esas excepciones (todas),0
volver 0⋄
tratar:⍞
obtener entrada3⊣
descartar eso y en su lugar devolver 3}
fin de la función (tenga en cuenta que el argumento⍵
nunca se mencionó)fuente
Perl ,
7467 bytesVersión antigua
(Ejecutar a través de perl -M5.10.1 ...)
fuente
\n
.-M5.10.1
. Puedes simplemente sustituirlo-e
por-E
. (si fuera necesario-M5.10.1
, tendría que agregar una penalización a su puntaje)\n
está ahí debido aldie
comportamiento de: "Si el último elemento de LIST no termina en una nueva línea, también se imprime el número de línea de script actual y el número de línea de entrada (si corresponde), y se proporciona una nueva línea". Por lo tanto, sin él se mostrará "no se recibió ninguna entrada en la línea 1.". Pero, por supuesto, podría ser un salto de línea literal en la cadena. Además de eso, los espacios entredie
ysay
y sus parámetros no son necesarios. Lo mismo para la final;
. Y<>
es suficiente para leer desde la entrada estándar.eval
lees desde STDIN, puedes evitar necesitar undie
mensaje. De hecho, un error de ejecución funciona igual de bien:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 bytesPruébalo sin entrada
Pruébalo con entrada
Pruébalo sin entrada
Pruébalo con entrada
fuente
start
y{
?start
, así que no..new
a ellaC #,
180171148131 bytesGuardado 17 bytes gracias a @VisualMelon.
Versión completa / formateada:
fuente
namespace
y no unausing
directiva?using
Thread.Join(int)
, (deshacerse dec
, perder llaves, etc., etc.):var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
(VB.NET ya parece hacer esto)1e4
pero eso es unadouble
y necesitaría una,int
así que tendría que hacer(int)1e4
:( Buena idea, aunqueTI-BASIC,
8477 bytes-7 gracias a @ kamoroso94
Espera hasta que se presione un número.
Estoy tratando de descubrir cómo jugar golf en la secuencia
{72,73,74,82,83,84,92,93,94}
. Está ocupando mucho espacio.fuente
Repeat K or 10=checkTmr(T
lo haría.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
llave en una computadora. Además, acortar las últimas 4 líneas con su método en realidad da el mismo número de bytes que el mío. Sin embargo, me gusta tu método.or
en su declaración de repetición, use esto en su lugar para -7 bytes:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
Nodejs,
105103101 bytes-2 bytes gracias a @apsillers
-2 bytes moviéndose
console.log()
aexit()
Ejecútelo guardando en un archivo y ejecútelo con el nodo o ejecútelo directamente desde la línea de comandos haciendo
node -e "<code>"
fuente
console.log()
llamada al parámetro deexit()
. Eso son dos menos, ahora.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 bytesIntentalo
Requiere un cierre
>
en elinput
para trabajar en un fragmento.fuente
10
lugar de1e4
?10
sería de 10 milisegundos, el desafío de desafío dice específicamente 10 segundos , que es de 10000 milisegundos, por lo tanto1e4
.10 != 1e4
porque soy un tontoVB.Net - 174 bytes
La versión de COBOL llegará mañana ;-)
fuente
:
. Eso toma el mismo número de bytes que un salto de línea, por lo que solo disminuye la legibilidad sin mejorar el puntaje de golf.:
sustitución de salto de línea puede ser para que la llamada de pisadas pueda declararse en línea sin repetir, pero dicho esto no soy positivo, mi idioma principal es VBA que no admite subprocesos o lectura desde la consola <strike> < / strike> asistente de ventana inmediata desde el momento de la definición de la función o llamada: PGo, 149 bytes
fuente
AHK ,
6765 bytes2 bytes guardados por Blauhirn
AHK tiene un tiempo de espera incorporado para cuadros de entrada.
Intenté ser inteligente y usar en
!o
lugar de,ErrorLevel
pero eso falla si el usuario ingresa un valor falso.Casi la mitad de la respuesta son solo los nombres de los comandos y el texto fijo.
fuente
Timeout
es casi el último parámetro:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 bytesPrimero intente jugar al golf.
-4 para
any()
, -7 por rebanar, gracias @ user2357112!-6, obtener
select()
de enpty
lugar deselect
.fuente
"no input received"
cadena:"no input received"[3*bool(...):]
.any(...)
lugar debool(...[0])
.pty
módulo solo está disponible en plataformas Linux, pero solo lo estoy usando porque su nombre es corto y estáselect
disponible. La versión 2 probablemente funciona mejor en Windows.PowerShell, 110 bytes
fuente
Python 3, 158 bytes
Intenté ejecutar la respuesta de Seth Python 3 pero en Windows arroja
ModuleNotFoundError: No module named 'termios'
, y como no puedo comentar su respuesta al respecto, decidí encontrar una solución que debería ser independiente de la plataforma.Es mi primera vez jugando al golf, así que estoy seguro de que podría mejorarse.
fuente
Tcl, 99 bytes
fuente
SmileBASIC 3, 74 bytes
"Acepta la entrada" esperando que se presione cualquier botón (eso debería contar como entrada).
fuente
Scratch 2 / 3.x, 41 puntos ( Explicación )
1: cuando GF hizo clic
1: pregunta [] y espera
1 + 14 caracteres: decir [entrada recibida]
1: detener [todos v] (nota: dado que "todos" era su configuración predeterminada, conté el bloque como 1)
1 + 2 dígitos: espera (10) segundos
1 + 17 caracteres: decir [no se recibió entrada]
1: detener [todos v]
fuente
> <> , 43 + 6 = 49 bytes
Pruébalo en línea!
+5 para la
-t.08
bandera, que establece el tick en 0.08 segundos, y +1 para laa
bandera, que cuenta los espacios en blanco y las instrucciones omitidas como ticks.El programa verifica la entrada aproximadamente una vez por segundo y sale del bucle si se detecta una entrada. Si no se recibe la entrada, sale del bucle desde la parte inferior, agregando
no
al comienzo de la cadena. La inicial/
es garantizar que la última verificación de entrada esté exactamente en la marca de 10 segundos.Luego toma unos 5-6 segundos para imprimir la cadena en sí.
fuente
-at.08
para guardar un byte.Java 1.4+, 284 bytes
Sin golf:
No sugiera mejoras de Java específicas de la versión, esta es una respuesta genérica de Java que funciona en todos los entornos Java estables actualmente (1.4 y superiores).
Muy jodidamente prolijo ... Se requiere la captura, no se puede lanzar. La importación del sistema se reduce como 5 bytes ... La sobrecarga también es prolija, por lo que termina siendo un desastre desordenado y mal parecido al golf.
fuente
10000L
y no10000
? Pensé que los intérpretes se convierten en largos automáticamente.Julia 0.6 , 78 bytes
Más de lo que esperaba. Vea los comentarios para el enlace TIO "no se recibió entrada".
Pruébalo en línea!
fuente
SmileBASIC,
7473 bytesToma 1 carácter de entrada.
Y una solución de 39 bytes que probablemente no sea válida (en realidad no acepta ingreso de texto, solo tiene un OKbotón que puede presionar)
fuente