Insistir en una respuesta

31

En tiempo de ejecución, siga solicitando una línea de entrada hasta que el usuario ingrese algo (que no sea una nueva línea vacía), es decir, no solo presione Entero OK. La salida o el resultado no es obligatorio ni está prohibido

Pseudocódigo 1

myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
  waitfor(myform.ok,"click")
until myform.mytxt.content <> ""

Pseudocódigo 2

LET TEXT = ""
WHILE TEXT = "" DO
  TEXT = PROMPT("")
ENDWHILE

Ejemplo 1

El programa se ejecuta e inmediatamente aparece un formulario con un solo campo de texto y un OKbotón.
El usuario hace clic en el OKbotón.
No pasa nada.
El usuario pega "hola mundo" en el campo de texto y hace clic en el OKbotón.
El programa termina.

Ejemplo 2

Se llama a la función e inmediatamente muestra una línea en blanco y un cursor parpadeante.
El usuario presiona Enter.
El cursor se mueve una línea hacia abajo.
El usuario presiona Enter.
El cursor se mueve una línea hacia abajo.
El usuario presiona La PPCGEnter
función vuelve.

Adán
fuente
¿está permitido contar líneas de solo espacio como vacías?
12431234123412341234123
@ 12431234123412341234123 No.
Adám
¿Es necesario esperar la línea completa una vez que el usuario comienza a ingresar datos?
Matteo Italia
Ok, de un comentario en la respuesta eliminada de @ CodyGray parece que no está permitido.
Matteo Italia
@MatteoItalia Sí, correcto; Una línea de entrada .
Adám

Respuestas:

16

TI-BASIC, 2 bytes

:Prompt X

TI-BASIC hace esto automáticamente. Una vez que se da entrada, se cerrará.

Aquí hay un GIF:

ingrese la descripción de la imagen aquí

Mire el recuento de la entertecla en el historial de pulsaciones de teclas. Creado con TI-SmartView CE y ezgif.com .

Scott Milner
fuente
1
Hmm .. esto es de 2 bytes?
Geeky I
99
TI-BASIC está basado en token .
Scott Milner
¿Y no tomará Enter como respuesta? ¿Hay algún lugar para probar esto en línea?
Adám
@ Adám No tomará enter para obtener una respuesta. Hasta donde sé, no hay ningún lugar al que pueda ir en línea sin tener una imagen de TI ROM. Sin embargo, puedo publicar un .gif cuando llegue a casa.
Scott Milner
1
@ Adám Es ilegal probar TI-BASIC en línea sin tener una ROM usted mismo.
Erik el Outgolfer
15

sed, 4

/./q

Espera una línea de entrada que tiene 1 o más caracteres, luego se cierra.

Pruébalo en línea . Pero funciona mejor en un shell vivo:

sed '/./q'
Trauma digital
fuente
15

JavaScript, 37 22 17 bytes

while(!prompt());

while(!prompt());

Explicación

La whilepalabra clave inicia el whileciclo. En la condición del bucle, !prompt()pide entrada y verifica si se da o no. Si no se proporciona, se ejecuta el cuerpo del bucle, que en nuestro caso está vacío, entonces el intérprete vuelve a la condición del bucle. El mismo proceso ocurre una y otra vez hasta que el usuario da la entrada.

Arjun
fuente
while(""==prompt(""));
Adám
@ Adám Wow. Estaba pensando en cómo hacer que la solución sea más pequeña, y se te ocurrió una respuesta, ¡gracias!
Arjun
Parecía obvio. Sin embargo, la consola de mi navegador se niega a ejecutarse sin un seguimiento ;, mientras que su expresión inicial funcionó bien sin ella ;. ¿Alguna idea de por qué?
Adám
No, Chrome Entonces, si algún motor de JavaScript puede manejar la omisión de la expresión actual ;, puede guardar ese byte :-)
Adám
1
@ Adám Acabo de descubrir la causa real del error producido después de la eliminación del punto y coma del código fuente. La razón por la que eso sucede es que el bucle while espera una declaración (o un grupo de declaraciones) como el cuerpo del bucle después de la condición del bucle. Agregar el punto y coma hace pensar que el cuerpo del bucle ha terminado. Sin embargo, eliminar el punto y coma hace que espere la siguiente instrucción como cuerpo del bucle. Pero en nuestro caso, no hay nuevas declaraciones después de la condición del bucle. Entonces, arroja un error. Espero que esté claro ahora. ¡Soy terrible explicando cosas! : p
Arjun
9

