あなたの上司は、「hello world」プログラムを書くように頼みます。コードの行に対して支払いを受けるので、できるだけ複雑にしたいと思います。しかし、無意味な行を追加したり、明らかに役に立たない、または難解なものを追加したりすると、コードレビューでそれを取得することはできません。したがって、課題は次のとおりです。
コード内のすべての複雑さを「正当化」できる条件の下で、できるだけ複雑な「hello world」プログラムを作成します。
プログラムに必要な動作は、「Hello world」という単一の行を出力するだけで(引用符なしで、末尾に改行があります)、正常に終了します。
「正当化」には以下が含まれます。
- 流行語の互換性(「最新のソフトウェアはオブジェクト指向です!」)
- 一般的に受け入れられている優れたプログラミング手法(「モデルとビューを分離する必要があることは誰でも知っています」)
- 保守性(「このようにすれば、後で簡単にXXXを行うことができます」)
- そしてもちろん、実際のコードに(他の状況で)使用することを想像できるその他の正当化。
明らかに愚かな正当化は受け入れられません。
また、言語の選択を「正当化」する必要があります(したがって、本質的に冗長な言語を選択した場合、「正しい」選択である理由を正当化する必要があります)。UnlambdaやIntercalのような楽しい言語は受け入れられません(それらを使用するための非常に良い正当化を与えることができる場合を除く)。
条件を満たすエントリのスコアは次のように計算されます。
- ステートメントごとに1ポイント(または選択した言語でステートメントに相当するもの)。
- 関数、型、変数などの定義ごとに1ポイント(該当する場合、メイン関数を除く)。
- 各モジュール使用ステートメント、ファイルインクルードディレクティブ、名前空間使用ステートメントなどに1ポイント。
- ソースファイルごとに1ポイント。
- 必要な前方宣言ごとに1ポイント(コードを再配置することでそれを取り除くことができる場合、選択した配置が「正しい」配置である理由を「正当化」する必要があります)。
- 制御構造ごとに1ポイント(if、while、forなど)
各行を「正当化」する必要があることに注意してください。
選択した言語が十分に異なり、このスキームを適用できない場合(およびその使用に対して適切な「正当化」を与えることができる場合)、選択した言語に対して上記に最も類似したスコアリング方法を提案してください。
出場者は、エントリーのスコアを計算し、回答に記入するよう求められます。