Espere ... o que eu ia dizer de novo?

10

Costumo esquecer o que queria dizer quando o professor me chama para falar. Você pode me fazer uma ferramenta para resolver isso?

Requisitos:

  • O programa deve executar o loop da seguinte maneira:
    • Primeiro, considere a entrada
    • Se a entrada estiver vazia, imprima a última pergunta armazenada.
    • Caso contrário, armazene a entrada como uma pergunta.

Notas:

  • A entrada nunca estará vazia se não houver perguntas armazenadas.

Esclarecimento: O programa não precisa armazenar várias perguntas. Originalmente, eu queria que ele armazenasse vários, mas mudei depois que muitas pessoas entenderam mal a pergunta.

Lembre-se de que isso é , portanto o código com o menor número de bytes vence.

Oliver Ni
fonte
Você quis dizer "pergunta armazenada anteriormente"? Acho "última pergunta armazenada" confusa, pois sugere que você possa armazenar mais de uma pergunta.
Neil
11
@ Neil Supõe-se que ele esteja armazenando mais de uma pergunta, mas como muitas respostas já não a entenderam, deixarei como está.
Oliver Ni

Respostas:

10

Perl, 13 17 14 +1 = 15 bytes

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

+1 para a -nbandeira (salvou 4 bytes graças a @Dada)

Desde que a entrada não seja igual ao retorno de carro, ela armazenará a entrada $;. Se for igual ao retorno do carro, ele imprime o que já está em $;.

Isso pressupõe que todas as entradas podem ser caracterizadas como perguntas, mesmo que gramaticalmente, elas não sejam.

Gabriel Benamy
fonte
Você provavelmente queria escrever em nevez de eq(no momento isso não funciona).
Dada
11
Você pode salvar três bytes fazendo em /./vez de $/ne$_;-)
Dada
8

05AB1E, 12 11 10 bytes

Obrigado @daHugLenny e @Adnan por 1 byte!
Obrigado @Emigna por 1 byte!

[IDõQiX,ëU
Oliver Ni
fonte
11
Não posso testar agora, mas acho que você pode remover o último caractere.
Acrolith 6/11
11
Sim, você pode remover o último suporte (ele será preenchido automaticamente).
11306 Adnan
2
Se você substituir ®e ©por Xe U, não precisará da barra invertida.
Emigna
4

Haskell, 49 bytes

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

Como funciona: comece com g "". O parâmetro sda função gé a questão armazenada. glê a próxima linha de stdin e passa (e também s) para #. Se a linha estiver vazia, #imprime a loja e liga gnovamente. Se a linha não estiver vazia, gé chamada com a linha como a nova loja.

nimi
fonte
3

JavaScript, 36. 34 31 bytes

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

Um loop infinito continua pedindo entrada e a armazena b. Se a entrada não estiver vazia, será armazenada a, caso contrário, o valor de aserá impresso.

Economizou 2 bytes graças a @ETHproductions

Oriol
fonte
Boa resposta. Você pode salvar um byte removendo 1b?a=b:alert(a)for(a=0;;b?a=b:alert(a))b=prompt()
oe
De fato, a=0também não é necessário. Como a entrada só pode estar vazia se houver perguntas armazenadas, anão será referenciada se não tiver sido atribuída.
Oriol
também interrompe o navegador por alguns segundos com o firefox-49.0.2
bunyaCloven 6/16
11
O único requisito em sua pergunta é que a entrada vazia imprima a última pergunta armazenada. Por que você deseja que eu mantenha referências a perguntas armazenadas anteriormente?
Oriol #
11
@bunyaCloven Para mim, ele só para o navegador quando eu digo para bloquear as caixas de diálogo. Isso é esperado devido ao loop infinito. Após alguns segundos, o navegador detecta o problema e mata o JS.
Oriol
2

Mathematica, 44 bytes

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

Programa completo. O caractere Unicode é U + 221E INFINITY para \[Infinity].

LegionMammal978
fonte
2

Python 3, 31 bytes

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

Experimente!

-1 byte graças ao Flp.Tkc

GamrCorps
fonte
11
você pode escrever que loop while em 1 linha
FlipTack
1

reticular, 12 bytes

id""E[$dp]~*

Experimente online!

Explicação

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

Pyke, 6 bytes

z=z~zr

Experimente aqui!

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

Python3 - 49 bytes

s=""
while 1:
 b=input()
 if b:s=b
 else:print(s)
Yytsi
fonte
11
NameError: name 'b' is not defined
shooqie
@shooqie Ah, eu digitei isso com meu telefone, então acidentalmente deixei de fora b=input(). Obrigado!
Yytsi 6/11/2016
1

Python 3, 34 bytes

s=""
while[print(s)]:s=input()or s
Azul
fonte
Não faz? Funciona bem para mim #
Blue
3
A especificação não pede para armazenar várias perguntas?
Azul
1

Python 3, 60 bytes

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

fonte
0

CMD, 37 bytes

Infelizmente setnão leva entrada vazia :(

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

em um nome de arquivo c.cmdou

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

em qualquer arquivo. Trabalhando (use -como vazio):

set/p a=
if %a%.=-. echo b
set b=%a%
c
Roman Gräf
fonte
set/pnunca tornará uma variável vazia; portanto, no mínimo, você precisa set a=na primeira linha; Também acho que você quer dizer set b=%a%.
Neil
0

APLX, 19 bytes

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

Explicação:

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

C, 73 63 bytes

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

Usa apenas 1 buffer e um único caractere para manipular a lógica. Se o usuário não inserir nada, apenas o primeiro caractere no buffer será substituído '\0', nesse caso, será restaurado xe impresso; caso contrário, copie a primeira letra xpara uso posterior.

Código anterior:

main(){char a[99],b[99];for(;;){gets(a);if(*a)strcpy(b,a);else puts(b);}}
Karl Napf
fonte
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.Scannerdiretamente, graças a @cliffroot .

Provavelmente a primeira vez que usei um do-whileem um desafio de codegolf.

Quando funções são permitidas em vez de programas, são 135 bytes (ainda muitas vezes mais do que a maioria das outras respostas ..)

Kevin Cruijssen
fonte
esta é aa pouco mais curto e parece estar funcionando -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 .. você não está faltando um forou em whilealgum lugar? .. O que é (x=new java.util.Scanner(System.in).nextLine())!=null;)?
21816 Kevin Crijssen em
11
Sim, eu conseguiu perder para antes que de alguma forma :) era suposto 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;}e é realmente 1 byte mais tempo, então a versão com 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, claro .. obrigado!
21416 Kevin Kurtzssen
0

sed, 10 bytes

/./{x;d};g

Explicação:

      (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

É bom ver uma linguagem exotérica (ou seja, "não esotérica") ligada a algumas das línguas do golfe!


fonte