信用
我感谢Rand Al'Thor提出的基于字母的问题,感谢他提出了此代码高尔夫挑战赛的灵感。
背景
挑战的本质基于兰德在他的“由三个字母组成的三角形”中提到的算法:
- 以10个字母开头,每个字母分别是X,Y或Z。
- 在每一行的下面,构造下一行,如下所示。如果两个相邻的字母相同,请在它们下面写下相同的字母;如果它们不同,则在它们下面写下第三个字母。
然后,您将重复上一步,直到第十行中有一个字母为止。
挑战
我们将对上述算法进行数学上的旋转:
- 让我们从一个10位数字的序列开始,每个数字用空格隔开,每个数字分别为1、2或3。
- 在每一行的下面,构造下一行,如下所示。如果两个相邻的数字相同,请在它们下面写下相同的数字;如果它们不同,则在它们下面写下第三位数字。
- 重复上一步,直到获得一个最终编号。
因此,遵循此算法,1 2 3 3 1 3 1 3 1 2
例如,如果从row开始,则会生成以下三角形:
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
我也很好奇知道三角形中所有数字的总和,因此将所有这些数字相加,然后将总数放在第11行中,右对齐到第一行的最后一位。因此,我们的数字三角形将类似于以下内容(示例中的空格在下面用.
字符表示,以显示格式)。
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
您的挑战是编写可以以输入的字符串/数组/等开头的代码。按照我的示例,选择十位数字,然后应用该算法生成将创建数字三角形的十行,然后是第11行,该行将显示所有带有右对齐的数字的总数。
测试中
可以使用您选择的十位数的随机生成的字符串或从下面的代码片段生成的字符串来执行此字符串的测试...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
规则
- 应用代码高尔夫球规则,因此最少的字节数将赢得挑战。如果有两项得分相同且得分较低,则优胜者将根据投票数获得奖励。
- 我们基本上需要的是11行,19个字符的长度...渲染最终输出的方式完全取决于您:数组,控制台,文件输出,STDOUT等,因此请使用您喜欢的任何输出方法发挥您的优势。输出中的唯一规则是我们有11行,每行19个字符,格式与上面类似。
- 如果对您的代码有帮助,请为数字使用任何分隔符...请记住,易读性可能是一个因素。
- 没有愚蠢的漏洞。
- 不允许对输入进行硬编码。该代码的目的是使每次输入变化时都可用于产生不同的结果。
1 1 1 1 1 1 1 1 1 1
例如,硬编码完全否定了算法的全部要点。
期待看到大家都可以提出!