search
LoginSignup
2

posted at

updated at

Q. プリキュア名でしりとりをしたとき、最大で何人登場するか?

Summary

Q. プリキュア名でしりとりをしたとき、最大で何人登場するか?
A. 11人(結果は最後の方に記載しています)

お断り

本記事の内容は、2022年4月24日(「デリシャスパーティ♡プリキュア」第7話放送終了)時点での状況を元に記載しています。
以下、特記のない限り「現在」はこの日時点をさします。

はじめに

ラビリン「この前はイニシャルを見てみたラビ!」
のどか「ねえラビリン、プリキュアの名前でしりとりしたらどうなるのかな?」
ラビリン「調べてみるラビ!」

ルールの整理

ラビリン「まずはしりとりのルールを決めるラビ!」

  • 登場するプリキュアの人数が、最も多くなるようにする
  • 一度登場したプリキュアは、以後登場しない(1人1回まで)
  • 「ん」で終わるプリキュアを使用するか、リスト内にしりとりを続けられるプリキュアがなくなったときに、しりとりは終了する
  • 最初は、好きなプリキュアから初めてよい
  • 濁音・半濁音は清音と相互変換可能

    例)「ハ」「バ」「パ」は同じものと見なす

ラビリン「今回はC#でしりとりを続けるプログラムを書く:Gushwell's Dev Notesのプログラムを使うから、最初の4つは同じルールにしたラビ!」

コード置き場

ラビリン「今回のコードはGitHubに置いておくラビ!」
Hokkaidosm/precure_shiritori: プリキュア名でしりとりをする

使用するもの

対象とするプリキュア

今回は「プリキュアオールスターズ」扱いの全プリキュアを対象とします。
なので、映画のみに登場している「キュアエコー」も対象となります。
なお、対象プリキュアの一覧はデータを読み込むに記載しています。

プリキュアデータの読み込み

rubicureをgitのサブモジュールとして加える

gitのルートディレクトリで次のコマンドをたたきます。

cd precure_shiritori
git submodule add https://github.com/sue445/rubicure.git

これで、precure_shiritori/rubicureディレクトリ内に、rubicureがコピーされます。

Precureクラスを作る

プリキュア名と、読みと、最初と最後の文字を保持するクラスを作っていきます。

長いので折りたたむラビ
Precure.cs
namespace precure_shiritori
{
    /// <summary>
    /// プリキュアデータ
    /// </summary>
    class Precure
    {
        /// <summary>
        /// プリキュア名
        /// </summary>
        public string PrecureName { get; private set; }
        /// <summary>
        /// 読み
        /// </summary>
        public string PrecureRuby { get; private set; }
        /// <summary>
        /// 読みの最初の文字
        /// </summary>
        public char First { get; private set; }
        /// <summary>
        /// 読みの最後の文字
        /// </summary>
        public char Last { get; private set; }

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="name">プリキュア名</param>
        public Precure(string name)
        {
            PrecureName = name;
            PrecureRuby = name; // TODO: 後で修正します
            First = ToSeion(ToChokuon(PrecureRuby[0]));
            Last = ToSeion(ToChokuon(PrecureRuby[PrecureRuby.Length - 1]));
            // 長音一文字の単語はない前提
            if (Last == 'ー' || Last == '-')
            {
                Last = ToSeion(ToChokuon(PrecureRuby[PrecureRuby.Length - 2]));
            }
        }

        // ッは促音だが、拗音(Youon)という変数名とする
        private const string Youon = "ァィゥェォヵヶッャュョヮ";
        private const string Chokuon = "アイウエオカケツヤユヨワ";
        private char ToChokuon(char c)
        {
            int ix = Youon.IndexOf(c);
            if (ix > 0)
                return Chokuon[ix];
            return c;
        }

        // 半濁音を含んでいますが定数名はDakuon(濁音)にします
        private const string Dakuon = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";
        private const string Seion  = "カキクケコサシスセソタチツテトハヒフヘホハヒフヘホ";
        private char ToSeion(char c)
        {
            int ix = Dakuon.IndexOf(c);
            if (ix > 0)
            {
                return Seion[ix];
            }
            return c;
        }

