Dev Memo

Google IO 2022 "SVD" 퍼즐, A와 B 풀기

미스터머글 2022. 4. 8. 01:09
728x90
반응형

 

 

🧩

 

 

 

생략할 내용들

구글 IO가 무엇인지, 구글은 언제부터 이런 퍼즐을 만들어 배포했는지, 왜 퍼즐을 만들었는지 등은 자세히 다루지 않는다. 절대로 귀찮아서가 아니다. 어디까지나 퍼즐의 정답으로 가는 과정 자체가 목적이기에 거기에 포커싱을 맞춰 내용을 작성해보겠다.

 

 

 

어떻게 퍼즐에 진입할 수 있을까?

두가지 방법이 있다. 하나는 구글 IO 홈페이지에서 진입하는 방법. 구글에서 구글 IO를 검색해서 홈페이지로 진입이 가능하다. 물론 URL로 진입해도 된다. 가운데 "I/O 준비"라고 적혀있는 큰 글자 밑에 링크가 있다. 그것을 클릭하면 퍼즐을 확인할 수 있다.

 

노란색 표시를 클릭하면 된다.

 

 

다른 방법은 더 간단하다. 걍 URL(https://io.google/2022/svd/)로 진입하는 것이다. 아래를 클릭하면 된다.

 

 

Google I/O 2022

Google I/O 2022 is back!

io.google

 

 

 

당신은 뭐가 뭔지 모르겠다

지극히 정상이다. 나도 처음에는 그러했다. 24시간을 고민한 뒤 결론을 지었다. "솔루션을 보자." 해외에 일부 퍼즐을 푼 사례가 있다. 그것을 참고로 나도 해보았다. 그러니... 오. 된다. 그럼 내가 배운 것을 이제 전파해보자.

 

 

퍼즐을 풀기 전에 SVD가 뭔지 살펴보자

수학적 분석과 컴퓨터 과학을 다룰 때 자주 등장하는 용어인 특잇값 분해(Singular Value Decomposition, SVD). 머신러닝이나 추천 시스템에 활용되는 알고리즘(기억하자)에서 볼 수 있는 이 키워드. 결국 이번 구글 IO 컨셉은 이 특별한 알고리즘을 관통하는 무엇일 것이다. 그렇다면 SVD의 정의와 역할은 무엇일까? 위키백과에서는 아래와 같이 설명하고 있다.

 

특잇값 분해(SVD)는 행렬을 특정한 구조로 분해하는 방식으로,
신호 처리와 통계학 등의 분야에서 자주 사용된다.
특잇값 분해는 행렬의 스펙트럼 이론을 임의의 직사각행렬에 대해 일반화한 것으로 볼 수 있다. 
스펙트럼 이론을 이용하면 직교 정사각행렬을 고윳값을 기저로 하여 대각행렬로 분해할 수 있다.

 

 

... 그만 알아보자.

 

 

 

어떤 퍼즐이 A인지 어떻게 알 수 있을까

왼쪽끝 가운데 버튼을 누르면 아래 이미지처럼 나타난다. 왼쪽에 알파벳 배경색과 4개의 섹션에 나오는 기하학적 도형의 선 색상이 어떤 퍼즐인지 확인할 수 있게 해준다. 각각의 섹션을 클릭하면 확대가 되는데 왼쪽 위에 알파벳이 나와 다시 확인이 가능하다.

 

 

 

 

 

퍼즐 푸는 방식

무조건 섹션을 확대해야 풀 수 있다. 상단에 +, - 버튼으로 점의 갯수를 조절하고 상단에 늘어난 점을 클릭해서 상태를 바꾼다. 정답에 맞는 점의 갯수와 점의 상태를 변경하면 자동으로 원형이 되는 애니메이션이 나타난다.

 

또한 힌트를 모르면 풀 수 없다. 반드시 오른쪽 아래의 = 버튼을 눌르고 나타나는 이미지를 한번 더 클릭하여 힌트 팝업창에서 힌트를 확인해야 이 퍼즐을 풀 수 있다. 이런 형태로 A와 B를 풀어보자.

 

 

 

 

퍼즐 A 풀기

A 섹션을 확대하고, 힌트 팝업을 열자. 팝업의 물음표 버튼도 클릭하자. 그러면 아래와 같은 모습을 확인할 수 있다. 

 

The truth is primarily odd.
진실은 소수인 홀수.

 

즉, 가장 마지막 숫자인 2를 제외한(짝수니깐) 소수를 찾는 것. 타일이 16개이니 16개의 점을 만들고 왼쪽 위부터 순서를 세어 소수가 되는 위치에 점의 상태를 바꾸면 된다. 기억할지 모르겠지만 = 버튼을 눌렀을 때 힌트 버튼에 "31"이 등장한다. 이것도 소수다. 간접적으로 힌트를 준 셈.

 

2번째(19)와 10번째(73) 상태를 바꾸자. 그러면 아래와 같은 형태가 나타난다. 이 때 애니메이션 효과가 바뀌는 모습을 보라. 첫 전율을 느끼게하기 위해 원형이 되는 모습은 생략한다.

 

아래에 원형이 만들어진다. 아마 오~~~~~ 하게 될 것이다.

 

 

 

 

퍼즐B 풀기

퍼즐 A와 비교해서 난이도가 확 올라간다. 일단 힌트를 2개 모두 확인해야 한다. 게다가 점의 상태가 총 3개. 허허허. 일단 공룡부터 확인해보자.

 

어라? 너 낯익다?

Start seeing in binary.
바이너리로 보기 시작.

 

이게 무슨 말인가. 많은 사람들이 바이너리에 포커싱을 맞추겠지만 진짜는 "seeing(보다)"에 있다. 마우스 커서를 공룡 눈에 가져가면 위 이미지처럼 나타난다.

 

Dinosaur eye, color #202821

 

이 Color Code는 16진수이다. 이걸 이제 바이너리 값으로 변환시키면 된다. 손으로 직접 계산할 필요가 없다. 인터넷에는 이런 값을 변환시켜주는 컨버터가 존재한다.

 

Hex number : 202821
Binary number : 0010 0000 0010 1000 0010 0001

 

만약 당신이 두번째 힌트를 먼저 보았다면 이 숫자가 특별해 보일 것이다. 위 숫자도 24자리 그리고 두번째 힌트의 동그라미 갯수도 24개. 그럼 두번재 힌트는 퍼즐 A처럼 읽으면 될까?

 

 

 

What would Morton do?
Morton은 어떻게 했을까?

 

Morton이 누굴까? 힌트는 본 퍼즐의 컨셉이다. SVD는 수학, 알고리즘, 컴퓨터 공학적 개념이라고 언급했다. 이렇게 구글에서 검색을 해보자. "morton algorithm".

 

 

위키피디아에 들어가보면 Z-order curve 혹은 Morton Order,Morton Code라고 불리는 곡선 혹은 함수 설명이 있다. 영문이 부담스럽다면 한 블로거가 Geohash로 설명한 글을 참고하자. 위키피디아 자동 번역글도 볼 수 있다. G.M.Morton이 1966년에 개발한 개념으로 핵심은 위 이미지의 오른쪽편에 Z 모양이다. 본 퍼즐에서는 내부 요소를 Z 모양으로 읽으면 된다. 아래처럼 말이다.

 

0000 1001 0010 0001 0000 1001

 

다시 퍼즐 B 섹션의 힌트 진입점을 보자. 공룡 그림과 0011 타일 사이에 "+" 모양이 있다. 즉 이 24자리를 합하면 된다.

 

0010 0000 0010 1000 0010 0001
0000 1001 0010 0001 0000 1001
----------------------------------
0010 1001 0020 1001 0010 1002

 

이제 24개의 점을 찍는데, 0은 기본점을, 1은 두번째인 흰점을, 2는 세번째인 파란점을 찍으면 된다. 이렇게.

 

 

 


 

아쉽게도 퍼즐 C와 D를 풀 방법을 찾지 못했다. 나중에라도 찾게 되면 2탄을 작성하도록 하겠다. 혹시 나머지 퍼즐 푸는 방법을 아시는 분이 있다면.. 제발 🥺 알려주세요.

 

알려...줘..용... 퍼즐C랑 D...

728x90
반응형