【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では可能)。
なんでじゃい。

となると文法面で工夫する必要があるのかな?


色々試す必要がありますねー。スマートにキメちゃうやり方を探したいです