有一种很好的方法可以对两个整数执行长乘法,而无需做任何事情,只能计数,偶尔可以在互联网上共享。您将每个数字的数字写成一束斜线,两个数字成90度角。然后,您可以简单地计算出现的单独列中的交点。图表可能会澄清这一点。这是一个计算示例21 * 32
:
如果您用Google搜索“视觉/图形长乘”,则会发现更多示例。
在这个挑战中,您将使用ASCII艺术生成这些图。对于同一示例,输出将如下所示:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
从一些示例(参见下文)中找出这些构造规则可能是最容易的,但是这里有一些细节:
- 相交的段
X
,线的非交叉段/
或\
。 - 最外面的交点之后应该恰好有一个线段。
- 属于不同数字的交点之间应该恰好有一个线段。如果有零位数字,将导致连续
/
或\
分段。 - 您必须支持任何正输入(至少达到一些合理的限制,如2 16或2 32),以及从
0
to到的任何数字9
。但是,您可能会假设既没有前导0
s 也没有尾随s。 - 您不得打印多余的前导空白或前导或尾随的空行。
- 您可以打印尾随空格,但不得超出图表的轴对齐边界框。
- 您可以选择打印单个尾随换行符。
- 您可以选择两个输入数字的顺序。但是,它必须在任一方向上都支持任意数字,因此您不能选择“先给出较大的数字”之类的内容。
- 如果将输入作为字符串输入,则可以在两个数字之间使用任何非数字分隔符。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
这是代码高尔夫球,最短的答案(以字节为单位)获胜。
例子
1*1
\ /
X
/ \
2*61
\ /
\ X /
X X /
/ X X /
/ X X /
/ X X /
/ X X
/ X \ /
/ \ X
X \
/ \
45*1
\ /
\ X
\ X \
\ X \
\ X \
X \
\ / \
\ X
\ X \
\ X \
X \
/ \
21001*209
\ /
X /
/ X
/ / \
\ / / \ /
X / X /
\ / X / X /
\ X / \ / / X /
X X \ / / / X /
/ X \ X / / / X /
/ \ \ / X / / / X /
\ X / X / / / X /
X X / X / / / X /
/ X X / X / / / X
/ X X / X / / / \
/ X X / X / /
/ X X / X /
/ X X / X
/ X X / \
/ X X
/ X \
/ \
一个具有2个字符串参数或仅一个字符串的函数,我必须在代码中拆分它?
—
edc65
@ edc65两个字符串甚至两个整数参数都可以。
—
Martin Ender 2015年