ちょっと待って…また何を言うつもりだったの?


10

先生が私に話すように言ったとき、私が言いたかったことをしばしば忘れます。これを解決するためのツールを作ってくれませんか?

要件:

  • プログラムは次のようにループする必要があります。
    • まず、入力を取ります
    • 入力が空の場合、最後に保存された質問を出力します。
    • それ以外の場合は、入力を質問として保存します。

ノート:

  • 質問が保存されていない場合、入力が空になることはありません。

明確化:プログラムは複数の質問を保存する必要はありません。 もともとは複数保存したかったのですが、多くの人に誤解されて変更しました。

これはなので、バイト数が最も少ないコードが優先されます。


「以前に保存された質問」という意味ですか?「最後に保存された質問」は、複数の質問を保存する可能性があることを示唆しているため、混乱します。
Neil、

1
@ニール複数の質問を保存することになっていますが、多くの回答はすでに質問を誤解しているので、そのままにしておきます。
Oliver Ni

回答:


10

Perl、13 17 14 +1 = 15バイト

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

-nフラグの+1 (@Dadaのおかげで4バイトを節約)

入力がキャリッジリターンと等しくない限り、入力はに格納され$;ます。キャリッジリターンと等しい場合は、すでに入っているものを出力し$;ます。

これは、たとえ文法的にはそうでなくても、すべての入力が質問として特徴付けられることを前提としています。


あなたはおそらくne代わりに書こうと思っていましたeq(今のところこれはうまくいきません)
ダダ、

1
;-)の/./代わりに3バイトを保存できます$/ne$_
Dada

8

05AB1E、12 11 10バイト

1バイトをありがとう@daHugLennyと@Adnan!
1バイトをありがとう@Emigna!

[IDõQiX,ëU

1
今はテストできませんが、最後のキャラクターは削除できます。
acrolith 2016年

1
はい、最後のブラケットを削除できます(オートコンプリートされます)。
Adnan

2
あなたが交換した場合®©してXU、あなたは、バックスラッシュは必要ありません。
Emigna

4

Haskell、49バイト

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

仕組み:で始まるg ""s関数のパラメーターはg、ストア内の質問です。gstdinから次の行を読み取り、それを(およびsも)に渡し#ます。行が空の場合は#、ストアを印刷してg再度呼び出します。行が空でない場合、gその行を新しいストアとして呼び出します。


3

JavaScript、 36 34 31バイト

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

無限ループは入力を要求し続け、それをに格納しbます。入力が空でaない場合はに格納され、それ以外の場合はの値aが出力されます。

@ETHproductionsのおかげで2バイト節約


素敵な答え。を削除して1バイトを保存し、1別のb?a=b:alert(a)ループをforループ内の最後のセクション(つまりfor(a=0;;b?a=b:alert(a))b=prompt())に移動して保存できます
ETHproductions

実際にa=0はどちらも必要ではありません。入力は質問が保存されている場合にのみ空になるため、a割り当てられていない場合は参照されません。
Oriol

また、firefox-49.0.2でブラウザを数秒間停止します
bunyaCloven

1
質問の唯一の要件は、空の入力が最後に保存された質問を出力することです。以前に保存した質問への参照を保持する必要があるのはなぜですか?
Oriol

1
@bunyaCloven私にとっては、ダイアログをブロックするように指示したときにのみブラウザを停止します。これは、無限ループのために予想されたものです。数秒後、ブラウザが問題を検出し、JSを強制終了します。
Oriol

2

Mathematica、44バイト

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

完全なプログラム。Unicode文字はのU + 221E INFINITYです\[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、2016年

1

Python 3、34バイト

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

そうじゃない?それは私にとってはうまくいく
Blue

3
仕様は複数の質問を保存することを求めていませんか?
Blue

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%
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

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

@cliffrootのnew java.util.Scannerおかげで直接使用して-9バイト

おそらく私が初めて使用した 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

@cliffrootうーん..あなたが欠落していないforか、whileどこを?...何がありますか(x=new java.util.Scanner(System.in).nextLine())!=null;)
Kevin Cruijssen、2016年

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ああもちろん..ありがとう!
Kevin Cruijssen、2016年

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.