AtCoder が提供しているABC(AtCoder Beginner Contest)294 のB問題をC++とPythonで解いてみました。ABC294は、2023年3月19日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 ASCII Art(Difficulty : 25)
問題はリンク先をご覧ください。
与えられた行列の数字を文字に置き換える問題です。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 の問題を紹介していきます。