        public override string ToString()
        {
            return this.PrecureName.ToString();
        }
    }
}

データを読み込む

実際にデータを読み込み、出力させてみます。
イニシャルを調べた記事に詳細を掲載しています。

長いので折りたたむラビ
Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using YamlDotNet.Serialization;

namespace precure_shiritori
{
    class Program
    {
        /// <summary>
        /// rubicure/config のパス
        /// </summary>
        static readonly string rubicureConfigPath = "../../rubicure/config/";
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            Console.WriteLine("プリキュア名, 読み, 最初, 最後");
            foreach (Precure precure in precureList)
            {
                Console.WriteLine($"{precure.PrecureName}, {precure.PrecureRuby}, {precure.First}, {precure.Last}");
            }
        }

        /// <summary>
        /// 全てのプリキュアのデータを読み込む.
        /// </summary>
        /// <returns>プリキュアデータのリスト</returns>
        static List<Precure> LoadPrecure()
        {
            List<Precure> precureList = new List<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 precureName = null;
                    if (girl.Value.TryGetValue("precure_name", out object precureNameObj))
                    {
                        precureName = (string)precureNameObj;
                    }
                    precureList.Add(new Precure(precureName));
                }
            }

            return precureList;
        }
    }
}
結果はこれラビ
プリキュア名, 読み, 最初, 最後
キュアブラック, キュアブラック, キ, ク
キュアホワイト, キュアホワイト, キ, ト
シャイニールミナス, シャイニールミナス, シ, ス
キュアブルーム, キュアブルーム, キ, ム
キュアイーグレット, キュアイーグレット, キ, ト
キュアブライト, キュアブライト, キ, ト
キュアウィンディ, キュアウィンディ, キ, イ
キュアドリーム, キュアドリーム, キ, ム
キュアルージュ, キュアルージュ, キ, ユ
キュアレモネード, キュアレモネード, キ, ト
キュアミント, キュアミント, キ, ト
キュアアクア, キュアアクア, キ, ア
ミルキィローズ, ミルキィローズ, ミ, ス
キュアピーチ, キュアピーチ, キ, チ
キュアベリー, キュアベリー, キ, リ
キュアパイン, キュアパイン, キ, ン
キュアパッション, キュアパッション, キ, ン
キュアブロッサム, キュアブロッサム, キ, ム
キュアマリン, キュアマリン, キ, ン
キュアサンシャイン, キュアサンシャイン, キ, ン
キュアムーンライト, キュアムーンライト, キ, ト
キュアメロディ, キュアメロディ, キ, イ
キュアリズム, キュアリズム, キ, ム
キュアビート, キュアビート, キ, ト
キュアミューズ, キュアミューズ, キ, ス
キュアハッピー, キュアハッピー, キ, ヒ
キュアサニー, キュアサニー, キ, ニ
キュアピース, キュアピース, キ, ス
キュアマーチ, キュアマーチ, キ, チ
キュアビューティ, キュアビューティ, キ, イ
キュアハート, キュアハート, キ, ト
キュアダイヤモンド, キュアダイヤモンド, キ, ト
キュアロゼッタ, キュアロゼッタ, キ, タ
キュアソード, キュアソード, キ, ト
キュアエース, キュアエース, キ, ス
キュアラブリー, キュアラブリー, キ, リ
キュアプリンセス, キュアプリンセス, キ, ス
キュアハニー, キュアハニー, キ, ニ
キュアフォーチュン, キュアフォーチュン, キ, ン
キュアフローラ, キュアフローラ, キ, ラ
キュアマーメイド, キュアマーメイド, キ, ト
キュアトゥインクル, キュアトゥインクル, キ, ル
キュアスカーレット, キュアスカーレット, キ, ト
キュアミラクル, キュアミラクル, キ, ル
キュアマジカル, キュアマジカル, キ, ル
キュアフェリーチェ, キュアフェリーチェ, キ, エ
キュアホイップ, キュアホイップ, キ, フ
キュアカスタード, キュアカスタード, キ, ト
キュアジェラート, キュアジェラート, キ, ト
キュアマカロン, キュアマカロン, キ, ン
キュアショコラ, キュアショコラ, キ, ラ
キュアパルフェ, キュアパルフェ, キ, エ
キュアエール, キュアエール, キ, ル
キュアアンジュ, キュアアンジュ, キ, ユ
キュアエトワール, キュアエトワール, キ, ル
キュアマシェリ, キュアマシェリ, キ, リ
キュアアムール, キュアアムール, キ, ル
キュアスター, キュアスター, キ, タ
キュアミルキー, キュアミルキー, キ, キ
キュアソレイユ, キュアソレイユ, キ, ユ
キュアセレーネ, キュアセレーネ, キ, ネ
キュアコスモ, キュアコスモ, キ, モ
キュアグレース, キュアグレース, キ, ス
キュアフォンテーヌ, キュアフォンテーヌ, キ, ヌ
キュアスパークル, キュアスパークル, キ, ル
キュアアース, キュアアース, キ, ス
キュアサマー, キュアサマー, キ, マ
キュアコーラル, キュアコーラル, キ, ル
キュアパパイア, キュアパパイア, キ, ア
キュアフラミンゴ, キュアフラミンゴ, キ, コ
キュアラメール, キュアラメール, キ, ル
キュアプレシャス, キュアプレシャス, キ, ス
キュアスパイシー, キュアスパイシー, キ, シ
キュアヤムヤム, キュアヤムヤム, キ, ム
キュアエコー, キュアエコー, キ, コ

