1P by GN⁺ | ★ favorite | 댓글 1개
  • 네 개의 2만으로 수를 만드는 퍼즐은 허용 연산을 어디까지 넓히느냐에 따라 사칙연산 퍼즐에서 고급 수학 놀이로 확장됨
  • 분수와 사칙연산만으로 1부터 6까지 만들 수 있고, 지수·팩토리얼을 더하면 18, 28, 256, 65536 같은 큰 수도 구성 가능함
  • 2를 이어 붙여 22나 222로 보거나 복소수와 절댓값을 쓰면, 단순 계산으로는 어려운 수까지 다양한 방식으로 표현할 수 있음
  • 7은 만들기 어려운 수로 알려져 있지만, 감마 함수 같은 도구를 허용하면 네 개의 2로 바로 만들 수 있음
  • Paul Dirac의 일반해는 중첩 제곱근과 밑이 2인 로그를 이용해 임의의 수를 표현하며, 2 = √(2+2) 치환으로 정확히 네 개의 2를 맞춤

네 개의 2로 수를 만드는 기본 규칙

  • 퍼즐의 조건은 숫자 2를 정확히 네 번 쓰고, 다른 숫자 없이 수학 연산만으로 목표 수를 만드는 것임
  • 사칙연산과 분수만으로도 작은 수는 비교적 쉽게 만들 수 있음
    • 1 = (2+2)/(2+2)
    • 2 = 2/2 + 2/2
    • 3 = 2·2 - 2/2
    • 4 = 2+2+2-2
    • 5 = 2·2 + 2/2
    • 6 = 2·2·2 - 2
  • 지수와 팩토리얼을 허용하면 표현 가능한 범위가 크게 넓어짐
    • 18 = 2^(2^2) + 2
    • 28 = (2+2)! + 2 + 2
    • 256 = (2+2)^(2+2)
    • 65536 = 2^(2^(2^2))
  • 숫자를 이어 붙이는 방식도 퍼즐에서 자주 쓰이는 트릭임
    • 26 = 22 + 2 + 2
    • 11 = 22 / √(2+2)
    • 444 = 222 · 2
  • 특히 7은 만들기 까다로운 수지만, 감마 함수를 쓰면 7 = Γ(2) + 2 + 2 + 2로 표현 가능함
  • Math StackExchange 스레드에는 적분, 순환소수, 조합 연산자 등을 활용한 예시가 있음
  • 복소수와 절댓값을 쓰면 12 = |2 + 2√-2|² 같은 표현도 가능함

Dirac의 일반해

  • Paul Dirac은 모든 수에 적용할 수 있는 일반해를 찾았고, 핵심 장치는 중첩 제곱근
  • 2에 제곱근을 반복 적용하면 다음처럼 지수 형태로 정리할 수 있음
    • √2 = 2^(1/2) = 2^(2^-1)
    • √√2 = 2^(1/4) = 2^(2^-2)
    • √√√2 = 2^(1/8) = 2^(2^-3)
  • 제곱근을 n번 적용하면 √√...√2 = 2^(2^-n) 형태가 됨
  • 여기에 밑이 2인 로그를 한 번 취하면 2^-n이 되고, 다시 로그를 취하면 -n이 됨
  • 따라서 임의의 n은 n = -log₂(log₂(√√...√2)) 형태로 표현할 수 있음
  • 원래 식은 숫자 2를 세 번만 쓰므로, 2 = √(2+2)를 이용해 한 자리 2를 대체하면 정확히 네 개의 2를 쓰는 식이 됨
  • 예를 들어 7은 제곱근을 7번 중첩해 다음처럼 표현할 수 있음 7 = -log_{√(2+2)}(log₂(√√√√√√√2))
  • 식 안의 n은 실제 표현에 들어가는 숫자가 아니라 제곱근 반복 횟수를 세기 위한 보조 표기임
  • 결국 모든 수를 표현하는 길은 열리지만, 필요한 만큼 제곱근 기호를 정확히 쓰는 일이 남음

댓글과 토론

