扑克有如何安排筹码的礼节,通常是在锦标赛中执行的-筹码可能不会因为落后于对手而被对手“隐藏”起来,主要是为了不隐藏某些大面额筹码。
挑战
我们将要使用ASCII玩扑克,因此我们需要编写一个函数或程序,给定其总值,该函数或程序将绘制ASCII芯片堆栈的排列n
。
输入
-一个正整数,n
(最多2**32-1
应处理)
输出
-堆栈定义的ASCII表示,如下所示。
它可能在每行的右边包含空格,以使任何行都不能比最长(底部)行中可打印字符所使用的长度多一个字符。
它可能包含一条尾随的换行符;而
代表芯片的字符可以是小写,如果你喜欢。
堆栈安排将:
- 给定面额,包含尽可能少的筹码(请参见下文);
- 在“堆栈”(列)中将具有同等价值的筹码;
- 订购时,较短的烟囱在较高的烟囱的右边;和
- 进行订购,以使面额较大的筹码堆叠在等量的面额较低的堆叠筹码右边(表示它们对我们右边的对手是可见的)
芯片本身应以单独的字符表示,以标识其颜色:
White : 1 = W
Red : 5 = R
Green : 25 = G
Black : 100 = B
Yellow : 500 = Y
Pink : 1K = P
Orange : 5K = O
Cyan : 25K = C
Magenta : 100K = M
Aqua-blue : 500K = A
Lavender : 1M = L
Indigo : 5M = I
Turquoise : 25M = T
Violet : 100M = V
Silver : 500M = S
例
对于n = 276,352
最小数量的芯片将是:
2 * 100K + 3 * 25K + 1 * 1K + 3 * 100 + 2 * 25 + 2 * 1
MM CCC P BBB GG WW
单身P
必须在最右边,
然后是三叠大小2
,
-但MM
必须在最右边,然后是GG
,然后是WW
,100K > 25 > 1
然后两叠大小3
在左边,
-但CCC
必须BBB
从此转到右边25K > 100
现在,我们必须将这些芯片放入实际的堆栈中,以输出:
BC
BCWGM
BCWGMP
测试用例
Input:
1
Output:
W
Input:
9378278
Output:
L
LWGPCM
LWGPCMB
LWGPCMBI
Input:
22222222
Output:
ROI
ROI
ROIWBPML
ROIWBPML
Input:
1342185143
Output:
WRCIV
WRCIVOLS
WRCIVOLSGBMT
Input:
2147483647
Output:
RMIS
RMISPC
RMISPCWL
RMISPCWLGBYOTV
Input:
4294967295
Output:
S
S
S
S
SRML
SRMLGOIT
SRMLGOITBPCV
SRMLGOITBPCVA
这是代码高尔夫球,因此以字节为单位的最短代码获胜。没有漏洞,yada yada,你知道的。
2**31-1
,还是要比大多数带符号的int
类型大?
2**32-1
是一个测试用例,但我愿意降低它。(有趣的事实:PokerStars 25B
的图片文件夹中有一个筹码。)