チュートリアル 007 解答例

Point 51, MaxBytes 11, 最下位1位

攻略のヒント

  1. 繰り返しのパターンはナルト型に似ている

a(X):Xa(sX)
a(r)

"(sX)"を弄ることで条件を満たすパターンを形成できそう。
入力例

rrslsrrslsrslsrrslsrslsrslsrrslsrslsrslsrslsr...
*このコードを圧縮すると12Bytesになり、あと1Bytesの圧縮が必要になります。

↓解答例












11Bytes, 1位

a(X):Xa(rslsX)
a(r)

Rule 式の評価順

HerbertOnlineJudgeの場合、式の内側、つまりカッコの内側から評価されて行きます。
例を追いながら見ていきましょう。

a(X):XXXX // プロシージャ定義部分
b(X):XXr // プロシージャ定義部分
c(X):X   // プロシージャ定義部分

a(b(c(sss)))  // 式実行部分

*式の下線部が現在評価している評価部分になります。
  1. まずは式の内側"a(b(c(sss)))"が評価されます
  2. これはc(X):Xですので、
  3. "a(b(sss))"となります。
  4. 次にカッコの内側"a(b(sss)))"が評価されて
  5. b(X):XXrなので
  6. "a(ssssssr)"となります
  7. 最後に一番外側、最後のカッコを評価するので
  8. "a(ssssssr)"となって
  9. a(X):XXXXなので
  10. "ssssssrssssssrssssssrssssssr"となり、
  11. 無事全部の式が評価され終わりました。

式部分だけ抜き出して羅列するとこうなります。

a(b(c(sss)))
a(b(sss))
a(ssssssr)
ssssssrssssssrssssssrssssssr

Rule 式の評価順 その2

その2です。

HerbertOnlineJudgeの場合、式の内側、つまりカッコの内側から評価されて行きます。
今回は前回の記事に少しのプラスアルファを加えます。

b(c(X)r)

となったとき、
"r"はどう評価されるのか、例を追いながら見ていきましょう。

a(X):XXXX // プロシージャ定義部分
b(X):XX
c(X):X

a(b(c(sss)r)lll)  // 式実行部分


*式の下線部が現在評価している評価部分になります。
  1. まずは式の内側"a(b(c(sss)r)lll)"が評価され
  2. これはc(X):Xなので、
  3. "a(b(sssr)lll)"となり
  4. 次にカッコの内側"a(b(sssr)lll)"が評価されて
  5. b(X):XXなので
  6. "a(sssrsssrlll)"となります
  7. 最後に一番外側、最後のカッコを評価するので
  8. "a(sssrsssrlll)"となって
  9. a(X):XXXXなので
  10. "sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll"となり、
  11. 無事全部の式が評価され終わりました。

式部分だけ抜き出して羅列するとこうなります。

a(b(c(sss)r)lll)
a(b(sssr)lll)
a(sssrsssrlll)
sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll

実行可能なレシピ その2

id:quolcさんのSomething worthless to be written formallyからの引用です。

8Bytes

a(X):Xa(sX)
a(r)


17Byets

a(X):XXXX
b:srsl
a(a(a(b)r)r)


25Byets

a(X):XXXX
b(X):sb(X-1)
c(X):a(a(b(X)r)r)c(X+2)
c(1)


う〜ん…、すごい。
この2日間頭をひねってもこんなコード出てこなかった。
とてもシンプル。プログラマーとしてLispを学べと言われる所以を垣間見ました。

Problem 0005

Problem 0005に苦闘中。

lssrrssrssssrrssssrssssssrrssssssrssssssss

で昇順でいくのか

ssssssssllsssssssslssssssllsssssslssssllsssslss

で降順でいくのか


どうかいていいのか…苦戦中。
どなたかソースください。

1/26追記:
@quoloquisさんの古い日記に開発中のソースコードを見つけた。
カテゴリー H

実行可能なレシピ

4Bytes

a:sa
a


8Bytes

  • 命令引き数プロシージャ(Procedure Command Arguments) 引数2の場合
a(X,Y):XY
a(s,r)


11Bytes

  • 再帰処理とPCA2の組み合わせ
a(X,Y):XY
b:a(s,r)b
b
  1. 1Bytesの圧縮


11Bytes

  • 命令引き数プロシージャ(Procedure Command Arguments) 引数3の場合
a(X,Y,Z):XYZ
a(s,r,s)


8Bytes

  • 数値引数プロシージャ(Procedure number argument)
a(X):sa(X-1)
f:a(8)
f


11Bytes

  • 再帰処理とPNAの組み合わせ
a(X):sa(X-1)
f:a(1)f
f

チュートリアル 004

Point 8, MaxBytes 20, 最下位11位

20Bytes 11位

a(X):sa(X-1)
f:a(8)
c:lf
fccfcfcf

このMAPは003と同じく

を4回繰り返す

  1. 8マス前身する処理を作る
  2. 左向いて8マス前進する処理を作る
  3. 1.と2.を組み合わせてMAPを巡回する

20Bytes 11位

a(X):sa(X-1)
f:a(8)
c:lf
m:cf
fcmmm
  1. "cf"を新たに定義してもBytes数では同じ。


19Bytes 10位

a(X):sa(X-1)
f:a(8)
b:fr
c:bbbfc
c