Instantly share code, notes, and snippets.

@mattsan /README.md Secret
Last active Jan 5, 2016

Embed
What would you like to do?
第2回 ESMオフラインどう書く

瞬き星 〜 第2回 ESM オフラインどう書く (2015/12/24)

オフラインリアルタイムどう書く という、 @Nabetani さん主催のイベントを模したものを ESM の社内向けに行ったものです。

# 例題 タイトル
第1回 n/a 行列のできるラーメン屋
第2回 星めぐり この問題です

問題

星型と五角形をかたどった次のようなグラフがあります。 頂点と交点にはA〜Jの名前と赤か白かの色が付けられています。

入力で指定される点の色を、赤ならば白に白ならば赤にします。 その時指定した点の色と同じ色の点にはさまれる点も同時に反転します。

入力で指定される順に点の色を反転した場合の最後の状態を出力してください。

ルール

  1. AJ の文字で点が指定されます
  2. 指定された点の色が赤の場合はその点の色を白に、指定された点の色が白の場合はその点の色を赤に反転します。
  3. 色を反転した点と同じ直線上で、反転した後の色と同じ色の点がある場合、かつその二つの点の間に異なる色の点がある場合、その間の点の色も反転します(赤なら白に、白なら赤になります)。

追記

次のような並びの場合、1の位置の点が反転して赤になった場合は3の位置の点は反転しません。

 1   2   3   4
(W)-(R)-(W)-(R)

入力

反転する点の名前 AJ を並べた文字列です。

例) 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

テストデータ

さらに書きたい人のために

  • できるだけオブジェクティブに書いてみてください。扱う値をできるだけオブジェクトで表現してみてください。
  • できるだけデータやパラメータとロジックを分離して書いてみてください。どれぐらい汎用的にできるか試みてください。
  • 変数の値を変更できる言語の場合、再代入を用いないで書いてみてください。
  • ループを使って書いた場合、再帰を使って書いてみてください。再帰を使って書いた場合、畳み込みを使って書いてみてください。
  • 視覚的に表現してみてください。