Java, 55 bytes

void f()throws Exception{while(System.in.read()==10);}}

Si recuerdo correctamente (ha pasado un tiempo desde que he estado activo en PPCG), mi programa puede ser simplemente una función.

Esto es específico del sistema; solo funciona en sistemas donde el carácter de fin de línea es una nueva línea. Si el carácter de fin de línea es en cambio un retorno de carro, reemplace 10con 13. En Windows, esto no funciona, como lo es el final de línea en Windows \r\n.

Esto hace uso del hecho de que puedo leer directamente System.in.

Justin
fuente
2
¡Bienvenido de nuevo, aunque solo sea por esta respuesta! : D
Conor O'Brien
3
Bienvenido de nuevo @Justin!
Trauma digital
1
No planea estar activo; solo pasa por aquí para una pregunta aquí y allá
Justin
Para evitar el problema "no funciona en Windows", ¿no puede simplemente probar el primer carácter y ver si es así \r, en lugar de probar la cadena completa y luego tener problemas con 2 caracteres EOL?
Cody Gray
@CodyGray No. Estoy leyendo 1 char a la vez; eso es todo lo que te System.inpermite hacer directamente (bueno, puedes leer una serie de caracteres a la vez). Mi cuerpo de bucle (vacío) se ejecuta para cada carácter en la entrada
Justin
9

HTML5, 33 22 bytes

<form><input required>

<form><input required>

Explicación

los required atributo en <input>hace que el navegador informe al usuario "este campo es obligatorio" -sort-of-message, si no ingresan un valor. Sin embargo, cuando ingresan un valor, el valor se envía a la URL del actionatributo del <form>(que en nuestro caso es el archivo actual, ya que no hemos especificado ningún valor explícitamente).

Esto se probó en la última versión de Google Chrome (versión 55.0). Puede funcionar en otros navegadores y versiones.

Arjun
fuente
action=/podría funcionar en algunos navegadores.
Neil
1
Probablemente podría deshacerse del actionatributo por completo.
Shaggy
1
@Arjun The action=y.pno es necesario, ya que la mayoría de los Agentes de usuarios se enviarán a la misma ubicación si no actionse especifica
ninguno
@Arjun He probado <form><input required>la última versión de Google Chrome y funciona según lo previsto. Y si eres escéptico, solo úsalo action=#. Eso ahorra 2 bytes.
Ismael Miguel
3
@Arjun Esa es una idea terrible para el golf de código. No puedo decir sobre todos los navegadores, ya que no tengo Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2 - 7, cada lanzamiento de Google Chrome, Firefox 3.0+ y así sucesivamente ... ¡De hecho, no todos los navegadores HTML5 implementan el requiredatributo! Además, #hay una ruta disponible desde HTML 1.0, si estoy en lo correcto. Y agregar no actiona su formulario es lo mismo que action=".", que es el archivo en sí.
Ismael Miguel
8

Jalea , 3 bytes

ɠṆ¿

No hay mucho que ver en TIO, me temo.

Pruébalo en línea!

Cómo funciona

Este es un programa niládico, lo que significa que no requiere argumentos de entrada. El argumento implícito y el valor de retorno son ambos 0 en este caso.

¿(while) es un rápido que muestra dos enlaces de la pila de enlaces: una condición ( ) y un cuerpo.

