Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
C#とLINQを使って俳句を縦書きに出力してみましたよっ!
// 名前 : Myoga Screw-bright
// Twitter : https://twitter.com/Myoga1012
using System;
using System.Collections.Generic;
using System.Linq;
namespace Haiku {
class Program {
static void Main( string[] args ) {
// 俳句をカンマで分割します。
// 右辺を args.ToList() にすると、コマンドラインから俳句を入力することになります。
List<string> hHaiku = "初桜,折しも今日は,よき日なり".Split( ',' ).ToList();
// 要素数が各句の中で最大の文字数の空文字列リストを作成します。
List<string> vHaiku = Enumerable.Repeat( "", hHaiku.Max( ( hPhrase ) => hPhrase.Length ) ).ToList();
// 各句において、文字数がvHaiku.Count()になるように不足分を全角スペースでパディングした文字列を
// char型配列にばらし、クエリ式でchar型文字をそれぞれ文字列に変換して、string型の文字リストを
// 生成します。そのリストをZipメソッドでそれぞれの要素において、文字を逆順で結合します。
hHaiku.ForEach( ( hPhrase ) =>
vHaiku = vHaiku.Zip(
from hpChar in hPhrase.PadRight( vHaiku.Count(), ' ' ).ToCharArray()
select hpChar.ToString(),
( first, second ) => second + first // ← ここ重要
).ToList()
);
// 文字列のリストを要素ごとに改行して出力します。
vHaiku.ForEach( Console.WriteLine );
}
}
}
// Haiku-with-LINQ.cs
// Copyright (c) 2014-2015 Myoga-TN.net All Rights Reserved.
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.