VOYAGE GROUPのCTOが出す問題に挑戦して、賞金をゲットだ!
レベルに合わせた賞金が用意されており、レベルごとに賞金を獲得できる人数が限られている。
レベル1は先着制だ。このくらいはさくっと回答してほしい。
レベル2およびレベル3はコードの質で賞金獲得者が決まるので慌てる必要はない。
- レベル1 ・・・ 500円(100名)
- レベル2 ・・・ 2,000円(30名)
- レベル3 ・・・ 10,000円(10名)
さらに回答者のうち上位入賞者は6/30(金)に開催されるCTOとの豪華ミートアップイベントに招待しよう。
- 2019年卒業予定学生であること
- サポーターズに登録していること
※2019年卒以外も応募可能ではあるが残念ながら賞金の対象外だ。
下記フォームから提出せよ。
- 回答フォーム
- Secret Gistについて
- Gistで提出する場合は、ファイル名に適切な拡張子(.rb, .py, etc)を付けること。
- 実行ファイルを作成する必要がある言語の場合は、作成手順も提出せよ。
- 例えばC/C++ならMakefileもあわせて提出するなど。
- 実行ファイルを作成できなかった場合は、賞金の対象外になることもある。
VOYAGE GROUPは設計やコードをレビューする文化が根付いており、毎日毎日たくさんのレビューが行なわれている。
毎回同じ人がレビューするのではなく、いろんな人がさまざまな視点からレビューすることでプロダクトの質を上げていきたいと考えている。
そこで、適切なレビュアーを選んでくれるツールを作ってほしい。
レビュイーのidとエンジニアリストをもとに、レビュアー候補3人をランダムに選択し、カンマ区切りで標準出力に出力するプログラムを書け。
- レビュアー候補3人にレビュイーは含まれないこととする。
- レビュアー候補3人のうち、同じチームのエンジニアが1人以上かつ違うチームのエンジニアが1人以上含まれていることとする。
- 候補がいない/足りない場合、そこには"N/A"と出力する。
- e.g. b,d,N/A
- level1.json
- engineers
- id
- team
- engineers
まずは下記テストケースをもとにテストを行い、正しく動作するか確認するんだ。
ただし、下記ケースは最低限である。必要に応じてケースを追加してほしい。
- サンプルデータ
{
"engineers": [
{ "id": "a", "team": "pex" },
{ "id": "b", "team": "pex" },
{ "id": "c", "team": "pex" },
{ "id": "d", "team": "fluct" },
{ "id": "e", "team": "fluct" },
{ "id": "f", "team": "fluct" },
{ "id": "g", "team": "fintech" },
{ "id": "h", "team": "fintech" },
{ "id": "i", "team": "fintech" },
{ "id": "j", "team": "hrtech" }
]
}
- case 1
- input
- レビュイーid
- a
- エンジニアリスト
- 上記サンプルデータと同様
- レビュイーid
- output
- OK
- 同じチームの下記エンジニアから1人
- ["b", "c"]
- 違うチームの下記エンジニアから1人
- ["d", "e", "f", "g", "h", "i", "j"]
- 上の2人以外のエンジニアから1人
- ["b", "c", "d", "e", "f", "g", "h", "i", "j"]
- 同じチームの下記エンジニアから1人
- NG
- b,d
- 2人しか出力されていない
- d,g,a
- レビュイーが含まれている
- d,g,j
- 同じチームのエンジニアが含まれていない
- c,e,c
- 同じエンジニアが2回出力されている
- b,d
- OK
- input
- case 2
- input
- レビュイーid
- j
- エンジニアリスト
- 上記サンプルデータと同様
- レビュイーid
- output
- OK
- 同じチームのエンジニアがいないので"N/A"
- "N/A"
- 違うチームの下記エンジニアから1人
- ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
- 上の人以外のエンジニアから1人
- ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
- 同じチームのエンジニアがいないので"N/A"
- NG
- b,d
- 2人しか出力されていない
- j,d,g
- レビュイーが含まれている
- N/A,e,e
- 同じエンジニアが2回出力されている
- b,d
- OK
- input
$ ls
Makefile data level1 level2 level3
$ ls data
level1.json level2.json level3.json
$ ls level1
level1.go level1_test.go
$ cat Makefile
.PHONY: run-level1 test-level1
test-level1:
go test -v ./level1
run-level1:
go run ./level1/level1.go --reviewee ${reviewee} --json ${json}
$ make test-level1
=== RUN TestLevel1
--- PASS: TestLevel1 (0.00s) PASS
ok github.com/voyagegroup/challengecto/2017/level1 0.001s
$ make run-level1 reviewee=a json=data/level1.json
b,d,i
$ make run-level1 reviewee=j json=data/level1.json
N/A,b,c