Espera ... ¿qué iba a decir de nuevo?

10

A menudo olvido lo que quería decir cuando la maestra me llama para hablar. ¿Puedes hacerme una herramienta para resolver esto?

Requisitos:

  • El programa debe recorrer de la siguiente manera:
    • Primero, tome en entrada
    • Si la entrada está vacía, imprima la última pregunta almacenada.
    • De lo contrario, almacene la entrada como una pregunta.

Notas:

  • La entrada nunca estará vacía si no hay preguntas almacenadas.

Aclaración: el programa no necesita almacenar múltiples preguntas. Originalmente quería que almacenara múltiples, pero lo cambié después de que muchas personas entendieron mal la pregunta.

Recuerde, este es el , por lo que gana el código con el menor número de bytes.

Oliver Ni
fuente
¿Quiso decir "pregunta previamente almacenada"? La "última pregunta almacenada" me parece confusa, ya que sugiere que puede almacenar más de una pregunta.
Neil
1
@Neil Se supone que está almacenando más de una pregunta, pero como muchas respuestas ya malinterpretaron la pregunta, lo dejaré en paz.
Oliver Ni

Respuestas:

10

Perl, 13 17 14 +1 = 15 bytes

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

+1 para la -nbandera (guardado 4 bytes gracias a @Dada)

Mientras la entrada no sea igual al retorno de carro, almacena la entrada en $;. Si es igual al retorno de carro, imprime lo que ya está dentro $;.

Esto supone que todas las entradas pueden caracterizarse como preguntas, incluso si son gramaticalmente, no lo son.

Gabriel Benamy
fuente
Probablemente quisiste escribir en nelugar de eq(en este momento esto no funciona).
Dada
1
Puede guardar tres bytes haciendo en /./lugar de $/ne$_;-)
Dada
8

05AB1E, 12 11 10 bytes

¡Gracias @daHugLenny y @Adnan por 1 byte!
¡Gracias @Emigna por 1 byte!

[IDõQiX,ëU
Oliver Ni
fuente
1
No puedo probar ahora, pero creo que puedes eliminar el último personaje.
acrolith el
1
Sí, puede eliminar el último paréntesis (se completará automáticamente).
Adnan
2
Si reemplaza ®y ©con Xy U, no necesita la barra invertida.
Emigna
4

Haskell, 49 bytes

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

Cómo funciona: comienza con g "". El parámetro sde función ges la pregunta en la tienda. glee la siguiente línea de stdin y la pasa (y también s) a #. Si la línea está vacía, #imprime la tienda y gvuelve a llamar . Si la línea no está vacía, gse llama con la línea como la nueva tienda.

nimi
fuente
3

JavaScript 36 34 31 bytes

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

Un bucle infinito sigue pidiendo entrada y la almacena b. Si la entrada no está vacía, se almacena a, de lo contrario ase imprime el valor de .

Ahorró 2 bytes gracias a @ETHproductions

Oriol
fuente
Buena respuesta. Puede guardar un byte quitando el 1, y otro moviéndose b?a=b:alert(a)a la última sección dentro del ciclo for (ie for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions
De hecho a=0tampoco es necesario. Dado que la entrada solo puede estar vacía si hay preguntas almacenadas, ano se hará referencia si no se ha asignado.
Oriol
también detiene el navegador durante unos segundos con firefox-49.0.2
bunyaCloven
1
El único requisito en su pregunta es que la entrada vacía imprima la última pregunta almacenada. ¿Por qué quieres que tenga referencias a preguntas almacenadas previamente?
Oriol
1
@bunyaCloven Para mí, solo detiene el navegador cuando le digo que bloquee los cuadros de diálogo. Eso se espera debido al bucle infinito. Después de unos segundos, el navegador detecta el problema y mata al JS.
Oriol
2

Mathematica, 44 bytes

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

Programa completo El carácter Unicode es U + 221E INFINITY para \[Infinity].

LegionMammal978
fuente
2

Python 3, 31 bytes

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

¡Pruébalo!

-1 byte gracias a Flp.Tkc

GamrCorps
fuente
1
puedes escribir eso mientras bucle en 1 línea
FlipTack
1

reticular, 12 bytes

id""E[$dp]~*

Pruébalo en línea!

Explicación

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

Pyke, 6 bytes

z=z~zr

Pruébalo aquí!

     r - while 1:
z      -   input() or z.contents
 =z    -  z.contents = ^
   ~z  -  z.contents
Azul
fuente
1

Python3 - 49 bytes

s=""
while 1:
 b=input()
 if b:s=b
 else:print(s)
Yytsi
fuente
1
NameError: name 'b' is not defined
shooqie
@shooqie Ah, escribí esto con mi teléfono, así que accidentalmente me quedé fuera b=input(). ¡Gracias!
Yytsi
1

Python 3, 34 bytes

s=""
while[print(s)]:s=input()or s
Azul
fuente
No lo hace? Funciona bien para mí
Azul
3
¿La especificación no pide almacenar múltiples preguntas?
Azul
1

Python 3, 60 bytes

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

fuente
0

CMD, 37 bytes

Lamentablemente setno toma entrada vacía :(

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

en un nombre de archivo c.cmdo

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

en cualquier archivo Trabajo (uso -como vacío):

set/p a=
if %a%.=-. echo b
set b=%a%
c
Roman Gräf
fuente
set/pnunca hará una variable vacía, por lo que al menos necesita set a=en la primera línea; También creo que te refieres set b=%a%.
Neil
0

APLX, 19 bytes

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

Explicación:

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

C, 73 63 bytes

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

Solo usa 1 búfer y un único carácter para manejar la lógica. Si el usuario no ingresa nada, solo se sobrescribe el primer carácter en el búfer '\0', en ese caso se restaura xe imprime; de ​​lo contrario, copie la primera letra xpara su uso posterior.

Código anterior:

main(){char a[99],b[99];for(;;){gets(a);if(*a)strcpy(b,a);else puts(b);}}
Karl Napf
fuente
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 usando new java.util.Scannerdirectamente, gracias a @cliffroot .

Probablemente la primera vez que usé un do-whileen un desafío codegolf ...

Cuando se permiten funciones en lugar de programas, son 135 bytes (todavía muchas veces más que la mayoría de las otras respuestas ...)

Kevin Cruijssen
fuente
esto es un poco más corto y parece estar funcionandovoid 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 ... ¿no te estás perdiendo una foro en whilealguna parte? ... ¿Qué es (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen
1
Sí, me las arreglé para perder antes eso de alguna manera :) se suponía que debía ser 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;}y en realidad es 1 byte más largo que la versión con do-whilees -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, por supuesto ... gracias!
Kevin Cruijssen
0

sed, 10 bytes

/./{x;d};g

Explicación:

      (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

¡Es agradable ver un lenguaje exotérico (es decir, "no esotérico") vinculado con algunos de los idiomas de golf!


fuente