Задав десятичное число в форме <float>, <precision>
, вы рисуете графическое представление десятичной части (т.е. дроби) с плавающей точкой. Примеры:
Вход:,
6.75, 4
выход:6||| 7 ----
6.75
(первое число из входных данных) - это число, которое нужно объяснить,4
(второе число из входных данных) - это число тире под трубами.6
Этаж 6,75,7
это потолок6.75
. Количество труб этоdecimal part of first input number * second input number
.Вход:,
10.5, 6
выход:10||| 11 ------
Вход:
20.16, 12
выход20|| 21 ------------
.16
на самом деле берет 1,92 трубы, но так как я не могу нарисовать 1,92 трубы, я уменьшу его до 2.Вход:,
1.1, 12
выход:1| 2 ------------
.1
В данном случае это 1,2 трубы, так что она рассчитана на 1 трубу.Также крайний случай. Ввод:
5, 4
(то есть число является целым числом), вывод:5 6 ----
- Число для объяснения - это положительное число, ограниченное только вашими языковыми способностями.
- Число точности является четным целым числом, большим 2 (т. Е. Минимальная требуемая точность равна 4). Это может быть произвольно большим тоже.
- > = n.5 трубы округляются до n + 1 (то есть 1,5 округляется до 2, а 2,5 округляется до 3). <n.5 трубы округляются до n (т.е. 1,4 округляется до 1, а 2,4 округляется до 2).
- Если это будет более удобно для вашего языка, вы можете принять входные данные в виде массива, например
[6.75, 4]
. Если вы берете данные в обратном порядке, то есть[4, 6.75]
, пожалуйста, укажите это в своем ответе.
5.0 4
: это сделать из5
в6
или из4
в5
, или является либо приемлемым? Входные данные1.25 2
: у него есть 0 или 1|
с, и почему (то есть, каково правило округления)? Должен ли первый номер на входе быть положительным? Какова его максимальная точность и величина? Второй номер на входе должен быть положительным? Если это отрицательно, мы рисуем в обратном направлении?Ответы:
CJam, 32 байта
Принимает точность первой и десятичной секунды, разделенных пробелом.
Запустите все тестовые случаи.
объяснение
источник
Mathematica, 119 байт
Я пытался ... Тестирование:
источник
Japt,
4746 байтПросто куча добавления и повторения.
Попробуйте онлайн
источник
(U-Uf)
аналогичноU%1
сохранению двух байтов.Ява,
253206181 байтЗа счет @Kenney удалось сэкономить 47 байт за счет включения условий и переменных, которые использовались один раз, и сортировки избыточных переменных.
Снова сэкономили 25 байт благодаря @Kenney, добавив 2 цикла с троичными операторами.
Манипуляция чистой строкой:
Версия со встроенными циклами (181 байт):
Версия с 4 циклами (206 байт):
Безголовая версия:
Рабочий пример здесь на ideone.com . Полная программа принимает ввод STDIN как
<float>,<precision>
.ПРИМЕЧАНИЕ:
Math.round(float)
раунды Java используютсяRoundingMode.HALF_UP
по умолчанию, что является обязательным поведением OP.Выходные данные предоставленных тестовых примеров были сопоставлены с тем, что предоставил OP.
источник
a
(не используется), настраивая Вас на 233. Вы можете сэкономить еще 23 , чтобы получить в 210 байт: заменаq.length()
сb
экономит 13:int g=(int)f, b=(""+g).length(), c=b, i=0;
. Приращение итератора в состоянии изfor
экономит 6 и встраиваниеd
(используется один раз) экономит 4:int c = b; for(;i++<b;)h+=" "; for(;i++<=b+p;)h+="-"; for(i=c;i<c+Math.round((f-g)*p);i++)q+="|"; for(;i++<p+b;)q+=" ";
.\n
b
устаревает как хорошо ;-) Вы все еще можете сохранить 1 байт в 2 для:for(;i++<=c+p;)
. Вы можете сохранить файл с окончаниями строк Unix на окнах, но, к сожалению, Java не допускает многострочные строки ..for(;i<c+p;)h+=i++<c?" ":"-";for(i=c;i<p+c;)q+=i++<c+Math.round((f-g)*p)?"|":" ";
Javascript ES6,
105104 байтаСохранено 1 байт, благодаря, как вы в любом случае печатаете ՊՓԼՃՐՊՃՈԲՍԼ?
источник
(f,p)=>(i=f|0)+("|"[r="repeat"](j=(f-i)*p+.5|0)+" "[r](p-j))+(i+1)+("\n"+i).replace(/\d/g," ")+"-"[r](p)
\n
реальным переводом строки. И обязательно оберните его в строки шаблона.Haskell, 113 байт
Пример использования:
properFraction
разбивает десятичную дробь на целые и дробные части. Выходные данные представляют собой список частей (начальное число, столбцы, пробелы, ...), которые объединяются в одну строку (через>>=id
).источник
main
оберткой для полной программы).MATL , 49 байт
Использует релиз 6.0.0 языка / компилятора. Работает на Matlab или Octave.
Принимает числа в том же порядке, что и в задании.
Примеры
объяснение
источник
Perl, 90 байт
Ожидается ввод в качестве аргументов командной строки. Сохранить в файл (скажем
90.pl
) и запустить какperl 90.pl 6.75 4
С комментариями
источник
Стек ,
3127 байтПодобно большинству других ответов. Я посмотрю, смогу ли я играть в гольф больше. Входные данные могут быть разделены запятыми, разделены пробелами или почти чем-либо разделены.
Не конкурирует, потому что Stackgoat был сделан после этого испытания
объяснение
источник
Луа, 157 байт
Долго, но не могу найти более короткое решение
Ungolfed
Вы можете проверить lua онлайн , следующие тесты могут быть полезны :)
источник
C,
233231 байтUngolfed:
источник
Python 3,
116108 байтссылка на trinket.io
Спасибо Seeq за сохранение нескольких символов.
Первая версия:
Безголовая версия:
источник
;
. Вы используете толькоh
один раз, поэтому вы должны включить его тоже. Должны сохранить некоторые символы.h
сложнее. Чтобы конкатенация иlen
функция в двух последних строках работали,l
должна быть строка, поэтомуh
ее необходимо заменить наstr(int(l)+1)
. Установкаh
перед преобразованиемl
сохраняет несколько символов.