int main(int argc, char *argv[]) {
test("A", "RWWWWRRRRR");
test("F", "WWWWWWWRRW");
test("J", "WWWWWWRRWW");
test("AA", "WWWWWWWRWW");
test("IC", "WWRWWRRRWW");
test("FC", "WWRWWWWRRW");
test("AE", "RWWWRRRRRR");
test("GJ", "WWWWWWWWWW");
test("CCB", "WRWWWRWWWR");
test("BEF", "WRWWRWWRRR");
test("JGD", "WWWRWWWWWW");
test("IHCC", "WWWWWRWWWW");
test("AIDD", "RWWWWRRWWR");
test("IJFA", "RWWWWWWWWW");
test("ABCDE", "RRRRRRRRRR");
test("ICEBA", "RRRWRRRRRR");
test("DAHHD", "RWWWWRWWWR");
test("GJIJC", "WWRWWWWWRR");
test("FGHIJ", "WWWWWWWWRR");
test("HJICGA", "RWRWWRRRRR");
test("IBCIGC", "WRWWWWWWWW");
test("BIJJJB", "WWWWWWRWWW");
test("DCBCHGD", "WRWWWWWRRW");
test("JEABDHD", "RRWWRRRWRR");
test("JHFADHE", "RWWRRRRRWW");
test("HDGGDBIB", "WWWWWWWWWW");
test("IIDIHCCG", "WWWRWRRWWW");
test("BBFBICIE", "WRRWRRRWWW");
test("HJHCFBJGG", "WRRWWWWRRW");
test("AJJIEAAII", "RWWWRWWWWR");
test("AIDHJFGAE", "WWWRRWWWWW");
test("FGBGHCBHJJ", "WWRWWWWRRW");
test("EFIGIGGHHJ", "WWWWRRRWWR");
test("HGAFDIFFFF", "RWWRWRRRRW");
test("AABBCCDDEE", "WWWWWWWWWW");
test("ABCDEFGHIJ", "RRRRRWWWWW");
test("FGHIJABCDE", "RRRRRRRRRR");
return 0;
}
main = do
test "A" "RWWWWRRRRR"
test "F" "WWWWWWWRRW"
test "J" "WWWWWWRRWW"
test "AA" "WWWWWWWRWW"
test "IC" "WWRWWRRRWW"
test "FC" "WWRWWWWRRW"
test "AE" "RWWWRRRRRR"
test "GJ" "WWWWWWWWWW"
test "CCB" "WRWWWRWWWR"
test "BEF" "WRWWRWWRRR"
test "JGD" "WWWRWWWWWW"
test "IHCC" "WWWWWRWWWW"
test "AIDD" "RWWWWRRWWR"
test "IJFA" "RWWWWWWWWW"
test "ABCDE" "RRRRRRRRRR"
test "ICEBA" "RRRWRRRRRR"
test "DAHHD" "RWWWWRWWWR"
test "GJIJC" "WWRWWWWWRR"
test "FGHIJ" "WWWWWWWWRR"
test "HJICGA" "RWRWWRRRRR"
test "IBCIGC" "WRWWWWWWWW"
test "BIJJJB" "WWWWWWRWWW"
test "DCBCHGD" "WRWWWWWRRW"
test "JEABDHD" "RRWWRRRWRR"
test "JHFADHE" "RWWRRRRRWW"
test "HDGGDBIB" "WWWWWWWWWW"
test "IIDIHCCG" "WWWRWRRWWW"
test "BBFBICIE" "WRRWRRRWWW"
test "HJHCFBJGG" "WRRWWWWRRW"
test "AJJIEAAII" "RWWWRWWWWR"
test "AIDHJFGAE" "WWWRRWWWWW"
test "FGBGHCBHJJ" "WWRWWWWRRW"
test "EFIGIGGHHJ" "WWWWRRRWWR"
test "HGAFDIFFFF" "RWWRWRRRRW"
test "AABBCCDDEE" "WWWWWWWWWW"
test "ABCDEFGHIJ" "RRRRRWWWWW"
test "FGHIJABCDE" "RRRRRRRRRR"
test("A", "RWWWWRRRRR")
test("F", "WWWWWWWRRW")
test("J", "WWWWWWRRWW")
test("AA", "WWWWWWWRWW")
test("IC", "WWRWWRRRWW")
test("FC", "WWRWWWWRRW")
test("AE", "RWWWRRRRRR")
test("GJ", "WWWWWWWWWW")
test("CCB", "WRWWWRWWWR")
test("BEF", "WRWWRWWRRR")
test("JGD", "WWWRWWWWWW")
test("IHCC", "WWWWWRWWWW")
test("AIDD", "RWWWWRRWWR")
test("IJFA", "RWWWWWWWWW")
test("ABCDE", "RRRRRRRRRR")
test("ICEBA", "RRRWRRRRRR")
test("DAHHD", "RWWWWRWWWR")
test("GJIJC", "WWRWWWWWRR")
test("FGHIJ", "WWWWWWWWRR")
test("HJICGA", "RWRWWRRRRR")
test("IBCIGC", "WRWWWWWWWW")
test("BIJJJB", "WWWWWWRWWW")
test("DCBCHGD", "WRWWWWWRRW")
test("JEABDHD", "RRWWRRRWRR")
test("JHFADHE", "RWWRRRRRWW")
test("HDGGDBIB", "WWWWWWWWWW")
test("IIDIHCCG", "WWWRWRRWWW")
test("BBFBICIE", "WRRWRRRWWW")
test("HJHCFBJGG", "WRRWWWWRRW")
test("AJJIEAAII", "RWWWRWWWWR")
test("AIDHJFGAE", "WWWRRWWWWW")
test("FGBGHCBHJJ", "WWRWWWWRRW")
test("EFIGIGGHHJ", "WWWWRRRWWR")
test("HGAFDIFFFF", "RWWRWRRRRW")
test("AABBCCDDEE", "WWWWWWWWWW")
test("ABCDEFGHIJ", "RRRRRWWWWW")
test("FGHIJABCDE", "RRRRRRRRRR")
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment