Сначала изучите эту головоломку, чтобы почувствовать, что вы будете производить.
Ваша задача - написать программу или функцию, которая будет выводить круглую графику, подобную изображенной в головоломке, с числом (основание 10) от 1 до 100 (включительно). Это похоже на этот вызов , за исключением того, что вы будете создавать графические, а не римские цифры. Следующие кружки представляют цифры 1-10 слева направо:
Поскольку ответ на загадку гласит, ваша графика должна читаться как римская цифра изнутри, где толщина линии представляет символы римской цифры, а весь рисунок представляет число. Для справки, вот толщина линий, которые вам понадобятся. Каждая строка должна иметь отступ в 3 пикселя между ней и следующей.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
Пожалуйста, опубликуйте образец или два ваших вывода. Предположим, что ввод правильный, стандартные лазейки и т. Д. И т. Д. Это кодовый гольф, поэтому выигрывает меньшее количество байтов. В случае ничьей побеждает большинство голосов. Удачи!
Ответы:
Mathematica -
166181 байтНемного более лаконично, чем другой ответ Mathematica, отчасти благодаря стилю без очков.
Все пробелы только для ясности. Это определяет анонимную функцию, которая возвращает желаемую графику.
Анимация
Создание анимированного GIF из числовых кругов тривиально в Mathematica, которая имеет встроенные функции для анимации и экспорта последовательностей произвольных объектов. Предполагая, что приведенный выше код был только что выполнен,
Пример вывода
источник
Обыкновенный Лисп -
376331304 байтаПримеры
(1) (24)
(104) (1903) (3999)
Анимация
Для номеров от 1 до 400:
NB: для записи, эта анимация выполняется следующим образом:
У меня есть измененная версия кода с именем
rings
которая возвращает ширину полученного изображения. Следовательно, результатом следующего цикла является максимальный размер, здесь 182 :Весь цикл занимает 9,573 секунды. Это дает примерно 24 мс для каждого целого числа. Затем в оболочке:
Ungolfed
Пояснения
Функция принимает целое число
N
от 1 до 3999 и имя файлаЯ использую,
(format nil "~@R" N)
чтобы преобразовать из десятичной в римскую. Например:~@R
Строка управления форматом задается для работы для целых чисел от 1 до 3999, поэтому существует ограничение на диапазон допустимых входных сигналов.Я перебираю полученную строку, чтобы построить список,
P
содержащий(radius width)
пары, для каждой цифры C.Ширина - это простое линейное отображение: я использую постоянную строку «IVXLCDM», чтобы вычислить позицию C в ней. Умножая на два и добавляя один, мы получаем желаемое значение:
Это, однако, сделано немного по-другому в версии для гольфа:
Вычисление каждого радиуса учитывает ширину каждого кольца, а также пустые пространства между кольцами. Без какой-либо оптимизации скорости вычисления остаются точными, потому что они основаны не на числах с плавающей запятой, а на рациональных числах.
Изменить : я изменил параметры, чтобы соответствовать правилам заполнения.
Как только это будет сделано, я знаю требуемый размер результирующего холста (в два раза больше последнего вычисленного радиуса).
P
и сохраняю холст.источник
HTML + JQuery, 288
HTML
JS
Показать фрагмент кода
скрипка
источник
Ява, 565
Примеры
15
84
93
Отформатировано красиво:
источник
Mathematica 9 -
301249 байт: D Это обманывает, используя встроенное преобразование в римские цифры, но эй.
(Когда я делал это прошлой ночью, у меня не было много времени, но я понял, что его можно играть в гольф намного больше. И я также взял некоторые подсказки от Дэвида Чжана ...: D Спасибо!)
Немного более четко:
Это функция, которую вы можете вызвать так:
Или вы можете показать результаты значений от a до b с помощью:
Table[r[i],{i,a,b}]
Примечание : это работает только для значений до 399.
источник
Python 2,
322296Сценарий считывает число, которое нужно преобразовать из стандартного ввода, и выводит изображение в виде разметки SVG.
.. Я использую «красный» вместо «черный», потому что это экономит 2 символа :)
Here are some samples : for 23 : http://jsfiddle.net/39xmpq49/ for 42 : http://jsfiddle.net/7Ls24q9e/1/
источник
JavaScript
342334308источник