1 điểm bởi GN⁺ 2025-02-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài toán đố tạo số chỉ bằng bốn chữ số 2 có thể mở rộng từ câu đố bốn phép tính cơ bản thành một trò chơi toán học nâng cao, tùy theo việc cho phép những phép toán nào
  • Chỉ với phân số và bốn phép tính cơ bản, có thể tạo ra các số từ 1 đến 6; nếu thêm lũy thừa và giai thừa thì còn có thể dựng được các số lớn như 18, 28, 256, 65536
  • Nếu cho phép ghép các chữ số 2 thành 22 hay 222, hoặc dùng số phức và giá trị tuyệt đối, thì có thể biểu diễn cả những số khó tạo bằng phép tính đơn giản theo nhiều cách khác nhau
  • 7 được biết đến là một số khó tạo, nhưng nếu cho phép những công cụ như hàm gamma thì có thể tạo trực tiếp từ bốn chữ số 2
  • Nghiệm tổng quát của Paul Dirac dùng căn bậc hai lồng nhau và logarit cơ số 2 để biểu diễn một số bất kỳ, rồi dùng phép thay 2 = √(2+2) để khớp chính xác bốn chữ số 2

Quy tắc cơ bản để tạo số bằng bốn chữ số 2

  • Điều kiện của câu đố là phải dùng chữ số 2 đúng bốn lần và tạo ra số mục tiêu chỉ bằng các phép toán, không dùng chữ số nào khác
  • Chỉ với bốn phép tính cơ bản và phân số, các số nhỏ có thể tạo ra khá dễ dàng
    • 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
  • Nếu cho phép lũy thừa và giai thừa, phạm vi biểu diễn sẽ mở rộng đáng kể
    • 18 = 2^(2^2) + 2
    • 28 = (2+2)! + 2 + 2
    • 256 = (2+2)^(2+2)
    • 65536 = 2^(2^(2^2))
  • Cách ghép các chữ số lại với nhau cũng là một mẹo thường dùng trong câu đố này
    • 26 = 22 + 2 + 2
    • 11 = 22 / √(2+2)
    • 444 = 222 · 2
  • Đặc biệt, 7 là một số khó tạo, nhưng nếu dùng hàm gamma thì có thể biểu diễn là 7 = Γ(2) + 2 + 2 + 2
  • Trong chuỗi thảo luận trên Math StackExchange có các ví dụ dùng tích phân, số thập phân tuần hoàn, toán tử tổ hợp, v.v.
  • Nếu dùng số phức và giá trị tuyệt đối, ta cũng có các biểu thức như 12 = |2 + 2√-2|²

Nghiệm tổng quát của Dirac

  • Paul Dirac đã tìm ra một nghiệm tổng quát áp dụng cho mọi số, và công cụ cốt lõi là căn bậc hai lồng nhau
  • Nếu lặp lại phép lấy căn bậc hai trên 2, ta có thể viết dưới dạng số mũ như sau
    • √2 = 2^(1/2) = 2^(2^-1)
    • √√2 = 2^(1/4) = 2^(2^-2)
    • √√√2 = 2^(1/8) = 2^(2^-3)
  • Nếu áp dụng căn bậc hai n lần thì có dạng √√...√2 = 2^(2^-n)
  • Lấy logarit cơ số 2 một lần sẽ được 2^-n, rồi lấy logarit thêm một lần nữa sẽ được -n
  • Vì vậy, một số n bất kỳ có thể được biểu diễn dưới dạng n = -log₂(log₂(√√...√2))
  • Biểu thức gốc chỉ dùng chữ số 2 ba lần, nên có thể thay một chữ số 2 bằng 2 = √(2+2) để bảo đảm dùng đúng bốn chữ số 2
  • Ví dụ, số 7 có thể được biểu diễn bằng cách lồng căn bậc hai 7 lần như sau 7 = -log_{√(2+2)}(log₂(√√√√√√√2))
  • Ký hiệu n trong biểu thức không phải là con số thực sự xuất hiện trong cách biểu diễn, mà là ký hiệu phụ trợ để đếm số lần lặp căn bậc hai
  • Cuối cùng, cánh cửa biểu diễn mọi số đều đã mở ra, nhưng vẫn còn việc phải viết chính xác số lượng dấu căn cần thiết

