Palindromic prime終了

Palindromic prime が終わった。なかなか面白い問題だった。

C

トップは 90B で並んだが、not さんはちょっとロジックが違っていた。for 文 3 つをひとつにまとめたとか。かなり読みにくくなっている分、圧縮されたということなんだな。
本問題で、ちょっと面白かったのが、%= を使った変数の初期化。当初、内側の for に入る都度、y=0 に初期化する必要があり以下のようにしていた。

for(...;...;i-n||printf("%d\n",n),y=0)for(...;...;...)

これを、以下のようにし、

for(...;...;y%=i-n||printf("%d\n",n))for(...;...;...)

1B 縮めるのを思いつき、ちょっと感動した。右辺は printf があるので、常に TRUE(1) となり、それゆえ、1 で割ったあまりを取れば、y の値によらず、常に、y を 0 に初期化できるというもの。このパターンは私ははじめてだ。

JavaScript

JavaScriptは、RE で、Palindromic を判定できることが分かったら、極端に縮まった。RE exec() の戻り値を !! で、0 / 1 にして、素数判定用の変数の初期化に使うところもなかなか絶妙。

Groovy

murky-satyr さんの答え。フェルマーの小定理で通らない 2 のはじき方がみごとだな。(Groovy における)文字列の引き算は、「もし、マッチすれば差し引く」という動きなので、このケースのように、はまれば結構効果的だ。それから、数値⇒文字列変換で GString を使う方法、以前もこれに気がつかなかったことがあった気がする。しっかり覚えておこう。

(n+'')[-1..0] ==> "$n"[-1..0]