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.