根据字节数编写最短的代码,生成一个由菱形组成的ASCII网格,给定以下参数:
1. Input: 5 3 1 0
Output:
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
A 5x3 grid of rhombi with side 1, no nesting
2. Input: 3 2 2 0
Output:
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
A 3x2 grid of rhombi with side 2, no nesting
3. Input: 5 2 1 2
Output:
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
A 5x2 grid of rhombi with side 1 (the smallest rhombus), level of nesting is 2
4. Input: 4 2 2 1
Output:
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
A 4x2 grid of rhombi with side 2 with level of nesting 1
5. Input: 4 2 3 3
Output:
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
A 4x2 grid of rhombi with side 3, level of nesting 3确保在必要时在边缘和角处显示部分可见的菱形。
发布于 2017-10-31 17:43:58
ā.I∫e+H╚╬8}:±№╬8╬¡∙*在这里试试!以相反的顺序输入它们的例子- r,s,n,m。
解释:
ā push an empty array - canvas
.I∫ } for each in range(input) (1-indexed)
e+ add the second input
H decrement
╚ create a diagonal of that size
╬8 insert into the canvas
: create a duplicate of the canvas
±№ reverse it vertically and horizotally
╬8 insert that into the canvas
έ quad-palindromize
∙ multiply vertically by the next input
* multiply horizontally by the next input发布于 2017-10-31 19:23:19
g(n,m,s,r)=(s+=r+1;f(i,j,u=mod(i-j+r,2s),v=mod(j+i+r,2s))=(" \\/")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)];
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end)这是一个函数解决方案,它计算每个索引对i,j应该显示什么符号。
从网格开始
f(i,j,u=mod(i,2s),v=mod(j,2s))=(" -|*")[1+(u==0)+2(v==0)]
for i=1:2(s-1)m println((f(i-1,j)for j=1:2(s-1)n)...)end
---------*---------*----
| |
| |
| |
| |
| |
| |
| |
| |
| |
---------*---------*----
| |
| |
| |
| |
| | r > 0的意思是较厚的线条
f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|*")[1+(u<=2r)+2(v<=2r)]
for i=1:2(s-1)m println((f(i,j)for j=1:2(s-1)n)...)end
**-----*****-----*****--
**-----*****-----*****--
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
**-----*****-----*****--
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| ||||| 通过检查原始网格上的哪一行是最近的,来处理角。
f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i,j)for j=1:2(s-1)n)...)end
|-------|||-------|||---
||-----|||||-----|||||--
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
||-----|||||-----|||||--
|-------|||-------|||---
---------|---------|----
|-------|||-------|||---
||-----|||||-----|||||--
|| ||||| |||||
|| ||||| |||||
|| ||||| |||||
|| ||||| ||||| 仙女告诉我们删除每一行s-1
f(i,j,u=mod(i+r,2s),v=mod(j+r,2s))=(" -|")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end
---||------||------||---
--||||----||||----||||--
|||| |||| ||||
|||| |||| ||||
|||| |||| ||||
|||| |||| ||||
--||||----||||----||||--
---||------||------||---
---||------||------||---
--||||----||||----||||--
|||| |||| ||||
|||| |||| ||||
|||| |||| ||||
|||| |||| ||||
--||||----||||----||||--
---||------||------||---横穿对角线
f(i,j,u=mod(i-j+r,2s),v=mod(j+i+r,2s))=(" \\/")[abs(u-r)<abs(v-r)?1+(u<=2r):1+2(v<=2r)]
for i=1:2(s-1)m println((f(i+(i-1)÷(s-1),s+j+(j-1)÷(s-1))for j=1:2(s-1)n)...)end
///\\\ ///\\\ ///\\\
////\\\\////\\\\////\\\\
////\\\\////\\\\////\\\\
/// \\\/// \\\/// \\\
\\\ ///\\\ ///\\\ ///
\\\\////\\\\////\\\\////
\\\\////\\\\////\\\\////
\\\/// \\\/// \\\///
///\\\ ///\\\ ///\\\
////\\\\////\\\\////\\\\
////\\\\////\\\\////\\\\
/// \\\/// \\\/// \\\
\\\ ///\\\ ///\\\ ///
\\\\////\\\\////\\\\////
\\\\////\\\\////\\\\////
\\\/// \\\/// \\\/// 发布于 2017-11-01 11:12:30
f=
(m,n,s,r)=>[...Array((s+=r)*n*2)].map((_,i)=>[...Array(s*m*2)].map((_,j)=>i/s&1^j/s&1?`\\ `[g(j%s)]:`/ `[g(s-1-j%s)],g=j=>i%s-j>r|j-i%s>r).join``).join`
`<div oninput=o.textContent=f(+m.value,+n.value,+s.value,+r.value)>
m: <input type=number min=0 id=m><br>
n: <input type=number min=0 id=n><br>
s: <input type=number min=0 id=s><br>
r: <input type=number min=0 id=r></div>
<pre id=o>直接计算输出的每个单元格上的字符。
https://codegolf.stackexchange.com/questions/146747
复制相似问题