プリキュアならではの工夫が必要

普通にしりとりをやろうとすると、プリキュア名のほとんどが「キュア」で始まるため、「キ」が先頭に来てしまうことが多くなってしまいます。
試しに、「キ」で終わるプリキュアだけ抽出してみます。

長いので折りたたむラビ
Program.cs(一部)
using System.Linq; // これを追加

namespace precure_shiritori
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            Console.WriteLine("プリキュア名, 読み, 最初, 最後");
            var lastKiList = precureList.Where(P => P.Last.Equals('キ'));
            foreach (Precure precure in lastKiList)
            {
                Console.WriteLine($"{precure.PrecureName}, {precure.PrecureRuby}, {precure.First}, {precure.Last}");
            }
        }
        // LoadPrecure関数は同じなので、省略します
    }
}

結果は:

プリキュア名, 読み, 最初, 最後
キュアミルキー, キュアミルキー, キ, キ

なんと言うことでしょう。「キュアミルキー」しか出てきませんでした。

参考までに、読みの最初が「キ」ではないプリキュアを抽出してみます。

長いので折りたたむラビ
Program.cs(一部)
namespace precure_shiritori
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            Console.WriteLine("プリキュア名, 読み, 最初, 最後");
            var firstNotKiList = precureList.Where(P => !P.First.Equals('キ'));
            foreach (Precure precure in firstNotKiList)
            {
                Console.WriteLine($"{precure.PrecureName}, {precure.PrecureRuby}, {precure.First}, {precure.Last}");
            }
        }
        // LoadPrecure関数は同じなので、以下省略します
    }
}

結果は:

プリキュア名, 読み, 最初, 最後
シャイニールミナス, シャイニールミナス, シ, ス
ミルキィローズ, ミルキィローズ, ミ, ス

のどか「そうだ!このルールを追加しよう!」
ラビリン「ラビ!」

  • プリキュア名が「キュア」で始まる場合、読みから「キュア」を取り除く

…というコードを、 Precure.cs に入れてみます。

長いので折りたたむラビ
Precure.cs(一部)
using System.Text.RegularExpressions; // これを追加

