행과 열만 뒤집어 (중심점을 중심으로 뒤집어) 자릿수를 푸는 프로그램이나 함수를 만듭니다.
입력
입력은 다음과 같이 9 줄 문자열 형태의 9x9 자릿수 격자입니다.
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목표 상태를 다시 만들려면 마지막 열 (column ) 만 뒤집어 야합니다.
입력:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
산출:
2I
이 경우 목표 상태로 돌아가려면 행 2을 뒤집은 다음 열 I을 뒤집어 야 합니다.
노트:
- 답변에 사용 예를 포함하십시오.
- 주어진 결과는 목표 상태를 반환하는 가장 짧은 시퀀스 일 필요는 없습니다. 목표 상태를 반환하는 시퀀스는 작동하는 한 (즉, 테스트 할 수있는 한) 수행됩니다.
- 각 답변을 테스트하고 골프를하려고 노력했던 모든 사람들을 찬양하기 위해 노력할 것입니다.
- 이것은 개방형 경쟁입니다. 다음 주 언젠가는 가장 짧은 답을 받아 들일 것입니다. 그러나 새로운 유효한 답변이 나오면 향후 어느 시점에서든 더 짧은 답변을 받아 들일 것입니다 .
바운티는2014년 1 월 26 일 23:59:59 (GMT)에의해 가장 짧은 답변으로 200 명으로 설정되었습니다. 바운티는 Howard 의 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은 가장 바깥 쪽 4 개의 모서리 중 하나에 만 있습니다. 규칙을 틀리면 알려주십시오.



