最近のあなごる問題
weekday names
当初『埋め込み+圧縮』かと思っていたら、曜日名を出力するフォーマッターがあることが分かった。
js
Date オブジェクトに toLocaleString() メソッドというのがあった。'%A' で曜日名が得られる。ロケールが US English なので、Monday ... が得られるというもの。
Groovy
Groovy (というか Java5 以降) は、PrintWriter#printf() が、java.util.Formatter のフォーマット機能をサポートしている。これは、C の printf() と違って、Date/Time のフォーマッティングもサポートしている。Date/Time の場合は、フォーマットされるオブジェクトは、Date や Calendar 以外に、Epoch Time と呼ばれる 1970/1/1 からの秒数を表している Long オブジェクトも渡せる。しかしなぁ、teebee さんの解のように、4..10 を 58 ビット左シフトすると、ちょうど、Monday .. Sunday になるとは!これは、見つけられなかった。
electronic dice
これは、なかなか良質な問題だと思った。LED counter と性格が似ているが、本問題の方がシンプルなため、答えのアプローチ方法は異なる。
さいころは n=1〜6 で、また、パターンの対象性から、結局、
左上右下 n>2 左右中央 n>5 左下右上 3%n%2 中央 n%2
だけで表すことができる。
vi
vim では、
C^R=[@->2,0,3%@-%2,@->5,@-%2,@->5,3%@-%2,0,@->2] ^[
とリストを使ってやることで、シンプルで短い解ができたが、残念ならが最短ではなかった。
C
C も同じアプローチを取ったが、こちらも、この方法より、ビットパターン埋め込みの方が短かった。ただ、単純にやると 9 ビット必要だが、対象性より左上と右下が常に同じであることを利用し、i%8 とやることで、8 ビットに埋め込んでいるinaniwa さんの解、さすがです。
partition by parity
この問題は、偶数と奇数の間に空行を1行はさむこと、および、問1において、11 が 2 度現れることにどう対処するかが難しかった。
Groovy
teebee さんの解。抜いたり抜かれたりを繰り返しだいぶ戦ったが、最終的に 1B 差で負けた。この解は、"-1" をデータに加え、ソート後に、値が負なら空行を表示するというロジック。みごとだな。
C
not さんの解。配列、a[] には、出現回数を記録し、表示時には、その回数分ループするという方法で 11 のダブりに対応している。これもみごとだ。
trimming
この問題は、割と面倒なので、埋め込み系の回答が多い。そんな中で、vi は、まともに、上と左右の空白をトリムしている。もっと、問題のサンプル数を増やせるといいな。埋め込みにしてしまうには、惜しい問題だ。