Insister sur une réponse

31

Au moment de l'exécution, continuez à demander une ligne d'entrée jusqu'à ce que l'utilisateur entre quelque chose (autre qu'une nouvelle ligne vide), c'est-à-dire n'appuie pas simplement sur Enterou OK. La sortie ou le résultat n'est ni requis ni interdit.

Pseudo-code 1

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

Pseudo-code 2

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

Exemple 1

Le programme s'exécute et affiche immédiatement un formulaire avec un seul champ de texte et un OKbouton.
L'utilisateur clique sur le OKbouton.
Rien ne se passe.
L'utilisateur colle "hello world" dans le champ de texte et clique sur le OKbouton.
Le programme se termine.

Exemple 2

La fonction est appelée et affiche immédiatement une ligne vierge et un curseur clignotant.
L'utilisateur appuie Enter.
Le curseur descend d'une ligne.
L'utilisateur appuie Enter.
Le curseur descend d'une ligne.
L'utilisateur appuie sur PPCGEnter
Fonction revient.

Adam
la source
est-il autorisé de compter les lignes vides uniquement comme des espaces?
12431234123412341234123
@ 12431234123412341234123 No.
Adám
Est-il nécessaire d'attendre la ligne complète une fois que l'utilisateur commence à saisir des données?
Matteo Italia
Ok, à partir d'un commentaire dans la réponse supprimée de @ CodyGray, il semble que ce ne soit pas autorisé.
Matteo Italia
@MatteoItalia Oui, correct; une ligne d'entrée .
Adám

Réponses:

16

TI-BASIC, 2 octets

:Prompt X

TI-BASIC le fait automatiquement. Une fois la saisie effectuée, elle se fermera.

Voici un GIF:

entrez la description de l'image ici

Regardez le décompte de la entertouche dans l'historique des touches. Créé avec TI-SmartView CE et ezgif.com .

Scott Milner
la source
1
Hmm .. c'est 2 octets?
Geeky I
9
TI-BASIC est basé sur des jetons .
Scott Milner
Et cela ne prendra pas Enter pour une réponse? Y a-t-il un endroit pour tester cela en ligne?
Adám
@ Adám Il ne faudra pas entrer pour une réponse. Pour autant que je sache, il n'y a aucun endroit où vous pouvez aller en ligne sans avoir déjà une image TI ROM. Cependant, je peux poster un .gif à mon retour.
Scott Milner
1
@ Adám Il est illégal de tester TI-BASIC en ligne sans posséder vous-même une ROM.
Erik the Outgolfer
15

Python 3 , 18 octets

while''==input():0

Essayez-le en ligne!

Dennis
la source
19
Donc, vous continuerez à ajouter une autre langue toutes les 9 minutes?
Adám
15

sed, 4

/./q

Attend une ligne d'entrée contenant 1 ou plusieurs caractères, puis quitte.

Essayez-le en ligne . Mais cela fonctionne mieux sur un shell live:

sed '/./q'
Trauma numérique
la source
15

JavaScript, 37 22 17 octets

while(!prompt());

while(!prompt());

Explication

Le whilemot-clé démarre la whileboucle. Dans l'état de la boucle, !prompt()demande une entrée et vérifie si elle est donnée ou non. S'il n'est pas donné, le corps de la boucle est exécuté, ce qui dans notre cas est vide, puis l'interpréteur revient à la condition de boucle. Le même processus se répète encore et encore jusqu'à ce que l'utilisateur donne l'entrée.

Arjun
la source
while(""==prompt(""));
Adám
@ Adám Wow. Je réfléchissais juste à la façon de rendre la solution plus petite, et vous avez trouvé une réponse merci!
Arjun
Cela semblait évident. Cependant, ma console de navigateur refuse de s'exécuter sans trailing ;, tandis que votre expression initiale fonctionnait bien sans ;. Une idée pourquoi?
Adám
Non, Chrome. Donc, si un moteur JavaScript peut gérer l'omission de l'expression actuelle ;, vous pouvez enregistrer cet octet :-)
Adám
1
@ Adám vient de découvrir la véritable cause de l'erreur produite après la suppression du point-virgule du code source. La raison pour laquelle cela se produit est que la boucle while attend une instruction (ou un groupe d'instructions) comme corps de boucle après la condition de boucle. L'ajout du point-virgule fait penser que le corps de la boucle est terminé. Cependant, la suppression du point-virgule lui fait attendre l'instruction suivante comme corps de boucle. Mais dans notre cas, aucune nouvelle instruction ne vient après la condition de boucle. Donc, il jette une erreur. J'espère que c'est clair maintenant. Je suis terrible à expliquer des trucs !! : p
Arjun
9

Java, 55 octets

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

Si je me souviens bien (cela fait un moment que je ne suis pas actif sur PPCG), mon programme peut simplement être une fonction.

