Insistere su una risposta


31

In fase di esecuzione, continua a richiedere una riga di input fino a quando l'utente immette qualcosa (diverso da una nuova riga vuota), ovvero non preme semplicemente Entero OK. L'output o il risultato non sono richiesti né vietati.

Pseudo-codice 1

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

Pseudo-codice 2

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

Esempio 1

Il programma viene eseguito e viene immediatamente visualizzato un modulo con un singolo campo di testo e un OKpulsante.
L'utente fa clic sul OKpulsante.
Non succede nulla.
L'utente incolla "ciao mondo" nel campo di testo e fa clic sul OKpulsante.
Il programma termina.

Esempio 2

La funzione viene chiamata e visualizza immediatamente una riga vuota e un cursore lampeggiante.
L'utente preme Enter.
Il cursore si sposta in basso di una riga.
L'utente preme Enter.
Il cursore si sposta in basso di una riga.
L'utente preme La PPCGEnter
funzione ritorna.


è consentito contare le righe di solo spazio come vuote?
12431234123412341234123,

@ 12431234123412341234123 No.
Adám,

È necessario attendere la riga completa quando l'utente inizia a immettere i dati?
Matteo Italia,

Ok, da un commento nella risposta eliminata di @ CodyGray sembra che non sia permesso.
Matteo Italia,

@MatteoItalia Sì, corretto; una linea di input .
Adám,

Risposte:


16

TI-BASIC, 2 byte

:Prompt X

TI-BASIC lo fa automaticamente. Una volta immesso, l'input verrà chiuso.

Ecco una GIF:

enter image description here

Guarda il conteggio sul entertasto nella cronologia della pressione dei tasti. Creato con TI-SmartView CE ed ezgif.com .


1
Hmm .. questo è 2 byte?
Geeky,

9
TI-BASIC è basato su token .
Scott Milner,

E non ci vorrà Enter per una risposta? C'è un posto dove testarlo online?
Adám,

@Adám Non ci vorrà inserire una risposta. Per quanto ne so, non c'è nessun posto in cui puoi andare online senza avere già un'immagine TI ROM. Posso pubblicare un .gif quando torno a casa, però.
Scott Milner,

1
@ Adám È illegale testare TI-BASIC online senza possedere una ROM.
Erik the Outgolfer



15

JavaScript, 37 22 17 byte

while(!prompt());

while(!prompt());

Spiegazione

La whileparola chiave avvia il whileciclo. Nelle condizioni del loop, !prompt()chiede input e controlla se viene dato o meno. Se non viene fornito, viene eseguito il corpo del loop, che nel nostro caso è vuoto, quindi l'interprete torna alla condizione di loop. Lo stesso processo si ripete all'infinito fino a quando l'utente non fornisce l'input.


while(""==prompt(""));
Adám,

@ Adám Wow. Stavo solo pensando a come rimpicciolire la soluzione e hai trovato una risposta, grazie!
Arjun,

Sembrava ovvio. Tuttavia, la mia console del browser si rifiuta di eseguire senza un trascinamento ;, mentre la tua espressione iniziale ha funzionato bene senza ;. Qualche idea sul perché?
Adám,

No, Chrome. Quindi, se un motore JavaScript può gestire l'omissione dell'espressione corrente ;, puoi salvare quel byte :-)
Adám,

1
@Adám Ho appena scoperto la vera causa dell'errore prodotto dopo la rimozione del punto e virgola dal codice sorgente. Il motivo per cui ciò accade è che mentre il ciclo si aspetta un'istruzione (o un gruppo di istruzioni) come corpo del ciclo dopo la condizione del ciclo. L'aggiunta del punto e virgola fa pensare che il corpo del loop sia finito. Tuttavia, la rimozione del punto e virgola causa l'attesa dell'istruzione successiva come corpo del ciclo. Ma nel nostro caso, nessuna nuova istruzione viene dopo la condizione del ciclo. Quindi, genera un errore. Spero sia chiaro adesso. Sono terribile nello spiegare le cose !! : p
Arjun,

9

Java, 55 byte

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