es un átomo monádico: plano lógico NO. Si el valor de retorno anterior es falso (aquí, 0 o una cadena vacía), devuelve 1 y se llama al cuerpo.

ɠes un átomo niládico; lee una línea sin formato de STDIN y devuelve el resultado.

Una vez que ɠlee una línea no vacía, devuelve 0 y salimos del bucle.

Dennis
fuente
Así de rápido, ¿eh? Ah bueno.
Adám
6

brainfuck , 26 bytes

+[>,----------[[-]<[-]>]<]

Pruébalo en línea!

Monja permeable
fuente
1
Ese enlace TIO es bueno y bueno, pero es un poco difícil saber qué sucede cuando se ejecuta ... ;-)
Adám
1
@ Adám puedes agregar ,.hasta el final para verificar.
Leaky Nun
5

Perl 5, 8 + 1 (-p o -n bandera) bytes

/./&&die

Toma datos de stdin y muere tan pronto como la expresión regular coincide con cualquier cosa, excepto una nueva línea.

Chris
fuente
5

C, 52 bytes , 33 bytes , 29 bytes

-19 bytes gracias a Justin

-4 bytes gracias a Christoph

main(){while(getchar()==10);}

10 es igual a '\ n' - En caso de que esto no sea obvio.

Skynet
fuente
1
Puedes jugar golf por 1 personaje usando un bucle en ;lugar del {}bucle for
Justin
1
Aunque no es compatible con los estándares, se puede quitar el #include<stdio.h>si se cambia a while(getchar()==10): int main(){while(getchar()==10);}.
Justin
2
@Justin main(){while(getchar()==10);}es suficiente sin necesidad de int por defecto.
Christoph
1
main(){scanf("%s");}también funcionaría si las líneas de solo espacio pueden contar como vacías.
12431234123412341234123
1
@DanielEarwicker Tienes razón. Eso no me pareció claro la primera vez que leí la pregunta, pero ahora veo lo que estás diciendo. En ese caso, hay muchas respuestas no conformes a esta pregunta.
Justin
5

Bash, 51 bytes (39 sin "#! / Bin / bash")

Es la primera vez que participo en PPCG, así que no seas grosero; D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done
Nicolas Fischer
fuente
1
Bienvenido a PPCG.
Adám
3
¡Bienvenido a PPCG !, si planeas usar Bash como un lenguaje de golf, esta publicación te puede interesar, tiene un montón de consejos para hacer que los programas de bash sean tan pequeños como sea humanamente posible, también hay una versión más general que tal vez quieras hojear también.
colsw
@ConnorLSW Wow, gracias, esa publicación me ayudará mucho. Intentaré editar mi respuesta con estos nuevos consejos lo antes posible.
Nicolas Fischer
44
no necesita#!/bin/bash
12431234123412341234123
Bueno, también la primera vez para mí :) Pero tal vez podría utilizar la recursividad: [ -z `line` ] && $0o si el desuso lineno está en el sistema: [ -z `head -n1` ] && $0. Eso debería ser 20 o 24 bytes.
Yeti
4

Java , 128 126 bytes

2 bytes gracias a Kevin Cruijssen.

import java.util.*;class a{public static void main(String[]a){for(Scanner s=new Scanner(System.in);s.nextLine().isEmpty(););}}

Pruébalo en línea!

Monja permeable
fuente
1
Puede jugar golf por dos bytes: cambie el whilea a fory coloque el Scanner s=new Scanner(System.in);interior. Y cambia el .equals("")a .isEmpty().
Kevin Cruijssen
Estoy bastante seguro de que puede eliminar la importación si incorpora el uso del escáner; bastante seguro de que filtrar un escáner funciona bien:while(new java.util.Scanner(System.in).nextLine().isEmpty());
Justin
4

C # (.NET Core) , 66 bytes

class C{static void Main(){for(;System.Console.ReadLine()!="";);}}