Ceci est spécifique au système; il ne fonctionne que sur les systèmes où le caractère de fin de ligne est une seule nouvelle ligne. Si le caractère de fin de ligne est plutôt un retour chariot, remplacez le 10par 13. Sous Windows, cela ne fonctionne pas, tout comme la fin de ligne sur Windows \r\n.

Cela fait usage du fait que je peux lire directement depuis System.in.

Justin
la source
2
Bienvenue à nouveau, ne serait-ce que pour cette réponse! : D
Conor O'Brien
3
Bienvenue à nouveau @Justin!
Digital Trauma
1
Ne prévoit pas d'être actif; en passant ici pour une question ici et là
Justin
Pour éviter le problème "ne fonctionne pas sur Windows", ne pouvez-vous pas simplement tester le premier caractère et voir s'il l'est \r, par opposition à tester la chaîne entière, puis à rencontrer des problèmes avec 2 caractères EOL?
Cody Gray
@CodyGray Non. Je lis 1 caractère à la fois; c'est tout ce que System.innous pouvons faire directement (eh bien, vous pouvez lire un tableau de caractères à la fois). Mon corps de boucle (vide) est exécuté pour chaque caractère en entrée
Justin
9

HTML5, 33 22 octets

<form><input required>

<form><input required>

Explication

L' requiredattribut sur le <input>fait que le navigateur informe l'utilisateur "ce champ est obligatoire" -sort-de-message, s'il n'entre pas de valeur. Cependant, lorsqu'ils saisissent une valeur, la valeur est envoyée à l'URL de l' actionattribut de <form>(qui dans notre cas est le fichier actuel lui-même, car nous n'avons spécifié aucune valeur explicitement).

Cela a été testé sur la dernière version de Google Chrome (version 55.0). Peut fonctionner dans d'autres navigateurs et versions.

Arjun
la source
action=/pourrait fonctionner sur certains navigateurs.
Neil
1
Vous pourriez probablement abandonner actioncomplètement l' attribut.
Shaggy
1
@Arjun Le action=y.pn'est pas nécessaire, car la plupart des agents utilisateurs se soumettront au même endroit si aucun actionn'est spécifié
MayorMonty
@Arjun J'ai essayé <form><input required>la dernière version de Google Chrome et fonctionne comme prévu. Et si vous êtes sceptique, utilisez-le action=#. Cela économise 2 octets.
Ismael Miguel
3
@Arjun C'est une terrible idée pour le golf à code. Je ne peux pas dire à propos de chaque navigateur, car je ne possède pas d'Android 1.0, 1.6, 2.0, 2.1, 3.0, 3.1, 4.xx, 5.x, 6.x, ..., iPhone 2-7, chaque version unique de Google Chrome, Firefox 3.0+ et ainsi de suite et encore et encore ... En fait, tous les navigateurs HTML5 n'implémentent pas l' requiredattribut! Un #chemin est également disponible depuis HTML 1.0, si je ne me trompe pas. Et ajouter non actionà votre formulaire est le même que action=".", qui est le fichier lui-même.
Ismael Miguel
8

Gelée , 3 octets

ɠṆ¿

Pas grand chose à regarder sur TIO, j'en ai bien peur.

Essayez-le en ligne!

Comment ça marche

Il s'agit d'un programme niladique, ce qui signifie qu'il ne prend aucun argument d'entrée. L'argument implicite et la valeur de retour sont tous les deux 0 dans ce cas.

¿(while) est un rapide qui fait apparaître deux liens de la pile de liens: une condition ( ) et un corps.

est un atome monadique: plat NON logique. Si la valeur de retour précédente est fausse (ici, 0 ou une chaîne vide), elle renvoie 1 et le corps est appelé.

ɠest un atome niladique; il lit une ligne brute de STDIN et renvoie le résultat.

Une fois ɠlu une ligne non vide, retourne 0 et nous sortons de la boucle.

Dennis
la source
C'est aussi rapide, hein? Et bien.
Adám
6

brainfuck , 26 octets

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

Essayez-le en ligne!

Fuite, nonne
la source
1
Ce lien TIO est tout beau et bien, mais il est un peu difficile de dire ce qui se passe lors de l'exécution… ;-)
Adám
1
@ Adám vous pouvez ajouter ,.à la fin pour vérifier.
Leaky Nun
5

Octets Perl 5, 8 + 1 (drapeau -p ou -n)

/./&&die

Prend l'entrée de stdin et meurt dès que l'expression régulière correspond à tout sauf à une nouvelle ligne.

Chris
la source
5

C, 52 octets , 33 octets , 29 octets

-19 octets grâce à Justin

-4 octets grâce à Christoph

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

10 est égal à '\ n' - Au cas où cela ne serait pas évident.

