Tallying - это простая система подсчета, которая работает на базе 5. В мире существуют различные системы подсчета, но в большинстве англоязычных стран, пожалуй, самая простая - подсчитывать единицы измерения, отмечая вертикальные линии, а затем каждая пятая отметка ставит горизонтальную линию через предыдущую коллекцию из четырех. Это объединяет метки в группы по 5 (и их легче быстро подсчитать).
Вы собираетесь написать программу, которая отображает метки до заданного значения. Но подсчет только в базе 5 скучно! Следовательно, ваша программа также должна отображать результаты в разных базах.
вход
Входными данными будут одно или два неотрицательных целочисленных значения, разделенных запятой (например, 9
или 8,4
). Первое число - это значение, которое должно отображаться в подсчете. Второе значение является основой подсчета. Если второе значение не указано, используйте базу 5 .
Выход
Выходными данными будет введенное значение, представленное в виде художественных меток ASCII. Вот несколько примеров, с которыми вы можете протестировать свою программу - ваши результаты должны точно соответствовать им!
Вход: 12
или12,5
| | | | | | | | | |
-+-+-+-+- -+-+-+-+- | |
| | | | | | | | | |
Входные данные: 7,3
| | | | |
-+-+- -+-+- |
| | | | |
Входные данные: 4,2
| |
-+- -+-
| |
Ввод: 6,1
или 6,10
(обратите внимание на начальные пробелы)
| | | | | |
| | | | | |
| | | | | |
Также обратите внимание, что основание 1 должно быть непоследовательным - следует использовать только вертикальные линии.
Если любое из введенных значений равно 0, никакого вывода не должно быть (и ваша программа должна завершиться изящно).
правила
- Это код-гольф , поэтому выигрывает самая короткая правильная реализация (в байтах).
- Ввод / вывод может быть на любом подходящем носителе (например, stdin / stdout, file ...).
- Ввод может быть в форме нескольких аргументов командной строки или разделенных пробелами и т. Д., Если он больше подходит для вашего целевого языка.
- Конечные переводы строк разрешены в выходных данных. Конечные пробелы не являются. Это правило применяется только тогда, когда есть выход (т.е. не когда введенное значение равно 0).
- Ваш код должен по умолчанию использовать базу 5, если база не введена.
6,1
выглядеть больше как-+- -+- -+- -+- -+- -+-
?-+-
будет представлять два, потому что есть вертикальная линия и горизонтальная оценка через нее. База 1 будет иметь только вертикальные линии. @AndoDaan исправлено.--- --- --- --- --- ---
тогда Для согласованности с другими основаниями вы должны наносить горизонтальный удар поb-1
вертикальным линиям. Если он предназначен для непоследовательности, вы должны заявить об этом явно.Ответы:
CJam 103 85 72 символа
Попробуйте это на http://cjam.aditsu.net/ .
оригинал
Работает, определяя один набор чисел с пробелами, линиями и l для пробелов, которые должны оставаться пробелами. Затем использует функцию er (транслитерации) для создания второй строки. Наиболее неэффективная часть имеет дело с 1 и 0 частными случаями. Буду редактировать как я его улучшу. Совет Мне потребовалось слишком много времени, чтобы понять: поскольку второй вход, равный 1, равен бесконечности или первому входу +1, переопределение его, когда оно равно 1, экономит много работы.
наиболее улучшенный до сих пор с запятой
наиболее улучшенный до сих пор с вводом через пробел
Естественно, CJam действительно предназначен для ввода с разделителями. Размещение ввода в 20 3 вместо 20,3 является огромным преимуществом.
источник
Python 2 -
111 108 119 144 140 136 135134 - ПопробуйтеХорошо, давайте попробуем:
Изменить: я упустил из виду, что не должно быть никакого вывода, если
n==0
илиb==0
. Это стоит мне 11 символов. :(Изменить: Хорошо, после исправления второй проблемы, упомянутой в комментариях, мое решение в основном сходится с решением от BeetDemGuise.
источник
b
должно быть 5 в этом случае). Я сделаю это более ясным в вопросе. Изменить: о, неважно, вы исправили это так же, как я сделал этот комментарий!n/b
вместоn//b
?Bash,
239 228 199 189188Вот моя попытка, это может быть много в гольфе.
Примечание: вторая строка не вычитает 5 из 2, она устанавливает значение по умолчанию, если
$2
оно пустое!источник
{1..$n}
вместо`seq $n`
?h=8;echo {1..$h}
выходы{1..8}
Питон -
171143Программа довольно проста:
t,b
. Если это не помогло, просто назначьте правильные значения.1
, измените ее значение на то, что может легко обрабатывать все вертикальные линии (t+1
).t
иb
не равны нулю.РЕДАКТИРОВАТЬ 1: Используйте
input
функцию, а неraw_input
после некоторой игры.РЕДАКТИРОВАТЬ 2: Спасибо Falko за указание на небольшую ошибку с моей ненулевой проверкой. Теперь наш код в основном идентичен, за исключением некоторых имен переменных и небольшой логики.
РЕДАКТИРОВАТЬ 3: Благодаря тому, как Python сравнивает последовательности и различные типы , мы можем сравнить
i
с,list
чтобы получить более короткую версию нашегоtry...except
блока.Вот негольфированная версия:
источник
t&b
этоFalse
за 10,5. В противном случае наши решения сходятся! ;)i
является ли скаляр или список. Тогда мы могли бы броситьtry ... except
монстра.list
всегда больше, чем int. Кроме того,list
s сравниваются в лексикографическом порядке. Так что, если мы сравним[0]<i
это всегда вернется,False
еслиi
это число, аTrue
еслиi
это список (с ненулевым первым элементом).Ява, 343
Меньше гольфа:
источник
i
long
i++%b>0
i++<n%b
b=b<2?(int)2e9:b
Perl -
167165156ungolfed
источник
С - 193
Мне очень жаль. Работа с особым случаем для 1 была немного плохим взломом, поэтому я думаю, что это может быть лучше в гольф с лучшим подходом. Кроме того, этот код включает новую строку в начале вывода, поэтому, если это не разрешено, пожалуйста, дайте мне знать.
Конечно, очень некрасивые определения всегда помогают :)
Количество символов включает только необходимые пробелы и новые строки.
источник
printf
сputs
, и заменойreturn
с тройным оператором.puts
том, что он добавляет новую строку каждый раз :(. А для троичного оператора невозможно добавитьreturn
s илиfor
s внутри них!. Ваш комментарий дал мне идею сохранить еще несколько символов очень легко удалив,return
хотя. Спасибо!C # 271 байт
Не самое короткое, я не смог обработать входные данные, потому что ему нужно было принять 0 в качестве входных данных.
Форматированный код:
источник
Lua -
219203 байтаЯ пошел для изготовления d копий b копий "|", затем добавил r копий "|" в конце. Я чувствую, что, возможно, мне следовало бы идти с «подсчетом» на «|» в строке по одному.
ungolfed:
Образец:
источник
JavaScript (193)
Это может быть слишком сложно.
Комментируемая версия
источник
Питон -
127123122Просто крадусь с немного более короткой версией Python.
edit: исправлено 0 не печатать ничего и rejigger, в конечном итоге одинаковой длины
источник
C (207 символов)
Новая строка справа
exit
предназначена только для разборчивости.scanf
Использование бесстыдно украдено у Allbeert. Обратите внимание, что это решение не компилируется с gcc, поскольку оно пытается применить несуществующий прототип дляexit
. Компилировать с работающим компилятором C, какtcc
. Кроме того, эта функция может работать или не работать на 64-битных платформах. Используйте с осторожностью.Вот оригинальная реализация ungolfed, на которой это основано:
источник
Python 2 ,
134126123114 байтовПопробуйте онлайн!
Старый вопрос, который я знаю, но в любом случае интересно попробовать. Шанс опробовать несколько трюков, которые я выучил с тех пор, как присоединился.
источник