mirror of
https://github.com/farcasclaudiu/advent_of_code_2022.git
synced 2026-06-28 21:01:17 +03:00
init current
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
namespace day02;
|
||||
|
||||
public static class Game
|
||||
{
|
||||
public static GameSymbols GetOpMoveSymbol(this string opMoveLetter)
|
||||
{
|
||||
return opMoveLetter switch
|
||||
{
|
||||
"A" => GameSymbols.Rock,
|
||||
"B" => GameSymbols.Paper,
|
||||
"C" => GameSymbols.Scissor,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(opMoveLetter), $"Not expected opMoveLetter value: {opMoveLetter}")
|
||||
};
|
||||
}
|
||||
|
||||
public static GameSymbols GetMyMoveSymbol(this string myMoveLetter)
|
||||
{
|
||||
return myMoveLetter switch
|
||||
{
|
||||
"X" => GameSymbols.Rock,
|
||||
"Y" => GameSymbols.Paper,
|
||||
"Z" => GameSymbols.Scissor,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(myMoveLetter), $"Not expected myMoveLetter value: {myMoveLetter}")
|
||||
};
|
||||
}
|
||||
|
||||
public static GameScore GetGameScore(this string gameScoreLetter)
|
||||
{
|
||||
//X means you need to lose, Y means you need to end the round in a draw, and Z means you need to win.
|
||||
return gameScoreLetter switch
|
||||
{
|
||||
"X" => GameScore.Loss,
|
||||
"Y" => GameScore.Draw,
|
||||
"Z" => GameScore.Win,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(gameScoreLetter), $"Not expected gameScoreLetter value: {gameScoreLetter}")
|
||||
};
|
||||
}
|
||||
|
||||
public static GameScore GetMatchScore(this GameSymbols myMove, GameSymbols opMove)
|
||||
{
|
||||
if (myMove == opMove)
|
||||
{
|
||||
return GameScore.Draw;
|
||||
}
|
||||
if ((myMove == GameSymbols.Rock && opMove == GameSymbols.Scissor) ||
|
||||
(myMove == GameSymbols.Paper && opMove == GameSymbols.Rock) ||
|
||||
(myMove == GameSymbols.Scissor && opMove == GameSymbols.Paper))
|
||||
{
|
||||
return GameScore.Win;
|
||||
}
|
||||
return GameScore.Loss;
|
||||
}
|
||||
|
||||
public static GameSymbols ComputeMyMove(this GameScore gameScore, GameSymbols opMove)
|
||||
{
|
||||
return gameScore switch
|
||||
{
|
||||
GameScore.Win => opMove.GetWinSymbol(),
|
||||
GameScore.Draw => opMove,
|
||||
GameScore.Loss => opMove.GetLossSymbol(),
|
||||
};
|
||||
}
|
||||
|
||||
public static GameSymbols GetWinSymbol(this GameSymbols opMove)
|
||||
{
|
||||
return opMove switch
|
||||
{
|
||||
GameSymbols.Rock => GameSymbols.Paper,
|
||||
GameSymbols.Scissor => GameSymbols.Rock,
|
||||
GameSymbols.Paper => GameSymbols.Scissor
|
||||
};
|
||||
}
|
||||
public static GameSymbols GetLossSymbol(this GameSymbols opMove)
|
||||
{
|
||||
return opMove switch
|
||||
{
|
||||
GameSymbols.Rock => GameSymbols.Scissor,
|
||||
GameSymbols.Scissor => GameSymbols.Paper,
|
||||
GameSymbols.Paper => GameSymbols.Rock
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace day02;
|
||||
|
||||
public enum GameScore
|
||||
{
|
||||
Win,
|
||||
Loss,
|
||||
Draw
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace day02;
|
||||
|
||||
public enum GameSymbols
|
||||
{
|
||||
Rock = 1,
|
||||
Paper = 2,
|
||||
Scissor = 3
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
namespace day02;
|
||||
public class Problem
|
||||
{
|
||||
public string Result1 { get; set; }
|
||||
public string Result2 { get; set; }
|
||||
|
||||
public void ResolvePart1(string arg)
|
||||
{
|
||||
var lines = File.ReadAllLines(arg);
|
||||
|
||||
//A for Rock, B for Paper, and C for Scissors
|
||||
//X for Rock, Y for Paper, and Z for Scissors
|
||||
|
||||
int totalScore = 0;
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var opMove = line[0].ToString();
|
||||
var myMove = line[2].ToString();
|
||||
totalScore += ComputeMatch(opMove.GetOpMoveSymbol(), myMove.GetMyMoveSymbol());
|
||||
}
|
||||
// System.Console.WriteLine($"totalScore: {totalScore}");
|
||||
//13565
|
||||
|
||||
Result1 = totalScore.ToString();
|
||||
}
|
||||
|
||||
public void ResolvePart2(string arg)
|
||||
{
|
||||
var lines = File.ReadAllLines(arg);
|
||||
|
||||
//X means you need to lose, Y means you need to end the round in a draw, and Z means you need to win.
|
||||
int totalScoreStrat = 0;
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var opMoveLetter = line[0].ToString();
|
||||
var opMove = opMoveLetter.GetOpMoveSymbol();
|
||||
var matchScoreLetter = line[2].ToString();
|
||||
var matchScore = matchScoreLetter.GetGameScore();
|
||||
var myMove = matchScore.ComputeMyMove(opMove);
|
||||
totalScoreStrat += ComputeMatch(opMove, myMove);
|
||||
}
|
||||
// System.Console.WriteLine($"totalScoreStrat: {totalScoreStrat}");
|
||||
//12424
|
||||
|
||||
Result2 = totalScoreStrat.ToString();
|
||||
}
|
||||
|
||||
static int ComputeMatch(GameSymbols opMove, GameSymbols myMove)
|
||||
{
|
||||
var localScore = 0;
|
||||
switch (myMove.GetMatchScore(opMove))
|
||||
{
|
||||
case GameScore.Win:
|
||||
localScore += 6;
|
||||
break;
|
||||
case GameScore.Draw:
|
||||
localScore += 3;
|
||||
break;
|
||||
}
|
||||
localScore += (int)myMove;
|
||||
return localScore;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
namespace day02;
|
||||
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
var inputFile = "input.txt";
|
||||
var problem = new Problem();
|
||||
|
||||
problem.ResolvePart1(inputFile);
|
||||
System.Console.WriteLine($"Result1: {problem.Result1}");
|
||||
|
||||
problem.ResolvePart2(inputFile);
|
||||
System.Console.WriteLine($"Result2: {problem.Result2}");
|
||||
|
||||
// //A for Rock, B for Paper, and C for Scissors
|
||||
// //X for Rock, Y for Paper, and Z for Scissors
|
||||
|
||||
// var lines = File.ReadAllLines("input01.txt");
|
||||
// int totalScore = 0;
|
||||
// foreach (var line in lines)
|
||||
// {
|
||||
// var opMove = line[0].ToString();
|
||||
// var myMove = line[2].ToString();
|
||||
// totalScore += ComputeMatch(opMove.GetOpMoveSymbol(), myMove.GetMyMoveSymbol());
|
||||
// }
|
||||
// System.Console.WriteLine($"totalScore: {totalScore}");
|
||||
// //13565
|
||||
|
||||
// //X means you need to lose, Y means you need to end the round in a draw, and Z means you need to win.
|
||||
// int totalScoreStrat = 0;
|
||||
// foreach (var line in lines)
|
||||
// {
|
||||
// var opMoveLetter = line[0].ToString();
|
||||
// var opMove = opMoveLetter.GetOpMoveSymbol();
|
||||
// var matchScoreLetter = line[2].ToString();
|
||||
// var matchScore = matchScoreLetter.GetGameScore();
|
||||
// var myMove = matchScore.ComputeMyMove(opMove);
|
||||
// totalScoreStrat += ComputeMatch(opMove, myMove);
|
||||
// }
|
||||
// System.Console.WriteLine($"totalScoreStrat: {totalScoreStrat}");
|
||||
// //12424
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user