Skynet
la source
1
Vous pouvez jouer au golf avec 1 caractère en utilisant un ;au lieu de la {}boucle pour le temps
Justin
1
Bien que non conforme aux normes, vous pouvez supprimer le #include<stdio.h>si vous passez à while(getchar()==10): int main(){while(getchar()==10);}.
Justin
2
@Justin main(){while(getchar()==10);}suffit, pas besoin de int par défaut.
Christoph
1
main(){scanf("%s");}fonctionnerait également, si les lignes d'espace uniquement peuvent compter comme vides.
12431234123412341234123
1
@DanielEarwicker Vous avez raison. Cela ne m'a pas semblé clair la première fois que j'ai lu la question, mais maintenant je vois ce que vous dites. Dans ce cas, il existe de nombreuses réponses non conformes à cette question.
Justin
5

Bash, 51 octets (39 sans "#! / Bin / bash")

C'est ma première participation au PPCG, alors ne soyez pas impoli; D

#!/bin/bash
read a
while [ -z "$a" ]
do
read a
done
Nicolas Fischer
la source
1
Bienvenue chez PPCG.
Adám
3
Bienvenue sur PPCG !, si vous prévoyez d'utiliser Bash comme langue de golf, vous pourriez trouver cet article intéressant, il contient de nombreux conseils pour rendre les programmes bash aussi petits que possible, il existe également une version plus générale que vous voudrez peut-être parcourir aussi.
colsw
@ConnorLSW Wow, merci, ce message m'aidera beaucoup. Je vais essayer de modifier ma réponse avec ces nouveaux conseils dès que possible.
Nicolas Fischer
4
vous n'avez pas besoin#!/bin/bash
12431234123412341234123
Eh bien, aussi la première fois pour moi :) Mais vous pourriez peut - être utiliser récursion: [ -z `line` ] && $0ou si le dépréciée lineest pas sur votre système: [ -z `head -n1` ] && $0. Cela devrait être de 20 ou 24 octets.
Yeti
4

Java , 128 126 octets

2 octets grâce à Kevin Cruijssen.

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

Essayez-le en ligne!

Fuite, nonne
la source
1
Vous pouvez le jouer sur deux octets: changez le whileen a foret mettez-le Scanner s=new Scanner(System.in);dedans. Et changez le .equals("")en .isEmpty().
Kevin Cruijssen
Je suis presque sûr que vous pouvez supprimer l'importation si vous intégrez l'utilisation du scanner; assez sûr que la fuite d'un scanner fonctionne très bien:while(new java.util.Scanner(System.in).nextLine().isEmpty());
Justin
4

C # (.NET Core) , 66 octets

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

Essayez-le en ligne!

-6 octets grâce à raznagul.

Pavel
la source
1
Vous pouvez enregistrer 6 octets en écrivant System.Console.ReadLInedirectement et en usingsupprimant la déclaration.
raznagul
Une whileboucle serait le même nombre d'octets, mais il me semble une façon plus idiomatique d'écrire le code qu'une forboucle.
Cody Gray
vous pouvez économiser 24 octets en l'écrivant sous forme de lambda sous la forme () => {}
Ceshion
ou alternativement, 7 en en faisant une méthode d'instance
Ceshion
4

QBasic 4.5, 15 octets

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

Demande des informations, puis vérifie si des informations ont été fournies. Sinon, RUNredémarre le programme.

Steenbergh
la source
2
Je ne connaissais pas le RUN. +1. (Cela rime aussi; RUN et PLUS ONE :))
Arjun
4

Rubis, 13 octets

gets until/./

Je souhaite getspris un argument Regexp.

histocrate
la source
4

R, 27 24 23 22 octets

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

Prend l'entrée de stdin et répète tant que l'entrée est de longueur 0. Coupez quelques octets à cause de Jarko Dubbeldam et MickyT. Remplacé {}par tpour enregistrer un autre octet.

tourbull
la source
Je pense que vous pouvez omettre le ,'', car ni l'entrée (chaîne ou numérique) ni la manière de terminer n'ont été spécifiées dans le défi.
JAD
@JarkoDubbeldam: bonne prise! Je ne savais pas que les erreurs étaient une résiliation valide.
rturnbull
serait while(!sum(scan()^0)){}travailler aussi bien?
MickyT
@MickyT semble fonctionner. Apparemment, même Inf ^ 0 est 1. Belle prise avec le sum(). Dommage ^0qu'il soit nécessaire de gérer 0en entrée.
JAD
@MickyT C'est une excellente trouvaille avec l'utilisation de sum, merci! J'ai mis à jour la réponse.
rturnbull
3

PHP, 18 octets

