В России у нас что-то вроде традиции: нам нравится искать счастливые билеты.
Вот как выглядит обычный билет:
Как видите, билет имеет шестизначный номер.
Шестизначное число считается счастливым, если сумма первых трех цифр равна сумме трех последних.
Цифре на фото не повезло:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Вызов
Учитывая пределы диапазона (включительно), верните количество счастливых номеров билетов, содержащихся в нем.
параметры
- Ввод: 2 целых числа: первое и последнее целые числа в диапазоне
- Входы будут между 0 и 999999 включительно
- Вывод: 1 целое число: сколько счастливых чисел в диапазоне
- Вы можете взять входные данные и вернуть выходные данные в любом приемлемом формате
- Допустим, начальные нули для чисел меньше 100000.
Примеры
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах на каждом языке.
Ответы:
05AB1E ,
8 (или 10?)11 (или 13?) БайтовПопробуйте онлайн или проверьте еще несколько тестов .
ПРИМЕЧАНИЕ. В 05AB1E строки и целые числа взаимозаменяемы, поэтому выходные числа не содержат начальных нулей. Однако это можно исправить с помощью 1 дополнительного байта ( 12 байтов ):
Попробуйте онлайн или проверьте еще несколько тестов .
+3 байта для исправления ошибок длиной 3 или менее (диапазон
[000000, 000999]
).Объяснение:
РЕДАКТИРОВАТЬ: Кажется, я (и большинство других ответов) немного неверно истолковал задачу и количество цифр спрашивается вместо самих чисел в пределах диапазона. В этом случае
}g
можно добавить трейлинг (закрыть фильтр и получить количество чисел, оставшихся в отфильтрованном списке), поэтому вместо него будет1013 байт :Попробуйте онлайн или проверьте еще несколько тестов .
источник
R
.C # (.NET Core) , 93 + 18 = 111 байт
Попробуйте онлайн!
18 байт для
using System.Linq;
. Я предполагал, что форматы ввода и вывода могут быть гибкими. Поэтому в качестве входных данных я беру два целых числа (диапазон включительно).Некоторые результаты теста:
источник
JavaScript (ES6), 66 байт
Принимает ввод в синтаксисе карри
(m)(n)
, где m -исключительнаявключающая верхняя граница, а n - включающая нижняя граница.Попробуйте онлайн!
Как?
Мы проверяем каждое число , просматривая его цифры d i и обновляя общее t :n di t
Если в конце процесса , то n - счастливое число.t=0 n
JavaScript (ES6), 67 байт
Тот же формат ввода.
Попробуйте онлайн!
Как?
Для каждого числа :n
38937 --> 38.937
['3','8','.','9','3','7']
+
:"3+8+.+9+3+7"
+.
на^
:"3+8^+9+3+7"
24
Если , десятичная точка не генерируется, и вычисленное выражение является просто положительной суммой (ложь), если только n = 0 (верно). Это ожидаемый результат в обоих случаях.n≡0(mod1000) n=0
источник
Рубин ,
5654 байтаПопробуйте онлайн!
Метод:
источник
Japt ,
3815 байт-23 спасибо Шегги!
Моя первая подача Джапта; спасибо Shaggy за помощь!
Попробуйте онлайн!
источник
Python 3,
117113106135 байтовЭто мой первый ответ, так что я уверен, что есть возможности для улучшения.
Получает первые три цифры через целочисленное деление, а последние три - по модулю. Первое и последнее целые числа в диапазоне вводятся как аргументы
x
функции, какa
иb
, соответственно. Выход естьn
, распечатан.Ungolfed:
источник
n=n+1
наn+=1
и переместить его сразу после оператора if (if...:n+=1
)a
иb
как заранее объявленные переменные. Вы либо должны иметь функцию, либо взять их с помощью вводаn=0
деталь в заголовок, напримерdef x(a,b,n=0)
R ,
9386 байтУкороченная логика в конце комплиментов @ Giuseppe /
Попробуйте онлайн!
Целочисленные входы. Дополните их
0
. Преобразовать в шесть кодовых точек ASCII. ЗлоупотреблятьF
встроенным.источник
scipen
проблемы. Ну что ж.Шелуха , 12 байт
Попробуйте онлайн!
объяснение
источник
[000000, 001001]
должно привести к2
(000000
и001001
), но1001
вместо этого приведет к . (Я добавил1,000,000
и удалил трейлинг1
как исправление для этого, хотя не уверен, насколько это просто / эффективно по байту, как в Husk.)Древесный уголь , 15 байт
Попробуйте онлайн!Ссылка на подробную версию кода. Редактировать: я первоначально думал, что это был список счастливых чисел, которые требовались. Это может быть сделано в 14 байтах (удаляя
L
, который занимает длину списка), или в 20 байтах, если вы хотите хорошее форматирование:Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Perl 5+
-pl -MList::Util+(sum)
, 49 байтПопробуйте онлайн!
Perl 5 5+
-nl -MList::Util+(sum) -M5.010
, 50 байтДля вывода каждого билета вместо этого используется +1 байт:
Попробуйте онлайн!
источник
Python 3 ,
8986 байт-2 спасибо мистеру Xcoder.
-3 Вдохновляющие от Асоне Тухид ответили.
Результаты тестов:
Попробуйте онлайн!
источник
sum
можно сделать любой генератор, чтобы скобки[...]
не понадобилисьrange(a,b+1)
В спецификации теперь указано «включительно» (если бы вы не могли использовать*r
ееa,b
, кстати, см. мой ответ по Python 2). Также обратите внимание, что спецификация теперь подтверждает, что это действительно должен быть счетчик, который выводится.MATL , 24 байта
Попробуйте онлайн!
(-2 байта благодаря Луису Мендо.)
&:
- Сделайте инклюзивный диапазон между двумя данными числами1e3&\
- 'divrem' - разделите на 1000 и получите напоминания и коэффициенты в двух массивах.,
- сделать дважды!'03d'&V
- транспонировать и преобразовывать каждое значение в строку шириной в три ширины&s
- суммировать значения каждой строкиw
- переключиться, чтобы вывести массив напоминаний и сделать это снова на этом]
- конец цикла=
- проверить на равенство (возвращает 1 в местах, где массивы равны)s
- суммируйте те, чтобы получить количество (неявный вывод)источник
Котлин ,
152119 байтПопробуйте онлайн!
Взять два целых числа, а затем преобразовать их в шесть строк символов и сосчитать.
Оптимизировано это благодаря Маззи и его решению до 119 байт.
Попробуйте онлайн!
источник
{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
постоянный ток , 44 байта
Принимает два аргумента из остального пустого стека, выводит на верх стека.
Попробуйте онлайн!
Умный бит здесь - это использование безымянного (то есть не сохраненного) макроса, который дублируется перед выполнением для запуска собственной копии в другой трехзначной части.
объяснение
Внутренний макрос
[rA~rA~++rx]
имеет эффект «вычислить сумму цифр трехзначного числа, которое находится сверху в стеке, а затем выполнить исходную вершину стека как макрос».Основная программа:
источник
Паскаль (FPC) ,
163153 байтаПопробуйте онлайн!
объяснение
Вот сначала немного нормальный код:
Попробуйте онлайн!
Затем я злоупотребил поведением цикла for:
a
доb
), поэтомуa
их можно использовать как переменную цикла, отбрасываяi
;b
перед циклом). Я использовалb
в качестве контейнера, увеличивая его, когда счастливое число найдено и в конце циклаb
находится вдали от своего старого значения на количество счастливых чисел, поэтомуb-a
дает правильный результат. Это упалоs
.Замена
d
операциями непосредственно наa
сокращает цикл. Заменаc
операциями непосредственно наa
дозу не сокращает цикл, но, после сбросаd
, циклbegin
иend
ненужны, и я закончил с использованием только 2 переменных :)$
запускает шестнадцатеричные константы в коде гольфа. Хотя они не сохраняют байты, они исключают пробелы, необходимые перед десятичными константами.источник
Java (OpenJDK 8) , 162 байта
... заимствует из примера Kotlin выше.
Попробуйте онлайн!
Сравнение суммы байтов строки так же хорошо, как и суммирование фактических цифр.
источник
a->b->
), но вам нужно будет полностью квалифицироваться,IntStream
так как его нетjava.lang
.java.util.stream.
передIntStream
вашим кодом и байтовым счетчиком. Как также упоминал Jakob , вы можете сохранить байт, используяa->b->
, и вы также можете сохранить некоторые дополнительные байты, изменивString.format
на"".format
. Попробуйте онлайн: 139 байт . Хороший первый ответ, хотя. +1 от меня. Приятного пребывания!PHP , 131 байт
Чтобы запустить это:
Пример:
Или попробуйте онлайн!
источник
Perl 6 ,
5149 байтПопробуйте онлайн!
Блок анонимного кода, который принимает два числа и возвращает количество счастливчиков. Тайм-аут для больших входов
источник
Желе ,
98 байт-1 спасибо Деннису (
rµ...E)S
->r...E€S
так как все векторизуется.)Диадическая ссылка, принимающая две конечные точки диапазона (в любом случае), которая дает количество счастливых билетов.
Попробуйте онлайн!Или посмотрите тестовый набор
Как?
Обратите внимание, что для любого неотрицательного целого числа меньше1000000 , N мы можем получить два числа с цифрами, которые суммируются с необходимыми значениями для проверки с помощью целочисленного деления на 1000 Икс= ⌊ N1000⌋ ) Y= Nмодификация1000 ) N= 1000 × X+ Y
(уступая, скажем,
и его остаток
(скажем,
... то есть
Теперь мы хотим сравнить суммы цифрИкс и Y для каждого N в диапазоне и считайте те, которые равны.
источник
E€S
сохраняетµ
.Powershell, 85 байт
Тестовый скрипт:
Выход:
источник
Котлин, 95 байт
.kt
для теста:объяснение
Подсчитайте числа из диапазона, в котором сумма всех цифр равна двойной сумме первых 3 цифр.
источник
Stax , 14 байт
Запустите и отладьте его , но будьте терпеливы!
источник
Python 2 ,
8380 байт-3 с помощью наблюдения Асоне Тухида - иди отдавай должное!
Попробуйте онлайн!
Так же, как мой ответ Jelly (но входные данные должны быть отсортированы здесь, т.е.
a<=b
)75 байтов для ввода
a, b+1
(то есть диапазон исключает правую границу):Попробуй это
источник
Clojure, 102 байта
Смешивание строк и математика не слишком весело.
источник
J 35 байт
Попробуйте онлайн!
источник
C (gcc),
9088 байтовПорт моего Java ответа . Попробуйте это онлайн здесь . Благодаря Celercat для игры в гольф два байта.
Ungolfed:
источник
L'✐'
вместо10000
и назначайте10
переменную.L'…'
уловки, это аккуратно; но это экономит байты? Мне кажется, это многобайтовый символ, поэтому при сохранении символов он не может сохранять байты ... или так?Java 8,
10199 байтДругой подход, чем другой ответ Java . Вместо того, чтобы использовать потоки и строки, это использует цикл и оценивает числа напрямую. Попробуйте это онлайн здесь .
Благодаря Celercat для игры в гольф два байта.
Ungolfed:
источник
VBA (Excel), 159 байт
Использование Immediate Window и Cells в
[A1]
[A2]
качестве входных данных.источник
F #, 110 байтов
Попробуйте онлайн!
t
преобразует строку в числа и суммирует их.r
принимает диапазон чисел отs
доe
и отфильтровывает числа, которым не повезло. Первые три цифры собраныn/1000
. Вторые три цифры вычисляются с помощьюn-(n/1000)*1000
.источник