Rust 공부하기 위해 Rust에서 짤 문제를 먼저 C#으로 짜봤습니다.
문제
숫자를 입력받아 '#'으로 이루어진 숫자로 출력하시오
결과
소스코드
using static System.Console;
// 문제) 숫자를 입력받아서 '#'으로 이루어진 숫자로 출력하시오.
// 예시) ? 312
// ### # ###
// # # #
// ### # ###
// # # #
// ### # ###
//
// 풀이 전략:
// - 숫자는 너비 3, 높이 5로 한다.
// - 배열로 숫자를 표현한다. 숫자 값이 배열 인덱스가 되도록 한다.
var nums = new[,]
{
// 0
{ 0b111, 0b101, 0b101, 0b101, 0b111 },
// 1
{ 0b010, 0b010, 0b010, 0b010, 0b010 },
// 2
{ 0b111, 0b001, 0b111, 0b100, 0b111 },
// 3
{ 0b111, 0b001, 0b111, 0b001, 0b111 },
// 4
{ 0b101, 0b101, 0b111, 0b001, 0b001 },
// 5
{ 0b111, 0b100, 0b111, 0b001, 0b111 },
// 6
{ 0b100, 0b100, 0b111, 0b101, 0b111 },
// 7
{ 0b111, 0b001, 0b001, 0b001, 0b001 },
// 8
{ 0b111, 0b101, 0b111, 0b101, 0b111 },
// 9
{ 0b111, 0b101, 0b111, 0b001, 0b001 }
};
var lines = nums.GetUpperBound(1) + 1;
while (true)
{
Write("? ");
var strNum = ReadLine().Trim();
var result = int.TryParse(strNum, out var _);
if (result == false)
continue;
for (var y = 0; y < lines; y++)
{
foreach (var c in strNum)
{
var num = c - '0';
Write(GetLine(nums[num, y]));
Write(GetMargin());
}
WriteLine();
}
}
string GetLine(int v) => v switch
{
0b000 => " ",
0b001 => " #",
0b010 => " # ",
0b011 => " ##",
0b100 => "# ",
0b101 => "# #",
0b110 => "## ",
0b111 => "###",
_ => " ",
};
string GetMargin() => " ";
좀 더 효율적인 코드 댓글로 달아주세요!