Написание чисел - это один из миров программирования Hello, часто цифры 1-10.
Я хочу выписать много номеров! Много, много номеров. Но сколько цифр мне нужно написать?
задача
Учитывая целочисленный ввод, укажите в качестве выходного числа число, которое даст мне количество цифр в строке, содержащей все целые числа в диапазоне от 0 до ввода включительно. Идентификатор отрицания ("-") считается одним символом.
Пример ввода / вывода
Вход: 8
Записано: 0,1,2,3,4,5,6,7,8
Выход: 9
Входные данные: 101
записано: 0,1,2,3 ...., 99,100,101
Выходные данные: 196
Вход: 102
выписан: 0,1,2,3 ...., 100,101,102
Выход: 199
Вход -10
Записано: 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10,
выход: 22
Это код-гольф . Наименьшее количество байтов побеждает!
Утилиты Bash + OS X (BSD),
2422 байтаСпасибо @seshoumara за сохранение 2 байта.
Тестовые прогоны на Mac OS X:
Вот версия GNU:
Баш + кореутилс,
4038 байтОпять же, 2 байта сохранены благодаря @seshoumara.
Попробуйте онлайн!
источник
fold -1|wc -l
для подсчета? Это короче.Python 2,
83,7864 байтасамая короткая версия:
эта версия сэкономила 5 байт, благодаря @numbermaniac:
Попробуйте онлайн!
этот я придумал сам после этого (то же количество байтов):
Попробуйте онлайн!
источник
map
на второй линии на 78 байт:print len(''.join(map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
. Вы можете сэкономить еще больше, сделав это лямбда.print sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
lambda x:sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
для 71 байтаJava 7, 74 байта (рекурсивно - включая второй параметр по умолчанию)
Пояснение (1):
Java 7,
8179 байт (цикл - один параметр)Если
0
по какой-либо причине наличие второго параметра по умолчанию для этого рекурсивного подхода не разрешено, вместо этого можно использовать цикл for, подобный этому:Объяснение (2)
Тестовый код:
Попробуй это здесь.
Выход:
источник
RProgN 2 , 5 байтов
Explination
Простое решение, работает как шарм.
Попробуйте онлайн!
источник
Брахилог , 5 байт
Попробуйте онлайн!
Создает диапазон [0, input], преобразует каждое число в строку, объединяет в одну строку и возвращает длину результата
источник
Z
; что с этим? Должно ли это быть в счет?Z
интерпретатору Brachylog, он должен добавить соответствующую оболочку, чтобы сделать функцию тестируемой. (Если вы запустите его как полную программу, она не выдаст никакого вывода.) Здесь мы разрешаем отправку программ или функций, так что это не должно учитываться при подсчете байтов, так как на самом деле это не часть отправки.PHP,
5960 байтOutgolfed Roberto06 - https://codegolf.stackexchange.com/a/112536/38505
Спасибо roberto06 за то, что заметил, что предыдущая версия не работала для отрицательных чисел.
Просто строит массив чисел, помещает его в строку, затем считает цифры (и знак минус)
Пример запуска:
php -f 112504.php 8
источник
join
вместо,implode
потому что это псевдоним.[--9]
Haskell ,
3938 байтПопробуйте онлайн! Редактировать: 1 байт сохранен благодаря @xnor!
Объяснение:
В Haskell для чисел
a
иb
[a..b]
находится диапазон от 1a
доb
1 или 1, в зависимости от тогоb
, больше лиa
. Так что для позитиваn
первый список в[0..n]++[n..0]
это,[0,1,2,...,n]
а второй пустой. Отрицательноn
второй диапазон дает,[0,-1,-2,...,n]
а первый пустой. Однако, еслиn=0
оба диапазона дают список[0]
, объединение[0,0]
может привести к ложному результату2
. Вот почему0
рассматривается как особый случай.=<<
-Оператором в списке так же , какconcatMap
, так что каждое число преобразуется в строку путем ,show
и все эти строки соединяются в одну длинную строку из которойlength
наконец вернулся.До чаевых xnor я использовал
[0,signum n..n]
вместо[0..n]++[n..0]
.signum n
является-1
для отрицательных чисел,0
для нуля и1
для положительных чисел и диапазон формы[a,b..c]
создает список чисел отa
доc
с шагомb
. Тем самым[0,signum n..n]
выстраивает диапазон[0,1,2,...,n]
для положительногоn
и[0,-1,-2,...,n]
отрицательногоn
. Потому чтоn=0
это создаст бесконечный список,[0,0,0,...]
поэтому мы должны обрабатывать его0
как особый случай.источник
[0..n]++[n..0]
следует сделать для[0,signum n..n]
.PHP,
4135 байтСохранено 6 байтов благодаря пользователю 59178
Так как ответ was был неверным для отрицательного вклада, я взял на себя задачу найти новое решение:
Эта функция:
0
до$argv[1]
(он же ввод)Попробуй это здесь!
источник
preg_match()
:(range()
если бы не твое решение, я думаю, что мы даже;)join()
вместоimplode()
. это псевдоним для того же. php.net/manual/en/function.join.phpimplode
, но я не знал, что могу опустить параметр gue. Благодарность !Рубин ,
20 2629 байтПопробуйте онлайн!
источник
R,
2620 байтsum(nchar(0:scan()))
Очень простой подход:
Сделать вектор 0: x
Подсчитать символы в каждом значении (будет автоматически приведено к строке)
Не уверены, есть ли какие-нибудь хитрости, чтобы сократить определение функции?6 байт были сохранены благодаря Джузеппе, взяв вместо этого входные данные из стандартного ввода.источник
sum(nchar(0:scan()))
вместо этого и читатьn
со стандартного ввода вместо этого.Mathematica,
484746 байт-1 байт благодаря Мартину Эндеру !
Анонимная функция, принимающая число в качестве аргумента.
Сокращенное решение от Грега Мартина , 39 байт
источник
Sign@#
для#/Abs@#
.1-#~Min~0+Tr@IntegerLength@Range@Abs@#&
. Первоначально1
учитывается цифра 0, а-#~Min~0
учитываются все отрицательные знаки, если ввод отрицательный.Пакет, 110 байт
Вычисляет
sum(min(0,abs(n)+1-10^k),k=0..9)+(n<0?1-n:1)
. (Мне нужно только идти9
из-за ограничений целочисленной арифметики Пакета.)источник
Python 2 , 68 байт
Попробуйте онлайн!
Дольше, но отличается от других решений Python. Определяет рекурсивную функцию, которая называется, например,
f(10)
источник
MATL , 11 байт
Попробуйте онлайн!
источник
PowerShell , 23 байта
Попробуйте онлайн! (будет работать на TIO для очень больших (абсолютных) входов)
Использует
..
оператор диапазона для построения диапазона от0
входного$args
(приводится как строка для преобразования из входного массива). Он-join
объединяется в строку (например,01234
), а затемLe
берется ngth. Это остается на конвейере и вывод неявный.источник
Perl 6 , 18 байт
Попытайся
Expanded:
источник
QBIC , 25 байтов
Объяснение:
источник
JavaScript, 50 байт
Сотрудничал с @ETHproductions
источник
Bash + GNU coreutils, 28
Попробуйте онлайн .
источник
Сетчатка , 28 байт
Попробуйте онлайн!
объяснение
Преобразуйте число в одинарное, не трогая знак.
Каждый 1 заменяется всем до себя плюс новая строка. При этом мы получаем диапазон от 1 до n, если n был положительным, от -1 до n с дополнительным
-
в начале, если он был отрицательным. Все числа в одинарных и разделены переводами строк.Преобразуйте каждую последовательность единиц в соответствующее десятичное число.
Поставь
0
в начале, заменив лишнее,-
если оно там есть.Подсчитайте количество (не новых) символов.
источник
Emacs, 20 байт
Сама команда состоит из 20 нажатий клавиш, но мне нужно уточнить, как это следует считать байтами. Я полагал, что подсчет каждого нажатия клавиши как 1 байта был бы наиболее справедливым. Команда выше написана условно для удобства чтения.
объяснение
Начните определять макрос клавиатуры.
Создать новый счетчик макросов. Пишет
0
в буфер; значение счетчика теперь равно 1.Конец определения макроса клавиатуры.
После нажатия META, введите ваш номер ввода.
C-x e
Затем выполняет макрос , который во много раз.Установите метку в начало буфера (который выбирает весь текст, сгенерированный таким образом).
Выполнить подсчет символов в выбранном регионе. Количество символов будет напечатано в минибуфере.
пример
Извиняюсь за ужасную подсветку цвета. Это пример использования этой команды со входом 100. Выход находится в минибуфере внизу экрана.
источник
Луа, 52 байта
Перебирает цикл for с 0 - ввод, преобразует целое число
i
в строку и добавляет длину строкиt
перед печатью.t
источник
Perl 5 , 32 байта
31 байт кода +
-p
флаг.Попробуйте онлайн!
источник
C #,
7773 байта-4 байта благодаря @Kevin Cruijssen
Лямбда-функция:
Неуправляемый и с тестовыми случаями:
источник
while
чтобыfor
сохранить пару байтов:(r)=>{var l="";for(int i=0,s=r<0?-1:1;i!=r+s;i+=s)l+=i;return l.Length;};
( 73 байта )Func<int, int>
вы можете вызывать такие функции, какr=>...
сохранение 2 байта (возможно, это можно сделать в любом случае).JavaScript, 44 байта
источник
REXX, 56 байт
источник