Skip to content

Instantly share code, notes, and snippets.

@Nia-TN1012
Forked from Myoga1012/Haiku-with-LINQ.cs
Last active January 30, 2023 09:04
Show Gist options
  • Save Nia-TN1012/a9b2202955e25d49d45ef3733fd3f775 to your computer and use it in GitHub Desktop.
Save Nia-TN1012/a9b2202955e25d49d45ef3733fd3f775 to your computer and use it in GitHub Desktop.
C#とLINQを使って俳句を縦書きに出力してみました。
// 名前 : Nia Tomonaka
// Twitter : https://twitter.com/nia_tn1012
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-2023 Nia T.N. Tech Lab. / Chronoir.net.
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
@Nia-TN1012
Copy link
Author

GitHubのアカウント統合のため、Myoga1012→Nia-TN1012に移行しました。

旧URL: https://gist.github.com/Myoga1012/f8f57b5239f945af569e

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment