xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

あいうえお表、10 分で作れますか?

Burikaigi 2022 が開催されました。運営のお仕事と「C# ドキドキ・ライブコーディング対決」の登壇をしました。もう 10 年近く毎年ライブコーディング対決をしていますが、一見「こんなの簡単だろ」と思えるような問題でも全然解けないんですよねぇ...。

今回は問題を載せておきましたので、もしご興味があれば是非トライしてみてください。本記事の最後に回答例を載せておきましたが、解法はいくつもあるのでご参考まで。回答例が表示されないよう勢いよく下までスクロールせず、脳トレとして遊んでみていただけますと幸いです。

f:id:xin9le:20220130002120p:plain

「あいうえお表」を作れ (制限時間 : 10 分)

ということで今回出されたお題がこちら (↑↑) です。事前に用意された初期コードと期待される結果は以下の通りです。SharpLab にも出題内容を用意しておきました。

初期コード

これだけです。

const string aiueo = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもや ゆ よらりるれろわ   をん";

期待される結果

右寄せ & 縦書き...!これをコンソール画面に表示します。

んわらやまはなたさかあ
  り みひにちしきい
  るゆむふぬつすくう
  れ めへねてせけえ
 をろよもほのとそこお

ちっともできない言い訳

  1. 事前に一切問題を知らされないまま
  2. セッション中に突然出題されて
  3. 納期たった 10 分で
  4. 間をつなぐトークをしながら

できるわけないだろ...!と言いたくもなりますが、本当にできませんでしたww

回答例

一応の回答例を載せておきます。冷静であれば十分解けそうな気はするんですが、人間緊張するとほんと真っ白になりますね...w

using System;
using System.Linq;

const string aiueo = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもや ゆ よらりるれろわ   をん";
const int rowsCount = 5;
var columns = aiueo.Chunk(rowsCount).Reverse();
for (var i = 0; i < rowsCount; i++)
{
    foreach (var column in columns)
    {
        var value = (i < column.Length) ? column[i] : ' ';
        Console.Write(value);
    }
    Console.WriteLine();
}