namespace precure_shiritori
{
    /// <summary>
    /// プリキュアデータ
    /// </summary>
    class Precure
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="name">プリキュア名</param>
        public Precure(string name)
        {
            PrecureName = name;
            PrecureRuby = Regex.Replace(name, "^キュア", "");
            First = ToSeion(ToChokuon(PrecureRuby[0]));
            Last = ToSeion(ToChokuon(PrecureRuby[PrecureRuby.Length - 1]));
            // 長音一文字の単語はない前提
            if (Last == 'ー' || Last == '-')
            {
                Last = ToSeion(ToChokuon(PrecureRuby[PrecureRuby.Length - 2]));
            }
        }
        // コンストラクタ以外は同じなので省略します
    }
}

こうすると、下記のように「キュア」が取り除かれます(下記結果は、それがわかりやすい部分だけ取り出しました)。

プリキュア名, 読み, 最初, 最後
キュアブラック, ブラック, ブ, ク
キュアホワイト, ホワイト, ホ, ト
シャイニールミナス, シャイニールミナス, シ, ス
ミルキィローズ, ミルキィローズ, ミ, ス

実際にしりとりをするコードを書く

のどか「いよいよ本番だね」

結果を入れるクラス PrecureChainList

長いので折りたたむラビ
PrecureChainList.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace precure_shiritori
{
    class PrecureChainList
    {
        private List<short> _chain = new List<short>();
        private List<Precure> AllPrecures { get; set; }

        public PrecureChainList(List<Precure> precureList)
        {
            this.AllPrecures = precureList;
        }

        public Precure LastPrecure
        {
            get
            {
                int ix = _chain[_chain.Count - 1];
                return AllPrecures[ix];
            }
        }

        public PrecureChainList Clone()
        {
            var wcl = new PrecureChainList(this.AllPrecures)
            {
                _chain = _chain.ToList()
            };
            return wcl;
        }

        public void Add(Precure precure)
        {
            short ix = (short)AllPrecures.FindIndex(x => x.PrecureName == precure.PrecureName);
            _chain.Add(ix);
        }

        public Precure Find(Func<Precure, bool> pred)
        {
            foreach (var w in GetPrecureList())
            {
                if (pred(w) == true)
                {
                    return w;
                }
            }
            return null;
        }

        public IEnumerable<Precure> GetPrecureList()
        {
            foreach (var ix in _chain)
            {
                yield return AllPrecures[ix];
            }
        }

        public int Count
        {
            get { return _chain.Count; }
        }

        internal void RemoveAt(int index)
        {
            _chain.RemoveAt(index);
        }
    }
}

しりとりを解くクラス PrecureChainSolver

長いので折りたたむラビ
PrecureChainSolver.cs
using System.Collections.Generic;
using System.Linq;

namespace precure_shiritori
{
    class PrecureChainSolver
    {
        public List<Precure> PrecureList { get; set; }
        public PrecureChainSolver(List<Precure> precureList)
        {
            PrecureList = precureList.ToList();
        }

        private Queue<PrecureChainList> _queue = new Queue<PrecureChainList>();
        public PrecureChainList Solve(Precure precure)
        {
            PrecureChainList firstState = new PrecureChainList(PrecureList);
            firstState.Add(precure);
            PrecureChainList ans = firstState;
            _queue.Enqueue(firstState);
            while (_queue.Count > 0)
            {
                var curr = _queue.Dequeue();
                ans = curr;
                foreach (var w in Candidate(curr.LastPrecure))
                {
                    if (ans.Find(x => x == w) != null)
                        continue;
                    curr.Add(w);
                    _queue.Enqueue(curr.Clone());
                    curr.RemoveAt(curr.Count - 1);
                }

            }
            return ans;
        }
        // 候補の単語を列挙する
        private IEnumerable<Precure> Candidate(Precure precure)
        {
            return PrecureList.Where(x => precure.Last == x.First).ToList();
        }
    }
}

Main 関数

Program.cs(一部)
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            DateTime dt = DateTime.Now;
            Precure startPrecure = precureList[0];
            PrecureChainSolver pc = new PrecureChainSolver(precureList);
            var ans = pc.Solve(startPrecure);
            ans.GetPrecureList().ToList().ForEach(precure => Console.WriteLine($"{precure.PrecureName}{precure.PrecureRuby})"));
            Console.WriteLine("人数:{0}/{1}人", ans.Count, precureList.Count);
            Console.WriteLine("所要時間:" + (DateTime.Now - dt));
            Console.ReadLine();
        }

