Q.プリキュアを頭文字だけで区別することはできるか

# Summary

Q.プリキュアを頭文字だけで区別することはできるか
A.作品による

# お断り

本記事の内容は、2025年6月15日（「キミとアイドルプリキュア♪」第19話放送終了）時点での状況を元に記載しています。
以下、特記のない限り「現在」はこの日時点をさします。

# はじまり

「[わんだふるぷりきゅあ！](https://www.asahi.co.jp/precure/wonderful/index.html)」（←ABCサイトへリンク）のプリキュアは次の4人です。

* キュアワンダフル
* キュアフレンディ
* キュアニャミー
* キュアリリアン

それぞれ英語で書く[^wonderful_english]と、

* Cure Wonderful
* Cure Friendy
* Cure Nyammy
* Cure Lillian

となり、「W」「F」「N」「L」で一意に識別することができます。

[^wonderful_english]: 英語表記については、[英語版Wikipedia](https://en.wikipedia.org/wiki/Wonderful_Pretty_Cure!)と[rubicureのデータ](https://github.com/sue445/rubicure/blob/master/config/girls/021_wonderful.yml)を参照しています。

別の作品「[スター☆トゥインクルプリキュア](http://www.toei-anim.co.jp/tv/startwinkle_precure/)」（←東映アニメーションサイトへリンク）ではどうでしょうか？[^star_english]

[^star_english]: 英語表記については、[英語版Wikipedia](https://en.wikipedia.org/wiki/Star_Twinkle_PreCure)と[rubicureのデータ](https://github.com/sue445/rubicure/blob/master/config/girls/016_star_twinkle.yml)を参照しています。

| プリキュア名   | 英語        | 頭文字 |
|----------------|-------------|--------|
| キュアスター   | Cure Star   | S      |
| キュアミルキー | Cure Milky  | M      |
| キュアソレイユ | Cure Soleil | S      |
| キュアセレーネ | Cure Selene | S      |
| キュアコスモ   | Cure Cosmo  | C      |

Sで3人かぶりがあります。

というように、作品によってプリキュアを頭文字だけで区別することはできるか否かが変わります。

果たして、第1作「[ふたりはプリキュア](http://www.toei-anim.co.jp/tv/f_precure/)」（←東映アニメーションサイトへリンク）から、第22作「キミとアイドルプリキュア♪」まで、どうなっているのでしょうか？
というのをいちいち調べているのもあれなので、プログラムを作って確認してみることとします。

なお、頭文字を設定する際には、「キュア」は省くものとします（そうしないと「Cure」の「C」が多数を占めてしまうため）。

# 使用するもの

* Visual Studio 2019
  古いバージョンでの動作は検証していません
* @sue445 様謹製 [プリキュアのRuby実装「rubicure」](https://qiita.com/sue445/items/ba577b5dc805e2a1ddef) の [データ](https://github.com/sue445/rubicure/tree/master/config)
  Rubyは全くわからないのでYAMLのデータだけいただきます
* C#
* [aaubry/YamlDotNet: YamlDotNet is a .NET library for YAML](https://github.com/aaubry/YamlDotNet)
  使い方については下記の記事を参考にしました：
  [.NET上でyamlファイルをデシリアライズしたくなったときはYamlDotNetを！](https://qiita.com/toshi0607/items/bd564facc0f4884ba5f1) by @toshi0607 様

# 対象とするプリキュア

原則的に、テレビシリーズで登場したプリキュアに限定します。
なので、映画のみに登場している「キュアエコー」は対象外となります。

# プログラムを書く

## プログラム置き場

プログラムはここに置いておきます。
[Hokkaidosm/precure_initial](https://github.com/Hokkaidosm/precure_initial)

## シリーズデータを取得する

https://github.com/sue445/rubicure/tree/master/config/series.yml からシリーズデータを取得します。
シリーズデータには、「シリーズ名」と「登場するプリキュアのキー」を含みます。

<details><summary>長いので折りたたむルン</summary><div>

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using YamlDotNet.Serialization;

namespace precure_initial
{
    class Program
    {
        /// <summary>
        /// rubicure/config のパス
        /// </summary>
        static readonly string rubicureConfigPath = "../../rubicure/config/";

        /// <summary>
        /// シリーズデータ.
        /// </summary>
        class Series
        {
            /// <summary>
            /// シリーズ名.
            /// </summary>
            public string Name { get; set; }

            /// <summary>
            /// シリーズに出演するプリキュアのキー.
            /// </summary>
            public List<string> PrecureKeys { get; set; }
        }

        static void Main(string[] args)
        {
            Dictionary<string, Series> seriesList = LoadSeries();
            foreach (var series in seriesList)
            {
                Console.WriteLine($"シリーズキー：{series.Key}");
                Console.WriteLine($"シリーズ名：{series.Value.Name}");
                Console.WriteLine($"プリキュアキー：[{string.Join(", ", series.Value.PrecureKeys)}]");
                Console.WriteLine();
            }
        }

        /// <summary>
        /// rubicure/config/series.yml からシリーズキーとシリーズデータを取得する.
        /// </summary>
        /// <returns>シリーズキーをキーとする<code>Dictionary</code>.</returns>
        static Dictionary<string, Series> LoadSeries()
        {
            var filePath = rubicureConfigPath + "series.yml";
            var input = new StreamReader(filePath, Encoding.UTF8);
            var deserializer = new Deserializer();

            Dictionary<string, Dictionary<string, object>> series_tmp = deserializer.Deserialize<Dictionary<string, Dictionary<string, object>>>(input);
            var series_directory = new Dictionary<string, Series>();
            foreach (var series in series_tmp)
            {
                if (series.Value.Count == 1)
                {
                    // エイリアスは飛ばす
                    continue;
                }
                series.Value.TryGetValue("title", out object seriesName);
                series.Value.TryGetValue("girls", out object precureList);
                List<string> precures = new List<string>();
                foreach (var precure in (List<object>)precureList)
                {
                    precures.Add((string)precure);
                }
                series_directory.Add(series.Key, new Series {
                    Name = (string)seriesName,
                    PrecureKeys = precures
                });
            }
            return series_directory;
        }
    }
}

```
</div></details>

このときの出力はこんな感じになります[^heart]。

<details><summary>長いので折りたたむルン</summary><div>

```
シリーズキー：unmarked
シリーズ名：ふたりはプリキュア
プリキュアキー：[cure_black, cure_white]

シリーズキー：max_heart
シリーズ名：ふたりはプリキュア Max Heart
プリキュアキー：[cure_black, cure_white, shiny_luminous]

シリーズキー：splash_star
シリーズ名：ふたりはプリキュア Splash☆Star
プリキュアキー：[cure_bloom, cure_egret]

シリーズキー：yes
シリーズ名：Yes！ プリキュア5
プリキュアキー：[cure_dream, cure_rouge, cure_lemonade, cure_mint, cure_aqua]

シリーズキー：yes_gogo
シリーズ名：Yes！ プリキュア5 Go Go！
プリキュアキー：[cure_dream, cure_rouge, cure_lemonade, cure_mint, cure_aqua, milky_rose]

シリーズキー：fresh
シリーズ名：フレッシュプリキュア！
プリキュアキー：[cure_peach, cure_berry, cure_pine, cure_passion]

シリーズキー：heart_catch
シリーズ名：ハートキャッチプリキュア！
プリキュアキー：[cure_blossom, cure_marine, cure_sunshine, cure_moonlight]

シリーズキー：suite
シリーズ名：スイートプリキュア♪
プリキュアキー：[cure_melody, cure_rhythm, cure_beat, cure_muse]

シリーズキー：smile
シリーズ名：スマイルプリキュア！
プリキュアキー：[cure_happy, cure_sunny, cure_peace, cure_march, cure_beauty]

シリーズキー：dokidoki
シリーズ名：ドキドキ！プリキュア
プリキュアキー：[cure_heart, cure_diamond, cure_rosetta, cure_sword, cure_ace]

シリーズキー：happiness_charge
シリーズ名：ハピネスチャージプリキュア！
プリキュアキー：[cure_lovely, cure_princess, cure_honey, cure_fortune]

シリーズキー：go_princess
シリーズ名：Go!プリンセスプリキュア
プリキュアキー：[cure_flora, cure_mermaid, cure_twinkle, cure_scarlet]

シリーズキー：maho_girls
シリーズ名：魔法つかいプリキュア！
プリキュアキー：[cure_miracle, cure_magical, cure_felice]

シリーズキー：a_la_mode
シリーズ名：キラキラ☆プリキュアアラモード
プリキュアキー：[cure_whip, cure_custard, cure_gelato, cure_macaron, cure_chocolat, cure_parfait]

シリーズキー：hugtto
シリーズ名：ＨＵＧっと！プリキュア
プリキュアキー：[cure_yell, cure_ange, cure_etoile, cure_macherie, cure_amour]

シリーズキー：star_twinkle
シリーズ名：スター☆トゥインクルプリキュア
プリキュアキー：[cure_star, cure_milky, cure_soleil, cure_selene, cure_cosmo]

シリーズキー：healingood
シリーズ名：ヒーリングっど?プリキュア
プリキュアキー：[cure_grace, cure_fontaine, cure_sparkle, cure_earth]

シリーズキー：tropical_rouge
シリーズ名：トロピカル～ジュ！プリキュア
プリキュアキー：[cure_summer, cure_coral, cure_papaya, cure_flamingo, cure_lamer]

シリーズキー：delicious_party
シリーズ名：デリシャスパーティ?プリキュア
プリキュアキー：[cure_precious, cure_spicy, cure_yumyum, cure_finale]

シリーズキー：hirogaru_sky
シリーズ名：ひろがるスカイ！プリキュア
プリキュアキー：[cure_sky, cure_prism, cure_wing, cure_butterfly, cure_majesty]

シリーズキー：wonderful
シリーズ名：わんだふるぷりきゅあ！
プリキュアキー：[cure_wonderful, cure_friendy, cure_nyammy, cure_lillian]

シリーズキー：you_and_idol
シリーズ名：キミとアイドルプリキュア♪
プリキュアキー：[cure_idol, cure_wink, cure_kyunkyun, cure_zukyoon, cure_kiss]
```

</div></details>

[^heart]: 文字コードの関係からか、「ヒーリングっど♥プリキュア」の「♥」と「デリシャスパーティ♡プリキュア」の「♡」が「?」で出力されています。以下同様。

## プリキュアデータを取得する

各シリーズのプリキュアのデータは、 https://github.com/sue445/rubicure/tree/master/config/girls/ 以下にYAML形式で入っています。
それぞれのファイルには、それぞれのシリーズで初めて登場したプリキュアのデータのみが含まれています。

例）キュアブラックとキュアホワイトは「ふたりはプリキュア」と「ふたりはプリキュア Max Heart」の両方に登場していますが、最初に登場した「ふたりはプリキュア」のファイル `001_unmarked.yml` にのみデータが含まれています。

ということで、いったん全てのプリキュアのデータを取り込みます。

<details><summary>長いので折りたたむニャン</summary><div>

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using YamlDotNet.Serialization;

namespace precure_initial
{
    class Program
    {
        /// <summary>
        /// rubicure/config のパス
        /// </summary>
        static readonly string rubicureConfigPath = "../../rubicure/config/";

        class Series
        {
            // 省略
        }

        /// <summary>
        /// プリキュアデータ.
        /// </summary>
        class Precure
        {
            /// <summary>
            /// プリキュア英語名.
            /// </summary>
            public string GirlName { get; set; }

            /// <summary>
            /// プリキュア日本語名.
            /// </summary>
            public string PrecureName { get; set; }

            /// <summary>
            /// イニシャル.
            /// </summary>
            public string Initial { get; set; }
        }

        static void Main(string[] args)
        {
            Dictionary<string, Series> seriesList = LoadSeries();
            Dictionary<string, Precure> precureList = LoadPrecures();
            foreach (var precure in precureList)
            {
                Console.WriteLine($"プリキュアキー：{precure.Key}");
                Console.WriteLine($"プリキュア名：{precure.Value.PrecureName} / {precure.Value.GirlName}");
                Console.WriteLine($"頭文字：{precure.Value.Initial}");
                Console.WriteLine();
            }
        }

        static Dictionary<string, Series> LoadSeries()
        {
            // 省略
        }

        /// <summary>
        /// 全てのプリキュアのデータを読み込む.
        /// </summary>
        /// <returns>プリキュアキーをキーとする<code>Dictionary</code>.</returns>
        static Dictionary<string, Precure> LoadPrecures()
        {
            Dictionary<string, Precure> precures = new Dictionary<string, Precure>();
            var rootPath = rubicureConfigPath + "girls/";
            string[] files = Directory.GetFiles(rootPath, "*.yml", SearchOption.TopDirectoryOnly);
            foreach (string file in files)
            {
                var input = new StreamReader(file, Encoding.UTF8);
                var deserializer = new Deserializer();
                Dictionary<string, Dictionary<string, object>> girls_tmp = deserializer.Deserialize<Dictionary<string, Dictionary<string, object>>>(input);
                foreach (var girl in girls_tmp)
                {
                    if (girl.Value.Count == 1)
                    {
                        // エイリアスは飛ばす
                        continue;
                    }
                    string girlName = girl.Key, precureName = null;
                    if (girl.Value.TryGetValue("precure_name", out object precureNameObj))
                    {
                        precureName = (string)precureNameObj;
                    }
                    girlName = ToPascal(girlName);
                    string initial = girlName.Replace("Cure ", "").Substring(0, 1);
                    precures.Add(girl.Key, new Precure {
                        GirlName = girlName,
                        PrecureName = precureName,
                        Initial = initial
                    });
                }
            }
            return precures;
        }

        /// <summary>
        /// cure_black => Cure Blackのような変換
        /// ref. https://increment-i.hateblo.jp/entry/csharp/regularexpression/pascal
        /// </summary>
        /// <param name="text">変換元</param>
        /// <returns>変換結果</returns>
        private static string ToPascal(string text)
        {
            return Regex.Replace(
                text.Replace("_", " "),
                @"\b[a-z]",
                match => match.Value.ToUpper());
        }
    }
}

```

※上記 `ToPascal` は [正規表現を利用して Pascal 形式に変換する - C# - インクリメンタルなカイハツにっき](https://increment-i.hateblo.jp/entry/csharp/regularexpression/pascal) 記載のコードを一部変更したものです。

</div></details>

このときの出力はこんな感じになります[^echo]。

[^echo]: 出力に「キュアエコー」が出てきてしまっていますが、これは [movie.yml](https://github.com/sue445/rubicure/blob/master/config/girls/movie.yml) も読み込んでいるためです。プリキュアリストを作成する際に、どのテレビシリーズにも紐付いていないため最終的な出力には登場しません。

<details><summary>長いので折りたたむニャン</summary><div>

```
プリキュアキー：cure_black
プリキュア名：キュアブラック / Cure Black
頭文字：B

プリキュアキー：cure_white
プリキュア名：キュアホワイト / Cure White
頭文字：W

プリキュアキー：shiny_luminous
プリキュア名：シャイニールミナス / Shiny Luminous
頭文字：S

プリキュアキー：cure_bloom
プリキュア名：キュアブルーム / Cure Bloom
頭文字：B

プリキュアキー：cure_egret
プリキュア名：キュアイーグレット / Cure Egret
頭文字：E

プリキュアキー：cure_bright
プリキュア名：キュアブライト / Cure Bright
頭文字：B

プリキュアキー：cure_windy
プリキュア名：キュアウィンディ / Cure Windy
頭文字：W

プリキュアキー：cure_dream
プリキュア名：キュアドリーム / Cure Dream
頭文字：D

プリキュアキー：cure_rouge
プリキュア名：キュアルージュ / Cure Rouge
頭文字：R

プリキュアキー：cure_lemonade
プリキュア名：キュアレモネード / Cure Lemonade
頭文字：L

プリキュアキー：cure_mint
プリキュア名：キュアミント / Cure Mint
頭文字：M

プリキュアキー：cure_aqua
プリキュア名：キュアアクア / Cure Aqua
頭文字：A

プリキュアキー：milky_rose
プリキュア名：ミルキィローズ / Milky Rose
頭文字：M

プリキュアキー：cure_peach
プリキュア名：キュアピーチ / Cure Peach
頭文字：P

プリキュアキー：cure_berry
プリキュア名：キュアベリー / Cure Berry
頭文字：B

プリキュアキー：cure_pine
プリキュア名：キュアパイン / Cure Pine
頭文字：P

プリキュアキー：cure_passion
プリキュア名：キュアパッション / Cure Passion
頭文字：P

プリキュアキー：cure_blossom
プリキュア名：キュアブロッサム / Cure Blossom
頭文字：B

プリキュアキー：cure_marine
プリキュア名：キュアマリン / Cure Marine
頭文字：M

プリキュアキー：cure_sunshine
プリキュア名：キュアサンシャイン / Cure Sunshine
頭文字：S

プリキュアキー：cure_moonlight
プリキュア名：キュアムーンライト / Cure Moonlight
頭文字：M

プリキュアキー：cure_melody
プリキュア名：キュアメロディ / Cure Melody
頭文字：M

プリキュアキー：cure_rhythm
プリキュア名：キュアリズム / Cure Rhythm
頭文字：R

プリキュアキー：cure_beat
プリキュア名：キュアビート / Cure Beat
頭文字：B

プリキュアキー：cure_muse
プリキュア名：キュアミューズ / Cure Muse
頭文字：M

プリキュアキー：cure_happy
プリキュア名：キュアハッピー / Cure Happy
頭文字：H

プリキュアキー：cure_sunny
プリキュア名：キュアサニー / Cure Sunny
頭文字：S

プリキュアキー：cure_peace
プリキュア名：キュアピース / Cure Peace
頭文字：P

プリキュアキー：cure_march
プリキュア名：キュアマーチ / Cure March
頭文字：M

プリキュアキー：cure_beauty
プリキュア名：キュアビューティ / Cure Beauty
頭文字：B

プリキュアキー：cure_heart
プリキュア名：キュアハート / Cure Heart
頭文字：H

プリキュアキー：cure_diamond
プリキュア名：キュアダイヤモンド / Cure Diamond
頭文字：D

プリキュアキー：cure_rosetta
プリキュア名：キュアロゼッタ / Cure Rosetta
頭文字：R

プリキュアキー：cure_sword
プリキュア名：キュアソード / Cure Sword
頭文字：S

プリキュアキー：cure_ace
プリキュア名：キュアエース / Cure Ace
頭文字：A

プリキュアキー：cure_lovely
プリキュア名：キュアラブリー / Cure Lovely
頭文字：L

プリキュアキー：cure_princess
プリキュア名：キュアプリンセス / Cure Princess
頭文字：P

プリキュアキー：cure_honey
プリキュア名：キュアハニー / Cure Honey
頭文字：H

プリキュアキー：cure_fortune
プリキュア名：キュアフォーチュン / Cure Fortune
頭文字：F

プリキュアキー：cure_flora
プリキュア名：キュアフローラ / Cure Flora
頭文字：F

プリキュアキー：cure_mermaid
プリキュア名：キュアマーメイド / Cure Mermaid
頭文字：M

プリキュアキー：cure_twinkle
プリキュア名：キュアトゥインクル / Cure Twinkle
頭文字：T

プリキュアキー：cure_scarlet
プリキュア名：キュアスカーレット / Cure Scarlet
頭文字：S

プリキュアキー：cure_miracle
プリキュア名：キュアミラクル / Cure Miracle
頭文字：M

プリキュアキー：cure_magical
プリキュア名：キュアマジカル / Cure Magical
頭文字：M

プリキュアキー：cure_felice
プリキュア名：キュアフェリーチェ / Cure Felice
頭文字：F

プリキュアキー：cure_whip
プリキュア名：キュアホイップ / Cure Whip
頭文字：W

プリキュアキー：cure_custard
プリキュア名：キュアカスタード / Cure Custard
頭文字：C

プリキュアキー：cure_gelato
プリキュア名：キュアジェラート / Cure Gelato
頭文字：G

プリキュアキー：cure_macaron
プリキュア名：キュアマカロン / Cure Macaron
頭文字：M

プリキュアキー：cure_chocolat
プリキュア名：キュアショコラ / Cure Chocolat
頭文字：C

プリキュアキー：cure_parfait
プリキュア名：キュアパルフェ / Cure Parfait
頭文字：P

プリキュアキー：cure_yell
プリキュア名：キュアエール / Cure Yell
頭文字：Y

プリキュアキー：cure_ange
プリキュア名：キュアアンジュ / Cure Ange
頭文字：A

プリキュアキー：cure_etoile
プリキュア名：キュアエトワール / Cure Etoile
頭文字：E

プリキュアキー：cure_macherie
プリキュア名：キュアマシェリ / Cure Macherie
頭文字：M

プリキュアキー：cure_amour
プリキュア名：キュアアムール / Cure Amour
頭文字：A

プリキュアキー：cure_star
プリキュア名：キュアスター / Cure Star
頭文字：S

プリキュアキー：cure_milky
プリキュア名：キュアミルキー / Cure Milky
頭文字：M

プリキュアキー：cure_soleil
プリキュア名：キュアソレイユ / Cure Soleil
頭文字：S

プリキュアキー：cure_selene
プリキュア名：キュアセレーネ / Cure Selene
頭文字：S

プリキュアキー：cure_cosmo
プリキュア名：キュアコスモ / Cure Cosmo
頭文字：C

プリキュアキー：cure_grace
プリキュア名：キュアグレース / Cure Grace
頭文字：G

プリキュアキー：cure_fontaine
プリキュア名：キュアフォンテーヌ / Cure Fontaine
頭文字：F

プリキュアキー：cure_sparkle
プリキュア名：キュアスパークル / Cure Sparkle
頭文字：S

プリキュアキー：cure_earth
プリキュア名：キュアアース / Cure Earth
頭文字：E

プリキュアキー：cure_summer
プリキュア名：キュアサマー / Cure Summer
頭文字：S

プリキュアキー：cure_coral
プリキュア名：キュアコーラル / Cure Coral
頭文字：C

プリキュアキー：cure_papaya
プリキュア名：キュアパパイア / Cure Papaya
頭文字：P

プリキュアキー：cure_flamingo
プリキュア名：キュアフラミンゴ / Cure Flamingo
頭文字：F

プリキュアキー：cure_lamer
プリキュア名：キュアラメール / Cure Lamer
頭文字：L

プリキュアキー：cure_precious
プリキュア名：キュアプレシャス / Cure Precious
頭文字：P

プリキュアキー：cure_spicy
プリキュア名：キュアスパイシー / Cure Spicy
頭文字：S

プリキュアキー：cure_yumyum
プリキュア名：キュアヤムヤム / Cure Yumyum
頭文字：Y

プリキュアキー：cure_finale
プリキュア名：キュアフィナーレ / Cure Finale
頭文字：F

プリキュアキー：cure_sky
プリキュア名：キュアスカイ / Cure Sky
頭文字：S

プリキュアキー：cure_prism
プリキュア名：キュアプリズム / Cure Prism
頭文字：P

プリキュアキー：cure_wing
プリキュア名：キュアウィング / Cure Wing
頭文字：W

プリキュアキー：cure_butterfly
プリキュア名：キュアバタフライ / Cure Butterfly
頭文字：B

プリキュアキー：cure_majesty
プリキュア名：キュアマジェスティ / Cure Majesty
頭文字：M

プリキュアキー：cure_wonderful
プリキュア名：キュアワンダフル / Cure Wonderful
頭文字：W

プリキュアキー：cure_friendy
プリキュア名：キュアフレンディ / Cure Friendy
頭文字：F

プリキュアキー：cure_nyammy
プリキュア名：キュアニャミー / Cure Nyammy
頭文字：N

プリキュアキー：cure_lillian
プリキュア名：キュアリリアン / Cure Lillian
頭文字：L

プリキュアキー：cure_idol
プリキュア名：キュアアイドル / Cure Idol
頭文字：I

プリキュアキー：cure_wink
プリキュア名：キュアウインク / Cure Wink
頭文字：W

プリキュアキー：cure_kyunkyun
プリキュア名：キュアキュンキュン / Cure Kyunkyun
頭文字：K

プリキュアキー：cure_zukyoon
プリキュア名：キュアズキューン / Cure Zukyoon
頭文字：Z

プリキュアキー：cure_kiss
プリキュア名：キュアキッス / Cure Kiss
頭文字：K

プリキュアキー：cure_echo
プリキュア名：キュアエコー / Cure Echo
頭文字：E
```
</div></details>

## プリキュアリストを作成する

ここまででできあがったものは次の通りです：

* シリーズキーとシリーズ名、プリキュアキーの対応
* プリキュアキーとプリキュアの対応

これらを使って、いよいよプリキュアリストを作成していきます。
こんな出力が得られればと思います：

```
スター☆トゥインクルプリキュア
プリキュア名,英語,頭文字
キュアスター,Cure Star,S
キュアミルキー,Cure Milky,M
キュアソレイユ,Cure Soleil,S
キュアセレーネ,Cure Selene,S
キュアコスモ,Cure Cosmo,C
人数：5
かぶり：あり

ヒーリングっど?プリキュア
プリキュア名,英語,頭文字
キュアグレース,Cure Grace,G
キュアフォンテーヌ,Cure Fontaine,F
キュアスパークル,Cure Sparkle,S
キュアアース,Cure Earth,E
人数：4
かぶり：なし
```

<details><summary>長いので折りたたむラビ</summary><div>

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using YamlDotNet.Serialization;

namespace precure_initial
{
    class Program
    {
        /// <summary>
        /// rubicure/config のパス
        /// </summary>
        static readonly string rubicureConfigPath = "../../rubicure/config/";

        class Series
        {
            // 省略
        }

        class Precure
        {
            // 省略
        }

        static void Main(string[] args)
        {
            Dictionary<string, Series> seriesList = LoadSeries();
            Dictionary<string, Precure> precureList = LoadPrecures();
            foreach (var series in seriesList)
            {
                OutputPrecureList(series.Value.Name, series.Value.PrecureKeys, precureList);
            }
        }

        static Dictionary<string, Series> LoadSeries()
        {
            // 省略
        }

        static Dictionary<string, Precure> LoadPrecures()
        {
            // 省略
        }

        /// <summary>
        /// プリキュアリストを出力する.
        /// </summary>
        /// <param name="seriesName">シリーズ名</param>
        /// <param name="precures">シリーズプリキュアキーリスト</param>
        /// <param name="precureList">プリキュアリスト</param>
        static void OutputPrecureList(string seriesName, List<string> precures, Dictionary<string, Precure> precureList)
        {
            Console.WriteLine(seriesName);
            Console.WriteLine("プリキュア名,英語,頭文字");
            // イニシャルリスト
            List<string> precureInitials = new List<string>();
            // イニシャル重複チェック
            bool initialsConflict = false;
            foreach (var precureKey in precures)
            {
                if (!precureList.TryGetValue(precureKey, out Precure precure))
                {
                    // 万が一取得できなかった場合はスキップする
                    continue;
                }
                if (precureInitials.Contains(precure.Initial))
                {
                    initialsConflict = true;
                }
                precureInitials.Add(precure.Initial);
                Console.WriteLine($"{precure.PrecureName},{precure.GirlName},{precure.Initial}");
            }
            Console.WriteLine($"人数：{precureInitials.Count}");
            Console.WriteLine($"かぶり：{(initialsConflict ? "あり" : "なし")}");
            Console.WriteLine();
        }

        private static string ToPascal(string text)
        {
            // 省略
        }
    }
}

```
</div></details>

結果は省略します。

# 結果のまとめ

上記で出力したデータを整形したのが下記の結果となります。

## ふたりはプリキュア
| プリキュア名   | 英語       | 頭文字 |
|----------------|------------|--------|
| キュアブラック | Cure Black | B      |
| キュアホワイト | Cure White | W      |

人数：2
かぶり：なし

## ふたりはプリキュア Max Heart
| プリキュア名       | 英語           | 頭文字 |
|--------------------|----------------|--------|
| キュアブラック     | Cure Black     | B      |
| キュアホワイト     | Cure White     | W      |
| シャイニールミナス | Shiny Luminous | S      |

人数：3
かぶり：なし

## ふたりはプリキュア Splash☆Star
| プリキュア名       | 英語       | 頭文字 |
|--------------------|------------|--------|
| キュアブルーム     | Cure Bloom | B      |
| キュアイーグレット | Cure Egret | E      |

人数：2
かぶり：なし

## Yes！ プリキュア5
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアドリーム   | Cure Dream    | D      |
| キュアルージュ   | Cure Rouge    | R      |
| キュアレモネード | Cure Lemonade | L      |
| キュアミント     | Cure Mint     | M      |
| キュアアクア     | Cure Aqua     | A      |

人数：5
かぶり：なし

## Yes！ プリキュア5 Go Go！
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアドリーム   | Cure Dream    | D      |
| キュアルージュ   | Cure Rouge    | R      |
| キュアレモネード | Cure Lemonade | L      |
| キュアミント     | Cure Mint     | M      |
| キュアアクア     | Cure Aqua     | A      |
| ミルキィローズ   | Milky Rose    | M      |

人数：6
かぶり：あり

## フレッシュプリキュア！
| プリキュア名     | 英語         | 頭文字 |
|------------------|--------------|--------|
| キュアピーチ     | Cure Peach   | P      |
| キュアベリー     | Cure Berry   | B      |
| キュアパイン     | Cure Pine    | P      |
| キュアパッション | Cure Passion | P      |

人数：4
かぶり：あり

## ハートキャッチプリキュア！
| プリキュア名       | 英語           | 頭文字 |
|--------------------|----------------|--------|
| キュアブロッサム   | Cure Blossom   | B      |
| キュアマリン       | Cure Marine    | M      |
| キュアサンシャイン | Cure Sunshine  | S      |
| キュアムーンライト | Cure Moonlight | M      |

人数：4
かぶり：あり

## スイートプリキュア♪
| プリキュア名   | 英語        | 頭文字 |
|----------------|-------------|--------|
| キュアメロディ | Cure Melody | M      |
| キュアリズム   | Cure Rhythm | R      |
| キュアビート   | Cure Beat   | B      |
| キュアミューズ | Cure Muse   | M      |

人数：4
かぶり：あり

## スマイルプリキュア！
| プリキュア名     | 英語        | 頭文字 |
|------------------|-------------|--------|
| キュアハッピー   | Cure Happy  | H      |
| キュアサニー     | Cure Sunny  | S      |
| キュアピース     | Cure Peace  | P      |
| キュアマーチ     | Cure March  | M      |
| キュアビューティ | Cure Beauty | B      |

人数：5
かぶり：なし

## ドキドキ！プリキュア
| プリキュア名       | 英語         | 頭文字 |
|--------------------|--------------|--------|
| キュアハート       | Cure Heart   | H      |
| キュアダイヤモンド | Cure Diamond | D      |
| キュアロゼッタ     | Cure Rosetta | R      |
| キュアソード       | Cure Sword   | S      |
| キュアエース       | Cure Ace     | A      |

人数：5
かぶり：なし

## ハピネスチャージプリキュア！
| プリキュア名       | 英語          | 頭文字 |
|--------------------|---------------|--------|
| キュアラブリー     | Cure Lovely   | L      |
| キュアプリンセス   | Cure Princess | P      |
| キュアハニー       | Cure Honey    | H      |
| キュアフォーチュン | Cure Fortune  | F      |

人数：4
かぶり：なし

## Go!プリンセスプリキュア
| プリキュア名       | 英語         | 頭文字 |
|--------------------|--------------|--------|
| キュアフローラ     | Cure Flora   | F      |
| キュアマーメイド   | Cure Mermaid | M      |
| キュアトゥインクル | Cure Twinkle | T      |
| キュアスカーレット | Cure Scarlet | S      |

人数：4
かぶり：なし

## 魔法つかいプリキュア！
| プリキュア名       | 英語         | 頭文字 |
|--------------------|--------------|--------|
| キュアミラクル     | Cure Miracle | M      |
| キュアマジカル     | Cure Magical | M      |
| キュアフェリーチェ | Cure Felice  | F      |

人数：3
かぶり：あり

## キラキラ☆プリキュアアラモード
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアホイップ   | Cure Whip     | W      |
| キュアカスタード | Cure Custard  | C      |
| キュアジェラート | Cure Gelato   | G      |
| キュアマカロン   | Cure Macaron  | M      |
| キュアショコラ   | Cure Chocolat | C      |
| キュアパルフェ   | Cure Parfait  | P      |

人数：6
かぶり：あり

## ＨＵＧっと！プリキュア
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアエール     | Cure Yell     | Y      |
| キュアアンジュ   | Cure Ange     | A      |
| キュアエトワール | Cure Etoile   | E      |
| キュアマシェリ   | Cure Macherie | M      |
| キュアアムール   | Cure Amour    | A      |

人数：5
かぶり：あり

## スター☆トゥインクルプリキュア
| プリキュア名   | 英語        | 頭文字 |
|----------------|-------------|--------|
| キュアスター   | Cure Star   | S      |
| キュアミルキー | Cure Milky  | M      |
| キュアソレイユ | Cure Soleil | S      |
| キュアセレーネ | Cure Selene | S      |
| キュアコスモ   | Cure Cosmo  | C      |

人数：5
かぶり：あり

## ヒーリングっど♥プリキュア
| プリキュア名       | 英語          | 頭文字 |
|--------------------|---------------|--------|
| キュアグレース     | Cure Grace    | G      |
| キュアフォンテーヌ | Cure Fontaine | F      |
| キュアスパークル   | Cure Sparkle  | S      |
| キュアアース       | Cure Earth    | E      |

人数：4
かぶり：なし

## トロピカル～ジュ！プリキュア
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアサマー     | Cure Summer   | S      |
| キュアコーラル   | Cure Coral    | C      |
| キュアパパイア   | Cure Papaya   | P      |
| キュアフラミンゴ | Cure Flamingo | F      |
| キュアラメール   | Cure Lamer    | L      |

人数：5
かぶり：なし

## デリシャスパーティ♡プリキュア
| プリキュア名     | 英語          | 頭文字 |
|------------------|---------------|--------|
| キュアプレシャス | Cure Precious | P      |
| キュアスパイシー | Cure Spicy    | S      |
| キュアヤムヤム   | Cure Yumyum   | Y      |
| キュアフィナーレ | Cure Finale   | F      |

人数：4
かぶり：なし

## ひろがるスカイ！プリキュア
| プリキュア名       | 英語           | 頭文字 |
|--------------------|----------------|--------|
| キュアスカイ       | Cure Sky       | S      |
| キュアプリズム     | Cure Prism     | P      |
| キュアウィング     | Cure Wing      | W      |
| キュアバタフライ   | Cure Butterfly | B      |
| キュアマジェスティ | Cure Majesty   | M      |

人数：5
かぶり：なし

## わんだふるぷりきゅあ！

| プリキュア名     | 英語           | 頭文字 |
|------------------|----------------|--------|
| キュアワンダフル | Cure Wonderful | W      |
| キュアフレンディ | Cure Friendy   | F      |
| キュアニャミー   | Cure Nyammy    | N      |
| キュアリリアン   | Cure Lillian   | L      |

人数：4
かぶり：なし

## キミとアイドルプリキュア♪

| プリキュア名       | 英語          | 頭文字 |
|--------------------|---------------|--------|
| キュアアイドル     | Cure Idol     | I      |
| キュアウインク     | Cure Wink     | W      |
| キュアキュンキュン | Cure Kyunkyun | K      |
| キュアズキューン   | Cure Zukyoon  | Z      |
| キュアキッス       | Cure Kiss     | K      |

人数：5
かぶり：あり

# 考察

まずはシリーズ別の状況を表にまとめてみます。

| シリーズ名                      | 人数 | かぶり |
|---------------------------------|------|--------|
| ふたりはプリキュア              | 2    | なし   |
| ふたりはプリキュア Max Heart    | 3    | なし   |
| ふたりはプリキュア Splash☆Star | 2    | なし   |
| Yes！ プリキュア5               | 5    | なし   |
| Yes！ プリキュア5 Go Go！       | 6    | あり   |
| フレッシュプリキュア！          | 4    | あり   |
| ハートキャッチプリキュア！      | 4    | あり   |
| スイートプリキュア♪            | 4    | あり   |
| スマイルプリキュア！            | 5    | なし   |
| ドキドキ！プリキュア            | 5    | なし   |
| ハピネスチャージプリキュア！    | 4    | なし   |
| Go!プリンセスプリキュア         | 4    | なし   |
| 魔法つかいプリキュア！          | 3    | あり   |
| キラキラ☆プリキュアアラモード  | 6    | あり   |
| ＨＵＧっと！プリキュア          | 5    | あり   |
| スター☆トゥインクルプリキュア  | 5    | あり   |
| ヒーリングっど♥プリキュア       | 4    | なし   |
| トロピカル～ジュ！プリキュア    | 5    | なし   |
| デリシャスパーティ♡プリキュア   | 4    | なし   |
| ひろがるスカイ！プリキュア      | 5    | なし   |
| わんだふるぷりきゅあ！          | 4    | なし   |
| キミとアイドルプリキュア♪      | 5    | あり   |

かぶりありシリーズ数：9
かぶりなしシリーズ数：13

このことから、一概に「プリキュアを頭文字だけで区別することはできる」とも「プリキュアを頭文字だけで区別することはできない」ともいえない状況です。

## 人数とかぶりの関係

「人数が多いとかぶりは多くなるのか？少なくなるのか？」というのを調べてみます。

| 人数 | かぶりありシリーズ数 | かぶりなしシリーズ数 | 合計シリーズ数 | かぶりあり率 |
|------|----------------------|----------------------|----------------|--------------|
| 2    | 0                    | 2                    | 2              | 0.00%        |
| 3    | 1                    | 1                    | 2              | 50.00%       |
| 4    | 3                    | 5                    | 8              | 37.50%       |
| 5    | 3                    | 5                    | 8              | 37.50%       |
| 6    | 2                    | 0                    | 2              | 100.00%      |

N=22なので一概には言いにくいのですが、6人の場合は必ずかぶる一方で2人だとかぶらないようです。

## 一番使われているイニシャルは？

プリキュア87人のイニシャルで最も多く使われているイニシャルはどれでしょうか？
※複数シリーズに登場しているプリキュアは重複カウントしていません。またここには「キュアエコー」を含みません。
<details><summary>コードは長いので折りたたむラビ</summary><div>

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using YamlDotNet.Serialization;

namespace precure_initial
{
    class Program
    {
        // Main関数以外省略します

        static void Main(string[] args)
        {
            Dictionary<string, Series> seriesList = LoadSeries();
            Dictionary<string, Precure> precureList = LoadPrecures();
            // TVシリーズ出演者のみに絞り込む
            List<Precure> tvSeriesPrecureList = new List<Precure>();
            List<string> tvSeriesPrecureKeyList = new List<string>();
            foreach (var series in seriesList)
            {
                tvSeriesPrecureKeyList.AddRange(series.Value.PrecureKeys);
            }
            foreach (var key in tvSeriesPrecureKeyList.Distinct())
            {
                if (precureList.TryGetValue(key, out Precure precure))
                {
                    tvSeriesPrecureList.Add(precure);
                }
            }
            var groupedByInitialList = tvSeriesPrecureList.GroupBy(p => p.Initial).OrderByDescending(p => p.Count());
            // 順位は後で追加します
            Console.WriteLine("イニシャル|使用回数|プリキュア名");
            foreach (var i in groupedByInitialList)
            {
                Console.Write(i.Key + "|" + i.Count() + "|");
                Console.WriteLine(string.Join(", ", i.Select(p => p.PrecureName)));
            }
        }
    }
}
```
</div></details>

※使用実績のないイニシャルは下表では省略しています。

| 順位 | イニシャル | 使用回数 | プリキュア名                                                                                                                                                                                                                       |
|------|------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1    | M          | 14       | キュアミント, ミルキィローズ, キュアマリン, キュアムーンライト, キュアメロディ, キュアミューズ, キュアマーチ, キュアマーメイド, キュアミラクル, キュアマジカル, キュアマカロン, キュアマシェリ, キュアミルキー, キュアマジェスティ |
| 2    | S          | 12       | シャイニールミナス, キュアサンシャイン, キュアサニー, キュアソード, キュアスカーレット, キュアスター, キュアソレイユ, キュアセレーネ, キュアスパークル, キュアサマー, キュアスパイシー, キュアスカイ                               |
| 3    | P          | 9        | キュアピーチ, キュアパイン, キュアパッション, キュアピース, キュアプリンセス, キュアパルフェ, キュアパパイア, キュアプレシャス, キュアプリズム                                                                                     |
| 4    | B          | 7        | キュアブラック, キュアブルーム, キュアベリー, キュアブロッサム, キュアビート, キュアビューティ, キュアバタフライ                                                                                                                   |
| 4    | F          | 7        | キュアフォーチュン, キュアフローラ, キュアフェリーチェ, キュアフォンテーヌ, キュアフラミンゴ, キュアフィナーレ, キュアフレンディ                                                                                                   |
| 6    | W          | 5        | キュアホワイト, キュアホイップ, キュアウィング, キュアワンダフル, キュアウインク                                                                                                                                                   |
| 7    | L          | 4        | キュアレモネード, キュアラブリー, キュアラメール, キュアリリアン                                                                                                                                                                   |
| 7    | A          | 4        | キュアアクア, キュアエース, キュアアンジュ, キュアアムール                                                                                                                                                                         |
| 7    | C          | 4        | キュアカスタード, キュアショコラ, キュアコスモ, キュアコーラル                                                                                                                                                                     |
| 10   | E          | 3        | キュアイーグレット, キュアエトワール, キュアアース                                                                                                                                                                                 |
| 10   | R          | 3        | キュアルージュ, キュアリズム, キュアロゼッタ                                                                                                                                                                                       |
| 10   | H          | 3        | キュアハッピー, キュアハート, キュアハニー                                                                                                                                                                                         |
| 13   | D          | 2        | キュアドリーム, キュアダイヤモンド                                                                                                                                                                                                 |
| 13   | G          | 2        | キュアジェラート, キュアグレース                                                                                                                                                                                                   |
| 13   | Y          | 2        | キュアエール, キュアヤムヤム                                                                                                                                                                                                       |
| 13   | K          | 2        | キュアキュンキュン, キュアキッス                                                                                                                                                                                                   |
| 17   | T          | 1        | キュアトゥインクル                                                                                                                                                                                                                 |
| 17   | N          | 1        | キュアニャミー                                                                                                                                                                                                                     |
| 17   | I          | 1        | キュアアイドル                                                                                                                                                                                                                     |
| 17   | Z          | 1        | キュアズキューン                                                                                                                                                                                                                   |

### 直近5作品では？
直近の5作品「トロピカル～ジュ！プリキュア」「デリシャスパーティ♡プリキュア」「ひろがるスカイ！プリキュア」「わんだふるぷりきゅあ！」「キミとアイドルプリキュア♪」に絞ると、こんな感じになります。
※使用実績のないイニシャルは下表では省略しています。
<details><summary>コードは長いので折りたたむラビ</summary><div>

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using YamlDotNet.Serialization;

namespace precure_initial
{
    class Program
    {
        // Main関数以外省略します

        static void Main(string[] args)
        {
            Dictionary<string, Series> seriesList = LoadSeries();
            // 直近5作品に絞り込む
            var last5SeriesList = seriesList.Values.ToList().GetRange(seriesList.Values.Count - 5, 5);
            Dictionary<string, Precure> precureList = LoadPrecures();
            // TVシリーズ出演者のみに絞り込む
            List<Precure> tvSeriesPrecureList = new List<Precure>();
            List<string> tvSeriesPrecureKeyList = new List<string>();
            foreach (var series in last5SeriesList)
            {
                tvSeriesPrecureKeyList.AddRange(series.PrecureKeys);
            }
            foreach (var key in tvSeriesPrecureKeyList.Distinct())
            {
                if (precureList.TryGetValue(key, out Precure precure))
                {
                    tvSeriesPrecureList.Add(precure);
                }
            }
            var groupedByInitialList = tvSeriesPrecureList.GroupBy(p => p.Initial).OrderByDescending(p => p.Count());
            // 順位は後で追加します
            Console.WriteLine("イニシャル|使用回数|プリキュア名");
            foreach (var i in groupedByInitialList)
            {
                Console.Write(i.Key + "|" + i.Count() + "|");
                Console.WriteLine(string.Join(", ", i.Select(p => p.PrecureName)));
            }
        }
    }
}
```
</div></details>

| 順位 | イニシャル | 使用回数 | プリキュア名                                        |
|------|------------|----------|-----------------------------------------------------|
| 1    | S          | 3        |キュアサマー, キュアスパイシー, キュアスカイ         |
| 1    | P          | 3        |キュアパパイア, キュアプレシャス, キュアプリズム     |
| 1    | F          | 3        |キュアフラミンゴ, キュアフィナーレ, キュアフレンディ |
| 1    | W          | 3        |キュアウィング, キュアワンダフル, キュアウインク     |
| 5    | L          | 2        |キュアラメール, キュアリリアン                       |
| 5    | K          | 2        |キュアキュンキュン, キュアキッス                     |
| 8    | C          | 1        |キュアコーラル                                       |
| 8    | Y          | 1        |キュアヤムヤム                                       |
| 8    | B          | 1        |キュアバタフライ                                     |
| 8    | M          | 1        |キュアマジェスティ                                   |
| 8    | N          | 1        |キュアニャミー                                       |
| 8    | I          | 1        |キュアアイドル                                       |
| 8    | Z          | 1        |キュアズキューン                                     |

この5作品では、全体順位1位の「M」（14人）がたった1人だったのに対し、全体順位6位の「W」（5人）のうち半分以上の3人がこの5作品に集中しています。

# まとめ

ここまで「プリキュアのイニシャル」を使っていろいろとデータ処理を行ってきました。
果たして88人目のプリキュアは、どんなイニシャルを持つのでしょうか…？