В то время, пока я рисовал на бумаге с квадратными линиями, я придумал вышеуказанный шрифт для цифр. Если вы еще не заметили это, пробелы между вышеупомянутыми формами дают золотое сечение 1.618033988749 . В этой задаче ваша задача - взять число в качестве входного и отобразить его точно так, как показано в примере выше.
Вот как они созданы. Все линии будут на регулярной сетке, так что отдельные цифры состоят из небольшого числа ячеек сетки. Вот формы из 10 цифр (мы будем игнорировать десятичную точку для этой задачи):
Да, 7 отличается от примера золотого сечения в верхней части. Я вроде все испортил. Мы пойдем с этим.
Обратите внимание, что каждая цифра имеет пять ячеек и три ячейки. Чтобы отобразить число, вы можете представить, что все его цифры расположены рядом друг с другом, так что между каждой парой цифр ровно один пустой столбец. Например, принимая в 319
качестве входных данных, мы написали бы:
Обратите внимание, что мы добавляем один ведущий и завершающий пустой столбец. Теперь мы инвертируем ячейки:
На выходе должны быть границы результирующих полигонов:
Конечно, вы можете сгенерировать результат любым другим способом, если визуализированный вывод выглядит одинаково.
вход
- Вы можете написать программу или функцию, используя ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции, в виде строки или списка цифр. (Вы не можете взять число, так как это не позволит вам поддерживать ведущие нули.)
- Вы можете предположить, что на входе не будет больше 16 цифр.
Выход
- Вывод может отображаться на экране или записываться в файл в обычном формате изображения.
- Вы можете использовать как растровую, так и векторную графику.
- В любом случае соотношение сторон ячеек базовой сетки должно быть равно 1 (то есть ячейки должны быть квадратами).
- В случае растровой графики каждая ячейка должна охватывать не менее 20 на 20 пикселей.
- Строки должны быть не шире, чем 10% размера ячейки. Я готов дать один или два пикселя, так как здесь есть псевдонимы.
- Линии и фон могут быть любыми двумя четко различимыми цветами, но формы, созданные линиями, не должны заполняться (то есть внутренняя часть должна быть также цветом фона).
- В каждом замкнутом контуре не должно быть пробелов.
- Конечно, весь результат должен быть виден.
Тестовые случаи
Вот 10 входов, которые вместе охватывают все возможные пары соседних цифр, а также все возможные начальные и конечные цифры:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
И вот ожидаемые результаты для тех:
Убедитесь, что ваш код также работает, когда ему дается одна цифра (я не хочу включать ожидаемые результаты здесь, потому что они должны быть очевидными, а раздел тестового примера достаточно раздутый).
источник
Ответы:
BBC BASIC, 182 символа ASCII (токенизированный размер файла 175 байт)
Скачать переводчик можно по адресу http://www.bbcbasic.co.uk/bbcwin/bbcwin.html.
Оценка. Когда вышеуказанная программа вставляется в редактор и запускается, редактор расширит сокращенные ключевые слова до полных ключевых слов на экране, хотя на самом деле они составляют всего 1 байт после токенизации. (Пример
I.
=INPUT
объем памяти 1 байт.)объяснение
Я просто объясню, что делает линия VDU: она рисует прямоугольник, переворачивая текущий цвет пикселя на экране. Это означает, что (с небольшой осторожностью с углами) можно просто нарисовать одну ячейку рядом друг с другом, и промежуточный край будет отменен и исчезнет из-за двойного рисования.
При внимательном рассмотрении будет выявлено, что верхний правый и нижний левый углы ячейки нарисованы, но верхний левый и нижний правый отсутствуют («закруглены») для выполнения этой работы.
После отрисовки ячейки графический курсор перемещается вверх на 32 пикселя, готовый для рисования следующей ячейки.
Остальная часть программы представляет собой довольно простую декомпрессию растрового изображения ASCII. Размеры ячейки составляют 64x64 единицы для игры в гольф / совместимости с тем, как распаковывается растровое изображение.
q
управляет размером отображаемой ячейки: 64x64 единиц для ячейки, которая присутствует, 0x0 для ячейки, которая отсутствует.Код без правил
Выход
В
MOVE
s только получить выход на соответствующие высоты на экране. В этом режиме BBC basic использует 2 единицы = 1 пиксель, поэтому ячейки на самом деле имеют размер 32x32 пикселя.источник
Октава,
233 225 216213 байтВот первый тестовый пример (из снимка экрана с измененным размером, но он подходит моему монитору =):
Ввод может быть произвольной длины, например, например
'07299361548'
источник
Javascript ES6, 506 байт
Ungolfed:
Предполагается, что есть
<body>
возможность добавить холст, протестированный в Firefox 46.Пример выполнения (назначение анонимной функции для f):
выходы:
источник
HTML + JavaScript ES6, 352
Тест бегущего фрагмента ниже
Меньше гольфа
источник
Java, 768 байт
Ungolfed
Заметки
Ввод является единственной строкой в качестве аргумента. Как использовать:
javac G.java
,java G 80085
Я начинаю с черного холста, затем добавляю цифры в виде белых позитивов. Я создаю копию изображения, а затем переворачиваю каждый черный пиксель с 4 черными соседями на исходном изображении.
Выходы
Некоторые однозначные цифры:
источник
R, слишком много байтов для гольфа (
1530+1115)LOL при записи на диск, а затем при чтении с диска отредактируйте черную заливку.
источник
Python 3,
326325 байтисточник
range(3)
это никогда не стоит.C #, 768
773 776байтПринимает число в качестве аргумента командной строки. Выводит красивое, чистое, не сглаженное изображение BMP с номером в качестве имени.
Оригинал до игры в гольф:
источник
Mathematica 328 байтов
объяснение
Четыре бита будут использоваться в каждой из 5 строк ячеек для каждой входной цифры.
"75557262277174771717557117471774757711117575775717"
представляет от 0 до 9 как растровые изображения.Первые 5 цифр большого целого числа выше, а именно
75557
указывают, как должна отображаться каждая строка массива для нуля.7
будет представлять{0,1,1,1}
собой белую клетку, за которой справа будут 3 черные клетки; ведущий0
- это пробел для разделения отображаемых цифр.5
соответствует{0,1,0,1}
, то есть белым, черным, белым, черным клеткам.Ниже приведен список правил замены:
Обратите внимание, что при
3
вводе он будет заменен на71717
Это представление выражается в двоичном виде:Его черно-белая обратная сторона определяется простым обменом
1
s и0
s.Давайте посмотрим, что
p
иq
как выглядит при отображенииArrayPlot
:Это просто объединяет массивы нулей и единиц для каждой цифры перед рендерингом большого массива через
ArrayPlot
.*
определяетсяj
как окончательное вертикальное пространство после последней цифры.источник