AtCoder

ABC294 B問題(ASCII Art)を解く

AtCoder_ABC294_B

AtCoder が提供しているABC(AtCoder Beginner Contest)294 のB問題をC++とPythonで解いてみました。ABC294は、2023年3月19日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

B問題 ASCII Art(Difficulty : 25)

問題はリンク先をご覧ください。

ABC294 B問題 ASCII Art

与えられた行列の数字を文字に置き換える問題です。AtCoder Problems による Difficulty は 25 でした。

解答案

問題を以下の方針で解きます。

  • H、W と行列 Aij を読み込む。
  • 行列の成分に対して以下を行う。
    • Aij が ‘.’ ならそのまま出力する。
    • Aij が数字なら、Aij 番目のアルファベット大文字を出力する。

C++ プログラム例(ABC294B)

上で記述した方針に従います。

数字を英字大文字に変換する式は、a[i][j] + ’A’ – 1 となります。たしかに a[i][j] が 1 の場合、’A’ となります(20行目)。

以下が、C++プログラムとなります。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int h, w;
	cin >> h >> w;
	vector<vector<int>> a(h, vector(w, 0));
	for (int i = 0; i < h; ++i) {
		for (int j = 0; j < w; ++j) {
			cin >> a[i][j];
		}
	}

	for (int i = 0; i < h; ++i) {
		for (int j = 0; j < w; ++j) {
			if (a[i][j] == 0) {
				cout << ".";
			} else {
				cout << (char)(a[i][j] + 'A' - 1);
			}
		}
		cout << endl;
	}

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC294B)

Python では、1行毎に文字列を組み立てて出力します。数字と文字の変換式は、C++の場合と同じです(13行目)。

"""AtCoder Beginner Contest 294 B"""
h, w = map(int, input().split())
a = [[0 for i in range(w)] for j in range(h)]
for i in range(h):
    a[i] = list(map(int, input().split()))

for i in range(h):
    s = ""
    for j in range(w):
        if a[i][j] == 0:
            s += "."
        else:
            s += chr(a[i][j] + ord('A') - 1)
    print(s)

こちらも「AC」と判定されました。

最後に

この問題の出力例4は以下の猫となりました。問題を楽しむことができました。

................................B...........................
...................MMN...J.....OXN..........................
.................MWGYXMJ.JL....SIW....JJN...JN..............
...............IME..WKNN..LIAUS..ILJYCJF..IMWXN.............
..............MNF...JEYM..Y..........JP..MUMMNWN............
.............MHB.....MKMS..ABEILLEIITF.NNNI...NNR...........
..........JWMMMMMMNNNMNNMG............MMMB....MKMP..........
........MA...ITITTTTMTTMTWHHHTHTGHQGJMNMS.....VNYMP.........
......MI...............................TTTMMGTZMHFN.........
.....E.......ABTTWMBGBJL.......................TTWM.........
....M........A...MLINMMIITL...........AIIIIL.......T........
...B..........S..NMNNMM..IEP......ETTMBBTIMNNTLL....IM......
..AI...........MJMMMMBELJE........TP...MNMMMM..JH.....TG....
..DB............IGNJJNME...........WMLMMMMMIM.ND.......IP...
..VM.................................TMMMBINBTN.........B...
...EM...BGMMMMMMMBI....................ITTI.............S...
....TML..................UNGBTX........................IF...
......INN..TTMMTMI..J......IWMI.......JF..G..ITMMNB....E....
........TMN........MI........MK.......NI...TYNG....IANG.....
..........IMMT.....IL.......NMN.......F........IITNNDN......
..............TBI....IITUGMT..TWGGBLGF............EE........
.................TTIITXJLJ........TT.....TGGMVBEIB..........
.........................ITETEBEGTENNEKEB...................
............................................................

引き続き ABC の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA