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もいらなくなった。
やったー。