Locked. This question and its answers are
locked,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
挑战
按字符数计算的最短代码,将使用
Ghost Leg方法输出给定数字和有效字符串模式的数字解。
例子
输入:3,
“| | | | | | | | |
|-| | = | | | | |
|-| | |-| | = | |
| |-| |-| | |-|”
输出2
输入:2
“| | | = | |
|-| |-| |
| |-| | |”
输出1
澄清说明
不要打扰输入。考虑其他地方给出的值。 这两个输入值均有效:列号对应于现有列,并且模式仅包含符号|
,-
,=
(以及[space],[LF])。同样,两个相邻的列不能都包含破折号(在同一行中)。 模式的尺寸未知(最小1x1)。 澄清#2
有两种无效的模式:|-|-|
和|=|=|
会造成歧义。给定的输入字符串将永远不会包含这些字符串。 所有的输入变量都相同。一个数值和一个代表模式的字符串。 参赛者必须产生一个函数。 测试用例
给定模式:
“|-| | = |-| = | LF | |-| | |-| LF | = | |-| | | LF | | |-| = |-|”
|-| | = |-| = |
| |-| | |-|
| = | |-| | |
| | |-| = |-|
给定值:预期结果
1:6
2:1
3:3
4:5
5:4
6:2
编辑:更正了预期结果
JavaScript:169158148141127125123122字符
(缩小和打高尔夫球):
function g(n,s){for(l=s.split('\n'),n*=2;k=l.shift();)for(j=3;j;)n+=k[n-3]==(c=--j-1?'=':'-')?-2:k[n-1]==c?2:0;return n/2}
可读版本:function g(n, str) {
var c, i, j;
var lines = str.split('\n');
n = (n * 2) - 2;
for (i = 0; i < lines.length; i++) {
for (j = 0; j < 3; j++) {
c = (j == 1) ? '-' : '=';
if (lines[i].charAt(n-1) == c) n-=2; // Move left
else if (lines[i].charAt(n+1) == c) n+=2; // Move right
}
}
return 1+n/2;
}
说明: str
分为几行。 n
缩放以覆盖每行中从0开始的字符数。在每行上迭代3次:每层一次。想象一下,将每一行分为3层:顶层和底层是=
符号的腿所在的位置。中间层是-
标志的腿。 根据相邻符号左右移动n
。每行的每一层只有一个可能的移动。因此,n
最多可在一行中移动3次。 返回n
,将其标准化为从1到垂直线的数量。 测试用例:var ghostLegs = [];
ghostLegs[0] = "|-| |=|-|=|\n" +
"| |-| | |-|\n" +
"|=| |-| | |\n" +
"| | |-|=|-|";
ghostLegs[1] = "| | | | | | | |\n" +
"|-| |=| | | | |\n" +
"|-| | |-| |=| |\n" +
"| |-| |-| | |-|";
ghostLegs[2] = "| | |=| |\n" +
"|-| |-| |\n" +
"| |-| | |";
ghostLegs[3] = "|=|-|";
for (var m = 0; m < ghostLegs.length; m++) {
console.log('\nTest: ' + (m + 1) + '\n');
for (var n = 1; n <= (ghostLegs[m].split('\n')[0].length / 2) + 1; n++) {
console.log(n + ':' + g(n, ghostLegs[m]));
}
}
结果:Test: 1
1:6
2:1
3:3
4:5
5:4
6:2
Test: 2
1:1
2:3
3:2
4:4
5:5
6:6
7:8
8:7
Test: 3
1:3
2:1
3:4
4:2
5:5
Test: 4
1:3
2:2
3:1