FizzBuzz問題の次を考えた!その名も「LevelLabel問題」


はじめに

FizzBuzz問題と言えばプログラマ志願者の人を見極める手法として有名な問題です。非常にシンプルなルールのため内容をパッと実装できるかを確認したり、縛りなどを入れることで難易度を上げて遊ぶ人も居ます。

FizzBuzz問題
コードが書けないプログラマ志願者を見分ける手法をJeff AtwoodがFizzBuzz問題 (FizzBuzz Question) として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている。
https://ja.wikipedia.org/wiki/Fizz_Buzz#FizzBuzz%E5%95%8F%E9%A1%8C

今回はFizzBuzz問題より、もう少し難しくてパッと解ける問題を考えてみました。
プログラマを見極めるのにはもっと色々なポイントを見たほうが良いとは思いますが、一段上のFizzBuzz問題として楽しんでくれると嬉しいです。

新しい問題を考えました!その名もLevelLabel問題

数字の配列を引数として下記の条件を満たすラベルを出力せよ。
ただし与えられる配列は昇順に数字が格納されているものとする。

  1. 配列の最初の数字を表示し、次に来る数字の条件に応じて表示を変える。
  2. 次の数字が連続している場合、連続している数字の末尾まで~を表示し、連続する最後の数字を表示する。
  3. 数字が連続していない場合はを挟み次の数字を表示する。
入力例       => 出力例
[1,2,3,4,5] => 1~5
[3,4,5]     => 3~5
[1,3,4,5]   => 1・3~5
[1,2,4,5]   => 1・2・4・5

あとがき

ロジックを見る問題なので言語とかは問いません。実際に自分が出てきた業務をより簡素にした問題としました。
回答例や改善案などあればお気軽にコメントください。希望する人がいたら応用編と解答編を書こうかなと思います。