본문으로 건너뛰기
← 블로그로 돌아가기

Hash 마스터하기

핵심 요약: Hash는 변환 규칙을 숨기고, 함수에 테스트 입력을 넣어 출력을 관찰하여 규칙을 추론합니다. 라운드당 최대 10번의 테스트가 가능하며, 테스트 횟수가 적을수록 점수가 높습니다. 승리 전략은 가설 기반 테스트입니다 - 함수에 무작위 문자열을 던지는 대신, 경쟁 가설을 구별하는 입력을 설계하세요.

Hash란 무엇인가

숨겨진 함수가 입력을 출력으로 변환합니다. 코드를 볼 수 없습니다. 동작만 관찰할 수 있습니다. 문자열을 입력하고 반환 결과를 보면서 패턴으로 규칙을 추론하세요.

세 가지 난이도 단계가 규칙의 복잡성을 제어합니다. 쉬운 단계는 선형 이동을 사용합니다 - 모든 글자를 같은 양만큼 이동시키는 카이사르 암호, 단순 미러링, 또는 두 배. 중간 단계는 조건부 규칙을 사용합니다 - “모음은 다음 모음으로 이동, 자음은 변경 없음” 또는 “대문자는 역순, 소문자는 그대로”. 어려운 단계는 위치 또는 산술 규칙을 사용합니다 - 변환이 문자열에서 문자의 위치에 따라 달라지거나 알파벳 위치에 대한 수학 연산에 따라 달라집니다.

모든 라운드는 시드로 키가 지정되므로, 동일한 퍼즐을 다시 플레이하거나 공유할 수 있습니다. 점수는 사용한 테스트 횟수에 따라 달라집니다. 게임은 운이 아닌 효율성을 보상합니다.

단계 요약: 쉬운 단계 - 모든 문자에 동일하게 적용되는 균일한 규칙. 중간 단계 - 문자 유형(모음 대 자음, 대문자 대 소문자)에 따라 분기하는 조건부 규칙. 어려운 단계 - 변환이 문자의 인덱스에 따라 달라지는 위치 규칙, 또는 전체 입력의 개수나 합에 따라 달라지는 산술 규칙.

HashOpen game →
Loading…

핵심 방법: 가설 기반 테스트

순진한 전략은 함수에 무작위 문자열을 던지고 패턴을 찾는 것입니다. 이것은 테스트를 비효율적으로 사용하고 종종 모호한 정보를 남깁니다.

효율적인 전략은 과학자와 프로그래머가 사용하는 것과 동일합니다: 특정 가설을 수립하고, 그 가설을 대안들과 구별하는 테스트를 설계하고, 결과를 관찰하고, 모델을 업데이트하세요.

각 테스트 전에, 현재 가설이 옳다면 어떤 답을 기대하는지, 그리고 다른 출력이 무엇을 알려줄지 알아야 합니다. 테스트 후에 확인하세요: 출력이 예측과 일치했나요? 그렇다면 가설에 대한 확신이 높아집니다. 아니라면, 새 데이터에서 어떤 가설이 살아남나요?

팁: 모든 라운드를 기준 테스트로 시작하세요. 강한 가설을 세우기 전에 “AAAA” 또는 “ABCD”를 입력하세요. “AAAA”는 모든 문자가 같은 방식으로 변환되는지 알려줍니다. “ABCD”는 변환이 위치에 따라 달라지는지 알려줍니다 (A가 B가 되고 B가 C가 되면 균일한 이동; A가 B, B가 D, C가 F가 되면 증분이 증가하는 것).

6가지 테스트 전술

전술 1 - 균일성 테스트. “AAAA”를 입력하세요. 출력이 “BBBB”나 “ZZZZ” 또는 반복되는 문자이면 규칙이 모든 문자에 동일하게 적용될 가능성이 높습니다. “BCDE” 같이 혼합된 출력이면 규칙은 위치에 따라 달라집니다.

전술 2 - 문자 유형 민감도 테스트. “AEIOU”(모음만)와 “BCDFG”(자음만)를 별도로 테스트하세요. 다르게 변환되면 규칙은 문자 유형에 조건부입니다. 같은 방식으로 변환되면 유형은 중요하지 않습니다.

전술 3 - 대소문자 민감도 테스트. “AAAaaa”를 입력하세요. 대문자와 소문자가 다르게 변환되면 대소문자가 규칙의 일부입니다. 동일하게 변환되면 그렇지 않습니다.

