通过仅翻转(绕中心点反转)行和列,创建一个程序以消除数字的平方。
输入项
输入将是9x9的数字网格,格式为9行字符串,如下所示:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
此输入格式不可协商-输入格式“具有创造性”的任何解决方案都将被视为无效。
输出量
输出应为翻转动作列表,当以给定顺序应用于输入时,应重新创建目标网格。
示例输出(不是先前输入示例的解决方案):
28IF5D3EAB9G3
此输出格式也是不可协商的。输出中不应包含换行符或空格,只能使用1- 9和A- I字符(如果需要,可以使用小写字母代替大写字母)。
目标网格(您需要重新创建的状态)如下:
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
数字1- 9应该用作翻转行的说明,字母A- I应该用于列。网格处于还原状态时,如下所示。
ABCDEFGHI
|||||||||
vvvvvvvvv
1 -> 123456789
2 -> 234567891
3 -> 345678912
4 -> 456789123
5 -> 567891234
6 -> 678912345
7 -> 789123456
8 -> 891234567
9 -> 912345678
因此,一个8装置从底部翻转第二行,一个F装置从第六列翻转。
在无法解决的情况下,程序应完全不输出任何内容而结束。
例子
输入:
987654321
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
输出:
1
在这种情况下,只需翻转第一行即可返回到目标状态。
输入:
123456788
234567897
345678916
456789125
567891234
678912343
789123452
891234561
912345679
输出:
I
在这种情况下,只需I翻转最后一列(列)即可重新创建目标状态。
输入:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
输出:
2I
在这种情况下,我们需要先翻转行2然后翻转列I以返回到目标状态。
笔记:
- 请在回答中包含示例用法。
- 给定的输出不必是将返回目标状态的最短序列-任何返回目标状态的序列都将在可行的前提下运行(即只要我可以对其进行测试)
- 我将尽力测试每个答案,并对所有有用的显然是打高尔夫球的作品进行投票。
- 这是一个开放式竞赛-我将在下周的某个时候接受最短的答案,但是如果出现了一个新的有效答案,而该答案在将来的任何时候都更短,那么我将更改接受的答案以反映这一点。
2014年1月26日23:59:59(GMT)收到的最短答案的赏金设置为200声望。霍华德因其268个角色的GolfScript解决方案而被授予赏金。
测试中
请提供以下三个测试网格的程序输出以及答案:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
927354389
194762537
319673942
351982676
567891234
523719844
755128486
268534198
812546671
813654789
738762162
344871987
341989324
567891234
576217856
619623552
194435598
926543271
我创建了一个小的Python程序来生成有效的网格以进行测试:
import random
def output(array):
print '\n'.join([''.join(row) for row in array])
def fliprow(rownum, array):
return [row[::1-2*(rownum==idx)] for idx,row in enumerate(array)]
def flipcol(colnum, array):
return zip(*fliprow(colnum, zip(*array)))
def randomflip(array):
op=random.randint(0,1)
row=random.randint(0,9)
if(op==1):
return fliprow(row, array)
else:
return flipcol(row, array)
def jumble(array):
arraycopy=array
for i in range(10, 1000):
arraycopy=randomflip(arraycopy)
return arraycopy
startarray=[
['1','2','3','4','5','6','7','8','9'],
['2','3','4','5','6','7','8','9','1'],
['3','4','5','6','7','8','9','1','2'],
['4','5','6','7','8','9','1','2','3'],
['5','6','7','8','9','1','2','3','4'],
['6','7','8','9','1','2','3','4','5'],
['7','8','9','1','2','3','4','5','6'],
['8','9','1','2','3','4','5','6','7'],
['9','1','2','3','4','5','6','7','8']]
print output(jumble(startarray))
(-2, 4),(2, 4),(2, -4),或(-2, -4)。
A1)并将其移到B1。您可以到达1该位置B1,但这将是来自的图块B9,而不是来自的图块A1。因为我们只允许整行/每列翻转,所以最左上角的1永远只能位于四个最外角之一。如果我误解了规则,请告诉我。



