Zaraz… co miałbym powiedzieć jeszcze raz?


10

Często zapominam, co chciałem powiedzieć, gdy nauczyciel wzywa mnie do zabrania głosu. Czy możesz zrobić ze mnie narzędzie do rozwiązania tego?

Wymagania:

  • Program musi wykonać pętlę w następujący sposób:
    • Najpierw weź udział
    • Jeśli dane wejściowe są puste, wydrukuj ostatnie zapisane pytanie.
    • W przeciwnym razie zapisz dane wejściowe jako pytanie.

Uwagi:

  • Dane wejściowe nigdy nie będą puste, jeśli nie zostaną zapisane żadne pytania.

Wyjaśnienie: Program nie musi przechowywać wielu pytań. Początkowo chciałem, aby przechowywał wiele, ale zmieniłem to, gdy wiele osób źle zrozumiało pytanie.

Pamiętaj, to jest , więc wygrywa kod z najmniejszą liczbą bajtów.


Miałeś na myśli „wcześniej zapisane pytanie”? Uważam, że „ostatnio przechowywane pytanie” jest mylące, ponieważ sugeruje, że możesz przechowywać więcej niż jedno pytanie.
Neil,

1
@Neil To powinno przechowywać więcej niż jedno pytanie, ale ponieważ wiele odpowiedzi już źle zrozumiało pytanie, zostawię je.
Oliver Ni

Odpowiedzi:


10

Perl, 13 17 14 +1 = 15 bajtów

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

+1 za -nflagę (zapisane 4 bajty dzięki @Dada)

Dopóki dane wejściowe nie są równe znakowi powrotu karetki, zapisuje dane wejściowe w $;. Jeśli jest równy zwrotowi karetki, drukuje to, co już jest $;.

Zakłada się, że wszystkie dane wejściowe można scharakteryzować jako pytania, nawet jeśli gramatycznie nie są takie.


Prawdopodobnie chciałeś pisać nezamiast eq(teraz to nie działa).
Dada,

1
Możesz zaoszczędzić trzy bajty, robiąc /./zamiast $/ne$_;-)
Dada

8

05AB1E, 12 11 10 bajtów

Dzięki @daHugLenny i @Adnan za 1 bajt!
Dzięki @Emigna za 1 bajt!

[IDõQiX,ëU

1
Nie mogę teraz testować, ale myślę, że możesz usunąć ostatnią postać.
acrolith

1
Tak, możesz usunąć ostatni nawias (zostanie on automatycznie uzupełniony).
Adnan

2
W przypadku wymiany ®i ©z Xa U, nie trzeba backslash.
Emigna,

4

Haskell, 49 bajtów

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

Jak to działa: zacznij od g "". Parametrem sfunkcji gjest pytanie w sklepie. godczytuje następny wiersz ze standardowego wejścia i przekazuje go (a także s) do #. Jeśli linia jest pusta, #drukuje sklep i dzwoni gponownie. Jeśli linia nie jest pusta, gjest wywoływana z linią jako nowy sklep.


3

JavaScript, 36 34 31 bajtów

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

Nieskończona pętla nieustannie prosi o dane wejściowe i zapisuje je b. Jeśli dane wejściowe nie są puste, są one następnie przechowywane, w aprzeciwnym razie adrukowana jest wartość parametru .

Zaoszczędź 2 bajty dzięki @ETHproductions


Niezła odpowiedź. Możesz zapisać bajt, usuwając 1, a drugi, przechodząc b?a=b:alert(a)do ostatniej sekcji w pętli for (tj. for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions

W rzeczywistości a=0nie jest to konieczne. Ponieważ dane wejściowe mogą być puste tylko wtedy, gdy zapisane są pytania, anie można się do nich odwoływać, jeśli nie zostały przypisane.
Oriol,

zatrzymuje także przeglądarkę na kilka sekund z firefox-49.0.2
bunyaCloven

1
Jedynym wymaganiem w twoim pytaniu jest to, że puste dane wejściowe drukują ostatnio zapisane pytanie. Dlaczego chcesz, żebym przechowywał odniesienia do wcześniej zapisanych pytań?
Oriol

1
@bunyaCloven Dla mnie zatrzymuje przeglądarkę tylko wtedy, gdy każę jej blokować okna dialogowe. Jest to oczekiwane z powodu nieskończonej pętli. Po kilku sekundach przeglądarka wykrywa problem i zabija JS.
Oriol,

2

Mathematica, 44 bajty

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

Pełny program Znak Unicode to U + 221E INFINITY dla \[Infinity].



1

siatka, 12 bajtów

id""E[$dp]~*

Wypróbuj online!

Wyjaśnienie

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 bajtów

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

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

@shooqie Ah, wpisałem to na telefonie, więc przypadkowo pominąłem b=input(). Dzięki!
Yytsi,


1

Python 3, 60 bajtów

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

0

CMD, 37 bajtów

Niestety setnie przyjmuje pustych danych wejściowych :(

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

w nazwach plików c.cmdlub

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

w dowolnym pliku. Działający (użyj -jako pusty):

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

set/pnigdy nie spowoduje, że zmienna będzie pusta, więc przynajmniej potrzebujesz set a=w pierwszym wierszu; też myślę, że masz na myśli set b=%a%.
Neil,

0

APLX, 19 bajtów

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

Wyjaśnienie:

⍝ 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 bajtów

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

Do obsługi logiki używa tylko 1 bufora i jednego znaku. Jeśli użytkownik nic nie wprowadzi, tylko pierwszy znak w buforze zostanie zastąpiony przez '\0', w takim przypadku zostanie przywrócony xi wydrukowany, w przeciwnym razie skopiuj pierwszą literę dox późniejszego użycia.

Poprzedni kod:

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

0

Java 7, 189 187 178 bajtów ..

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 bajtów przy użyciu new java.util.Scanner bezpośrednio, dzięki @cliffroot .

Prawdopodobnie po raz pierwszy użyłem do-whilew zawodach codegolf.

Gdy funkcje są dozwolone zamiast programów, jest to 135 bajtów (wciąż wiele razy więcej niż większość innych odpowiedzi ..)


jest to nieco krótsze i wydaje się, że działa -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 Hmmm .. nie brakuje foralbo whilegdzieś? .. Co to jest (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen

1
Tak, udało mi się jakoś wcześniej to przegapić :) tak miało być 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;}i jest tak naprawdę 1 bajt dłużej niż wersja z 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 oczywiście .. dzięki!
Kevin Cruijssen

0

sed, 10 bajtów

/./{x;d};g

Wyjaśnienie:

      (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

Miło widzieć egzoteryczny (tzn. „Nie ezoteryczny”) język łączący się z niektórymi językami golfa!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.