[asy]
import three;
currentprojection=orthographic(1/2,-1,1/2);
triple A,B,C,D,E,F,G,H,g,f;
A = (0,0,0);
B = (12,0,0);
C = (12,10,0);
D = (0,10,0);
E = (0,10,8);
F = (0,0,8);
G = (12,0,8);
H = (12,10,8);
draw(A--B--C--D--cycle);
draw(E--F--G--H--cycle);
draw(A--F); draw(B--G); draw(C--H); draw(D--E);
g = (12,9,7); f = (0,1,1);
dot(g, green); dot(f, purple);
label("12", A--B); label("10", B--C); label("8", C--H);
[/asy] In the above diagram, the green dot is the gecko and the purple dot is the fly. We can ``unfold'' the walls that the gecko traveled along, as below, to represent the gecko's path in two dimensions. This unfolding does not change the length of the gecko's path, so in order for the gecko's path to be minimal before unfolding, it must be minimal after unfolding. In other words, it must be a straight line after unfolding. Now, besides the side walls, the gecko can travel along the front, back, and ceiling. Suppose that among these, it only travels along the front wall. The walls the gecko walked along unfold as such: [asy]
draw( (0,0)--(10,0)--(10,8)--(0,8)--cycle ); draw( (10,0)--(22,0) ); draw( (10,8)--(22,8) );
draw( (22,0)--(32,0)--(32,8)--(22,8)--cycle );
pair g = (31,7); pair f = (9,1);
dot(g, green); dot(f, purple);
draw(g--f, red);
draw(f--(31,1), red+dashed); draw(g--(31,1), red+dashed);
label( "10", (0,0)--(10,0) ); label( "12", (10,0)--(22,0) ); label( "10", (22,0)--(32,0) ); label( "8", (32,0)--(32,8) );
[/asy] The gecko's path is the hypotenuse of a right triangle with legs 6 and 22, so its length is $\sqrt{6^2 + 22^2} = 2\sqrt{3^2 + 11^2} = 2\sqrt{130}$. By symmetry (the gecko and the fly are exactly opposite each other in the room), the path length is the same if the gecko only travels along the back wall and side walls.

