Đây là phông chữ pixel 5 x 7 cho các chữ số từ 0 đến 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Phông chữ này và trang này có thể sẽ trông tốt hơn nếu bạn chạy mã JavaScipt này trong bảng điều khiển trình duyệt của bạn hoặc trong thanh URL có tiền tố là javascript:
: $('#question pre,.answer pre').css('line-height',1)
.)
Viết hai khối văn bản hình chữ nhật có kích thước bằng nhau, một để biểu thị các khoảng trắng ( .
) trong phông chữ ở trên và một để biểu thị các khoảng trắng ( █
).
Khi hai khối văn bản này được sắp xếp thành cùng một mẫu 5 × 7 với một trong các chữ số ở trên, thì khối văn bản lớn kết quả sẽ là một chương trình in chữ số đó thành thiết bị xuất chuẩn. Điều này sẽ làm việc cho tất cả 10 chữ số.
Ví dụ: nếu .
khối văn bản của bạn là
---
'''
và █
khối văn bản của bạn là
ABC
123
sau đó là chương trình
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
nên đầu ra 0
. Tương tự, chương trình
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
nên xuất ra 1
, và cứ thế lên chương trình cho 9
.
Bạn có thể sử dụng đoạn mã ngăn xếp này để tạo các chương trình hình chữ số:
<style>textarea{font-family:monospace;}</style><script>function go(){var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");for(var e=document.getElementById("empty").value.split("\n"),n=document.getElementById("filled").value.split("\n"),l=[],o=0;o<7*e.length;o++){l[o]="";for(var d=0;5>d;d++)l[o]+=font[t][Math.floor(o/e.length)][d]?n[o%n.length]:e[o%e.length]}document.getElementById("output").value=l.join("\n")}font=[[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,0,1,0,0],[1,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,1,0,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,0,0,1,0],[1,0,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,0,1,0]],[[1,1,1,1,1],[1,0,0,0,0],[1,0,0,0,0],[0,1,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]]]</script><textarea id='empty' rows='8' cols='32' placeholder='empty space text block...'></textarea><textarea id='filled' rows='8' cols='32' placeholder='filled space text block...'></textarea><br>Digit <input id='digit' type='text' value='0'> <button type='button' onclick='go()'>Generate</button><br><br><textarea id='output' rows='16' cols='64' placeholder='output...' style='background-color: #eee;' readonly></textarea>
Chi tiết
- Không ai trong số 10 chương trình khối văn bản lớn nên yêu cầu đầu vào. Chỉ xuất ra một chữ số cộng với một dòng mới tùy chọn. Đầu ra cho thiết bị xuất chuẩn hoặc một sự thay thế tương tự.
- Không ai trong số các chương trình có thể đọc hoặc truy cập mã nguồn của riêng họ. Hãy đối xử với này giống như một nghiêm ngặt Quine thách thức.
- Các khối văn bản có thể không giống hệt nhau và phải có kích thước khác không.
- Các khối văn bản có thể chứa bất kỳ ký tự nào ngoại trừ dấu kết thúc dòng .
- 10 chương trình phải là các chương trình chính thức được viết bằng cùng một ngôn ngữ, chúng không phải là các đoạn REPL . Bạn có thể tùy ý thêm một dòng mới vào tất cả chúng hoặc không ai trong số chúng.
Chấm điểm
Điểm của bạn là diện tích (chiều rộng lần chiều cao) của một trong các khối văn bản của bạn. (Chúng có cùng kích thước nên không có điểm nào trong việc đếm cả hai khối.) Diện tích của ví dụ là 3 trên 2, cho điểm 6.
Điểm thấp nhất sẽ thắng. Trong trường hợp quan hệ, câu trả lời được bình chọn cao nhất sẽ thắng.
text blocks may not be identical
có thật không? Tôi muốn thấy ai đó phá vỡ quy tắc này, bằng cách đưa ra hai loại tiền mã hóa giống hệt nhau, trả lại một cách kỳ diệu các chữ số khác nhau, khi mọi số đều chính xác cùng một mã ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
có thể được viết làvar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, giống nhau nhưng ngắn hơn. Có một vài điều nữa bạn có thể cải thiện trong đó, nhưng nó trông thật tuyệt!