Se ricordo bene (è passato un po 'di tempo da quando sono attivo su PPCG), il mio programma può essere solo una funzione.

Questo è specifico del sistema; funziona solo su sistemi in cui il carattere di fine riga è una singola riga. Se il carattere di fine riga è invece un ritorno a capo, sostituire 10con 13. Su Windows, questo non funziona, come lo è il fine linea su Windows \r\n.

Questo fa uso del fatto che posso leggere direttamente da System.in.


2
Bentornato, se non altro per questa risposta! : D
Conor O'Brien,

3
Bentornato @Justin!
Digital Trauma,

1
Non sta pianificando di essere attivo; Mi faccio una domanda qua e là
Giustino

Per evitare il problema "non funziona su Windows", non puoi semplicemente testare il primo carattere e vedere se lo è \r, al contrario di testare l'intera stringa e quindi incorrere in problemi con 2 caratteri EOL?
Cody Gray,

@CodyGray No. Sto leggendo 1 carattere alla volta; questo è tutto ciò System.inche ti consente di fare direttamente (beh, puoi leggere una serie di caratteri alla volta). Il mio loop body (vuoto) viene eseguito per ogni carattere nell'input
Justin

9

HTML5, 33 22 byte

<form><input required>

<form><input required>

Spiegazione

L' requiredattributo su <input>fa sì che il browser informi l'utente "questo campo è obbligatorio" -sort-of-message, se non inseriscono un valore. Tuttavia, quando immettono un valore, il valore viene inviato all'URL actiondell'attributo di <form>(che nel nostro caso è il file corrente stesso, poiché non abbiamo specificato alcun valore in modo esplicito).

Questo è stato testato sull'ultima versione di Google Chrome (versione 55.0). Può funzionare in altri browser e versioni.


action=/potrebbe funzionare su alcuni browser.
Neil,

1
Probabilmente potresti abbandonare del actiontutto l' attributo.
Shaggy,

1
@Arjun The action=y.pnon è necessario, poiché la maggior parte degli User Agent invierà nella stessa posizione se non actionè specificato
MayorMonty

@Arjun Ho provato <form><input required>l'ultima versione di Google Chrome e funziona come previsto. E se sei scettico, basta usare action=#. Ciò consente di risparmiare 2 byte.
Ismael Miguel,

3
@Arjun Questa è una terribile idea per il golf del codice. Non posso dire di tutti i browser, dal momento che non possiedo Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2 - 7, ogni singola versione di Google Chrome, Firefox 3.0+ e avanti e avanti e avanti e avanti ... In effetti, non tutti i browser HTML5 implementano l' requiredattributo! Inoltre, #è un percorso disponibile da HTML 1.0, se ho ragione. E aggiungere no actional modulo è lo stesso di action=".", che è il file stesso.
Ismael Miguel,

8

Gelatina , 3 byte

ɠṆ¿

Non ho molto da vedere su TIO, temo.

Provalo online!

Come funziona

Questo è un programma niladico, nel senso che non accetta argomenti di input. L'argomento implicito e il valore restituito sono entrambi 0 in questo caso.

¿(while) è una rapida che fa apparire due collegamenti dalla pila di collegamenti: una condizione ( ) e un corpo.

è un atomo monadico: piatto logico NOT. Se il valore restituito precedente è errato (qui, 0 o una stringa vuota), restituisce 1 e viene chiamato il corpo.

ɠè un atomo niladico; legge una riga non elaborata da STDIN e restituisce il risultato.

Una volta che ɠlegge una riga non vuota, restituisce 0 e si esce dal ciclo.


Così veloce, eh? Ah bene.
Adám,



5

Perl 5, 8 + 1 (-p o -n flag) byte

/./&&die

Prende input da stdin e muore non appena il regex corrisponde a tutto tranne che a una nuova riga.


5

C, 52 byte , 33 byte , 29 byte

-19 byte grazie a Justin

-4 byte grazie a Christoph

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

10 è uguale a '\ n' - Nel caso in cui questo non sia ovvio.


1
Puoi giocare a golf di 1 carattere usando un ciclo ;anziché {}il ciclo while
Justin

1
Anche se non è compatibile con gli standard, è possibile rimuovere il #include<stdio.h>se si passa a while(getchar()==10): int main(){while(getchar()==10);}.
Giustino

2
@Justin main(){while(getchar()==10);}è sufficiente non è necessario per int predefinito.
Christoph,

1
main(){scanf("%s");}funzionerebbe anche se le righe solo spaziali potessero essere considerate vuote.
12431234123412341234123,

1
@DanielEarwicker Hai ragione. Non mi è sembrato chiaro la prima volta che ho letto la domanda, ma ora capisco cosa stai dicendo. In tal caso, ci sono molte risposte non conformi a questa domanda.
Giustino

5

Bash, 51 byte (39 senza "#! / Bin / bash")

È la prima volta che partecipo a PPCG, quindi non essere scortese; D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done

1
Benvenuti in PPCG.
Adám,

3
Benvenuto in PPCG !, se stai pensando di usare Bash come lingua per giocare a golf potresti trovare questo post interessante, ha un sacco di consigli per rendere i programmi bash più piccoli umanamente possibile, c'è anche una versione più generale che potresti voler sfogliare anche.
Colsw,

@ConnorLSW Caspita, grazie che Post mi aiuterà molto. Proverò a modificare la mia risposta con questi nuovi suggerimenti al più presto.
Nicolas Fischer,

4
non hai bisogno#!/bin/bash
12431234123412341234123

Bene, anche la prima volta per me :) Ma potresti forse usare la ricorsione: [ -z `line` ] && $0 o se il deprecato linenon è sul vostro sistema: [ -z `head -n1` ] && $0. Dovrebbero essere 20 o 24 byte.
Yeti,

4

Java , 128 126 byte

2 byte grazie a Kevin Cruijssen.

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

Provalo online!


1
Puoi giocare a golf di due byte: cambia whilein a fore mettici Scanner s=new Scanner(System.in);dentro. E cambia .equals("")in .isEmpty().
Kevin Cruijssen,