while(!readline())
Skynet
la source
Vérifie-t-il que la ligne de texte n'est pas vide?
Daniel Earwicker
1
Oui, dès que la ligne n'est pas vide readline()retourne autre chose qu'une chaîne vide. Les chaînes non vides sont évaluées trueen php - au moins la plupart d'entre elles le font. "0" semble être une exception comme je viens de le lire dans la documentation. Eh bien, je suppose que ma réponse est fausse maintenant.
Skynet
3

AWK , 8 11 octets

NF{exit}

Attendez l'entrée. Si le nombre de champs en entrée est supérieur à 0, quittez.

MODIFIER:

Je viens de réaliser que cela ne fonctionne pas pour les entrées contenant uniquement des espaces. IFS doit être défini sur une chaîne vide à l'aide -F ""de l'option de ligne de commande. Donc +3 octets.

Essayez-le en ligne!

Maxim Mikhaylov
la source
En fait, vous pouvez remplacer NFpar 1. Ensuite, vous n'avez pas besoin de régler IFS. Et grommelez- vous de me battre et de AWKsolution.
Robert Benson
1
@RobertBenson J'ai essayé de le remplacer NFpar 1. Dans ce cas, le programme se ferme à partir de n'importe quelle entrée, y compris la nouvelle ligne vide.
Maxim Mikhaylov
J'ai raté cette partie de la spécification.
Robert Benson
3

SpecBAS - 34 octets

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

Boucle simplement jusqu'à ce qu'une chaîne non vide soit entrée.

Brian
la source
3

Mathematica, 26 20 octets

For[,Input[]==Null,]
Un simmons
la source
1
Rasez six octets avec For[,Input[]==Null,]. Fonctionne aussi bien.
Kelly Lowder
3

Haskell, 19 17 octets

f=do""<-getLine;f

Définit une fonction fqui, si elle lit, la ligne vide se rappelle. Lors de la lecture d'une ligne non vide, une exception est déclenchée et la récursivité est arrêtée.

Edit: @Laikoni a remplacé le paramètre par une correspondance de modèle et enregistré 2 octets. Merci!

nimi
la source
Je ne pensais pas que le code Haskell IO pouvait être aussi court que ça!
Geeky I
17 octets:f=do""<-getLine;f
Laikoni
@Laikoni: belle prise. Merci!
nimi
3

Aceto , 9 5 4 octets

rlisez une valeur, annulez-la ( !; transtypage implicite en booléen), et inversez horizontalement si la valeur est véridique ( |).

!
r|
L3viathan
la source
Attendez, Aceto court ** jusqu'à **‽ Et ils disent qu'APL est étrange de courir de droite à gauche…
Adám
3
@ Adám Aceto longe une courbe de Hilbert 2D.
L3viathan
3

Java, 66 64 60 octets

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

Ma première réponse Java, j'adorerais quelques conseils!

OldBunny2800
la source
Vous pouvez probablement supprimer l'espace entre returnet !. .equals("")== .isEmpty(). Vous pouvez retourner int au lieu de String. OTOH, retour nul mais soit while(System...)ouif(System...)a();
Justin
vous pouvez faire int a(){..?0:a();}, enregistre 3 octets
Khaled.K
@ Khaled.K en fait 4!
OldBunny2800
À @Justin et Khaled.K, merci pour vos conseils!
OldBunny2800
2

Braingolf , 8 octets [non concurrent]

1[{?:+|]

Non compétitif car {, qui lit les entrées de STDIN, a été ajouté à braingolf après la date de publication de ce défi.

Explication:

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
la source
Haha, vous avez implémenté la saisie une heure après la publication du défi
ASCII uniquement
@ ASCII seulement devait le faire finalement, haha
Skidsdev
2

Fusain , 4 octets

W¬Sω

Explication

W      While
  ¬S   Logical not of string input
     ω  Print ""
ASCII seulement
la source
2

05AB1E , 5 octets

[IõÊ#

Explication:

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

Essayez-le en ligne!

Okx
la source
Ce sont 5 points de code Unicode, pas 5 octets; ce sont 7 octets en UTF-8, 10 octets en UTF-16 ou 20 octets en UTF-32.
Matteo Italia
@MatteoItalia 05AB1E utilise son propre encodage , donc chacun de ces caractères fait 1 octet.
Okx
Euh, désolé, je suis corrigé!
Matteo Italia
2

PowerShell, 20 octets

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

exécute une boucle for,

read-host invite à entrer

si read-host ne renvoie rien, il devient faux, donc nous inversons cela !(...)et utilisons cela comme vérification de fin de boucle.

beaucoup plus courte que toute do{$a=read-host}while($a-eq"")solution de type impliquant des variables.

colsw
la source
2

Swift, 22 octets

while readLine()==""{}
Caleb Kleveter
la source
2

CJam , 5 octets

{l!}g

Essayez-le en ligne! (TIO ne montre pas vraiment le bon comportement)

Explication

{      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.
Chat d'affaires
la source