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.


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.


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

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.


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


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].



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


1

Python3 - 49 bytes

s=""
while 1:
 b=input()
 if b:s=b
 else:print(s)

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

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())

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

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)

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);}}

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 ..)


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!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.