even lines
今日はこれ。
anarchy golf - even lines
標準入力から渡されるもののうち、偶数行目だけを出力するというもの。
しばらくは、なんとかline(s)系の軽めなのを続けていこうかと。
継続はなんとやら。
まず何も考えずに書いたのが以下。
- 40bytes
while(0<1){readLine;println(readLine.r)}
1ループ内でreadLineを2回呼んで、2回目のみ出力すればいいよね、というもの。
.r は例によって、例外投げてタイムアウトを予防するためのものです。
while(0<1){〜〜} は def f{〜〜;f};f に書き換えると1bytes減るけど、まだあわてるような時間じゃない。
というか、できることなら{}なしで、while(〜)println(〜) とか書きたい。
今回の場合なら、奇数行を読むreadLineは投げ捨てているので、そこをうまくwhileの条件に指定できないかな〜とPredefのreadHoge を眺めてたら、readBooleanなるものが。
ということで次。
- 38bytes
while(!readBoolean)println(readLine.r)
readBooleanは、REPLで試してみたところ"t" or "true" の場合に true、それ以外は false を返す模様。
なので↑のコードは、"true"なんて行があったりするとそこで止まってしまったりするw
もうちょい条件のところをちゃんとできないかな、と他のread系メソッド見てあれこれ悩んだ末にできたのがこれ。
- 34bytes
while(readChar>0)println(readLine)
readCharは入力の1文字目をCharでとってくる。Char型は数値演算ができる(その文字のAsciiコードの値)ので、不等号と合わせるとBooleanがとれる。
while部分で終了判定ができるので、readLineのあとの.rもいらなくなった。
やったー。