Attendez… qu'allais-je dire encore?

10

J'oublie souvent ce que je voulais dire quand le professeur m'appelle à parler. Pouvez-vous me faire un outil pour résoudre ce problème?

Exigences:

  • Le programme doit boucler comme suit:
    • Tout d'abord, saisissez
    • Si l'entrée est vide, imprimez la dernière question enregistrée.
    • Sinon, stockez l'entrée sous forme de question.

Remarques:

  • L'entrée ne sera jamais vide si aucune question n'est stockée.

Clarification: Le programme n'a pas besoin de stocker plusieurs questions. Je voulais à l'origine qu'il en stocke plusieurs, mais je l'ai changé après que beaucoup de gens aient mal compris la question.

N'oubliez pas qu'il s'agit de , donc le code avec le plus petit nombre d'octets l'emporte.

Oliver Ni
la source
Voulez-vous dire "question précédemment enregistrée"? Je trouve la "dernière question enregistrée" déroutante car elle suggère que vous pourriez stocker plus d'une question.
Neil
1
@Neil Il est censé stocker plus d'une question, mais comme de nombreuses réponses ont déjà mal compris la question, je vais le laisser.
Oliver Ni

Réponses:

10

Perl, 13 17 14 +1 = 15 octets

/./?$;=$_:say$

+1 pour le -ndrapeau (enregistré 4 octets grâce à @Dada)

Tant que l'entrée n'est pas égale au retour chariot, elle stocke l'entrée dans $;. S'il est égal au retour chariot, il imprime ce qui est déjà dedans $;.

Cela suppose que toutes les entrées peuvent être caractérisées comme des questions, même si grammaticalement, elles ne le sont pas.

Gabriel Benamy
la source
Vous vouliez probablement écrire à la neplace de eq(pour l'instant cela ne fonctionne pas).
Dada
1
Vous pouvez enregistrer trois octets en faisant à la /./place de $/ne$_;-)
Dada
8

05AB1E, 12 11 10 octets

Merci @daHugLenny et @Adnan pour 1 octet!
Merci @Emigna pour 1 octet!

