-
-
Save Nia-TN1012/a9b2202955e25d49d45ef3733fd3f775 to your computer and use it in GitHub Desktop.
C#とLINQを使って俳句を縦書きに出力してみました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 名前 : 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
GitHubのアカウント統合のため、Myoga1012→Nia-TN1012に移行しました。
旧URL: https://gist.github.com/Myoga1012/f8f57b5239f945af569e