Вот пиксельный шрифт 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.
Самый низкий балл побеждает. В случае связей победит ответ с наибольшим количеством голосов.
источник
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.");
, что то же самое, но короче. Есть еще несколько вещей, которые вы можете улучшить, но это выглядит великолепно!text blocks may not be identical
действительно? Я хочу, чтобы кто-то нарушил это правило, предоставив два одинаковых кодовых блока, которые волшебным образом возвращают разные цифры, когда каждое число точно совпадает с кодом ^^Ответы:
CJam,
2018141312 * 1 = 12Попробуйте онлайн: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
Пустой блок
Сплошной блок
объяснение
Я использовал стратегию, аналогичную решению Sp3000 , так что каждый блок выполняет умножение, сложение и (возможно) операцию по модулю для переменной и сохраняет значение обратно. Чтобы найти оптимальное решение, я использовал старый добрый метод грубой силы. Я написал программу, которая ищет пространство всех возможных начальных значений (начальных значений переменных CJam) и многие миллионы возможных пар функций преобразования, так что выходные данные для каждой цифровой формы уникальны. Затем я отфильтровал результаты по таким, чтобы окончательный результат для цифровых форм, оканчивающихся пустым блоком, которых насчитывается 8, можно было сопоставить с правильным результатом с помощью другой формулы умножения, сложения и модуляции.
После нескольких дней процессорного времени поиска лучший результат до 12! Это решение начинается со значения
11
, функция преобразованияx * 16 + 20
пустого блока, функция результата пустого блока, функцияx % 13
преобразования твердого блока(x + 9) % 33
, и функция результата твердого блокаx / 4
.источник
> <> (Рыба) , 5 * 10 = 50
Пустой блок
Сплошной блок
В этом коде нет логики или арифметики, используются только статические перенаправления указателя 2D-инструкции> <> с «зеркалами» (
/
и\
) и двумя «стрелками» (<
иv
). Единственный другой контроллер потока - это «батут» (!
), который прыгает через следующий символ.IP начинается с левого верхнего угла в восточном направлении. После некоторых перенаправлений он достигает номера, который помещается в стек и распечатывается с помощью,
n
и программа завершается с;
.Поток программы
Блок «распознает» текущее состояние программы из того факта, что в какой момент IP-адрес пришел, и на основе состояния он решает, в каком направлении ему следует освободить указатель (какой блок должен быть выполнен следующим) и в какой точной позиции указатель должен остаться (что будет новым состоянием). Конечно, блоки не выполняют никакой логики, все это поведение происходит от перенаправителей.
источник
CJam,
232219 * 1 = 19Пустой блок:
Твердый блок:
Попробуйте онлайн .
Я пытаюсь повезти с математическими совпадениями и неудачами, так что здесь немного другой подход к отображению уникальности из решения Мартина.
Начните с 16. Пустые блоки добавьте 1 и возьмите по модулю 11. Твердые блоки умножьте на -1, добавьте 11, умножьте на 3, затем возьмите по модулю 13. Это волшебным образом отображает
03456789
(цифры, заканчивающиеся на пустом блоке), к41753026
которым мы используем индексирование чтобы получить право.12
аккуратно отображает89
, что мы можем исправить путем вычитания 7.источник
CJam,
2827 x 1 = 27Вот начало.
Пустой блок
Сплошной блок
Проверьте это здесь. Я не могу дать вам постоянную ссылку с кодом, потому что код слишком длинный, поэтому вам придется скопировать его вручную из фрагмента в задании.
Идея состоит в том, чтобы хэшировать форму следующим образом:
U
.U
к промежуточному итогуW
(который начинается с-1
). В конце мы возьмем это по модулю15
, которое дает уникальные результаты, которые используют для индексации в строке поиска.источник