Chờ đợi những gì tôi sẽ nói một lần nữa?


10

Tôi thường quên những gì tôi muốn nói khi giáo viên gọi tôi nói. Bạn có thể làm cho tôi một công cụ để giải quyết điều này?

Yêu cầu:

  • Chương trình phải lặp như sau:
    • Đầu tiên, nhập liệu
    • Nếu đầu vào trống, in câu hỏi được lưu trữ cuối cùng.
    • Nếu không, lưu trữ đầu vào như một câu hỏi.

Ghi chú:

  • Đầu vào sẽ không bao giờ trống nếu không có câu hỏi nào được lưu trữ.

Làm rõ: Chương trình không cần lưu trữ nhiều câu hỏi. Ban đầu tôi muốn nó lưu trữ nhiều, nhưng tôi đã thay đổi nó sau khi nhiều người hiểu nhầm câu hỏi.

Hãy nhớ rằng, đây là , vì vậy mã có số byte nhỏ nhất sẽ thắng.


Ý của bạn là "câu hỏi được lưu trữ trước đó"? Tôi thấy "câu hỏi được lưu trữ cuối cùng" khó hiểu vì nó gợi ý bạn có thể lưu trữ nhiều hơn một câu hỏi.
Neil

1
@Neil Đáng lẽ phải lưu trữ nhiều hơn một câu hỏi, nhưng vì nhiều câu trả lời đã hiểu sai câu hỏi, tôi sẽ bỏ qua nó.
Oliver Ni

Câu trả lời:


10

Perl, 13 17 14 +1 = 15 byte

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

+1 cho -ncờ (được lưu 4 byte nhờ @Dada)

Miễn là đầu vào không bằng lợi nhuận vận chuyển, nó sẽ lưu đầu vào $;. Nếu nó bằng với lợi nhuận vận chuyển, nó sẽ in những gì đã có $;.

Điều này giả định rằng tất cả các đầu vào có thể được đặc trưng như các câu hỏi, ngay cả khi về mặt ngữ pháp, chúng không phải là như vậy.


Bạn có thể muốn viết nethay vì eq(ngay bây giờ điều này không hoạt động).
Dada

1
Bạn có thể lưu ba byte bằng cách thực hiện /./thay vì $/ne$_;-)
Dada

8

05AB1E, 12 11 10 byte

Cảm ơn @daHugLenny và @Adnan cho 1 byte!
Cảm ơn @Emigna cho 1 byte!

[IDõQiX,ëU

1
Tôi không thể kiểm tra ngay bây giờ, nhưng tôi nghĩ bạn có thể xóa ký tự cuối cùng.
acrolith

1
Có, bạn có thể xóa khung cuối cùng (nó sẽ được tự động hoàn thành).
Adnan

2
Nếu bạn thay thế ®©bằng XU, bạn không cần dấu gạch chéo ngược.
Emigna

4

Haskell, 49 byte

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

Cách thức hoạt động: bắt đầu với g "". Các tham số scủa chức năng glà câu hỏi trong cửa hàng. gđọc dòng tiếp theo từ stdin và chuyển nó (và cả s) tới #. Nếu dòng trống, #in cửa hàng và gọi glại. Nếu dòng không trống, gđược gọi với dòng là cửa hàng mới.


3

JavaScript, 36 34 31 byte

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

Một vòng lặp vô hạn tiếp tục yêu cầu đầu vào và lưu trữ nó trong b. Đầu vào không trống, sau đó nó được lưu trữ a, nếu không thì giá trị của ađược in.

Đã lưu 2 byte nhờ @ETHproductions


Câu trả lời tốt đẹp. Bạn có thể lưu một byte bằng cách xóa 1và một byte khác bằng cách di chuyển b?a=b:alert(a)vào phần cuối cùng trong vòng lặp for (tức là for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions

Trong thực tế a=0cũng không cần thiết. Vì đầu vào chỉ có thể trống nếu có câu hỏi được lưu trữ, asẽ không được tham chiếu nếu nó không được chỉ định.
Oriol

cũng dừng trình duyệt trong vài giây với firefox-49.0.2
bunyaCloven

1
Yêu cầu duy nhất trong câu hỏi của bạn là đầu vào trống sẽ in câu hỏi được lưu trữ cuối cùng. Tại sao bạn muốn tôi giữ tài liệu tham khảo cho các câu hỏi được lưu trữ trước đó?
Oriol

1
@bunyaCoppy Đối với tôi, nó chỉ dừng trình duyệt khi tôi bảo nó chặn các hộp thoại. Điều đó được mong đợi do vòng lặp vô hạn. Sau vài giây, trình duyệt sẽ phát hiện ra sự cố và giết chết JS.
Oriol

2

Toán học, 44 byte

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

Chương trình đầy đủ. Ký tự Unicode là U + 221E INFINITY cho \[Infinity].



1

mặt lưới, 12 byte

id""E[$dp]~*

Hãy thử trực tuyến!

Giải trình

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 byte

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

1
NameError: name 'b' is not defined
shooqie

@shooqie À, tôi gõ cái này bằng điện thoại nên vô tình bỏ đi b=input(). Cảm ơn!
Yytsi

1

Python 3, 34 byte

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

Nó không? Nó hoạt động tốt với tôi
Blue

3
Thông số kỹ thuật không yêu cầu lưu trữ nhiều câu hỏi?
Màu xanh

1

Python 3, 60 byte

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

0

CMD, 37 byte

Đáng buồn là setkhông có đầu vào trống :(

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

trong một tên tập tin c.cmdhoặc

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

trong bất kỳ tập tin. Làm việc (Sử dụng -như trống):

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

set/psẽ không bao giờ làm cho một biến trống, vì vậy ít nhất bạn cần set a=trên dòng đầu tiên; tôi cũng nghĩ rằng bạn có ý nghĩa set b=%a%.
Neil

0

APLX, 19 byte

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

Giải trình:

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

Chỉ sử dụng 1 bộ đệm và một char duy nhất để xử lý logic. Nếu người dùng không nhập gì, chỉ có char đầu tiên trong bộ đệm bị ghi đè bởi '\0', trong trường hợp đó, nó sẽ được khôi phục xvà in, nếu không thì sao chép chữ cái đầu tiên vào xđể sử dụng sau.

Mã trước:

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 bằng cách sử dụng new java.util.Scannertrực tiếp, nhờ @cliffroot .

Có lẽ là lần đầu tiên tôi sử dụng một do-whilethử thách trong codegolf ..

Khi các chức năng được cho phép thay vì các chương trình, đó là 135 byte (vẫn gấp nhiều lần so với hầu hết các câu trả lời khác ..)


cái này ngắn hơn một chút và dường như đang hoạt động -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 .. bạn không thiếu một forhoặc whileở đâu đó? .. là (x=new java.util.Scanner(System.in).nextLine())!=null;)gì?
Kevin Cruijssen 7/11/2016

1
Vâng, tôi đã cố gắng bỏ lỡ trước đó bằng cách nào đó :) nó được cho là 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;}và nó thực sự dài hơn 1 byte sau đó phiên bản với 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 tất nhiên rồi .. cảm ơn!
Kevin Cruijssen 7/11/2016

0

sed, 10 byte

/./{x;d};g

Giải trình:

      (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

Rất vui khi thấy một ngôn ngữ exoteric (tức là "không bí truyền") gắn với một số ngôn ngữ chơi gôn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.