1 bình luận

 
GN⁺ 2025-02-24
Các ý kiến trên Hacker News
  • Ngay khoảnh khắc cho phép dùng hàm, tôi có cảm giác đã vứt bỏ mục đích của trò chơi
    Ví dụ, hàm gamma là (n-1)!, nên giờ chẳng khác nào tạo ra 7 bằng bốn số 2 và một số 1
    Nếu có thể giấu số bên trong lời gọi hàm thì việc luôn thành công trở nên quá dễ

    • +, - (nhị phân/đơn phân), ×, ÷ cũng là hàm, và lũy thừa cũng là hàm. Vậy tại sao lại nên cho phép chúng?
      Trong các câu đố kiểu này, phạm vi của hàm sơ cấp luôn có thể gây tranh luận, nhưng tôi không nghĩ cần cấm căn bậc hai
      Về chuyện nói hàm gamma là (n-1)!, thì rốt cuộc 2 cũng chỉ là S(S(0)) mà thôi (https://en.wikipedia.org/wiki/Peano_axioms)
      Cấu trúc của Paul Dirac khó có thể gọi là tầm thường, và tôi tò mò liệu bạn thật sự xem nó là tầm thường hay biết một cấu trúc đơn giản hơn
    • Ngay khi thấy hàm gamma xuất hiện, tôi cũng nghĩ như vậy
      Nếu cho phép hàm gamma thì tại sao các hàm khác lại không được? Nếu đưa vào một hàm tùy ý, ta có thể giải trò chơi theo bất cứ cách nào
      Rốt cuộc, ngay từ đầu bài viết tôi đã xem đây là một bài toán không được định nghĩa quy tắc rõ ràng. Cần nêu rõ tập hợp hàm hoặc phép toán được phép dùng, và ý định cho thấy bài toán mở rộng ra sao tùy theo mức độ kiến thức vẫn có thể được giữ nguyên sau khi chỉnh như vậy
    • Dù sao thì đây cũng là để vui, và hàm gamma cùng căn bậc hai có thể được xem là đủ cơ bản
      Nếu muốn, cũng có thể giới hạn vào các tập con hàm khác nhau rồi thử chứng minh trong đó số nào có thể hoặc không thể tạo ra
      Trong bài cũng nói là “công cụ toán học”, chứ không nói là hàm tùy ý
    • Nhận xét đó có lý, nhưng như những người khác đã nói, bản thân việc “cho phép hàm” không phải là vấn đề. Vì các phép toán cơ bản trong toán học cũng là hàm
      Tuy nhiên, nếu chỉ cho phép các hàm ánh xạ bộ số nguyên sang số nguyên ((Z, Z, ...) -> Z) thì mục đích ban đầu của trò chơi vẫn được giữ
      Như vậy căn bậc hai và logarit bị loại, cộng·trừ·nhân còn lại nhưng chia thì bị loại. Giai thừa n! và lũy thừa với số mũ không âm cũng có thể được cho phép
      Tôi tò mò liệu trong ràng buộc này có thể tạo ra một lời giải tổng quát hay không
    • Lời giải Dirac không dùng hàm gamma, chỉ dùng N dấu căn bậc hai và 2 logarit
  • Nếu là “dùng bất kỳ phép toán nào” thì dễ thôi, chỉ cần dùng hàm kế tiếp
    S(n) = n+1
    6 = 2*2*2-2
    7 = S(2*2*2-2)
    8 = S(S(2*2*2-2))
    Cứ thế tiếp tục là được

    • Nhìn vào ràng buộc “không dùng chữ số khác”, việc có số 1 ở dòng đầu tiên nghe như phạm luật
    • Tôi đã học khá nhiều toán ở trường, làm công việc kỹ thuật và dùng toán mỗi ngày, cũng đăng ký theo dõi nhiều kênh toán trên YouTube, nhưng đây là lần đầu trong đời tôi nghe đến hàm này
      Câu đố này không có quy tắc thật sự, nhưng hàm này có vẻ hoàn toàn không nổi tiếng
    • Có lẽ thử tìm biểu thức ngắn nhất tạo ra bằng bốn số 2 cho một số nguyên cho trước sẽ là thử thách thú vị hơn
    • Tôi cũng nghĩ vậy. Căn bậc hai cũng là kiểu giấu số 2 đằng sau ký hiệu
      Nếu không quy định cụ thể có thể dùng toán tử nào bao nhiêu lần, toàn bộ dự án này không thật sự nhất quán lắm
    • Giải tích lambda đã bước vào cuộc trò chuyện
  • Liên quan đến chủ đề này còn có “Representing numbers using only one 4” do Donald Knuth viết năm 1964, khi ông 26 tuổi (https://www.jstor.org/stable/2689238)
    Bài này cũng được in lại trong chương 10 của Selected Papers on Fun and Games của ông, và chỉ dùng một chữ số 4 cùng ba phép toán √x (căn bậc hai), ⌊x⌋ (hàm sàn), x! (giai thừa)
    Bài kết thúc bằng một phỏng đoán vẫn chưa được giải: liệu mọi số nguyên có thể được biểu diễn theo cách này hay không
    Phụ lục trong cuốn sách năm 2011 cũng giới thiệu bài báo 1,5 trang còn sớm hơn, “π in Four 4's”, của J. H. Conway và M. J. T. Guy vào năm 1962. Đó là một ý tưởng tương tự mà hai người viết khi còn là sinh viên Cambridge: https://archive.org/details/eureka-25/page/18/mode/1up?view=...
    Ví dụ 5 = ⌊√√√√√(4!)!⌋, vì 24! nằm giữa 5^326^32

  • Không biết có phải chỉ mình tôi không, nhưng lựa chọn dùng sqrt(2+2) thay vì sqrt(2*2) hay sqrt(2^2) trông hơi lạ
    Nó che mất một cách không cần thiết lý do vì sao 2=sqrt(2+2)

    • Nhận xét hay, nhưng khó có thể chỉ xem đó là lựa chọn kỳ lạ của tác giả
      Toàn bộ bài viết, từng lập luận, luận điểm chung, câu chữ, định dạng, v.v. đều tiêu tốn băng thông nhận thức, và có thể còn có áp lực thời gian
      Người phê bình có thể thong thả chỉ tập trung vào một điểm, nên chuyện đó trông có vẻ hiển nhiên thôi :)
    • Có thể ở đâu đó có kiểu điểm golf thưởng cho các phép toán có chi phí thấp
      “Dirac hack” có vẻ sẽ tốn khá nhiều điểm
    • Thật sao? Vì sao vậy? 2+2, 2*2, 2^2 đều hiển nhiên là 4 và sqrt(4)=2, nên tôi không hiểu vì sao + lại lạ hơn các phép kia
  • Cá nhân tôi thích hướng ngắn gọn hơn
    Tôi đã tạo một máy stack dùng lệnh một ký tự, và phải giải một biến thể của bài toán này. Chỉ có các chữ số từ 0 đến 9, và chuỗi 23 có nghĩa là push 2 rồi push 3. Để biểu diễn số 23 thật sự thì phải viết kiểu như 45*3+
    Vì vậy còn lại bài toán mã hóa mỗi số nguyên bằng số ký tự ít nhất
    Các công cụ có thể dùng là chữ số 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: nhân đôi phần tử trên đỉnh stack, :: hoán đổi hai phần tử trên cùng, ;: hoán đổi phần tử trên cùng và phần tử thứ ba
    Sau này tôi tò mò nếu làm lại máy stack này thành stack số phức thì có thể làm được những gì
    Lần tới đăng thứ như thế này chắc tôi sẽ không viết bằng điện thoại nữa

    • Câu trả lời tổng quát có thể không tính được
      https://en.wikipedia.org/wiki/Kolmogorov_complexity
    • Hay là tạo mỗi chữ số bằng lệnh “nhân với 10 rồi cộng chữ số đó”, và có một lệnh riêng push 0 giống như khoảng trắng? Khi đó có thể biểu diễn 23 là " 23"
    • Tôi nhớ đến https://www.hacker.org/hvm/ (2008)
    • Có vẻ khá nhiều số sẽ được mã hóa theo hệ cơ số 9 hoặc hệ thập phân. Nói chung có lẽ sẽ là lặp lại mẫu kiểu digit + * digit + *, hoặc dạng tương đương
  • Nói là một lỗi nhỏ rằng “chỉ dùng số 2 ba lần” thì đúng là vậy nếu bỏ qua việc ký hiệu căn lấy giá trị chung làm mặc định và che giấu lũy thừa 1/2
    Có khá nhiều số 2 bị ẩn đi

    • Khó có thể nói ký hiệu căn thực sự che giấu điều gì đó. Việc nó gần như tương đương với lũy thừa một nửa là một định lý
      Nếu vậy thì cũng phải thừa nhận rằng 2 che giấu 1+1, và trò chơi có trở nên bất khả thi không?
      Vì đa thức bậc hai phổ biến hơn rất nhiều so với đa thức bậc cao, căn bậc hai có cảm giác cơ bản hơn các lũy thừa tùy ý
      Có nhiều ý kiến chỉ ra rằng sau khi cho phép các hàm hoa mỹ thì trò chơi trở nên buồn cười, nhưng cá nhân tôi thấy cái thú lớn nằm ở việc tìm lời giải thỏa mãn ngay cả khi không có giới hạn quy tắc cụ thể
  • Liên quan đến chuyện này, từng có một bài reverse engineering/CTF. Tôi sẽ không nêu tên để tránh gian lận, nhưng lời giải của tôi là chèn shellcode cộng một con số cụ thể vào stack pointer
    Tuy nhiên toàn bộ shellcode, kể cả con số được cộng vào, chỉ được dùng các byte ASCII chữ và số
    Vì vậy tôi dùng một SAT solver để tìm tổ hợp các số được cộng sao cho ra giá trị mong muốn mà không dùng byte bị cấm
    https://docs.google.com/presentation/d/19K7SK1L49reoFgjEPKCF...

  • Tôi nhớ đến game mobile Tchisla. Đó là game phải dùng một số cho trước cùng vài toán tử, căn bậc hai, !, v.v. để tạo mọi số đến 1000 hoặc 10000
    Khá thú vị; chơi một lúc sẽ hình thành chiến lược, và trải nghiệm người dùng cũng đơn giản, hiệu quả. Nhưng nên biết trước là nó cực kỳ ngốn thời gian
    [0] https://apps.apple.com/fr/app/tchisla-number-puzzle/id110062...

  • Có bài toán kinh điển bốn số 4, tôi đã biết hồi nhỏ qua cuốn “The Man Who Counted”
    https://en.wikipedia.org/wiki/Four_fours
    https://en.wikipedia.org/wiki/The_Man_Who_Counted

    • Phiên bản tôi học hồi nhỏ cũng là bản đó. Trang này do tôi làm cũng có thể thú vị
      The Definitive Four Fours Answer Key
      https://dwheeler.com/fourfours/
    • Đúng là nó
      Nhờ nó mà tôi học được quy nạp sai. Tôi cũng thích câu chuyện về những người đứng thành hàng, có thứ gì đó dán sau lưng và phải đoán đó là gì
  • Đúng là ấn tượng, nhưng có quá nhiều số 2 ẩn bên trong ký hiệu sqrt đó