Pruébalo en línea!

-6 bytes gracias a raznagul.

Pavel
fuente
1
Puede guardar 6 bytes escribiendo System.Console.ReadLInedirectamente y soltando la usingDeclaración.
raznagul
Un whilebucle sería el mismo número de bytes, pero creo que es una forma más idiomática de escribir el código que un forbucle.
Cody Gray
puede guardar 24 bytes escribiéndolo como lambda en el formulario () => {}
Ceshion
o, alternativamente, 7 convirtiéndolo en un método de instancia
Ceshion
4

QBasic 4.5, 15 bytes

INPUT a$:IF a$=""THEN RUN

Pide entrada, luego verifica si se le dio alguna. Si no, RUNreinicia el programa.

steenbergh
fuente
2
No sabía sobre el RUN. +1. (Eso también rima; CORRE y MÁS UNO :))
Arjun
4

Rubí, 13 bytes

gets until/./

Desearía getstomar un argumento Regexp.

histocrat
fuente
4

R, 27 24 23 22 bytes

while(!sum(scan()^0))t

Toma la entrada de stdin y repite siempre que la entrada sea de longitud 0. Corte algunos bytes debido a Jarko Dubbeldam y MickyT. Reemplazado {}con tpara guardar otro byte.

rturnbull
fuente
Creo que puede omitir el ,'', ya que ni la entrada (cadena o numérica) ni la forma de terminar se especificaron en el desafío.
JAD
@JarkoDubbeldam: buena captura! No me di cuenta de que los errores eran una terminación válida.
rturnbull
que while(!sum(scan()^0)){}funciona tan bien?
MickyT
@MickyT parece funcionar. Aparentemente, incluso Inf ^ 0 es 1. Buena captura con el sum(). Lástima que la ^0necesidad de manejar 0como entrada.
JAD
@MickyT Eso es un gran hallazgo con el uso de sum, gracias! He actualizado la respuesta.
rturnbull
3

PHP, 18 bytes

while(!readline())
Skynet
fuente
¿Comprueba que la línea de texto no está vacía?
Daniel Earwicker
1
Sí, tan pronto como la línea no esté vacía, readline()devuelve algo más que una cadena vacía. Las cadenas no vacías evalúan trueen php, al menos la mayoría de ellas lo hacen. "0" parece ser una excepción, ya que acabo de leer en los documentos. Bueno, supongo que mi respuesta es incorrecta ahora.
Skynet
3

AWK , 8 11 bytes

NF{exit}

Esperar entrada. Si el número de campos en la entrada es mayor que 0, salga.

EDITAR:

Me acabo de dar cuenta de que esto no funciona solo para la entrada que contiene caracteres de espacio en blanco. IFS debe establecerse en una cadena vacía usando-F "" opción de línea de comando. Por lo tanto +3 bytes.

Pruébalo en línea!

Maxim Mikhaylov
fuente
En realidad, podrías reemplazarlo NFcon 1. Entonces no necesitas configurar IFS. Y refunfuñar me golpeaste y AWKsolución.
Robert Benson
1
@RobertBenson Intenté reemplazarlo NFcon 1. En ese caso, el programa sale dado cualquier entrada, incluida la nueva línea vacía.
Maxim Mikhaylov
Extrañé esa parte de la especificación.
Robert Benson
3

SpecBAS - 34 bytes

1 DO : INPUT a$: LOOP UNTIL a$<>""

Simplemente repite hasta que se ingrese una cadena no vacía.

Brian
fuente
3

Mathematica, 26 20 bytes

For[,Input[]==Null,]
Un simmons
fuente
1
Afeite seis bytes con For[,Input[]==Null,]. Funciona igual de bien.
Kelly Lowder
3

Haskell, 19 17 bytes

f=do""<-getLine;f

Define una función f que si lee la línea vacía se llama a sí misma nuevamente. Al leer una línea no vacía, se genera una excepción y se detiene la recursividad.

