该问题基于数字放置拼图塔(也称为摩天大楼),您可以在网上玩。您的目标是解决难题并确定线索-沿每一行和每一列可见的塔数。这是代码高尔夫,所以最少的字节获胜。
塔如何运作
塔难题的解决方案是一个拉丁方-一个n*n
网格,每一行和每一列都包含1
贯穿的数字排列n
。以下n=5
是一个示例:
4 3 5 2 1
5 4 1 3 2
1 5 2 4 3
2 1 3 5 4
3 2 4 1 5
每行和每一列的两端都标有线索,例如:
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
每个线索都是从1
到的数字n
,告诉您从该方向沿着行/列看时“看到”的塔数,如果这些数字被视为具有该高度的塔。每个塔都在其后挡住了较短的塔。换句话说,您可以看到的塔楼比之前的任何塔楼都要高。
例如,让我们看第一行。
2 > 4 3 5 2 1 < 3
它具有2
从左开始的线索,因为您可以看到4
和5
。该4
块3
从视线和5
块一切。从右边,你可以看到3
塔:1
,2
,和5
。
计划要求
编写一个程序或函数,该程序或函数接受数字的网格并从左上角开始按顺时针方向输出或打印提示。
输入值
带的n*n
拉丁方2<=n<=9
。
格式灵活。您可以使用任何表示包含数字或数字字符的网格或列表的数据结构。您可能需要在行之间使用分隔符,或者根本不需要分隔符。一些可能性是列表,列表列表,矩阵,令牌分隔的字符串,例如
43521 54132 15243 21354 32415,
或没有空格的字符串。
您没有n
作为输入的一部分。
输出量
从左上角开始按顺时针方向返回或打印线索。因此,首先是上部提示向右阅读,然后是右提示向下阅读,然后是下部提示向左阅读,而左侧提示则向上阅读。
这将是23145 34321 12222 33212
前面的示例
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
就像输入一样,您可以使用列表,字符串或任何有序结构。四个“组”可以嵌套或平面结构分开或不分开。但是,每个组的格式必须相同。
测试用例示例:
(您的输入/输出格式不必与此相同。)
>> [[1 2] [2 1]]
[2 1]
[1 2]
[2 1]
[1 2]
>> [[3 1 2] [2 3 1] [1 2 3]]
[1 2 2]
[2 2 1]
[1 2 3]
[3 2 1]
>> [[4 3 5 2 1] [5 4 1 3 2] [1 5 2 4 3] [2 1 3 5 4] [3 2 4 1 5]]
[2 3 1 4 5]
[3 4 3 2 1]
[1 2 2 2 2]
[3 3 2 1 2]
>> [[2 6 4 1 3 7 5 8 9] [7 2 9 6 8 3 1 4 5] [5 9 7 4 6 1 8 2 3] [6 1 8 5 7 2 9 3 4] [1 5 3 9 2 6 4 7 8] [3 7 5 2 4 8 6 9 1] [8 3 1 7 9 4 2 5 6] [9 4 2 8 1 5 3 6 7] [4 8 6 3 5 9 7 1 2]]
[4 2 2 3 3 3 3 2 1]
[1 3 3 2 2 2 2 3 3]
[4 3 2 1 2 3 3 2 2]
[3 1 2 4 3 3 2 2 5]
为方便起见,以下是相同的测试用例,采用扁平字符串格式。
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)