某社の面接には筆記試験がついてきた

 その中で「仕様が列挙されたジュースの『自動販売機』のモデリングをしなさい」というのがありました。自動販売機大人気だな、とか思った訳ですが、所謂

  • 平生は釣り銭切れ状況、在庫売り切れ状況を表示しておく
  • 許容できるお金を投入されたのを検知して投入金額を表示する
  • 対応したボタンを投入金額と在庫状況に応じて点灯させる
  • 押下されたボタンが有効なとき対応した商品を取り出し口に対し「既に出力済みの商品がないときに限り」出力する
  • 在庫状況を変更し、お釣りを返却する
  • ボタン押下以前に返却レバーが押された場合には投入金額を返却する

 ような、日常にある単純な仕組みだからこそ例に挙げやすいのかもしれません。使用したことがない、という人もいないわけですし。ただ、紙と鉛筆で書くのがつらくて仕方がありません。せめて端末を使わせてくださいましよ。

 自分が筆記試験を作るなら、何か端末を用意して、

自分が最も得意な言語で「自動販売機」のプロトタイプをソースコードで記述しなさい

 にするかなぁ、とか思いました。「数機のエレベータ」でも良いかもしれません。
 でも、自動販売機の「釣り銭が切れている場合に釣り銭が出るような選択をされた場合どうするか」などを考えるのは割と面白いですね。
 例えば一般的な自販機は10円、50円、100円、500円、1000円しか受け付けない。なので、投入金額は単純にint money;では表せない。現在自販機内の金庫に釣り銭が排出できるだけの余剰があるかも管理しなければならないので実際には面倒な筈。実動作として考えるならもしユーザが一億円つっこんできたらどうするの、っていうのも有りますね。
 練習問題としてやらせるのにも結構良いかもしれません。