大多数人都熟悉数羊入睡的技巧。有一群羊,有的跳过篱笆,一边跳,一边数羊。据推测,这有助于让你的头脑平静下来,让你进入睡眠状态,这样你就会睡着。
这是一只面向右边的ASCII绵羊,等待计数:
'00^>
||这是一只跳过栅栏的ASCII羊:
'00^>
/\
++这里有一个面向左边,已经被计算过了:
<^00'
||挑战
给出两个输入整数,n和m,n > 2描述总共多少羊,m > 0表示已经计算了多少羊,输出了ASCII关于数羊入睡的艺术表示。
现在是
10羊,不包括当前跳羊,它也必须总是在顶部行。11或更多的全羊,则顶部行必须有10加上跳羊。只要符合这些规则,绵羊的实际安排就取决于你的执行情况。
例如,这里是n=3和m=1,这是最简单的例子。
'00^>
'00^> /\ <^00'
|| ++ ||这里是n=11和m=6,最适合一条水平线的羊。
'00^>
'00^> '00^> '00^> '00^> /\ <^00' <^00' <^00' <^00' <^00' <^00'
|| || || || ++ || || || || || ||下面是一个与n=11和m=1不同的例子
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00'
|| || || || || || || || || ++ || n=30和m=12的一个更大的例子
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> <^00' <^00'
|| || || || || || || || || ||
'00^> <^00' <^00'
|| || ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
<^00' <^00'
|| || 下面是一个关于n=17和m=2的例子
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || 下面是一个关于n=19和m=3的例子
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00' <^00'
|| || || || || || || ++ || || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || ||
'00^>
|| 请注意,所有这些都是示例。对于最后一个,您可能会在右边创建一个垂直的绵羊数组,这将允许左手侧适应两行。或者在右边有2x2平方的羊,这也可以把左边的羊放进两排。等。
发布于 2018-02-28 17:56:02
感谢@Jonathan保存了一个字节!
#define F;for(
x,y,k;p(L,a,b,t)char L[][78];{F k=5;k--;)L[x=a*4+(t<2)][y=b*6+k]=t?"'00^>"[k]:"<^00'"[k];L[++x][y-=~!t]=47;L[x][++y]=92;L[x][--y]=L[x+=(t>1)][y]=t<2?'|':43;}i,l;f(n,m){char L[i=n*4][78]F;i--;){F L[i][l=77]=0;l--;)L[i][l]=32;}F l=n+~m;++i<l&&i<9+!m;)p(L,0,i,1);l-=i;p(L,0,i++,2)F;i<11&&m--;)p(L,0,i++,0)F i=0;l--;)p(L,++i,0,1)F i=1;m-->0;)p(L,i++,10,0)F l=0;l<i*4;)puts(L+l++);}#define F;for(
x, y, k;
p(L, a, b, t) char L[][78];
{
F k=5; k--;)
L[x=a*4+(t<2)][y=b*6+k] = t ? "'00^>"[k] : "<^00'"[k];
L[++x][y-=~!t] = 47;
L[x][++y] = 92;
L[x][--y] = L[x+=(t>1)][y] = t<2 ? '|' : 43;
}
i, l;
f(n, m)
{
char L[i=n*4][78]
F; i--;)
{
F L[i][l=77]=0; l--;)
L[i][l] = 32;
}
F l=n+~m; ++i<l&&i<9+!m;)
p(L,0,i,1);
l-=i;
p(L,0,i++,2)
F; i<11&&m--;)
p(L,0,i++,0)
F i=0; l--;)
p(L,++i,0,1)
F i=1; m-->0;)
p(L,i++,10,0)
F l=0; l<i*4;)
puts(L+l++);
}发布于 2018-03-02 14:33:02
Nθ≔⁻⊖NθηF⟦⟦00¶/\¶++ θ⌊⟦⌈⟦⁵⁻χη⟧θ⟧⟧⟦0^>¶\¶+ η⌊⟦⌈⟦⁵⁻χθ⟧η⟧⟧⟧«J⁰¦⁰‖T§ι⁰↗F§ι¹«<^00'¶ || ↗¿¬﹪⊕κ§ι²”|I4O在网上试试!链接是详细的代码版本。解释:
Nθ输入已被计数的羊数。
≔⁻⊖Nθη输入羊的总数,并计算出还需要计算多少羊。
F⟦⟦00¶/\¶++ θ⌊⟦⌈⟦⁵⁻χη⟧θ⟧⟧⟦0^>¶\¶+ η⌊⟦⌈⟦⁵⁻χθ⟧η⟧⟧⟧«创建由两个数组组成的数组。每个数组都有以下元素:
J⁰¦⁰‖T§ι⁰↗反射画布,印出半跳羊。
F§ι¹«穿过那边的羊。
<^00'¶ || ↗印一只羊。
¿¬﹪⊕κ§ι²”|I4O如果这是行的末尾,那么打印一些新行和空格,以到达下一个绵羊的开始。
https://codegolf.stackexchange.com/questions/156873
复制相似问题