Зачекайте ... що я збирався сказати ще раз?


10

Я часто забуваю, що хотів сказати, коли вчитель закликає мене говорити. Чи можете ви зробити мені інструмент для вирішення цього питання?

Вимоги:

  • Програма повинна циклічити наступним чином:
    • По-перше, взяти введення
    • Якщо вхід порожній, надрукуйте останнє збережене запитання.
    • В іншому випадку збережіть дані як запитання.

Примітки:

  • Вхід ніколи не буде порожнім, якщо немає запитань.

Уточнення: Програмі не потрібно зберігати кілька запитань. Спочатку я хотів, щоб він зберігав кілька, але я змінив це, коли багато людей неправильно зрозуміли питання.

Пам'ятайте, це , тому виграє код з найменшою кількістю байтів.


Ви мали на увазі "раніше збережене запитання"? Я вважаю, що "останнє збережене запитання" є заплутаним, оскільки він дозволяє вам зберігати більше одного питання.
Ніл

1
@Neil Це повинно зберігати більше одного запитання, але оскільки багато відповідей уже неправильно зрозуміли питання, я просто залишу його.
Олівер Ні

Відповіді:


10

Perl, 13 17 14 +1 = 15 байт

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

+1 для -nпрапора (збережено 4 байти завдяки @Dada)

Поки вхід не дорівнює поверненню каретки, він зберігає вхід $;. Якщо вона дорівнює поверненню каретки, вона друкує те, що вже є $;.

Це передбачає, що всі матеріали можна охарактеризувати як питання, навіть якщо граматично вони не є такими.


Напевно, ви хотіли писати neзамість eq(зараз це не працює).
Дада

1
Ви можете зберегти три байти, виконавши /./замість $/ne$_;-)
Dada

8

05AB1E, 12 11 10 байт

Дякую @daHugLenny та @Adnan за 1 байт!
Дякую @Emigna за 1 байт!

[IDõQiX,ëU

1
Зараз я не можу перевірити, але я думаю, ви можете видалити останній символ.
акроліт

1
Так, ви можете видалити останню дужку (вона буде автоматично виконана).
Аднан

2
Якщо ви замінюєте ®і ©на, Xі Uзворотну косу рису не потрібно.
Емінья

4

Хаскелл, 49 байт

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

Як це працює: почніть з g "". Параметр sфункції g- це питання в магазині. gчитає наступний рядок із stdin та передає його (а також s) до #. Якщо рядок порожній, #друкує магазин і дзвонить gзнову. Якщо рядок не порожній, gїї називають новим магазином.


3

JavaScript, 36 34 31 байт

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

Нескінченний цикл постійно запитує введення та зберігає його b. Якщо вхід не порожній, він зберігається a, інакше aдрукується значення.

Збережено 2 байти завдяки @ETHproductions


Гарна відповідь. Ви можете зберегти байт, видаливши 1та інший, перемістившись b?a=b:alert(a)в останній розділ у циклі for-циклу (тобто for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions

Насправді a=0це теж не потрібно. Оскільки вхід може бути порожнім лише у випадку збережених питань, aвін не буде посилатися, якщо він не був призначений.
Оріол

також зупиняє браузер на кілька секунд з firefox-49.0.2
bunyaCloven

1
Єдина вимога вашого запитання - це те, що порожній вхід друкує останнє збережене запитання. Чому ви хочете, щоб я мав посилання на раніше збережені запитання?
Оріол

1
@bunyaCloven Для мене браузер зупиняє лише тоді, коли я скажу йому блокувати діалоги. Це очікується завдяки нескінченному циклу. Через кілька секунд браузер виявляє проблему і вбиває JS.
Оріол

2

Математика, 44 байти

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

Повна програма. Символ Unicode - U + 221E INFINITY for \[Infinity].



1

ретикулярна, 12 байт

id""E[$dp]~*

Спробуйте в Інтернеті!

Пояснення

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 байт

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

1
NameError: name 'b' is not defined
shooqie

@shooqie Ах, я це набрав зі своїм телефоном, щоб я випадково не залишився b=input(). Дякую!
Yytsi

1

Python 3, 34 байти

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

Це не так? Для мене це добре працює
Blue

3
Специфікація не вимагає зберігати кілька питань?
Блакитний

1

Python 3, 60 байт

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

0

CMD, 37 байт

На жаль set, не приймає порожній вхід :(

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

у назвах файлів c.cmdабо

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

у будь-якому файлі. Робота (використовувати -як порожнє):

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

set/pніколи не зробить змінну порожньою, тому принаймні вам потрібно set a=в першому рядку; також я думаю, ти маєш на увазі set b=%a%.
Ніл

0

APLX, 19 байт

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

Пояснення:

⍝ 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 байт

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

Для обробки логіки використовується лише 1 буфер і одна таблиця. Якщо користувач нічого не вводить, замінюється лише перша таблиця в буфері '\0', в такому випадку вона відновлюється xта друкується, інакше скопіюйте першу букву xдля подальшого використання.

Попередній код:

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

0

Java 7, 189 187 178 байт ..

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 байт, використовуючи new java.util.Scannerбезпосередньо, завдяки @cliffroot .

Напевно, я вперше застосував do-whileзавдання в кодегольфі.

Якщо функції дозволені замість програм, це 135 байт (все-таки в багато разів більше, ніж більшість інших відповідей ..)


це трохи коротше і, здається, працює -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 Ummm .. ти не пропускаєш forабо whileдесь? .. Що таке (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Кевін Кройсейсен

1
Так, мені вдалося пропустити до цього якось :) це повинно було бути, 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;}і це насправді на 1 байт довше, ніж версія з 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 Ну звичайно .. дякую!
Кевін Кройсейсен

0

sed, 10 байт

/./{x;d};g

Пояснення:

      (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

Приємно бачити екзотеричну (тобто "не езотеричну") мову, пов'язану з деякими мовами для гольфу!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.