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 オフラインどう書く 例題

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

# タイトル
第1回 行列のできるラーメン屋

例題

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

指定された頂点あるいは交点から出発し、決められた順序で辺をたどって点を移動したとき、最後に到達する頂点あるいは交点の名前を出力してください。

ルール

  1. 出発する点は AJ の名前で指定されます。
  2. たどる辺は次の点の色を表す文字で指定されます。R が指定された場合、現在の点からたどれる赤い点へ移動します。同様に W が指定された場合は白い点へ移動します。
  3. 辺は辺につけられた向きにしかたどることができません。例えば C から A へたどることはできますが、A から C へたどることはできません。

入力

1文字目が出発点を表す文字、2文字目以降がたどる点の色を表す文字からなる文字列です。

例) AWWRRWR

出力

出発点を含めたたどった点の名前をたどった順に並べた文字列で出力します。

例) AIGDFAH

補足

入力は、1文字目は AJ 、2文字目以降は R あるいは W で、それ以外の文字が現れることはないとします。

コード

書いたコードは社内から参照できる場所にアップしていただき、リンクを連絡していただけると助かります。 アップ先は GitHub, Qiita, esa.io などの公のサービスでも構いません。

サンプルデータ

入力 期待する出力
AW AI
GR GD
GW GE
IR IF
HR HJ
BWW BGE
ARW AHC
GRR GDF
BWR BGD
JWWW JECA
DRRR DFHJ
CWWR CAIF
HWWW HCAI
GWRWR GEBGD
FRRRW FHJBG
JRRWW JBDIG
JWWRRW JECJBG
GRRRWW GDFHCA
BRWRWR BDIFAH
IRWRRWR IFAHJEB
IWWWRRW IGECJBG
GWWRWWR GECJECJ
HRRWRWRW HJBGDIFA
FRWWWRRW FHCAIFHC
HRWWWRWRW HJECAHCJE
CWWWRRWWW CAIGDFAIG
BRRRWRRRRW BDFHCJBDFA
FRWRRWRRWW FHCJBGDFAI
GWRRRRWRWRW GEBDFHCJEBG
DRWWWWWWRRW DFAIGECAHJE
ARRRRWRRRRWW AHJBDIFHJBGE
AWWWWWWRRWRR AIGECAIFHCJB
JWWWRRWRWRWWR JECAHJEBGDIGD
CRWRWRRWWWRWW CJEBGDFAIGDIG
DWRWRWRWRWWRWW DIFAHCJEBGEBGE
GRWWWRRRRWRWRR GDIGEBDFHCJEBD
ARWWWRWWRWWWWWW AHCAIFAIFAIGECA
DWRWRRWRWWRWWRW DIFAHJEBGEBGEBG
JRWRRRRRWRRRRRWR JBGDFHJBGDFHJBGD
IRWWRRWWWWWRRWWR IFAIFHCAIGEBDIGD

テストデータ

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

  • できるだけオブジェクティブに書いてみてください。扱う値をできるだけオブジェクトで表現してみてください。
  • できるだけデータやパラメータとロジックを分離して書いてみてください。どれぐらい汎用的にできるか試みてください。
  • 変数の値を変更できる言語の場合、再代入を用いないで書いてみてください。
  • ループを使って書いた場合、再帰を使って書いてみてください。再帰を使って書いた場合、畳み込みを使って書いてみてください。
  • 視覚的に表現してみてください。
int main(int argc, char* argv[])
{
test("AW", "AI");
test("GR", "GD");
test("GW", "GE");
test("IR", "IF");
test("HR", "HJ");
test("BWW", "BGE");
test("ARW", "AHC");
test("GRR", "GDF");
test("BWR", "BGD");
test("JWWW", "JECA");
test("DRRR", "DFHJ");
test("CWWR", "CAIF");
test("HWWW", "HCAI");
test("GWRWR", "GEBGD");
test("FRRRW", "FHJBG");
test("JRRWW", "JBDIG");
test("JWWRRW", "JECJBG");
test("GRRRWW", "GDFHCA");
test("BRWRWR", "BDIFAH");
test("IRWRRWR", "IFAHJEB");
test("IWWWRRW", "IGECJBG");
test("GWWRWWR", "GECJECJ");
test("HRRWRWRW", "HJBGDIFA");
test("FRWWWRRW", "FHCAIFHC");
test("HRWWWRWRW", "HJECAHCJE");
test("CWWWRRWWW", "CAIGDFAIG");
test("BRRRWRRRRW", "BDFHCJBDFA");
test("FRWRRWRRWW", "FHCJBGDFAI");
test("GWRRRRWRWRW", "GEBDFHCJEBG");
test("DRWWWWWWRRW", "DFAIGECAHJE");
test("ARRRRWRRRRWW", "AHJBDIFHJBGE");
test("AWWWWWWRRWRR", "AIGECAIFHCJB");
test("JWWWRRWRWRWWR", "JECAHJEBGDIGD");
test("CRWRWRRWWWRWW", "CJEBGDFAIGDIG");
test("DWRWRWRWRWWRWW", "DIFAHCJEBGEBGE");
test("GRWWWRRRRWRWRR", "GDIGEBDFHCJEBD");
test("ARWWWRWWRWWWWWW", "AHCAIFAIFAIGECA");
test("DWRWRRWRWWRWWRW", "DIFAHJEBGEBGEBG");
test("JRWRRRRRWRRRRRWR", "JBGDFHJBGDFHJBGD");
test("IRWWRRWWWWWRRWWR", "IFAIFHCAIGEBDIGD");
return 0;
}
main = do
test "AW" "AI"
test "GR" "GD"
test "GW" "GE"
test "IR" "IF"
test "HR" "HJ"
test "BWW" "BGE"
test "ARW" "AHC"
test "GRR" "GDF"
test "BWR" "BGD"
test "JWWW" "JECA"
test "DRRR" "DFHJ"
test "CWWR" "CAIF"
test "HWWW" "HCAI"
test "GWRWR" "GEBGD"
test "FRRRW" "FHJBG"
test "JRRWW" "JBDIG"
test "JWWRRW" "JECJBG"
test "GRRRWW" "GDFHCA"
test "BRWRWR" "BDIFAH"
test "IRWRRWR" "IFAHJEB"
test "IWWWRRW" "IGECJBG"
test "GWWRWWR" "GECJECJ"
test "HRRWRWRW" "HJBGDIFA"
test "FRWWWRRW" "FHCAIFHC"
test "HRWWWRWRW" "HJECAHCJE"
test "CWWWRRWWW" "CAIGDFAIG"
test "BRRRWRRRRW" "BDFHCJBDFA"
test "FRWRRWRRWW" "FHCJBGDFAI"
test "GWRRRRWRWRW" "GEBDFHCJEBG"
test "DRWWWWWWRRW" "DFAIGECAHJE"
test "ARRRRWRRRRWW" "AHJBDIFHJBGE"
test "AWWWWWWRRWRR" "AIGECAIFHCJB"
test "JWWWRRWRWRWWR" "JECAHJEBGDIGD"
test "CRWRWRRWWWRWW" "CJEBGDFAIGDIG"
test "DWRWRWRWRWWRWW" "DIFAHCJEBGEBGE"
test "GRWWWRRRRWRWRR" "GDIGEBDFHCJEBD"
test "ARWWWRWWRWWWWWW" "AHCAIFAIFAIGECA"
test "DWRWRRWRWWRWWRW" "DIFAHJEBGEBGEBG"
test "JRWRRRRRWRRRRRWR" "JBGDFHJBGDFHJBGD"
test "IRWWRRWWWWWRRWWR" "IFAIFHCAIGEBDIGD"
test("AW", "AI")
test("GR", "GD")
test("GW", "GE")
test("IR", "IF")
test("HR", "HJ")
test("BWW", "BGE")
test("ARW", "AHC")
test("GRR", "GDF")
test("BWR", "BGD")
test("JWWW", "JECA")
test("DRRR", "DFHJ")
test("CWWR", "CAIF")
test("HWWW", "HCAI")
test("GWRWR", "GEBGD")
test("FRRRW", "FHJBG")
test("JRRWW", "JBDIG")
test("JWWRRW", "JECJBG")
test("GRRRWW", "GDFHCA")
test("BRWRWR", "BDIFAH")
test("IRWRRWR", "IFAHJEB")
test("IWWWRRW", "IGECJBG")
test("GWWRWWR", "GECJECJ")
test("HRRWRWRW", "HJBGDIFA")
test("FRWWWRRW", "FHCAIFHC")
test("HRWWWRWRW", "HJECAHCJE")
test("CWWWRRWWW", "CAIGDFAIG")
test("BRRRWRRRRW", "BDFHCJBDFA")
test("FRWRRWRRWW", "FHCJBGDFAI")
test("GWRRRRWRWRW", "GEBDFHCJEBG")
test("DRWWWWWWRRW", "DFAIGECAHJE")
test("ARRRRWRRRRWW", "AHJBDIFHJBGE")
test("AWWWWWWRRWRR", "AIGECAIFHCJB")
test("JWWWRRWRWRWWR", "JECAHJEBGDIGD")
test("CRWRWRRWWWRWW", "CJEBGDFAIGDIG")
test("DWRWRWRWRWWRWW", "DIFAHCJEBGEBGE")
test("GRWWWRRRRWRWRR", "GDIGEBDFHCJEBD")
test("ARWWWRWWRWWWWWW", "AHCAIFAIFAIGECA")
test("DWRWRRWRWWRWWRW", "DIFAHJEBGEBGEBG")
test("JRWRRRRRWRRRRRWR", "JBGDFHJBGDFHJBGD")
test("IRWWRRWWWWWRRWWR", "IFAIFHCAIGEBDIGD")
AW AI
GR GD
GW GE
IR IF
HR HJ
BWW BGE
ARW AHC
GRR GDF
BWR BGD
JWWW JECA
DRRR DFHJ
CWWR CAIF
HWWW HCAI
GWRWR GEBGD
FRRRW FHJBG
JRRWW JBDIG
JWWRRW JECJBG
GRRRWW GDFHCA
BRWRWR BDIFAH
IRWRRWR IFAHJEB
IWWWRRW IGECJBG
GWWRWWR GECJECJ
HRRWRWRW HJBGDIFA
FRWWWRRW FHCAIFHC
HRWWWRWRW HJECAHCJE
CWWWRRWWW CAIGDFAIG
BRRRWRRRRW BDFHCJBDFA
FRWRRWRRWW FHCJBGDFAI
GWRRRRWRWRW GEBDFHCJEBG
DRWWWWWWRRW DFAIGECAHJE
ARRRRWRRRRWW AHJBDIFHJBGE
AWWWWWWRRWRR AIGECAIFHCJB
JWWWRRWRWRWWR JECAHJEBGDIGD
CRWRWRRWWWRWW CJEBGDFAIGDIG
DWRWRWRWRWWRWW DIFAHCJEBGEBGE
GRWWWRRRRWRWRR GDIGEBDFHCJEBD
ARWWWRWWRWWWWWW AHCAIFAIFAIGECA
DWRWRRWRWWRWWRW DIFAHJEBGEBGEBG
JRWRRRRRWRRRRRWR JBGDFHJBGDFHJBGD
IRWWRRWWWWWRRWWR IFAIFHCAIGEBDIGD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment