Skip to content

Instantly share code, notes, and snippets.

@makoga
Created May 16, 2017 01:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save makoga/3000aa79b6601570d18e021bda0511b6 to your computer and use it in GitHub Desktop.
Save makoga/3000aa79b6601570d18e021bda0511b6 to your computer and use it in GitHub Desktop.
Level.1 - 2017 - Challenge CTO of VOYAGE GROUP

Level.1 - CTOからの挑戦状 of VOYAGE GROUP 2017

概要

VOYAGE GROUPのCTOが出す問題に挑戦して、賞金をゲットだ!

賞金

レベルに合わせた賞金が用意されており、レベルごとに賞金を獲得できる人数が限られている。
レベル1は先着制だ。このくらいはさくっと回答してほしい。
レベル2およびレベル3はコードの質で賞金獲得者が決まるので慌てる必要はない。

  • レベル1 ・・・ 500円(100名)
  • レベル2 ・・・ 2,000円(30名)
  • レベル3 ・・・ 10,000円(10名)

さらに回答者のうち上位入賞者は6/30(金)に開催されるCTOとの豪華ミートアップイベントに招待しよう。

参加資格

※2019年卒以外も応募可能ではあるが残念ながら賞金の対象外だ。

回答の提出方法

下記フォームから提出せよ。

注意点

  • Gistで提出する場合は、ファイル名に適切な拡張子(.rb, .py, etc)を付けること。
  • 実行ファイルを作成する必要がある言語の場合は、作成手順も提出せよ。
    • 例えばC/C++ならMakefileもあわせて提出するなど。
    • 実行ファイルを作成できなかった場合は、賞金の対象外になることもある。

問題

VOYAGE GROUPは設計やコードをレビューする文化が根付いており、毎日毎日たくさんのレビューが行なわれている。
毎回同じ人がレビューするのではなく、いろんな人がさまざまな視点からレビューすることでプロダクトの質を上げていきたいと考えている。
そこで、適切なレビュアーを選んでくれるツールを作ってほしい。

Level.1

レビュイーのidとエンジニアリストをもとに、レビュアー候補3人をランダムに選択し、カンマ区切りで標準出力に出力するプログラムを書け。

  • レビュアー候補3人にレビュイーは含まれないこととする。
  • レビュアー候補3人のうち、同じチームのエンジニアが1人以上かつ違うチームのエンジニアが1人以上含まれていることとする。
  • 候補がいない/足りない場合、そこには"N/A"と出力する。
    • e.g. b,d,N/A

エンジニアリスト

  • level1.json
    • engineers
      • id
      • team

テストケース

まずは下記テストケースをもとにテストを行い、正しく動作するか確認するんだ。
ただし、下記ケースは最低限である。必要に応じてケースを追加してほしい。

  • サンプルデータ
{
  "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
      • エンジニアリスト
        • 上記サンプルデータと同様
    • output
      • OK
        • 同じチームの下記エンジニアから1人
          • ["b", "c"]
        • 違うチームの下記エンジニアから1人
          • ["d", "e", "f", "g", "h", "i", "j"]
        • 上の2人以外のエンジニアから1人
          • ["b", "c", "d", "e", "f", "g", "h", "i", "j"]
      • NG
        • b,d
          • 2人しか出力されていない
        • d,g,a
          • レビュイーが含まれている
        • d,g,j
          • 同じチームのエンジニアが含まれていない
        • c,e,c
          • 同じエンジニアが2回出力されている
  • case 2
    • input
      • レビュイーid
        • j
      • エンジニアリスト
        • 上記サンプルデータと同様
    • 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"]
      • NG
        • b,d
          • 2人しか出力されていない
        • j,d,g
          • レビュイーが含まれている
        • N/A,e,e
          • 同じエンジニアが2回出力されている

実行例

$ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment