Warten Sie ... was sollte ich noch einmal sagen?

10

Ich vergesse oft, was ich sagen wollte, wenn der Lehrer mich zum Sprechen aufruft. Können Sie mir ein Werkzeug machen, um das zu lösen?

Bedarf:

  • Das Programm muss wie folgt wiederholt werden:
    • Nehmen Sie zuerst die Eingabe auf
    • Wenn die Eingabe leer ist, drucken Sie die zuletzt gespeicherte Frage.
    • Andernfalls speichern Sie die Eingabe als Frage.

Anmerkungen:

  • Die Eingabe wird niemals leer sein, wenn keine Fragen gespeichert sind.

Erläuterung: Das Programm muss nicht mehrere Fragen speichern. Ich wollte ursprünglich, dass es mehrere speichert, aber ich habe es geändert, nachdem viele Leute die Frage falsch verstanden haben.

Denken Sie daran, dies ist , also gewinnt der Code mit der geringsten Anzahl von Bytes.

Oliver Ni
quelle
Meinten Sie "zuvor gespeicherte Frage"? Ich finde "zuletzt gespeicherte Frage" verwirrend, da dies darauf hindeutet, dass Sie möglicherweise mehr als eine Frage speichern.
Neil
1
@Neil Es soll mehr als eine Frage speichern, aber da viele Antworten die Frage bereits missverstanden haben, lasse ich es einfach.
Oliver Ni

Antworten:

10

Perl, 13 17 14 +1 = 15 Bytes

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

+1 für das -nFlag (4 Bytes dank @Dada gespeichert)

Solange die Eingabe nicht dem Wagenrücklauf entspricht, speichert sie die Eingabe in $;. Wenn es dem Wagenrücklauf entspricht, wird gedruckt, was bereits vorhanden ist $;.

Dies setzt voraus, dass alle Eingaben als Fragen charakterisiert werden können, auch wenn sie grammatikalisch nicht so sind.

Gabriel Benamy
quelle
Sie wollten wahrscheinlich nestattdessen schreiben eq(im Moment funktioniert das nicht).
Dada
1
Sie können drei Bytes sparen, indem Sie /./statt $/ne$_;-)
Dada
8

05AB1E, 12 11 10 Bytes

Danke @daHugLenny und @Adnan für 1 Byte!
Danke @Emigna für 1 Byte!

[IDõQiX,ëU
Oliver Ni
quelle
1
Ich kann jetzt nicht testen, aber ich denke, Sie können das letzte Zeichen entfernen.
Acrolith
1
Ja, Sie können die letzte Klammer entfernen (sie wird automatisch vervollständigt).
Adnan
2
Wenn Sie ®und ©durch Xund ersetzen U, benötigen Sie keinen Backslash.
Emigna
4

Haskell, 49 Bytes

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

Wie es funktioniert: Beginnen Sie mit g "". Der sFunktionsparameter gist die Frage im Laden. gliest die nächste Zeile von stdin und übergibt sie (und auch s) an #. Wenn die Zeile leer ist, wird #der Speicher gedruckt und gerneut angerufen . Wenn die Zeile nicht leer ist, gwird sie mit der Zeile als neuer Speicher aufgerufen.

Nimi
quelle
3

JavaScript, 36 34 31 Bytes

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

Eine Endlosschleife fragt ständig nach Eingaben und speichert diese b. Wenn die Eingabe nicht leer ist, wird sie dann gespeichert a, andernfalls wird der Wert von agedruckt.

2 Bytes dank @ETHproductions gespeichert

Oriol
quelle
Gute Antwort. Sie können ein Byte speichern, indem Sie das entfernen 1, und ein anderes, indem Sie b?a=b:alert(a)in den letzten Abschnitt innerhalb der for-Schleife (dh for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions
In der Tat a=0ist auch nicht notwendig. Da die Eingabe nur leer sein kann, wenn Fragen gespeichert sind, awird sie nicht referenziert, wenn sie nicht zugewiesen wurde.
Oriol
stoppt auch den Browser für ein paar Sekunden mit Firefox-49.0.2
BunyaCloven
1
Die einzige Anforderung in Ihrer Frage ist, dass eine leere Eingabe die zuletzt gespeicherte Frage druckt. Warum soll ich Verweise auf zuvor gespeicherte Fragen enthalten?
Oriol
1
@bunyaCloven Für mich stoppt es den Browser nur, wenn ich ihm sage, dass er Dialoge blockieren soll. Das wird aufgrund der Endlosschleife erwartet. Nach einigen Sekunden erkennt der Browser das Problem und beendet das JS.
Oriol
2

Mathematica, 44 Bytes

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

Volles Programm. Das Unicode-Zeichen ist U + 221E INFINITY für \[Infinity].

LegionMammal978
quelle
2

Python 3, 31 Bytes

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

Versuch es!

-1 Byte dank Flp.Tkc

GamrCorps
quelle
1
Sie können diese while-Schleife in 1 Zeile schreiben
FlipTack
1

retikulär, 12 Bytes

id""E[$dp]~*

Probieren Sie es online aus!

Erläuterung

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
quelle
1

Pyke, 6 Bytes

z=z~zr

Probieren Sie es hier aus!

     r - while 1:
z      -   input() or z.contents
 =z    -  z.contents = ^
   ~z  -  z.contents
Blau
quelle
1

Python3 - 49 Bytes

s=""
while 1:
 b=input()
 if b:s=b
 else:print(s)
Yytsi
quelle
1
NameError: name 'b' is not defined
Shooqie
@shooqie Ah, ich habe das mit meinem Handy getippt, also habe ich es versehentlich ausgelassen b=input(). Vielen Dank!
Yytsi
1

Python 3, 34 Bytes

s=""
while[print(s)]:s=input()or s
Blau
quelle
Es nicht? Es funktioniert gut für mich
Blue
3
In der Spezifikation werden nicht mehrere Fragen gespeichert?
Blau
1

Python 3, 60 Bytes

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

quelle
0

CMD, 37 Bytes

Nimmt setleider keine leere Eingabe :(

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

in einem Dateinamen c.cmdoder

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

in einer beliebigen Datei. Arbeiten ( -als leer verwenden):

set/p a=
if %a%.=-. echo b
set b=%a%
c
Roman Gräf
quelle
set/pwird niemals eine Variable leer machen, also zumindest set a=in der ersten Zeile; auch ich denke du meinst set b=%a%.
Neil
0

APLX, 19 Bytes

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

Erläuterung:

⍝ 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
quelle
0

C 73 63 Bytes

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

Verwendet nur 1 Puffer und ein einzelnes Zeichen für die Behandlung der Logik. Wenn der Benutzer nichts eingibt, wird nur das erste Zeichen im Puffer von überschrieben '\0'. In diesem Fall wird es wiederhergestellt xund gedruckt. Andernfalls kopieren Sie den ersten Buchstaben xzur späteren Verwendung in.

Vorheriger Code:

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

Java 7, 189 187 178 Bytes ..

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 Bytes bei new java.util.Scannerdirekter Verwendung dank @cliffroot .

Wahrscheinlich das erste Mal, dass ich do-whileeine Codegolf-Herausforderung verwendet habe.

Wenn Funktionen anstelle von Programmen zulässig sind, sind es 135 Bytes (immer noch ein Vielfaches mehr als bei den meisten anderen Antworten.)

Kevin Cruijssen
quelle
Dies ist ein bisschen kürzer und scheint zu funktionieren -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 .. vermisst du nicht einen foroder whileirgendwo? .. Was ist (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen
1
Ja, ich habe es irgendwie geschafft, das vorher zu verpassen :) es sollte sein 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;}und es ist tatsächlich 1 Byte länger als die Version mit do-while-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 natürlich .. danke!
Kevin Cruijssen
0

sed, 10 Bytes

/./{x;d};g

Erläuterung:

      (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

Schön zu sehen, dass eine exoterische (dh "nicht esoterische") Sprache mit einigen der Golfsprachen zusammenhängt!


quelle