Aspetta ... cosa avrei detto di nuovo?


10

Spesso dimentico ciò che volevo dire quando l'insegnante mi chiama a parlare. Puoi farmi uno strumento per risolvere questo?

Requisiti:

  • Il programma deve eseguire il ciclo come segue:
    • Innanzitutto, inserisci l'input
    • Se l'input è vuoto, stampare l'ultima domanda memorizzata.
    • In caso contrario, memorizzare l'input come una domanda.

Appunti:

  • L'input non sarà mai vuoto se non ci sono domande memorizzate.

Chiarimento: non è necessario che il programma memorizzi più domande. Inizialmente volevo che ne memorizzasse più, ma l'ho cambiato dopo che molte persone avevano frainteso la domanda.

Ricorda, questo è , quindi vince il codice con il minor numero di byte.


Intendevi "domanda memorizzata in precedenza"? Trovo "ultima domanda memorizzata" confusa in quanto suggerisce che potresti memorizzare più di una domanda.
Neil,

1
@Neil Dovrebbe contenere più di una domanda, ma poiché molte risposte hanno già frainteso la domanda, la lascerò.
Oliver Ni,

Risposte:


10

Perl, 13 17 14 +1 = 15 byte

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

+1 per la -nbandiera (salvato 4 byte grazie a @Dada)

Finché l'ingresso non è uguale al ritorno a capo, memorizza l'ingresso $;. Se è uguale al ritorno a capo, stampa ciò che è già in $;.

Ciò presuppone che tutti gli input possano essere caratterizzati come domande, anche se grammaticalmente, non sono tali.


Probabilmente volevi scrivere neinvece eq(in questo momento non funziona).
Dada,

1
Puoi salvare tre byte facendo /./invece di $/ne$_;-)
Dada

8

05AB1E, 12 11 10 byte

Grazie @daHugLenny e @Adnan per 1 byte!
Grazie @Emigna per 1 byte!

[IDõQiX,ëU

1
Non posso provare ora, ma penso che puoi rimuovere l'ultimo personaggio.
acrolith

1
Sì, è possibile rimuovere l'ultima parentesi (verrà completata automaticamente).
Adnan,

2
Se si sostituisce ®e ©con Xe U, non è necessario il backslash.
Emigna,

4

Haskell, 49 byte

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

Come funziona: inizia con g "". Il parametro sdella funzione gè la domanda in negozio. glegge la riga successiva da stdin e la passa (e anche s) a #. Se la linea è vuota, #stampa il negozio e chiama di gnuovo. Se la linea non è vuota, gviene chiamata con la linea come nuovo negozio.


3

JavaScript, 36 34 31 byte

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

Un ciclo infinito continua a chiedere input e lo memorizza b. Se l'ingresso non è vuoto, viene quindi archiviato a, altrimenti aviene stampato il valore di .

Salvato 2 byte grazie a @ETHproductions


Bella risposta. Puoi salvare un byte rimuovendo il 1, e un altro spostandoti b?a=b:alert(a)nell'ultima sezione all'interno del for-loop (ie for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions

In realtà a=0non è nemmeno necessario. Poiché l'input può essere vuoto solo se ci sono domande memorizzate, anon verrà fatto riferimento se non è stato assegnato.
Oriol,

arresta anche il browser per alcuni secondi con firefox-49.0.2
bunyaCloven

1
L'unico requisito nella tua domanda è che l'input vuoto stampi l'ultima domanda memorizzata. Perché vuoi che contenga riferimenti a domande memorizzate in precedenza?
Oriol,

1
@bunyaCloven Per me, il browser si ferma solo quando gli dico di bloccare i dialoghi. Questo è previsto a causa del ciclo infinito. Dopo alcuni secondi il browser rileva il problema e uccide JS.
Oriol,

2

Mathematica, 44 byte

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

Programma completo. Il carattere Unicode è U + 221E INFINITY per \[Infinity].



1

reticolare, 12 byte

id""E[$dp]~*

Provalo online!

Spiegazione

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

Pyke, 6 byte

z=z~zr

Provalo qui!

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

1

Python3 - 49 byte

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

1
NameError: name 'b' is not defined
shooqie,

@shooqie Ah, ho digitato questo con il mio telefono, quindi ho lasciato per sbaglio b=input(). Grazie!
Yytsi,

1

Python 3, 34 byte

s=""
while[print(s)]:s=input()or s

No? Funziona bene per me
Blue

3
Le specifiche non chiedono di memorizzare più domande?
Blu,

1

Python 3, 60 byte

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

0

CMD, 37 byte

Purtroppo setnon accetta input vuoti :(

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

in un nome di file c.cmdo

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

in qualsiasi file. Funzionante (utilizzare -come vuoto):

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

set/pnon renderà mai vuota una variabile, quindi almeno set a=nella prima riga è necessario; anche io penso che tu intenda set b=%a%.
Neil,

0

APLX, 19 byte

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

Spiegazione:

⍝ 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 byte

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

Utilizza solo 1 buffer e un solo carattere per gestire la logica. Se l'utente non inserisce nulla, viene sovrascritto solo il primo carattere nel buffer '\0', in tal caso viene ripristinato xe stampato, altrimenti copia la prima lettera in xper un uso successivo.

Codice precedente:

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

0

Java 7, 189 187 178 byte ..

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 byte usando new java.util.Scannerdirettamente, grazie a @cliffroot .

Probabilmente la prima volta che ho usato una do-whilesfida in un codegolf ...

Quando le funzioni sono consentite al posto dei programmi, sono 135 byte (ancora molte volte più della maggior parte delle altre risposte ..)


questo è un po 'più breve e sembra funzionare -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 .. non ti manca un foro whileda qualche parte? .. Che cos'è (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen,

1
Sì, in qualche modo sono riuscito a perdere prima :) che avrebbe dovuto essere 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;}ed è in realtà 1 byte più lungo della versione con 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 ovviamente .. grazie!
Kevin Cruijssen,

0

sed, 10 byte

/./{x;d};g

Spiegazione:

      (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

Bello vedere una lingua exoterica (cioè "non esoterica") che si lega con alcune delle lingue del golf!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.