Вот пиксельный шрифт 5 на 7 для цифр от 0 до 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Этот шрифт и эта страница, вероятно, будут выглядеть лучше, если вы запустите этот код JavaScipt в консоли браузера или в строке URL с префиксом javascript:
:. $('#question pre,.answer pre').css('line-height',1)
)
Напишите два прямоугольных блока текста одинакового размера, один для представления пустых пробелов ( .
) в шрифте выше, а другой для представления заполненных пробелов ( █
).
Когда эти два текстовых блока расположены в одном и том же шаблоне 5 × 7, как одна из цифр выше, тогда полученный большой текстовый блок должен быть программой, которая печатает эту цифру в стандартный вывод. Это должно работать для всех 10 цифр.
Например, если ваш .
текстовый блок был
---
'''
и ваш █
текстовый блок был
ABC
123
тогда программа
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
должен выводить 0
. Точно так же программа
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
должен выводить 1
и так далее до программы для 9
.
Вы можете использовать этот фрагмент стека для создания программ в форме цифр:
<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>
Детали
- Ни одна из 10 больших программ с текстовыми блоками не требует ввода. Выведите только одну цифру плюс дополнительный завершающий перевод строки. Вывод на стандартный вывод или подобную альтернативу.
- Ни одна из программ не может читать или получать доступ к своему собственному исходному коду. Относитесь к этому как к строгой проблеме Куайна .
- Текстовые блоки могут не совпадать и должны иметь ненулевые размеры.
- Текстовые блоки могут содержать любые символы, кроме разделителей строк .
- 10 программ должны быть полноценными программами, написанными на одном языке, они не являются фрагментами REPL . При желании вы можете добавить завершающий символ новой строки для всех или ни одного из них.
счет
Ваша оценка - это область (ширина умноженная на высоту) одного из ваших текстовых блоков. (Они имеют одинаковый размер, поэтому нет смысла считать оба блока.) Площадь примера - 3 на 2, для оценки 6.
Самый низкий балл побеждает. В случае связей победит ответ с наибольшим количеством голосов.
text blocks may not be identical
действительно? Я хочу, чтобы кто-то нарушил это правило, предоставив два одинаковых кодовых блока, которые волшебным образом возвращают разные цифры, когда каждое число точно совпадает с кодом ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
можно записать какvar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, что то же самое, но короче. Есть еще несколько вещей, которые вы можете улучшить, но это выглядит великолепно!