Hacker News 의견들
  • 함수를 허용하는 순간 게임의 취지를 버린 느낌이 듦
    예를 들어 감마 함수는 (n-1)!이니, 이제 2 네 개와 1 하나로 7을 만드는 셈임
    함수 호출 안에 숫자를 숨길 수 있다면 항상 성공하는 건 너무 쉬워짐

    • +, -(이항/단항), ×, ÷도 함수이고, 거듭제곱도 함수임. 그렇다면 왜 그것들은 허용해야 하나?
      이런 퍼즐에서는 늘 초등 함수의 범위를 두고 의견이 갈릴 수 있지만, 제곱근을 금지할 필요는 없다고 봄
      감마 함수가 (n-1)!이라는 말에 대해서는, 2도 결국 S(S(0))일 뿐임 (https://en.wikipedia.org/wiki/Peano_axioms)
      Paul Dirac의 구성은 사소하다고 부르기 어렵고, 정말 사소하다고 보는지 아니면 더 단순한 구성을 아는지 궁금함
    • 감마 함수가 나오자마자 처음 든 생각도 같았음
      감마 함수는 허용하면서 다른 함수는 왜 안 되는가? 임의의 함수를 넣으면 게임을 마음대로 풀 수 있게 됨
      결국 글의 시작부터 규칙이 제대로 정의되지 않은 문제라고 봄. 허용되는 함수나 연산 집합을 명시해야 하고, 지식 수준에 따라 문제가 어떻게 확장되는지 보여주려는 의도는 그렇게 고쳐도 유지할 수 있음
    • 결국 재미로 하는 것이고, 감마 함수와 제곱근은 충분히 기본적인 것으로 볼 수 있음
      원한다면 서로 다른 함수 부분집합으로 제한해, 그 안에서 어떤 수가 가능하거나 불가능한지 증명해볼 수도 있음
      글에서도 “수학적 도구”라고 했지 임의의 함수라고 하지는 않았음
    • 지적에는 일리가 있지만, 다른 이들이 말했듯 “함수 허용” 자체가 문제는 아님. 기본 수학 연산도 함수이기 때문임
      다만 정수 튜플을 정수로 보내는 함수 ((Z, Z, ...) -> Z)만 허용하면 원래 게임의 취지는 유지됨
      이렇게 하면 제곱근과 로그는 빠지고, 덧셈·뺄셈·곱셈은 남지만 나눗셈은 빠짐. 팩토리얼 n!과 음이 아닌 지수로의 거듭제곱도 허용 가능함
      이 제약 안에서 일반 해법을 만들 수 있을지 궁금함
    • Dirac 해법에는 감마 함수가 들어가지 않고, 제곱근 N개와 로그 2개만 사용함
  • “아무 수학 연산이나 사용”이라면 쉽고, 그냥 후속자 함수를 쓰면 됨
    S(n) = n+1
    6 = 2*2*2-2
    7 = S(2*2*2-2)
    8 = S(S(2*2*2-2))
    이런 식으로 계속 가능함

    • “다른 숫자를 쓰지 않는다”는 제약을 보면 첫 줄에 1이 들어가는 건 반칙처럼 느껴짐
    • 학교에서 수학을 많이 배웠고 엔지니어링 일을 하며 매일 수학을 쓰며, YouTube 수학 채널도 많이 구독하지만 이 함수는 평생 처음 들어봄
      이 퍼즐에 실제 규칙이 있는 건 아니지만, 이 함수는 전혀 잘 알려진 것 같지 않음
    • 주어진 정수에 대해 2 네 개로 만드는 가장 짧은 식을 찾는 쪽이 더 흥미로운 도전일 듯함
    • 같은 생각을 했음. 제곱근도 표기 뒤에 2를 숨기는 식임
      어떤 연산자를 몇 번 쓸 수 있는지 구체적으로 정하지 않으면 전체 프로젝트가 그다지 일관적이지 않음
    • 람다 대수가 대화에 들어왔음
  • 관련해서 1964년에 26세의 Donald Knuth가 쓴 “Representing numbers using only one 4”도 있음 (https://www.jstor.org/stable/2689238)
    그의 Selected Papers on Fun and Games 10장에도 재수록됐고, 숫자 4 하나와 세 연산 √x(제곱근), ⌊x⌋(바닥 함수), x!(팩토리얼)만 사용함
    모든 정수를 이런 식으로 나타낼 수 있는지에 대한 아직 풀리지 않은 추측으로 끝남
    2011년 책에 붙은 부록은 더 이른 1962년 J. H. Conway와 M. J. T. Guy의 1.5쪽짜리 논문 “π in Four 4's”도 소개함. 둘이 Cambridge 학생이던 때 쓴 비슷한 아이디어임: https://archive.org/details/eureka-25/page/18/mode/1up?view=...
    예를 들어 5 = ⌊√√√√√(4!)!⌋인데, 이는 24!5^326^32 사이에 있기 때문임

  • 나만 그런지 모르겠지만 sqrt(2*2)sqrt(2^2) 대신 sqrt(2+2) 를 쓴 선택이 이상했음
    2=sqrt(2+2)인지 드러나는 이유를 불필요하게 가림

    • 좋은 지적이지만, 저자의 이상한 선택이라고만 보긴 어려움
      글 전체, 각 논증, 전체 논지, 문장, 서식 등 모든 것에 인지 대역폭이 쓰이고 시간 압박도 있었을 수 있음
      비판자는 여유롭게 한 지점에만 집중할 수 있으니 당연해 보이는 것임 :)
    • 어딘가에 비용이 낮은 연산을 보상하는 골프 점수 같은 게 있을 수도 있음
      “Dirac 해킹”은 점수를 많이 먹을 듯함
    • 정말인가? 왜 그런가? 2+2, 2*2, 2^2는 모두 자명하게 4이고 sqrt(4)=2인데, +가 다른 것보다 더 이상한 이유가 뭔지 모르겠음
  • 개인적으로는 간결함 쪽이 더 좋음
    단일 문자 명령을 쓰는 스택 기계를 만들었고, 이 문제의 변형을 풀어야 했음. 숫자는 0부터 9까지만 있었고, 문자 23은 2를 푸시한 뒤 3을 푸시하는 뜻이었음. 실제 숫자 23을 나타내려면 45*3+ 같은 식을 써야 했음
    그래서 각 정수를 가장 적은 문자 수로 인코딩하는 문제가 남았음
    사용할 수 있는 도구는 숫자 0~9, P: Pi, *: (a * b), /: (a / b), -: (a - b), +: (a + b), s: sin(a), c: cos(a), q: sqrt(a), l: log(a), ~: abs(a), #: round(a), $: Math.floor(a), C: clamp(a), <: min(a, b), >: max(a, b), ^: pow(a, b), a: atan2(a, b), %: positiveMod(a, b), !: (1 - a), ?: (a <= 0 ? 0 : 1), o: a xor b scaled by c; ((a*c) xor (b*c))/c, d: 스택 맨 위 복제, :: 맨 위 두 항목 교환, ;: 맨 위와 세 번째 항목 교환이었음
    나중에 복소수 스택으로 이 스택 기계를 다시 만들어 보면 뭘 할 수 있을지 궁금함
    다음에 이런 걸 올릴 때는 휴대폰으로 쓰지 않을 생각임

    • 일반적인 답은 계산 불가능할 수도 있음
      https://en.wikipedia.org/wiki/Kolmogorov_complexity
    • 각 숫자를 “10을 곱하고 그 숫자를 더한다”는 명령으로 만들고, 공백처럼 0을 푸시하는 별도 명령을 두면 어떨까? 그러면 23을 " 23"으로 표현할 수 있음
    • https://www.hacker.org/hvm/ (2008)이 떠오름
    • 꽤 많은 숫자가 9진법이나 10진법으로 인코딩될 것 같음. 대체로 digit + * digit + * 같은 패턴의 반복이나 그와 동등한 형태가 될 듯함
  • “숫자 2를 세 번만 쓴다”는 작은 흠이라지만, 근호 표기가 공통값을 기본값으로 삼아 1/2 제곱을 숨긴다는 사실을 무시하면 그렇다는 것임
    숨겨진 2가 꽤 많음

    • 근호 표기가 뭔가를 정말로 숨긴다고 보긴 어려움. 반 제곱과 거의 같다는 사실은 정리임
      그렇다면 2도 1+1을 숨긴다고 인정해야 하고, 게임은 불가능해지는 걸까?
      고차 다항식보다 이차 다항식이 훨씬 흔하다는 점에서, 제곱근은 임의의 거듭제곱보다 더 기본적으로 느껴짐
      화려한 함수를 허용한 뒤 게임이 우스꽝스러워진다는 지적은 많지만, 개인적으로는 구체적인 규칙 제한 없이도 만족스러운 해법을 찾는 재미가 크다고 봄
  • 관련해서 한 리버스 엔지니어링/CTF 과제가 있었음. 이름은 부정행위를 막기 위해 밝히지 않겠지만, 내 해법은 스택 포인터에 특정 숫자를 더하는 셸코드를 주입하는 것이었음
    그런데 셸코드 전체, 더하는 숫자까지 포함해서 ASCII 영숫자 바이트만 쓸 수 있었음
    그래서 SAT 해결기를 써서 금지된 바이트를 쓰지 않으면서 원하는 수가 되도록 더해지는 숫자 조합을 찾았음
    https://docs.google.com/presentation/d/19K7SK1L49reoFgjEPKCF...

  • 모바일 게임 Tchisla가 떠오름. 주어진 숫자 하나와 몇 가지 연산자, 제곱근과 ! 등을 써서 1000 또는 10000까지 모든 수를 만들어야 하는 게임
    꽤 재미있고, 하다 보면 전략이 생기며 사용자 경험도 단순하고 효율적임. 다만 시간을 엄청 잡아먹는다는 점은 미리 알아야 함
    [0] https://apps.apple.com/fr/app/tchisla-number-puzzle/id110062...

  • 고전적인 네 개의 4 문제가 있고, 어릴 때 “The Man Who Counted”라는 책에서 배웠음
    https://en.wikipedia.org/wiki/Four_fours
    https://en.wikipedia.org/wiki/The_Man_Who_Counted

    • 내가 어릴 때 배운 것도 그 버전임. 내가 만든 이 페이지도 재미있을 수 있음
      The Definitive Four Fours Answer Key
      https://dwheeler.com/fourfours/
    • 바로 그거였음
      그걸로 거짓 귀납법을 배웠음. 사람들이 줄지어 서 있고 등에 뭔가가 붙어 있으며 그게 뭔지 맞혀야 하는 이야기도 좋아했음
  • 대단하긴 한데, 그 sqrt 기호 안에 숨어 있는 2가 너무 많음