オフラインリアルタイムどう書く という、 @Nabetani さん主催のイベントを模したものを ESM の社内向けに行ったものです。
| # | 例題 | タイトル |
|---|---|---|
| 第1回 | n/a | 行列のできるラーメン屋 |
| 第2回 | 星めぐり | この問題です |
星型と五角形をかたどった次のようなグラフがあります。 頂点と交点にはA〜Jの名前と赤か白かの色が付けられています。
入力で指定される点の色を、赤ならば白に白ならば赤にします。 その時指定した点の色と同じ色の点にはさまれる点も同時に反転します。
入力で指定される順に点の色を反転した場合の最後の状態を出力してください。
A〜Jの文字で点が指定されます- 指定された点の色が赤の場合はその点の色を白に、指定された点の色が白の場合はその点の色を赤に反転します。
- 色を反転した点と同じ直線上で、反転した後の色と同じ色の点がある場合、かつその二つの点の間に異なる色の点がある場合、その間の点の色も反転します(赤なら白に、白なら赤になります)。
次のような並びの場合、1の位置の点が反転して赤になった場合は3の位置の点は反転しません。
1 2 3 4
(W)-(R)-(W)-(R)
反転する点の名前 A 〜 J を並べた文字列です。
例) IC
入力で指定された I の色を反転します。
I の色が白になったので、I と、白い点である A にはさまれる赤い点 J および 白い点 D にはさまれる赤い点 H も色を反転します。
次の入力で指定された C の色を反転します。
C の色が赤になったので、 C と赤い点である G にはさまれる白い点 H も色を反転します。
点の名前のアルファベット順に、点の色が白ならば W を、赤ならば R を順に並べた文字列です。
例) WWRWWRRRWW
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| 白 | 白 | 赤 | 白 | 白 | 赤 | 赤 | 赤 | 白 | 白 |
書いたコードは社内から参照できる場所にアップしていただき、リンクを連絡していただけると助かります。 アップ先は GitHub, Qiita, esa.io などの公のサービスでも構いません。
| 入力 | 期待する出力 |
|---|---|
A |
RWWWWRRRRR |
F |
WWWWWWWRRW |
J |
WWWWWWRRWW |
AA |
WWWWWWWRWW |
IC |
WWRWWRRRWW |
FC |
WWRWWWWRRW |
AE |
RWWWRRRRRR |
GJ |
WWWWWWWWWW |
CCB |
WRWWWRWWWR |
BEF |
WRWWRWWRRR |
JGD |
WWWRWWWWWW |
IHCC |
WWWWWRWWWW |
AIDD |
RWWWWRRWWR |
IJFA |
RWWWWWWWWW |
ABCDE |
RRRRRRRRRR |
ICEBA |
RRRWRRRRRR |
DAHHD |
RWWWWRWWWR |
GJIJC |
WWRWWWWWRR |
FGHIJ |
WWWWWWWWRR |
HJICGA |
RWRWWRRRRR |
IBCIGC |
WRWWWWWWWW |
BIJJJB |
WWWWWWRWWW |
DCBCHGD |
WRWWWWWRRW |
JEABDHD |
RRWWRRRWRR |
JHFADHE |
RWWRRRRRWW |
HDGGDBIB |
WWWWWWWWWW |
IIDIHCCG |
WWWRWRRWWW |
BBFBICIE |
WRRWRRRWWW |
HJHCFBJGG |
WRRWWWWRRW |
AJJIEAAII |
RWWWRWWWWR |
AIDHJFGAE |
WWWRRWWWWW |
FGBGHCBHJJ |
WWRWWWWRRW |
EFIGIGGHHJ |
WWWWRRRWWR |
HGAFDIFFFF |
RWWRWRRRRW |
AABBCCDDEE |
WWWWWWWWWW |
ABCDEFGHIJ |
RRRRRWWWWW |
FGHIJABCDE |
RRRRRRRRRR |
- できるだけオブジェクティブに書いてみてください。扱う値をできるだけオブジェクトで表現してみてください。
- できるだけデータやパラメータとロジックを分離して書いてみてください。どれぐらい汎用的にできるか試みてください。
- 変数の値を変更できる言語の場合、再代入を用いないで書いてみてください。
- ループを使って書いた場合、再帰を使って書いてみてください。再帰を使って書いた場合、畳み込みを使って書いてみてください。
- 視覚的に表現してみてください。









