잠깐만 ... 내가 다시 뭐라고 했어?


10

나는 종종 선생님이 내게 말을 할 때하고 싶은 말을 잊어 버립니다. 이 문제를 해결하기위한 도구를 만들 수 있습니까?

요구 사항 :

  • 프로그램은 다음과 같이 반복되어야합니다.
    • 먼저 입력을 받아
    • 입력이 비어 있으면 마지막 저장된 질문을 인쇄하십시오.
    • 그렇지 않으면 입력을 질문으로 저장하십시오.

노트:

  • 질문이 저장되어 있지 않으면 입력 내용이 비어 있지 않습니다.

설명 : 프로그램은 여러 질문을 저장할 필요가 없습니다. 나는 원래 여러 개를 저장하기를 원했지만 많은 사람들이 질문을 오해 한 후에 그것을 바 꾸었습니다.

이것은 이므로 바이트 수가 가장 적은 코드가 이깁니다.


"이전에 저장된 질문"을 의미 했습니까? 하나 이상의 질문을 저장할 수 있음을 시사하는 "마지막 저장된 질문"이 혼동됩니다.
Neil

1
@Neil 그것은 하나 이상의 질문을 저장해야하는데, 많은 답변들이 이미 그 질문을 오해했기 때문에 그냥 남겨 두겠습니다.
Oliver Ni

답변:


10

펄, 13 17 14 +1 = 15 바이트

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

-n플래그에 +1 (@Dada 덕분에 4 바이트 절약)

입력이 캐리지 리턴과 같지 않으면 입력을에 저장합니다 $;. 캐리지 리턴과 같으면 이미있는 내용을 인쇄합니다 $;.

이것은 문법적으로는 아니더라도 모든 입력이 질문으로 특징 지을 수 있다고 가정합니다.


당신은 아마 ne대신에 쓰고 싶을 것입니다 eq(지금은 작동하지 않습니다).
Dada

1
;-) /./대신에 3 바이트를 절약 할 수 있습니다.$/ne$_
Dada

8

05AB1E, 12 11 10 바이트

1 바이트에 대해 @daHugLenny와 @Adnan에게 감사드립니다!
1 바이트 주셔서 @Emigna 감사합니다!

[IDõQiX,ëU

1
나는 지금 테스트 할 수 없지만 마지막 캐릭터를 제거 할 수 있다고 생각합니다.
아크로리스 2

1
예. 마지막 브래킷을 제거 할 수 있습니다 (자동 완성 됨).
Adnan은

2
당신이 교체하는 경우 ®©XU백 슬래시가 필요하지 않습니다.
Emigna

4

하스켈, 49 바이트

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

작동 방식 :로 시작하십시오 g "". s기능 의 매개 변수 는 g매장의 문제입니다. gstdin에서 다음 줄을 읽고 s로 전달합니다 #. 회선이 비어 있으면 #상점을 인쇄하고 g다시 호출 하십시오. 줄이 비어 있지 않으면 g줄을 새 저장소로 사용하여 호출됩니다.


3

자바 스크립트, 36 34 31 바이트

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

무한 루프는 입력을 계속 요청하여에 저장합니다 b. 입력이 비어 있지 않은 다음에 저장됩니다 a. 그렇지 않으면 값 a이 인쇄됩니다.

@ETHproductions 덕분에 2 바이트 절약


좋은 대답입니다. 당신은을 제거하여 바이트를 저장할 수 있습니다 1이동하여, 다른 b?a=b:alert(a)(즉에 대한 루프 내에서 마지막 섹션으로 for(a=0;;b?a=b:alert(a))b=prompt())
ETHproductions

실제로도 a=0필요하지 않습니다. 질문이 저장된 경우에만 입력을 비울 수 있으므로 a할당되지 않은 경우 참조되지 않습니다.
Oriol

또한 파이어 폭스 - 49.0.2에 몇 초 동안 브라우저를 중지
bunyaCloven

1
질문의 유일한 요구 사항은 빈 입력으로 마지막 저장된 질문을 인쇄하는 것입니다. 왜 이전에 저장된 질문에 대한 언급을 원하십니까?
Oriol

1
@bunyaCloven 나에게 대화 상자를 차단하도록 지시하면 브라우저가 중지됩니다. 무한 루프로 인해 예상됩니다. 몇 초 후에 브라우저는 문제를 감지하고 JS를 종료합니다.
Oriol

2

매스 매 티카, 44 바이트

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

전체 프로그램. 유니 코드 문자는 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 Ah, 실수로 전화를 끊었을 때 전화로 입력했습니다 b=input(). 감사!
Yytsi

1

파이썬 3, 34 바이트

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

그렇지 않습니까? 그것은 나를 위해 잘 작동합니다
Blue

3
사양은 여러 질문을 저장하도록 요구하지 않습니까?
Blue

1

파이썬 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%.
Neil

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

자바 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-whilecodegolf challenge에서 처음 사용했을 때 ..

프로그램 대신 함수가 허용되면 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

@cliffroot Ummm .. 당신은 for또는 while어딘가에 없습니다 ? .. 무엇입니까 (x=new java.util.Scanner(System.in).nextLine())!=null;)?
Kevin Cruijssen

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

골프 언어 중 일부와 관련이있는 이국적 언어 (즉, "비밀 한"언어)를 만나서 반갑습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.