#P9951. 多层血条

多层血条

多层血条

Problem Description

在本题中你将帮助比特公司的新游戏《超维攻坚》实现BOSS战的多层血条功能。血条由 nnmm 列个像素构成,外围还有一圈 11 像素厚的边框,样式请参照样例。 假设BOSS有 kk 条血,则血条由 k+1k+1 个图层自底向上叠加而成。底层是 nnmm 列个空格,上面的 kk 层自底向上依次表示第 1,2,,k1,2,\dots,k 条血。每条血都有 nn 行,每一列代表 11 点生命值,因此一共有 k=hpmk=\lceil\frac{hp}{m}\rceil 条血。每条血都由单一字符构成,自底向上由字符 'A\texttt{A}' 到 'E\texttt{E}' 循环表示,例如:第一条血为 'A\texttt{A}',第二条血为 'B\texttt{B}',第五条血为 'E\texttt{E}',第六条血为 'A\texttt{A}'。 除此之外,为了加强击打反馈,假设BOSS有 hphp 点生命值,玩家当前的攻击对BOSS造成了 dmgdmg 点伤害,那么第 hpdmg+1hp-dmg+1 至第 hphp 点生命值代表的像素将被替换成字符 '.\texttt{.}'。 给定 n,m,hp,dmgn,m,hp,dmg,请绘制出对应的多层血条。

Input

第一行包含一个正整数 TT (1T501\leq T\leq 50),表示测试数据的组数。 每组数据包含一行四个整数 n,m,hp,dmgn,m,hp,dmg (1n501\leq n\leq 50, 5m8005\leq m\leq 800, 1hp1091\leq hp\leq 10^9, 0dmg<hp0\leq dmg < hp ),分别表示血条的尺寸、BOSS的生命值以及当前受到的伤害。

Output

对于每组数据输出 n+2n+2 行,每列 m+2m+2 个字符,即对应的多层血条。

Sample Input

5
2 5 4 2
1 10 49 1
1 10 52 0
1 10 52 5
1 10 52 50

Sample Output

+-----+
|AA.. |
|AA.. |
+-----+
+----------+
|EEEEEEEE.D|
+----------+
+----------+
|AAEEEEEEEE|
+----------+
+----------+
|..EEEEE...|
+----------+
+----------+
|..........|
+----------+

Source

2024“钉耙编程”中国大学生算法设计超级联赛(4)