【Scala】Dancing Kids
解答の一例が載っています、閲覧注意。
今回はこちらanarchy golf - Dancing Kids
left と right の入力に合わせて踊る少年を出力、という問題
この問題作ってるのって日本人なのだろうか
まずはざっくり
最初にmatch/caseを使って作ってみます
print(readLine match{case"left"=>" ('-')/\n /|_|\n | |"case"right"=>"\\('-')\n |_|\\\n | |"case _=>"\\('-')/\n |_|\n | |"})
128bytes.
次はifを使ってみる
var a=readLine;print(if(a=="left")" ('-')/\n /|_|\n | |"else if(a=="right")"\\('-')\n |_|\\\n | |"else"\\('-')/\n |_|\n | |")
130bytes.
減らし方次第ではどっちにも分がありそう。
どうでもいいけど激しくコードが見づらい。
Scalaでは"\"を表現するとき"\\"と打たなければならない点に注意。
削るポイントが沢山ありそうな問題ですね。
顔や胴体の一部は冗長なので上手く削っていきたいところ?
主要パーツ(('-'),|_|,| |)はそれぞれ3回ずつ出てきてるし。
が、下手に変数にしたりすると""や+を入れる手間が出てきて余計にかさばる始末。
仮に顔だけを変数 a に入れても、left時に「" "+a+"/"」となってしまい普通に表現したほうが少ないbyteで済んでいる。
s/$(""の中でも変数扱いにできる)を使えば少なく出来るかも、と思ったんだけど何故かあなごるのフォームでは使えない技の模様(REPLでは可能)。
なんでじゃい。
となると文法面で工夫する必要があるのかな?
色々試す必要がありますねー。スマートにキメちゃうやり方を探したいです