結果…?

キュアブラック(ブラック)
キュアグレース(グレース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
人数:10/75人
所要時間:00:00:00.0302675

のどか「これが…最長なの?」
ペギタン「最長とは限らないペエ。だって、これ最初「キュアブラック」で固定しているペエ。他だったらもっと長い結果が出るかもしれないペエ」
のどか「試してみようよ!」

総当たりで全部調べる

Program.cs(一部)
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            List<PrecureChainList> precureChainLists = new List<PrecureChainList>();
            DateTime dt = DateTime.Now;
            foreach (Precure startPrecure in precureList)
            {
                PrecureChainSolver pc = new PrecureChainSolver(precureList);
                precureChainLists.Add(pc.Solve(startPrecure));
            }
            var ans = precureChainLists.OrderByDescending(P => P.Count).First();
            ans.GetPrecureList().ToList().ForEach(precure => Console.WriteLine($"{precure.PrecureName}{precure.PrecureRuby})"));
            Console.WriteLine("人数:{0}/{1}人", ans.Count, precureList.Count);
            Console.WriteLine("所要時間:" + (DateTime.Now - dt));
            Console.ReadLine();
        }

のどか「結果を見てみよう!」

キュアホイップ(ホイップ)
キュアフェリーチェ(フェリーチェ)
キュアエース(エース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
人数:11/75人
所要時間:00:00:00.0113351

最終結果

ラビリン「人数の多い順に、結果を出してみるラビ!」

Program.cs(一部)
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            List<PrecureChainList> precureChainLists = new List<PrecureChainList>();
            DateTime dt = DateTime.Now;
            foreach (Precure startPrecure in precureList)
            {
                PrecureChainSolver pc = new PrecureChainSolver(precureList);
                precureChainLists.Add(pc.Solve(startPrecure));
            }
            var ansList = precureChainLists.OrderByDescending(P => P.Count);
            int count = 0;
            foreach (var ans in ansList)
            {
                if (ans.Count != count)
                {
                    Console.WriteLine("============== {0}人 =================", ans.Count);
                    count = ans.Count;
                }
                ans.GetPrecureList().ToList().ForEach(precure => Console.WriteLine($"{precure.PrecureName}{precure.PrecureRuby})"));
                Console.WriteLine("---------------------------------------------");
            }
            Console.WriteLine("所要時間:" + (DateTime.Now - dt));
            Console.ReadLine();
        }

11人

2パターン