Sono abbastanza sicuro che puoi rimuovere l'importazione se utilizzi lo scanner; abbastanza sicuro che trapelare uno scanner funzioni bene:while(new java.util.Scanner(System.in).nextLine().isEmpty());
Giustino

4

C # (.NET Core) , 66 byte

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

Provalo online!

-6 byte grazie a raznagul.


1
È possibile salvare 6 byte scrivendo System.Console.ReadLInedirettamente e rilasciare using-Statement.
raznagul,

Un whileciclo sarebbe lo stesso numero di byte, ma pensa a un modo più idiomatico di scrivere il codice rispetto a un forciclo.
Cody Grey,

puoi salvare 24 byte scrivendolo come lambda nel formato () => {}
Ceshion

o in alternativa, 7 rendendolo un metodo di istanza
Ceshion

4

QBasic 4.5, 15 byte

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

Chiede input, quindi controlla se ne è stato fornito uno. In caso contrario, RUNriavvia il programma.


2
Non sapevo del RUN. +1. (Anche questo fa rima; CORRI e PIÙ UNO :))
Arjun,

4

Rubino, 13 byte

gets until/./

Vorrei getsprendere un argomento Regexp.


4

R, 27 24 23 22 byte

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

Prende input dallo stdin e ripete finché l'input è di lunghezza 0. Tagliare alcuni byte a causa di Jarko Dubbeldam e MickyT. Sostituito {}con con tper salvare un altro byte.


I think you can omit the ,'', since neither input (string or numeric) nor way of terminating was specified in the challenge.
JAD

@JarkoDubbeldam: good catch! I didn't realize errors were a valid termination.
rturnbull

would while(!sum(scan()^0)){} work as well?
MickyT

@MickyT Seems to work. Apparently even Inf^0 is 1. Nice catch with the sum(). Too bad the ^0 is need to handle 0 as input.
JAD

@MickyT That's a great find with the use of sum, thanks! I've updated the answer.
rturnbull

3

PHP, 18 bytes

while(!readline())

Does it check that the line of text is not empty?
Daniel Earwicker

1
Yes, as soon as the line is not empty readline() returns something else than an empty string. Non empty strings evaluate to true in php - atleast most of them do. "0" seems to be an exception as I just read in the docs. Well I guess my answer is wrong now.
Skynet

3

AWK, 8 11 bytes

NF{exit}

Wait for input. If the number of fields in input is more than 0, exit.

EDIT:

I've just realized that this doesn't work for input containing whitespace characters only. IFS needs to be set to empty string using -F "" command line option. Therefore +3 bytes.

Try it online!


Actually, you could replace NF with 1. Then you don't need to set IFS. And grumble you beat me to and AWK solution.
Robert Benson

1
@RobertBenson I tried replacing NF with 1. In that case the program exits given any input, including empty newline.
Maxim Mikhaylov

I missed that part of the spec.
Robert Benson

3

SpecBAS - 34 bytes

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

Just loops until non-empty string is entered.


3

Mathematica, 26 20 bytes

For[,Input[]==Null,]

1
Shave off six bytes with For[,Input[]==Null,]. Works just as well.
Kelly Lowder

3

Haskell, 19 17 bytes

f=do""<-getLine;f

Defines a function f that if it reads the empty line calls itself again. When reading a non-empty line an exception is raised and the recursion is stopped.

Edit: @Laikoni replaced the parameter with a pattern match and saved 2 bytes. Thanks!


Didn't think Haskell IO code could be as short as this!
Geeky I

17 bytes: f=do""<-getLine;f
Laikoni

@Laikoni: nice catch. Thanks!
nimi

3

Aceto, 9 5 4 bytes

read a value, negate it (!; implicitly casting to a boolean), and mirror horizontally if the value is truthy (|).

!
r|

Wait, Aceto runs **up**‽ And they say APL is strange for running from right to left…
Adám

3
@Adám Aceto runs along a 2D Hilbert curve.
L3viathan

3

Java, 66 64 60 bytes

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

My first Java answer, would love some tips!


You can probably remove the space between return and !. .equals("") == .isEmpty(). You can return int instead of String. OTOH, return void but either while(System...) or if(System...)a();
Justin

you can do int a(){..?0:a();}, saves 3 bytes
Khaled.K

@Khaled.K actually 4!
OldBunny2800

To @Justin and Khaled.K, thank you for your advice!
OldBunny2800

2

Braingolf, 8 bytes [non-competing]

1[{?:+|]

Non competing because {, which reads input from STDIN, was added to braingolf after this challenge's post date.

Explanation:

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

Haha, you implemented input an hour after the challenge was posted
ASCII-only

@ASCII-only had to do it eventually, haha
Skidsdev



2

PowerShell, 20 Bytes

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

runs a for loop,

read-host prompts for input

if read-host returns nothing it evals to false, so we invert that !(...) and use that as the loop end check.

much shorter than any do{$a=read-host}while($a-eq"") type solution involving variables.



2

CJam, 5 bytes

{l!}g

Try it online! (TIO doesn't really show the proper behaviour)

Explanation

{      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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.