自分の事業部では、毎朝チームで朝会を実施してます。
自分が所属していたチームでは毎日1問、
脳の準備体操を兼ねてTypeScriptの型問題に取り組むことになりました。
mosya<TC>
というType Challenge用のWEBアプリがあったので、チームで解いてみることに。
mosya<TC>
初級編
Googleアカウントがあれば登録できるようなので、早速ログイン。
初級編だし、朝の頭の体操にちょうどいいよね〜。
と思っていましたが大間違いでした。
初級編とは名ばかりで初見殺しです
結構な裏切りを何回も喰らいました。
(しかも前回の問題でやった内容とかなので余計悔しいです)
難易度としては以下のような感じです。
// JavaScriptのArray.include関数を型システムに実装します。
// この型は、2 つの引数を受け取り、trueやfalseを出力しなければなりません。
// Includesを実装してください
type isPillarMen = Includes<["Kars", "Esidisi", "Wamuu", "Santana"], "Dio">; // expected to be `false`
朝会のメンバーは4人いるのですが(全員Type Challengeとかは未経験)、全員でちゃんと悩んでギリクリアできるような難易度で、適度な楽しさを感じながらも、後に控えている中級編にドキドキしていきました。
この難易度でも、しっかりとヒントは活用していきました。(笑)
mosya<TC>
中級編
初級をなんとかすべてクリアして挑んだ中級編ですが。。。
中級編とはいえないレベルで難しい。
文字通り、めちゃくちゃ難しくて全然解けませんでした。
ノーヒントクリアする時もあったんですが、初めて答えまで見る時もあったり、中には難易度が高いのにヒントが存在しない問題もありました。
でも、チームで「実務で使わないでしょ!」とか、「これはずるい!」とか言いながら問題を解いていくのは楽しかったです。
中級編はこんな感じ。
// Union 型を Union 型の値の順列を含む配列に変換するPermutation順列型を実装します。
type perm = Permutation<'A' | 'B' | 'C'>;
// ['A', 'B', 'C'] | ['A', 'C', 'B'] | ['B', 'A', 'C'] | ['B', 'C', 'A'] | ['C', 'A', 'B'] | ['C', 'B', 'A']
上級編 to be continue...
正直中級編くらいのレベルが、朝会という限られた時間(10分くらい)の中で、ちょうど解けたり解けなかったりを楽しむことができます。
上記の難易度でもまだ行けそう、という方は是非上級編をお楽しみください。
(自分も時間が空いている時にやってみます。)