Editar: @Laikoni reemplazó el parámetro con una coincidencia de patrón y guardó 2 bytes. ¡Gracias!

nimi
fuente
¡No pensé que el código Haskell IO pudiera ser tan corto como este!
Geeky I
17 bytes:f=do""<-getLine;f
Laikoni
@Laikoni: buena captura. ¡Gracias!
nimi
3

Aceto , 9 5 4 bytes

read un valor, lo niegan ( !; implícitamente se convierte en un booleano) y reflejan horizontalmente si el valor es verdadero ( |).

!
r|
L3viatán
fuente
Espera, Aceto corre ** arriba **‽ Y dicen que APL es extraño por correr de derecha a izquierda ...
Adám
3
@ Adám Aceto corre a lo largo de una curva 2D de Hilbert.
L3viathan
3

Java, 66 64 60 bytes

int a(){return!System.console().readLine().isEmpty()?0:a();}

Mi primera respuesta de Java, me encantaría algunos consejos!

OldBunny2800
fuente
Probablemente pueda eliminar el espacio entre returny !. .equals("")== .isEmpty(). Puede devolver int en lugar de String. OTOH, regresa vacío pero while(System...)o bienif(System...)a();
Justin
que puede hacer int a(){..?0:a();}, ahorra 3 bytes
Khaled.K
@ Khaled.K en realidad 4!
OldBunny2800
A @Justin y Khaled.K, ¡gracias por tu consejo!
OldBunny2800
2

Braingolf , 8 bytes [no competidor]

1[{?:+|]

No compite porque { , que lee los comentarios de STDIN, se agregó a braingolf después de la fecha de publicación de este desafío.

Explicación:

1         Pushes 1 to the stack
 [        Begins while loop
  {       Reads from STDIN, returns -1 if no input given
   ?      Checks if last item in stack is > 0
    :     Else
     +    Adds the last 2 items together, however there is only 1 item, so add it to itself
      |   Endif
       ]  End While, decrement first item in stack, or exit if first item is 0
Skidsdev
fuente
Jaja, implementaste la entrada una hora después de que se publicara el desafío
solo ASCII
@ ASCII solo tuvo que hacerlo eventualmente, jaja
Skidsdev
2

Carbón de leña , 4 bytes

W¬Sω

Explicación

W      While
  ¬S   Logical not of string input
     ω  Print ""
Solo ASCII
fuente
2

05AB1E , 5 bytes

[IõÊ#

Explicación:

[     Start infinite loop
 I    One line of input
   Ê  Not equal to
  õ   Empty string
    # Break if true

Pruébalo en línea!

Okx
fuente
Estos son 5 puntos de código Unicode, no 5 bytes; son 7 bytes en UTF-8, 10 bytes en UTF-16 o 20 bytes en UTF-32.
Matteo Italia
@MatteoItalia 05AB1E usa su propia codificación , por lo tanto, cada uno de estos caracteres tiene 1 byte.
Okx
Uh, lo siento, estoy corregido!
Matteo Italia
2

PowerShell, 20 bytes

for(;!(read-host)){}

ejecuta un bucle for

read-host solicita entrada

si read-host no devuelve nada, se evalúa como falso, por lo que lo invertimos !(...)y lo usamos como la comprobación de finalización del bucle.

mucho más corto que cualquier do{$a=read-host}while($a-eq"")tipo de solución que involucra variables.

colsw
fuente
2

Rápido, 22 bytes

while readLine()==""{}
Caleb Kleveter
fuente
2

CJam , 5 bytes

{l!}g

Pruébalo en línea! (TIO realmente no muestra el comportamiento adecuado)

Explicación

{      e# Do:
 l     e#  Read next line of input
  !    e#  Boolean negate (empty strings are falsy)
   }g  e# Pop the top of stack, if truthy, repeat.
Gato de negocios
fuente