解決:「恋するハッカソン」の「「制服」ゲットチャレンジ!」がクリアできない
今日の午前中に投稿した
「「恋するハッカソン」の「「制服」ゲットチャレンジ!」がクリアできない」
の続き。
テストは通った。原因は分からずじまい。
とりあえず、
最初に配られるカードを
五枚にした単純なケースのコードを思い付きで書いてみて、
ひたすらシンプルに問題を見ようとした。
この試みは成功して無事にテストを通過できた。よかった。
また、後程、追記などで原因を特定したら書き込んでおこうと思う。
とりあえず、
五枚にした単純なケースのコードと、
テストを通過した本番コードをここに置いておく。
uniform_test.cs
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] inputCardOrder = new string[5] { "5", "3", "1", "2", "4" };
foreach (var inp in inputCardOrder)
{
Console.Write(inp);
}
Console.WriteLine();
//-I/Oとして用いる二つのリストを作る
List<int> cardOrder = new List<int>(5);
foreach (string ic in inputCardOrder)
{
cardOrder.Add(int.Parse(ic));
}
List<int> playerRanking = cardOrder.ToList();
//-プレイヤーの順位を計算する
int fieldCard = -1;
int fieldCardOwner = new int();
int playerRank = 1;
for (int i = 0; i < 5; i++)
{
//--1.通常の勝利判定
if (fieldCard < cardOrder[i])
{
fieldCard = cardOrder[i];
fieldCardOwner = i;
cardOrder[i] = -1;
playerRanking[i] = playerRank;
playerRank++;
}
//--2.一周回ってしまった場合
else if (fieldCardOwner == i)
{
fieldCard = -1;//次のカードが確実に場に出されるようにする
}
else { }
if (i == 4) { i = -1; }
else { }
if (playerRank == 6) break;
else { }
}
foreach (int pr in playerRanking)
{
Console.WriteLine(pr);
}
Console.ReadLine();
}
}
uniform.cs
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static void Main()
{
string[] inputCardOrder = Console.ReadLine().Split(' ');//最初に入力されるカードの並び順
List<int> cardOrder = new List<int>(52);//残りカードリスト
//-最初に入力されたカードの並び順でカードリストを作るついでに、J,Q,K,A,2のカードの強さを正しい整数値に変換しながら、カードリスト化する 3<4<5...<10<J<Q<K<A<2
foreach (string ic in inputCardOrder)
{
if (ic == "A") { cardOrder.Add(14); }
else if (ic == "2") { cardOrder.Add(15); }
else if (ic == "J") { cardOrder.Add(11); }
else if (ic == "Q") { cardOrder.Add(12); }
else if (ic == "K") { cardOrder.Add(13); }
else
{
cardOrder.Add(int.Parse(ic));
}
}
List<int> playerRanking = cardOrder.ToList();
//-プレイヤーの順位を計算する
int fieldCard = -1;//場に出ているカード(-1で初期化しているのは最初のプレイヤーのカードが必ず勝利判定を通過させるために)
int fieldCardOwner = -1;
int countOfPlayerRank = 1;
for (int i = 0; i < 52; i++)
{
int currentPlayerCard = cardOrder[i];
if (fieldCard < currentPlayerCard)//--1.場に出ているカードに現在のプレイヤーの持ちカードが勝利する場合
{
fieldCard = currentPlayerCard;
fieldCardOwner = i;
playerRanking[i] = countOfPlayerRank;
countOfPlayerRank++;
cardOrder[i] = -1;
}
else if (fieldCardOwner == i)//--2.フィールドに出されたカードのオーナーの手番が一周回ってきてしまったとき
{
fieldCard = -1;
}
else { }
if (countOfPlayerRank == 53) { break; }//52位まで決まったらメインループを抜け出す
else { }
if (i==51) { i = -1; }
else { }
}
//-回答を出力する
foreach (var rank in playerRanking)
{
Console.WriteLine(rank);
}
Console.ReadLine();
}
}
問題を単純化することの大切さを改めて知った気がする。
Author And Source
この問題について(解決:「恋するハッカソン」の「「制服」ゲットチャレンジ!」がクリアできない), 我々は、より多くの情報をここで見つけました https://qiita.com/cp3/items/d2ec3cb267110fa3db38著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .