Skip to content

Instantly share code, notes, and snippets.

@Myoga1012
Last active January 30, 2023 09:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Myoga1012/f8f57b5239f945af569e to your computer and use it in GitHub Desktop.
Save Myoga1012/f8f57b5239f945af569e to your computer and use it in GitHub Desktop.
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