[IDõQiX,ëU
Oliver Ni
la source
1
Je ne peux pas tester maintenant, mais je pense que vous pouvez supprimer le dernier caractère.
acrolith
1
Oui, vous pouvez supprimer le dernier support (il sera auto-complété).
Adnan
2
Si vous remplacez ®et ©par Xet U, vous n'avez pas besoin de la barre oblique inverse.
Emigna
4

Haskell, 49 octets

g s=getLine>>=(#s)
""#s=putStr s>>g s
l#s=g l
g""

Comment ça marche: commencez par g "". Le paramètre sde fonction gest la question en magasin. glit la ligne suivante depuis stdin et la passe (ainsi que s) à #. Si la ligne est vide, #imprime le magasin et rappelle g. Si la ligne n'est pas vide, gest appelée avec la ligne comme nouveau magasin.

nimi
la source
3

JavaScript, 36 34 31 octets

for(;;b?a=b:alert(a))b=prompt()

Une boucle infinie continue de demander une entrée et la stocke b. Si l'entrée n'est pas vide, elle est ensuite stockée a, sinon la valeur de aest imprimée.

Enregistré 2 octets grâce à @ETHproductions

Oriol
la source
Bonne réponse. Vous pouvez enregistrer un octet en supprimant le 1, et un autre en vous déplaçant b?a=b:alert(a)dans la dernière section de la boucle for (c'est-à-dire for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions
En fait, ce a=0n'est pas nécessaire non plus. Étant donné que l'entrée ne peut être vide que si des questions sont stockées, aelle ne sera pas référencée si elle n'a pas été affectée.
Oriol
arrête également le navigateur pendant quelques secondes avec firefox-49.0.2
bunyaCloven
1
La seule exigence de votre question est qu'une entrée vide imprime la dernière question stockée. Pourquoi voulez-vous que je conserve des références à des questions précédemment enregistrées?
Oriol
1
@bunyaCloven Pour moi, cela n'arrête le navigateur que lorsque je lui dis de bloquer les dialogues. Cela est dû à la boucle infinie. Après quelques secondes, le navigateur détecte le problème et tue le JS.
Oriol
2

Mathematica, 44 octets

If[(b=InputString[])=="",Print@a,a=b]~Do~∞

Programme complet. Le caractère Unicode est U + 221E INFINITY pour \[Infinity].

LegionMammal978
la source
2

Python 3, 31 octets

while 1: I=input()or I;print(I)

Essaye le!

-1 octet grâce à Flp.Tkc

GamrCorps
la source
1
vous pouvez écrire cela en boucle sur 1 ligne
FlipTack
1

réticulaire, 12 octets

id""E[$dp]~*

Essayez-le en ligne!

Explication

id""E[$dp]~*
i             take a line of input     [input]
 d""E         push equality with ""    [input, input == ""]
     [$dp]    push that func           [input, input == "", [$p]]
         ~*   execute it iff equal
              on equal:
      $       drop empty input
       dp     duplicate then print the TOS
              this wraps around to the beginning, taking another line of input
Conor O'Brien
la source
1

Pyke, 6 octets

z=z~zr

Essayez-le ici!

     r - while 1:
z      -   input() or z.contents
 =z    -  z.contents = ^
   ~z  -  z.contents
Bleu
la source
1

Python3 - 49 octets

s=""
while 1:
 b=input()
 if b:s=b
 else:print(s)
Yytsi
la source
1
NameError: name 'b' is not defined
shooqie
@shooqie Ah, j'ai tapé ceci avec mon téléphone alors j'ai accidentellement omis b=input(). Merci!
Yytsi
1

Python 3, 34 octets

s=""
while[print(s)]:s=input()or s
Bleu
la source
Ce n'est pas le cas? Cela fonctionne très bien pour moi
Blue
3
La spécification ne demande pas de stocker plusieurs questions?
Blue
1

Python 3, 60 octets

q=[]
while 1:
 s=input()
 if''<s:q+=[s]
 else:print(q.pop())

la source
0

CMD, 37 octets

Malheureusement, setne prend pas d'entrée vide :(

set/p a=
if %a%.=. echo b
set b=%a%
c

dans un nom de fichier c.cmdou

set/p a=
if %a%.=. echo b
set b=%a%
%0

dans n'importe quel fichier. Travail (utiliser -comme vide):

set/p a=
if %a%.=-. echo b
set b=%a%
c
Roman Gräf
la source
set/pne rendra jamais une variable vide, donc au moins vous avez besoin set a=sur la première ligne; je pense aussi que vous voulez dire set b=%a%.
Neil
0

APLX, 19 octets

a←⍞⋄→(0=⍴a)/1⋄a⋄→1

Explication:

⍝ Note: the ⋄ symbols are statement separators, so I've replaced them here with newlines

a←⍞           ⍝ get an input string (⍞) and store it in variable a
→(0=⍴a)/1     ⍝ if the length of a (⍴a) is 0, goto (→) the start of this program (1)
a             ⍝ else, print a
→1            ⍝ goto the start of the program (1)
ren
la source
0

C, 73 63 octets

g(){char a[99],x;for(;;){gets(a);if(*a)x=*a;else*a=x,puts(a);}}

Utilise uniquement 1 tampon et un seul caractère pour gérer la logique. Si l'utilisateur ne saisit rien, seul le premier caractère du tampon est écrasé '\0', dans ce cas, il est restauré xet imprimé, sinon copiez la première lettre xpour une utilisation ultérieure.

Code précédent:

main(){char a[99],b[99];for(;;){gets(a);if(*a)strcpy(b,a);else puts(b);}}
Karl Napf
la source
0

Java 7, 189 187 178 octets ..

class M{public static void main(String[]a){String s="",x;do{x=new java.util.Scanner(System.in).nextLine();if(x.isEmpty())Syste‌​m.out.println(s);els‌​e s=x;}while(1>0);}}

-9 octets en utilisant new java.util.Scannerdirectement, grâce à @cliffroot .

Probablement la première fois que j'ai utilisé un do-whiledans un défi de codegolf ..

Lorsque les fonctions sont autorisées à la place des programmes, c'est 135 octets (toujours beaucoup plus que la plupart des autres réponses ..)

Kevin Cruijssen
la source
c'est un peu plus court et semble fonctionner -void c(){for(String s="",x;(x=new java.util.Scanner(System.in).nextLine())!=null;)if(x.isEmpty())System.out.println(s);else s=x;}
cliffroot
@cliffroot Ummm .. ne manquez-vous pas un forou whilequelque part? .. Qu'est-ce que c'est (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen
1
Ouais, j'ai réussi à manquer avant ça d'une manière ou d'une autre :) c'était censé être void c(){for(String s="",x;for(x=new java.util.Scanner(System.in).nextLine())!=null;)if(x.isEmpty())System.out.println(s);else s=x;}et c'est en fait 1 octet de plus que la version avec do-whileest -void c(){String s="",x;do{x=new java.util.Scanner(System.in).nextLine();if(x.isEmpty())System.out.println(s);else s=x;}while(1>0);}
cliffroot
@cliffroot Ah bien sûr .. merci!
Kevin Cruijssen
0

sed, 10 octets

/./{x;d};g

Explication:

      (implicit at start of program) read input, overwriting old input
/./{  If the input is nonempty
  x;  swap the input with the hold space
  d   then restart, without any implicit printing of input
};    end if statement
g     Append the hold space to the [empty] input
      (implicit at end of program) print the input, then restart

C'est agréable de voir une langue exotérique (c'est-à-dire "non ésotérique") liée à certaines des langues du golf!


la source