전술 4 - 위치 의존성 테스트. “ABCDE”를 입력하세요. 출력이 단순 균일 이동(각 문자가 같은 양만큼 이동)이면 규칙은 전역적입니다. 다른 위치에서 다른 변환이 발생하면 규칙은 위치에 따라 달라집니다.

전술 5 - 매개변수 고정. 규칙 유형(균일 이동, 유형 조건부, 위치)을 파악했다면, 남은 테스트로 정확한 매개변수를 찾으세요. 균일 이동의 경우 “A”를 테스트하세요 - “N”이 되면 이동이 +13입니다(ROT-13). 이제 규칙을 알았습니다.

전술 6 - 엣지 케이스 테스트. Z에서는 어떻게 되나요? A로 돌아오나요, 아니면 예상치 못한 일이 일어나나요? 글자 이동을 포함하는 가설이 있을 때 “ZZZ”를 한 번 입력하세요. 엣지 케이스는 규칙이 모듈러 산술을 사용하는지 아니면 경계가 있는지 드러내는 경우가 많습니다.

이동 값의 이진 탐색. 균일 이동이 확인되어 양을 찾아야 한다면: “A”를 테스트하세요. 출력 문자가 이동을 직접 알려줍니다 - “A”가 “D”가 되면 이동은 +3입니다. B, C, 또는 다른 문자를 테스트할 필요가 없습니다. 한 번의 테스트로 매개변수를 완전히 고정합니다.

한 번에 변수 하나만 분리하기. “AEIOUAEIOU”를 테스트하면 문자 유형과 입력 길이를 동시에 변화시킨 것입니다. 출력의 차이가 어떤 변수 때문인지 알 수 없습니다. 테스트당 하나의 변수만 변경하세요. 이 원칙이 2번 테스트로 해결하는 것과 7번 테스트로 해결하는 것의 차이를 만듭니다.

난이도 단계별 전략

쉬운 단계: “AAAA”로 시작하세요. 출력이 “BBBB”이면 이동은 +1입니다 - “CCCC”로 확인한 후 추측하세요. 출력이 “AAAA”의 미러라면 한 번의 테스트로 규칙을 찾은 것입니다. 잘 선택된 두 번의 테스트로 쉬운 단계에서 높은 확신을 얻을 수 있습니다.

중간 단계: 균일성을 배제한 후(또는 확인 후), 모음과 자음, 대문자와 소문자를 별도로 테스트하세요. 중간 함수는 보통 하나 또는 두 개의 조건부 분기를 가집니다. 어떤 문자 유형이 다르게 분기하는지 파악했다면, 각 분기에서 정확한 변환을 확인하는 테스트 하나 더면 보통 충분합니다.

어려운 단계: “ABCDEFGH”로 시작하여 위치 의존성을 확인하세요. 위치에 따라 다르게 변환된다면 패턴을 맵핑하세요: 각 위치에 자신의 인덱스를 더하나요? 아니면 고정된 교대 규칙이 있나요(짝수 위치 +1, 홀수 위치 -1)? “AAAA”와 “AAAB” 비교와 같이 제어된 입력으로 테스트하여 위치 효과와 문자 값 효과를 분리하세요.

팁: 모든 테스트와 출력의 정신적 기록을 유지하세요. 각 테스트 후 한 줄 요약을 작성하세요: “AAAA는 BBBB를 반환 - 균일 +1 이동 가능성.” 최근 테스트만이 아니라 전체 히스토리를 볼 때 가설이 더 명확해집니다.

HashOpen game →
Loading…

흔한 실수

주의 - 무작위 테스트: “QWERTY”나 “HELLO”를 첫 번째 이동으로 테스트하면 정보를 얻지만 효율적이지 않습니다. 명확한 가설 없이 출력을 해석할 수 없습니다. 모든 테스트는 특정 질문에 답해야 합니다: “문자 유형이 중요한가?” “이동이 균일한가?” 흥미로운 출력이 아닌 질문에 답하도록 입력을 설계하세요.

주의 - 너무 이른 확신: 첫 번째 테스트에서 단순한 +1 이동을 시사하더라도 즉시 추측하지 마세요. 중간과 어려운 함수는 첫 번째 테스트에서 단순해 보이지만 숨겨진 조건부 로직이 있는 경우가 많습니다. 추측하기 전에 다른 문자 유형으로 한 번 더 테스트하여 확인하세요. 두 번의 확인 테스트는 거의 항상 충분합니다; 한 번 후에 추측하는 것은 대개 성급합니다.