Now suppose the gecko only travels along the ceiling and side walls. These walls unfolded become: [asy]
draw( (0,0)--(8,0)--(8,10)--(0,10)--cycle ); draw( (8,0)--(20,0) ); draw( (8,10)--(20,10) );
draw( (20,0)--(28,0)--(28,10)--(20,10)--cycle );
pair g = (21,9); pair f = (1,1);
dot(g, green); dot(f, purple);
draw(g--f, red);
draw(f--(21,1), red+dashed); draw(g--(21,1), red+dashed);
label( "8", (0,0)--(8,0) ); label( "12", (8,0)--(20,0) ); label( "8", (20,0)--(28,0) ); label( "10", (28,0)--(28,10) );
[/asy] The path is the hypotenuse of a right triangle with legs 8 and 20, so its length is $\sqrt{8^2 + 20^2} = 2\sqrt{4^2+10^2} = 2\sqrt{116}$. (We'll keep it in this form because it makes it easier to compare with the other cases.)

Finally, the gecko may cross both the ceiling and front wall (or back wall; the cases give the same results by symmetry). The unfolded walls then look like this: [asy]
draw( (0,0)--(10,0)--(10,8)--(0,8)--cycle );
draw( (10,0)--(22,0)--(22,8)--(10,8)--(10,18)--(22,18) );
draw( (22,8)--(30,8)--(30,18)--(22,18)--cycle );
pair g = (23,17); pair f = (9,1);
dot(g, green); dot(f, purple);
draw(g--f, red);
draw(f--(23,1), red+dashed); draw(g--(23,1), red+dashed);
label("10", (0,0)--(10,0)); label("12", (10,0)--(22,0)); label("8", (0,0)--(0,8), W);

label("8", (22,18)--(30,18), N); label("10", (30,18)--(30,8), E);
[/asy] The path is the hypotenuse of a right triangle with legs 16 and 14, so its length is $\sqrt{16^2+14^2} = 2\sqrt{8^2+7^2} = 2\sqrt{113}$. Of the three cases, this is the smallest, so the answer is $2\sqrt{113}$.
[asy]
3을 가져옵니다;
CURRENTPROJECTION=ORTHOGRAPHIC(1/2,-1,1/2);
triple A,B,C,D,E,F,G,H,g,f;
A = (0,0,0);
B = (12,0,0);
C = (12,10,0);
D = (0,10,0);
E = (0,10,8);
F = (0,0,8);
G = (12,0,8);
H = (12,10,8);
draw(A--B--C--D--cycle);
draw(E--F--G--H--cycle);
draw(A--F); draw(B--G); draw(C--H); draw(D--E);
g = (12,9,7); f = (0,1,1);
dot(g, 녹색); dot(f, 보라색);
label("12", A--B); label("10", B--C); label("8", C--H);
[/asy] 위 다이어그램에서 녹색 점은 도마뱀이고 보라색 점은 파리입니다. 아래와 같이 도마뱀이 이동한 벽을 '펼치면' 도마뱀의 이동 경로를 2차원으로 표현할 수 있습니다. 이렇게 펼쳐도 도마뱀의 경로의 길이는 변하지 않으므로 도마뱀의 경로가 펼쳐지기 전의 길이가 최소가 되려면 펼쳐진 후의 길이도 최소가 되어야 합니다. 즉, 펼친 후에는 직선이 되어야 합니다. 이제 도마뱀은 측벽 외에도 앞면, 뒷면, 천장을 따라 이동할 수 있습니다. 이 중에서 앞쪽 벽만 따라 이동한다고 가정해 봅시다. 도마뱀이 걸어간 벽이 이렇게 펼쳐집니다: [asy]
draw( (0,0)--(10,0)--(10,8)--(0,8)--cycle ); draw( (10,0)--(22,0) ); draw( (10,8)--(22,8) );
draw( (22,0)--(32,0)--(32,8)--(22,8)--cycle );
pair g = (31,7); pair f = (9,1);
점(g, 녹색); 점(f, 보라색);
draw(g--f, red);
draw(f--(31,1), 빨간색+점선); draw(g--(31,1), 빨간색+점선);
label( "10", (0,0)--(10,0) ); label( "12", (10,0)--(22,0) ); label( "10", (22,0)--(32,0) ); label( "8", (32,0)--(32,8) );
[/asy] 도마뱀의 경로는 다리가 6과 22인 직각삼각형의 빗변이므로, 그 길이는 $\sqrt{6^2 + 22^2} = 2\sqrt{3^2 + 11^2} = 2\sqrt{130}$입니다. 대칭에 의해(도마뱀과 파리는 방에서 서로 정확히 반대편에 있습니다), 도마뱀이 뒷벽과 옆벽만 따라 이동하는 경우 경로 길이는 동일합니다.

이제 도마뱀이 천장과 측벽을 따라만 이동한다고 가정해 보겠습니다. 이 벽이 펼쳐지면 [asy]
draw( (0,0)--(8,0)--(8,10)--(0,10)--cycle ); draw( (8,0)--(20,0) ); draw( (8,10)--(20,10) );
draw( (20,0)--(28,0)--(28,10)--(20,10)--cycle );
pair g = (21,9); pair f = (1,1);
점(g, 녹색); 점(f, 보라색);
draw(g--f, red);
draw(f--(21,1), 빨강+파랑); draw(g--(21,1), 빨강+파랑);
label( "8", (0,0)--(8,0) ); label( "12", (8,0)--(20,0) ); label( "8", (20,0)--(28,0) ); label( "10", (28,0)--(28,10) );
[/asy] 경로는 다리가 8과 20인 직각삼각형의 빗변이므로 길이는 $\sqrt{8^2 + 20^2} = 2\sqrt{4^2 + 10^2} = 2\sqrt{116}$입니다. (다른 경우와 비교하기 쉽기 때문에 이 형태를 그대로 유지하겠습니다.)

마지막으로, 도마뱀은 천장과 앞쪽 벽(또는 뒷쪽 벽)을 모두 건널 수 있습니다. 대칭에 의해 동일한 결과를 제공합니다. 그러면 펼쳐진 벽은 다음과 같이 보입니다: [asy]
draw( (0,0)--(10,0)--(10,8)--(0,8)--cycle );
draw( (10,0)--(22,0)--(22,8)--(10,8)--(10,8)--(10,18)--(22,18) );
draw( (22,8)--(30,8)--(30,18)--(22,18)--cycle );
pair g = (23,17); pair f = (9,1);
점(g, 녹색); 점(f, 보라색);
draw(g--f, red);
draw(f--(23,1), 빨강+파랑); draw(g--(23,1), 빨강+파랑);
label("10", (0,0)--(10,0)); label("12", (10,0)--(22,0)); label("8", (0,0)--(0,8), W);

label("8", (22,18)--(30,18), N); label("10", (30,18)--(30,8), E);
[/asy] 이 경로는 다리가 16과 14인 직각삼각형의 빗변이므로 길이는 $\sqrt{16^2+14^2} = 2\sqrt{8^2+7^2} = 2\sqrt{113}$입니다. 세 가지 경우 중 이 경우가 가장 작으므로 정답은 $2\sqrt{113}$입니다.