행과 열만 뒤집어 (중심점을 중심으로 뒤집어) 자릿수를 푸는 프로그램이나 함수를 만듭니다.
입력
입력은 다음과 같이 9 줄 문자열 형태의 9×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
목표 상태를 다시 만들려면 마지막 열 (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))
답변
GolfScript, 300 279 268 자
n%`{\5,{.9+}%{;.2/\2%},\;''{1${.9/7+7*+}%+:z;}:?~{{.9<77*{\zip\9-}>:Z~{1$!{-1%}*\(\}@%\Z;}/}:E~{:^;{:c;.`{[\E[.^=\8^-=]{.c=\8c-=}%[^c+^8c-+8^-c+16c-^-]{9%49+}%=}+[[]]:K[[8^- 17c-][^9c+]1$]{:s;{[[]s.+.2$+]{1$+}/}%.&}/\,K+0=z?E}5,/}5,/{{+9%)}+9,%''*}9,%={z:u;}*}+1024,/u
이 코드는 코드 블록 조작으로 인해 속도가 매우 느리고 몇 분 동안 실행될 수 있습니다. 이 코드는 많은 변수와 명시 적 루프가있는 매우 골프 스크립트입니다.
나는 1 초도 안되는 더 분석적인 솔루션을 작성했다. 나는 골프를 타면서 완전히 파산했다. 불행히도 지난 2 일 동안 코드를 역 추적하거나 복구 할 수 없었습니다. 따라서 어쨌든 더 짧은이 try-and-check 버전을 제작했습니다.
위에 주어진 퍼즐에 대한 답변 :
1A2C4D9G9G9G9G1C1C1C1C9F9F9F9F1D1D1D1D2A2A2A2A8H8H8H8H2B2B2B2B2C2C8F8F2D2D2D2D3A3A7I7I3B3B7H7H7G7G7G7G3D3D7F7F6I6I6I6I4A4A4A4A6H6H6H6H6G6G4C4C4C4C6F6F4D4D
1AB39I9I1A1A9I9I1B1B9F9F8I8I8I8I2B2B8H8H8G8G8G8G2D2D2D2D3A3A3A3A7H7H7H7H3C3C3C3C3D3D7F7F6I6I4A4A6I6I4B4B4B4B6G6G4C4C4C4C6F6F6F6F4D4D
1A34D9I9I9I9I1A1A1A1A1B1B1B1B9G9G1C1C1C1C9F9F9F9F1D1D9F9F8I8I2A2A2A2A8H8H8H8H2C2C2C2C8F8F2D2D8F8F7I7I7I7I3A3A3B3B7G7G7G7G3C3C3C3C6I6I6I6I6H6H6H6H4B4B4B4B6G6G6G6G4C4C6G6G6F6F4D4D6F6F
답변
매쓰 582 575 503 464 282
golfscripters와 싸우려면 무거운 포병을 사용해야합니다!
i = "986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378";
a=Array;h@M_:=Join@@a[9(M〚##〛/. 9->9⌈2Random[]⌉)+Abs[{##}-5]&,n={9,9}];
For[i_~t~j_:=i{#2,10-#2}+j#-9&~a~{9,4},!ListQ[e=GroupElementToWord[
PermutationGroup[Cycles/@Join[1~t~9,9~t~1]],
h[ToCharacterCode@StringSplit@i-48]~FindPermutation~h@a[Mod[8+##,9,1]&,n]]],];
e~IntegerString~36<>""
산출:
g69g69g8g8g7g7gd96d96d8d8d7d7dh6h64a6a46d6d4g4g6b6b7h7h7c7c2a8a27b7bd8db8b7f7fg8g82c2c94a4a3a3aigfdc91
여기에서 PermutationGroup[...]
가능한 뒤집기를 설정 GroupElementToWord[...]
하고 문제 (약 0.2
초)를 해결합니다 . 주요 문제는 9
초기 그리드와 최종 그리드에서의 위치 사이의 대응을 식별하기 어렵다는 것이다 . 골프를 위해 나는 무작위로 그것을한다 (몇 초가 걸린다). 몇 가지 경고가 있지만 무시할 수 있습니다.
기타 그리드 테스트 :
g69g69g8g8g7g7gh89h89h7h7h6h6hf6f6g6g64f4f4h4hg7g73g3g2a8a28d8db8b83d3dg8g82c2c9a3a643a3a2g9f9d9c9ga
h89h89h7h7h6h6h6h6h6f6f6g6g6d6d3a7a37g7g7h7h3c3c2a8a27b7b8d8d2f2f8b8b3f3f2b2ba2a764a8aih9g9c9gb1i
예제를 완전히 재현합니다.
1
i
2i
이전 솔루션 (464)
영리한 내장 함수와 런타임 4ms가없는 경우 :
M=ToCharacterCode@StringSplit@i-48;
S="";s=Signature;H=(S=S<>{#,#2+9}~IntegerString~36)&;
A=(m=M〚##〛)-9Mod[m+##,2]&[s@{2#3,5}#,2#2#3~Mod~2-#2]&~Array~{4,4,4};
u=s/@Join@@A;
H@@({k,l}=#&@@@#~Position~1&/@{v=u〚13;;〛;{h=#2u〚2〛,-#u〚5〛,-#u〚9〛}&@@v,v〚4〛=u〚4〛h;v});
A〚k〛=A〚k,;;,{2,1,3,4}〛;A〚;;,l〛=A〚;;,l,{3,2,1,4}〛;
MapIndexed[4#≠#4&&H@@@If[#2<3,#0[#3,#,#2,#4];k,#0[#,#3,#4,#2];10-k]&@@
If[s@#<0,#〚{1,3,2,4}〛,#]&@Ordering[k={#2,#2};#]&,A,{2}];
M〚5,1〛<5&&5~H~{};M〚1,5〛<5&&{}~H~5;S
여기에 모든 줄 바꿈이 필요하지 않습니다.
산출:
3b9i9i1a1a1a1a9i9i1a1a9h9h1b1b1b1b9h9h9g9g1c1c9g9g9f9f1d1d9f9f8h8h2b2b8f8f8f8f7i7i7h7h3b3b3b3b7h7h3b3b7h7h7g7g3c3c7g7g3c3c7f7f6i6i4a4a6h6h4b4b4b4b6g6g4c4c6g6g4c4c6f6f4d4d4d4d6f6f4d4d6f6f4d4d
다른 두 테스트 그리드 :
13ab9i9i1a1a9i9i9h9h1b1b1b1b9h9h9f9f8i8i8i8i8h8h2b2b2b2b8h8h8h8h8g8g8g8g8f8f2d2d2d2d8f8f2d2d7i7i3a3a3a3a7i7i7h7h3b3b7h7h3b3b7g7g3c3c3c3c7g7g3c3c7f7f3d3d3d3d7f7f7f7f6i6i4a4a6i6i6h6h4b4b4b4b6h6h4b4b6g6g4c4c4c4c6f6f4d4d4d4d6f6f4d4d6f6f
2bc9i9i1a1a9i9i9g9g1c1c9g9g1c1c9f9f1d1d1d1d8i8i8i8i8h8h2b2b2b2b8f8f2d2d7i7i7h7h3b3b3b3b7h7h3b3b7g7g3c3c7f7f3d3d3d3d7f7f3d3d6i6i4a4a4a4a6h6h4b4b6g6g6g6g6f6f4d4d
심상:
anim = Reap[Fold[Function[{m, i},
If[i > 9, (Sow@Grid[#, Background -> {i - 9 -> Pink, None}] & /@ {m, #}; #) &@
Transpose@MapAt[Reverse, Transpose@m, i - 9], (Sow@Grid[#,
Background -> {None, i -> Pink}] & /@ {m, #}; #) &@
MapAt[Reverse, m, i]]], M, IntegerDigits[FromDigits[S, 36], 36]]];
ListAnimate[Join[{#, #} &@Grid@M, anim[[2, 1]], {#, #} &@Grid@anim[[1]]], 5]
입력 문자열 i
은 다음과 같이 임의로 생성 할 수 있습니다.
M = Array[Mod[8 + ##, 9, 1] &, {9, 9}];
(M[[#]] = Reverse@M[[#]]; M[[All, #2]] = Reverse@M[[All, #2]];) & @@@
RandomInteger[{1, 9}, {10000, 2}];
i = ToString /@ # <> "\n" & /@ M <> ""
간단한 토론
-
뒤집기는 다음 요소 만 교환 할 수 있습니다 ( “사분면”) :
-
초기 순서와 최종 순서가 동일한 서명을 갖는 경우에만 이러한 요소를 다른 요소와 개별적으로 교환 할 수 있습니다.
-
이 4 가지 요소의 뒤집기는 4도 (= 사면체의 회전 그룹)의 교차 그룹을 형성합니다 . 이 그룹의 모든 요소는 2 개의 생성 요소로 구성됩니다. 따라서 초기 위치와 최종 위치를 알면 간단한 뒤집기의 조합으로 해당 변환을 분해 할 수 있습니다.
세부
스포츠맨십을 위해 현상금이 끝나기 전에 세부 정보를 게시합니다!
M=ToCharacterCode@StringSplit@i-48;
문자열 i
을 행렬로 변환합니다 M
.
S="";s=Signature;H=(S=S<>{#,#2+9}~IntegerString~36)&;
에 문자를 추가합니다 S
. 이제 빈 문자열입니다. H[i,j]
문자 i
( 1,2,3,...,9
)와 문자 j
( a,b,c,...,i
기준 36)을 추가합니다.
A=(m=M〚##〛)-9Mod[m+##,2]&[s@{2#3,5}#,2#2#3~Mod~2-#2]&~Array~{4,4,4};
나는 요소를
다음과 같은 형태로 목표 행렬을 얻기 위해
내 알고리즘에는 두 가지 주요 단계가 있습니다.
-
대상 행렬에서와 같이 서명을 얻으려면 반전을 찾습니다 (예 :
{-7,-1,1,7}
is1
및 signature{-6,2,-2,6}
is is-1
).u=s/@Join@@A; H@@({k,l}=#&@@@#~Position~1&/@{v=u〚13;;〛;{h=#2u〚2〛,-#u〚5〛,-#u〚9〛}&@@v,v〚4〛=u〚4〛h;v}); A〚k〛=A〚k,;;,{2,1,3,4}〛;A〚;;,l〛=A〚;;,l,{3,2,1,4}〛;
-
올바른 순서를 얻으려면 모든 “사분면”을 회전하십시오.
MapIndexed[4#≠#4&&H@@@If[#2<3,#0[#3,#,#2,#4];k,#0[#,#3,#4,#2];10-k]&@@ If[s@#<0,#〚{1,3,2,4}〛,#]&@Ordering[k={#2,#2};#]&,A,{2}];
알고리즘에서 가장 중요하지 않은 부분입니다. 예를 들어 변환
1b1b
은로 변환{-7,-1,1,7}
됩니다{-1,1,-7,7}
. 변환9h9h
이로 변환{-7,-1,1,7}
됩니다{-7,7,-1,1}
. 두 개의지도가 있습니다{1,2,3,4} -> {2,3,1,4} {1,2,3,4} -> {1,4,2,3}
임의의 순서
{x,y,z,w}
를 로 변환하려고 합니다{1,2,3,4}
. 간단한 방법은 (임의 검색 제외)repeat {x, y, z, w} -> If[z < 3, {y, z, x, w}, {x, w, y, z}] until {1,2,3,4}
나는 그것을 증명할 수는 없지만 작동합니다!
마지막 단계는
M〚5,1〛<5&&5~H~{};M〚1,5〛<5&&{}~H~5;S
중앙 행과 중앙 열의 간단한 뒤집기를 수행하고 결과를 반환합니다.
답변
제이 487 438
q=:3 :'(>:9|+/~i.9)=/&((,{;/(,.8&-)y){])g'
l=:2 :0
:
o=:o,(m+x){a.
x&(|.@{`[`]})&.v y
)
r=:49 l]
c=:97 l|:
w=:2 :'g=:4 v^:(4=(<m){g)g'
p=:_1=C.!.2@,@:I.@q
t=:2 :'for_i.>:i.3 do.g=:i v^:(p m*i)g end.'
z=:2 :0
'i j I J'=.y,8-y
g=:".'(',(,' ',.,(I.m{q y){,;._1 n),'])^:2 g'
)
d=:3 :0
g=:9 9$".,_ list,' ',.y
o=:''
0 4 w c
4 0 w r
0 1 t c
g=:0 c^:(-.(p 1 0)=p 1 2)g
1 0 t r
for_k.>,{;~i.4 do.0 z';;jcir;irjc;Irjc'k
3 z';;IrJc;JcIr;'k end.o
)
d
지정된 형식의 그리드 문자열을 사용하고 지정된 형식의 솔루션 문자열을 반환하는 동사입니다.
사용 예 :
d '987654321',LF,'234567891',LF,'345678912',LF,'456789123',LF,'567891234',LF,'678912345',LF,'789123456',LF,'891234567',LF,'912345678'
bcda2341a1a1b1b1c1c1d1da2a2b2b2c2c2d2d2a3a3b3b3c3c3d3d3a4a4b4b4c4c4d4d4
이제 개행 유형 중 하나를 허용합니다.
테스트 그리드 솔루션 :
b3a1a11b1bc9c99g9gd9d99f9fb8b8f8f87i7i7h7hc3c3g7g77f7fa6a64b4bh6h6c4c4g6g6d6d6f6f6
cd24a9a91c1c1d1d9f9fa2a2i8i88h8hc2c2g8g82d2d3b3bh7h7d3d37f7fa6a64b4bg6g64d4d6f6f
bc2a9a99i9ic1c1g9g91d1df9f9i8i8b2b2h8h82c2cd8d87i7ib3b3c7c7d3d34a4ai6i6b6b6g6g6d6d6
저는 J를 처음 접했습니다. 이것은 아마도 더 멀리 골프 될 수 있습니다.
유효하지 않은 / 해결 불가능한 그리드를 확인하면 123 자 패널티가 발생합니다. 나는 현재까지 다른 대답에 그런 오류 검사가 있다고 생각하지 않습니다.
이렇게하려면 첫 줄을 다음 d
과 같이 변경하십시오 .
if.-.+./89 90=#y do.0 return.end.if.-.*./(/:~y)=/:~(#y)$'123456789',LF do.0 return.end.g=:9 9$".,_ list,' ',.y
마지막 줄은 다음과 같습니다.
3 z';;IrJc;JcIr;'k end.if.*./,g=>:9|+/~i.9 do.o return.end.0
0
빈 문자열을 반환하는 것이 완전히 해결 된 그리드를 올바르게 해결하는 것과 구별 할 수없는 오류와 같은 오류를 반환하도록 선택했습니다 . 이것은 UNIX 줄 바꿈을 다시 가정합니다.
답변
씨# 540 399
음, 성능이 저하되고 (지금은 최대 30 초 소요) 동적 변수가 도입되었으며 솔루션의 논리가 약간 변경되었습니다. 그리고 네, 이제 줄 바꿈이있는 하나의 문자열로 입력을 기대합니다 (규칙에서 필요에 따라).
물론 C #에는 미리 정의 된 수학 함수가 없으므로 Mathematica 사람들과 싸우기가 어렵습니다. 그럼에도 불구하고 저자 덕분에 이것은 큰 도전이었습니다!
string S(string _){for(i=0,e=1>0;e;){
for(h=v=j=0;j<89;)m[j/10,j%10+9]=_[j++]-49;a="";
for(j=i++;j>0;v++,j/=2)if(j%2>0)F(v);
for(;h<9&(h<4|!e);h+=j/36,j%=36)if((e=m[h,g=j++%9+9]!=(t=(h+g)%9))|m[v=8-h,g]==t){F(v);F(g);F(v);F(g);}
}return a;}void F(int z){for(f=z<9;++l<9;)m[0,l]=m[f?z:l,f?9+l:z];for(;l-->0;)m[f?z:l,f?9+l:z]=m[0,8-l];a+=(char)(z+=f?49:56);}
dynamic h,v,i,j,e,t,l=-1,g,a,m=new int[9,19],f;
테스트 그리드 :
3B9A9A9B9B9C9C9D9D9F9F9G9G9H9H9I9I9B9B9C9C9D9D9F9F9G9G9H9H9C9C9D9D9C9C9D9D8B8B8F8F8H8H8B8B8F8F8B8B8H8H7B7B7C7C7F7F7H7H7I7I7H7H6A6A6B6B6C6C6D6D6F6F6H6H6A6A6B6B6D6D6F6F6D6D6D6D6F6F5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I
13AB9A9A9B9B9F9F9H9H9A9A9B9B9H9H9I9I8B8B8D8D8F8F8G8G8H8H8I8I8B8B8G8G8H8H8I8I8H8H7A7A7B7B7C7C7D7D7F7F7G7G7I7I7A7A7D7D7F7F7I7I7F7F6A6A6B6B6C6C6D6D6F6F6G6G6H6H6I6I6A6A6C6C6F6F6I6I6A6A6A6A5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I
2BC9A9A9C9C9D9D9F9F9A9A9D9D9I9I8B8B8D8D8H8H8I8I8B8B8D8D8I8I7B7B7C7C7D7D7F7F7G7G7H7H7I7I7C7C7C7C7G7G6A6A6B6B6D6D6F6F6G6G6I6I6A6A6B6B6D6D6G6G6D6D6F6F5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I5A5A5B5B5C5C5D5D5E5E5F5F5G5G5H5H5I5I
오래된 해결책 (540)
임의로 입력 된 수천 개의 그리드에서 테스트 한 모든 입력에서 1 초 이내에 작동합니다. 출력 문자열의 최대 길이는 165입니다 (처음에는 모든 그리드가 82 플립 넘게 해결되었지만 골프를하는 동안 이것을 희생했습니다).
string S(string[]_){for(i=0;i<1<<18;){
for(j=0;j<81;)m[j/9+49,j%9+65]=_[j/9][j++%9]-49;a="";char g,h='1',v='9',b,x=h,y;
for(j=i;j>0;x=x==v?'A':++x,j/=2)if(j%2>0)F(x);j=i+1;
for(i+=1<<19;h<58;h++,v--)for(g='A',b='I';g<74;g++,b--){
t=(h+g-6)%9;e=m[h,g];q=m[v,g];i=h>52&t!=e?j:i;
if(e!=t|q==t){x=q==t?v:g;y=q==t?g:v;
if(m[h,b]==t){x=b;y=h;}
F(x);F(y);F(x);F(y);}}}return a;}
void F(char z){var f=z<65;for(l=0;l<4;l++){n=m[d=f?z:49+l,s=f?65+l:z];m[d,s]=m[o=f?z:57-l,u=f?73-l:z];m[o,u]=n;}a+=z;}
int i,j,q,e,t,l,s,d,n,u,o;int[,]m=new int[99,99];string a;
예를 들어 답변 1 :
15A5A5B5B5C5C5D5DE5E55F5F5G5G5H5H5I5I
예를 들어 2 답변 :
19AI1I1H1H1G1G1F1F19F9F9G9G9H9H9I9I8A8AI8I87A7AI7I76A6AI6I65A5A5B5B5C5C5D
5DE5E55F5F5G5G5H5H5I5I
예를 들어 3에 대한 답변 :
129AI1I1H1H1G1G1F1F19F9F9G9G9H9H9I9I8A8AI8I87A7AI7I76A6AI6I65A5A5B5B5C5C5
D5DE5E55F5F5G5G5H5H5I5I
테스트 제곱에 대한 답변 :
346B9A9AH1H1C9C9D9D99F9F9G9GH9H99I9IB8B8F8F87B7B7C7C7F7FH7H77I7I6A6A6B6BC6C66D6DG6G6H6H66I6I5A5A5B5B5C5C5D5DE5E55F5F5G5G5H5H5I5I
1346ABA9A9H1H19F9FH9H99I9IH2H28D8D8F8FG8G8I8I8I3I37B7B7C7CF3F37G7GI7I7H4H4D6D66F6F5A5A5B5B5C5C5D5DE5E55F5F5G5G5H5H5I5I
2BCA9A99C9CF1F19F9F9I9IH2H2D8D88H8HI8I87B7BC7C77D7D7F7F7H7H7I7II4I4B6B6D6D6G6G66I6I5A5A5B5B5C5C5D5DE5E55F5F5G5G5H5H5I5I