확신 후 과도한 테스트. 잘 설계된 세 번의 테스트 후에 규칙 공간이 단일 가설로 좁혀질 수 있습니다. 지금 추측하는 것이 절대적 확신을 위해 나머지 테스트를 소진하는 것보다 효율적입니다. 세 번의 테스트 후 90% 확신이 있다면 추측하세요. 테스트 횟수를 줄일수록 점수 혜택이 실재합니다.

기대 결과 없이 테스트하기. 현재 가설 하에 테스트가 무엇을 생성할지 예측할 수 없다면 테스트가 잘 설계되지 않은 것입니다. “가설 A가 옳다면 X를 기대하고, 가설 B가 옳다면 Y를 기대한다”고 말할 수 있을 때까지 다시 설계하세요.

적응적 가설 정제. 각 테스트 후, 업데이트된 그럴듯한 가설 목록을 작성하고 출력이 배제하는 것들을 제거하세요. 다음 테스트를 남은 후보들을 구별하도록 설계하세요. 이 반복적인 좁히기 - 가설 수립, 테스트, 제거, 반복 - 가 쉬운 단계를 2-3번 테스트로, 어려운 단계를 6-7번으로 달성하는 방법입니다.

연습 루틴

쉬운 단계부터 시작하여 테스트 마인드셋을 구축하세요. 3번 이하의 테스트로 각 퍼즐을 해독하는 것을 목표로 하세요. 각 라운드 후에 물어보세요: “더 적은 테스트로 같은 정보를 얻을 수 있었을까? 이상적인 첫 번째 테스트는 무엇이었을까?” 이 반성이 추가 라운드를 하는 것보다 더 가치 있습니다.

쉬운 단계를 3번 테스트로 일관되게 해독할 때 중간 단계로 이동하세요. 중간 단계는 조건부 논리를 도입합니다. 목표는 하나 또는 두 번의 집중 테스트로 문자 유형을 깔끔하게 분리한 다음 분기 동작을 확인하는 것입니다. 5-6번 테스트가 좋은 목표입니다.

중간 단계가 구조적으로 느껴질 때 어려운 단계에 도전하세요. 어려운 단계는 위치와 산술에 대한 생각이 필요합니다. 필요하다면 위치 패턴을 종이에 명시적으로 맵핑하세요. 7-8번 테스트가 합리적이고, 6번이면 훌륭합니다.

다른 사람들과 시드를 공유하고 전략을 비교하세요. “나는 4번 테스트로 풀었어 - 너는 어떻게 3번에 풀었어?” 이것이 생각하지 못했던 새로운 판별 테스트 설계를 배우는 가장 빠른 방법입니다.

팁: 모든 라운드 후에 자신에게 한 가지 질문을 하세요: “가장 많은 정보를 준 단일 테스트는 무엇이었나?” 파악하면 고정보 실험을 설계하는 습관이 강화됩니다. 시간이 지나면 자연스럽게 그 고가치 테스트를 앞에 배치하고 테스트 횟수를 줄이게 됩니다.

효율성 목표: 쉬운 단계 2-3번, 중간 단계 5-6번, 어려운 단계 7-8번. 이 수치를 일관되게 달성한다면 가설 기반 마인드셋이 작동하고 있습니다. 점수는 테스트 횟수에 반비례하므로 이 효율성 목표가 높은 점수로 가는 경로이기도 합니다.

이 기술이 전이되는 이유

Hash는 프로그래머가 디버깅에, 과학자가 실험 설계에, 제품 팀이 사용자 연구에 효과적인 것과 동일한 인식론적 습관을 훈련합니다. 시스템을 직접 볼 수 없습니다 - 출력만 관찰하고 구조를 추론할 수 있습니다. 무작위 테스트가 아닌 판별 테스트를 설계하는 훈련과, 첫 번째 결과에 고착하지 않고 각 관찰 후 가설을 업데이트하는 훈련이 바로 전이되는 기술입니다.

10번 테스트 예산은 현실 세계의 제약을 반영합니다: 자원은 유한하므로 효율성이 중요합니다. 시드 시스템은 재현성을 반영합니다: 좋은 실험은 다른 사람도 재현할 수 있습니다. Hash를 단순히 높은 점수를 위해서가 아니라, “어떤 테스트가 내 가설들을 구별할까?”라는 습관을 기르기 위해 플레이하세요.

MemPi
다음 비행기에서 플레이 · 오프라인 지원
PlayMemorize를 홈 화면에 추가하세요
Safari에서 공유 를 누른 다음 "홈 화면에 추가"를 선택하세요.