結果 結果
キュアホイップ(ホイップ)
キュアフェリーチェ(フェリーチェ)
キュアエース(エース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアパパイア(パパイア)
キュアアクア(アクア)
キュアアース(アース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

10人

5パターン

結果 結果
キュアブラック(ブラック)
キュアグレース(グレース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアアクア(アクア)
キュアアース(アース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアハッピー(ハッピー)
キュアピース(ピース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアフェリーチェ(フェリーチェ)
キュアエース(エース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアパルフェ(パルフェ)
キュアエース(エース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

9人

8パターン

結果 結果
ミルキィローズ(ミルキィローズ)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアミューズ(ミューズ)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアピース(ピース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアエース(エース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアプリンセス(プリンセス)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアグレース(グレース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアアース(アース)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアプレシャス(プレシャス)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

8人

2パターン

結果 結果
シャイニールミナス(シャイニールミナス)
キュアスパイシー(スパイシー)
キュアショコラ(ショコラ)
キュアラブリー(ラブリー)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアスパイシー(スパイシー)
シャイニールミナス(シャイニールミナス)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

7人

0パターン

6人

8パターン

結果 結果
キュアウィンディ(ウィンディ)
キュアイーグレット(イーグレット)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアメロディ(メロディ)
キュアイーグレット(イーグレット)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアビューティ(ビューティ)
キュアイーグレット(イーグレット)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアロゼッタ(ロゼッタ)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアフローラ(フローラ)
キュアラブリー(ラブリー)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアショコラ(ショコラ)
キュアラブリー(ラブリー)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアスター(スター)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアサマー(サマー)
キュアマシェリ(マシェリ)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

5人

16パターン

結果 結果
キュアホワイト(ホワイト)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアイーグレット(イーグレット)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアブライト(ブライト)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアレモネード(レモネード)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアミント(ミント)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアベリー(ベリー)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアビート(ビート)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアハート(ハート)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアダイヤモンド(ダイヤモンド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアソード(ソード)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアラブリー(ラブリー)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアマーメイド(マーメイド)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアスカーレット(スカーレット)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアカスタード(カスタード)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアジェラート(ジェラート)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアマシェリ(マシェリ)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

4人

5パターン

結果 結果
キュアブルーム(ブルーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアドリーム(ドリーム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアブロッサム(ブロッサム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアリズム(リズム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアヤムヤム(ヤムヤム)
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)

3人

3パターン

結果 結果
キュアムーンライト(ムーンライト)
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアフラミンゴ(フラミンゴ)
キュアコーラル(コーラル)
キュアルージュ(ルージュ)
キュアエコー(エコー)
キュアコーラル(コーラル)
キュアルージュ(ルージュ)

2人

9パターン

結果 結果
キュアトゥインクル(トゥインクル)
キュアルージュ(ルージュ)
キュアミラクル(ミラクル)
キュアルージュ(ルージュ)
キュアマジカル(マジカル)
キュアルージュ(ルージュ)
キュアエール(エール)
キュアルージュ(ルージュ)
キュアエトワール(エトワール)
キュアルージュ(ルージュ)
キュアアムール(アムール)
キュアルージュ(ルージュ)
キュアスパークル(スパークル)
キュアルージュ(ルージュ)
キュアコーラル(コーラル)
キュアルージュ(ルージュ)
キュアラメール(ラメール)
キュアルージュ(ルージュ)

1人

17パターン

結果 結果
キュアルージュ(ルージュ) キュアピーチ(ピーチ)
キュアパイン(パイン) キュアパッション(パッション)
キュアマリン(マリン) キュアサンシャイン(サンシャイン)
キュアサニー(サニー) キュアマーチ(マーチ)
キュアハニー(ハニー) キュアフォーチュン(フォーチュン)
キュアマカロン(マカロン) キュアアンジュ(アンジュ)
キュアミルキー(ミルキー) キュアソレイユ(ソレイユ)
キュアセレーネ(セレーネ) キュアコスモ(コスモ)
キュアフォンテーヌ(フォンテーヌ)

ペギタン「疲れたペエ」

おまけ

キュアルージュ多過ぎ?

ちゆ「そういえば、なんか「キュアルージュ」で終わるものが多いような気がするけど」
ペギタン「調べてみるペエ」

Program.cs(一部)
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            List<PrecureChainList> precureChainLists = new List<PrecureChainList>();
            DateTime dt = DateTime.Now;
            foreach (Precure startPrecure in precureList)
            {
                PrecureChainSolver pc = new PrecureChainSolver(precureList);
                precureChainLists.Add(pc.Solve(startPrecure));
            }
            var ansList = precureChainLists.OrderByDescending(P => P.Count);
            Console.WriteLine("キュアルージュで終わるもの:" + ansList.Where(A => A.LastPrecure.PrecureName.Equals("キュアルージュ")).Count() + "件");
            Console.ReadLine();
        }
キュアルージュで終わるもの:59件

ちゆ「見間違いじゃなかったのね」

最初の文字と最後の文字、使用頻度は?

ひなた「そういえば、プリキュアの名前で最初と最後に使われている文字ってどんなのがあるんだろう?」
ニャトラン「調べてみようぜ!」

Program.cs(一部)
        static void Main(string[] args)
        {
            List<Precure> precureList = LoadPrecure();
            var firstGroup = precureList.GroupBy(P => P.First).OrderByDescending(P => P.Count());
            Console.WriteLine("開始文字\tプリキュア数\t該当プリキュア");
            foreach (var first in firstGroup)
            {
                Console.Write($"{first.Key}\t{first.Count()}\t");
                Console.WriteLine(string.Join(", ", first.Select(P => P.PrecureName)));
            }
            Console.WriteLine();
            var lastGroup = precureList.GroupBy(P => P.Last).OrderByDescending(P => P.Count());
            Console.WriteLine("終了文字\tプリキュア数\t該当プリキュア");
            foreach (var last in lastGroup)
            {
                Console.Write($"{last.Key}\t{last.Count()}\t");
                Console.WriteLine(string.Join(", ", last.Select(P => P.PrecureName)));
            }
            Console.ReadLine();
        }

最初の文字

開始文字 プリキュア数 該当プリキュア
11 キュアブラック, キュアブルーム, キュアブライト, キュアブロッサム, キュアプリンセス, キュアフォーチュン, キュアフローラ, キュアフェリーチェ, キュアフォンテーヌ, キュアフラミンゴ, キュアプレシャス
7 キュアパイン, キュアパッション, キュアハッピー, キュアハート, キュアハニー, キュアパルフェ, キュアパパイア
6 キュアマリン, キュアマーチ, キュアマーメイド, キュアマジカル, キュアマカロン, キュアマシェリ
5 キュアミント, ミルキィローズ, キュアミューズ, キュアミラクル, キュアミルキー
4 キュアアクア, キュアアンジュ, キュアアムール, キュアアース
4 キュアピーチ, キュアビート, キュアピース, キュアビューティ
4 キュアエース, キュアエール, キュアエトワール, キュアエコー
4 キュアスカーレット, キュアスター, キュアスパークル, キュアスパイシー
3 シャイニールミナス, キュアジェラート, キュアショコラ
3 キュアサンシャイン, キュアサニー, キュアサマー
2 キュアホワイト, キュアホイップ
2 キュアドリーム, キュアトゥインクル
2 キュアソード, キュアソレイユ
2 キュアラブリー, キュアラメール
2 キュアコスモ, キュアコーラル
1 キュアイーグレット
1 キュアウィンディ
1 キュアルージュ
1 キュアレモネード
1 キュアベリー
1 キュアムーンライト
1 キュアメロディ
1 キュアリズム
1 キュアダイヤモンド
1 キュアロゼッタ
1 キュアカスタード
1 キュアセレーネ
1 キュアグレース
1 キュアヤムヤム

最後の文字

終了文字 プリキュア数 該当プリキュア
14 キュアホワイト, キュアイーグレット, キュアブライト, キュアレモネード, キュアミント, キュアムーンライト, キュアビート, キュアハート, キュアダイヤモンド, キュアソード, キュアマーメイド, キュアスカーレット, キュアカスタード, キュアジェラート
9 シャイニールミナス, ミルキィローズ, キュアミューズ, キュアピース, キュアエース, キュアプリンセス, キュアグレース, キュアアース, キュアプレシャス
9 キュアトゥインクル, キュアミラクル, キュアマジカル, キュアエール, キュアエトワール, キュアアムール, キュアスパークル, キュアコーラル, キュアラメール
6 キュアパイン, キュアパッション, キュアマリン, キュアサンシャイン, キュアフォーチュン, キュアマカロン
5 キュアブルーム, キュアドリーム, キュアブロッサム, キュアリズム, キュアヤムヤム
3 キュアウィンディ, キュアメロディ, キュアビューティ
3 キュアルージュ, キュアアンジュ, キュアソレイユ
3 キュアベリー, キュアラブリー, キュアマシェリ
2 キュアアクア, キュアパパイア
2 キュアピーチ, キュアマーチ
2 キュアサニー, キュアハニー
2 キュアロゼッタ, キュアスター
2 キュアフローラ, キュアショコラ
2 キュアフェリーチェ, キュアパルフェ
2 キュアフラミンゴ, キュアエコー
1 キュアブラック
1 キュアハッピー
1 キュアホイップ
1 キュアミルキー
1 キュアセレーネ
1 キュアコスモ
1 キュアフォンテーヌ
1 キュアサマー
1 キュアスパイシー

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2