При заданном числе достаточно просто n
создать диапазон от 0
до n-1
. Фактически, многие языки предоставляют эту операцию как встроенную.
Следующая программа CJam читает целое число, а затем распечатывает такой диапазон ( попробуйте онлайн! ):
ri,
Обратите внимание, что он печатает числа без разделителя.
Соревнование
Ваша задача - полностью изменить этот процесс. Вы должны написать программу, которая, учитывая строку, представляющую диапазон, возвращает число, используемое для создания этого диапазона.
Характеристики
- Числа даны без разделителя.
- Вы можете предположить, что строка образует допустимый диапазон.
- Вы можете использовать индексацию на основе 0 или 1 для своего диапазона.
- Вы можете предположить, что правильный вывод никогда не превысит 32 767 (поэтому допустимый ввод никогда не будет иметь длину больше 15 275).
- Вы можете предположить, что правильный вывод всегда будет положительным (поэтому вам не нужно обрабатывать 0 или отрицательный результат).
Это код-гольф , поэтому выигрывает самый короткий конкурирующий ответ (измеряемый в байтах).
Тестовые случаи
0 индексированные:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1-индексированный:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Ответы:
Пролог (SWI) ,
9180 байт0 индексированные.
Новые строки добавлены для удобства чтения.
Попробуйте онлайн!
источник
Шелуха , 5 байт
Попробуйте онлайн!
Только буквы!
Принимает ввод в виде строки, результат индексируется 1.
объяснение
источник
05AB1E ,
76 байтов1-индексироваться.
Попробуйте онлайн! или как тестовый набор
объяснение
источник
0
независимо от ввода: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
была моя идея, но это лучше, потому что это работает для""
.Java 8,
6659 байт0 индексированные
-7 байт благодаря @ PunPun1000 .
У меня такое чувство, что это можно сократить, только проверив длину входных данных, поскольку мы можем предположить, что входные данные всегда действительны. Все еще выясняю это.Невозможно понять это, и это, вероятно, будет стоить слишком много байтов в Java, чтобы быть полезным в любом случае (то же самое относится к возврату подстроки конца 1-индексированного ввода).Объяснение:
Попробуй это здесь.
источник
Брахилог ,
97 байтПопробуйте онлайн!
0 индексированные.
объяснение
Здесь мы передаем входные данные через переменную Output и получаем доступ к результату через переменную Input.
источник
Ly , 29 байт
Попробуйте онлайн!
Не могу поверить, что это сработало так же хорошо, как и ...
источник
Japt , 8 байт
Начинаем разбираться с методами функций в Japt.
0 индексированные. Может принимать входные данные в виде строки, целого числа или массива, содержащего 0 или 1 элемент.
Попробуй это
объяснение
Неявный ввод строки
U
.Получите первое целое число,
>=0
которое возвращает true, когда передано через функцию, которая ...Генерирует массив целых чисел от
0
1 до текущего целого числа ...Присоединяет это к строке ...
Проверяет эту строку на равенство с
U
.Неявный вывод результирующего целого числа.
Альтернатива, 8 байт
Попробуй это
источник
Древесный уголь , 13 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Haskell,
4037 байтФункция, которая меняет диапазоны с нуля.
Спасибо Laikoni за сохранение 3 байта!
Попробуйте онлайн.
источник
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Сетчатка , 30 байт
Рекурсивно добавляет точку с запятой после каждого числа, а затем подсчитывает количество точек с запятой
Попробуйте онлайн!
источник
JavaScript (ES6),
3231 байтСохранено 1 байт благодаря Challenger5
Контрольные примеры
Показать фрагмент кода
источник
f(payload_param)()
или дажеf(payload_param)(some_constant)
. (Между прочим, я не уверен, что это сработает в данном конкретном случае, потому что мне нужно и то,r
и другоеn
нужно инициализировать.)Mathematica, 46 байтов
1-индексированных
вход
источник
Рубин ,
515046 байтов(Это моя первая программа на Ruby, так что дальше будет легко играть в гольф)
-4 байта благодаря @Nnnes
источник
.index(gets)
=>.index gets
. Вы можете использовать4e4
вместо8**5
, хотя это сделает его еще медленнее. Обычно это нормально, и часто экономит несколько байтов, используя анонимные лямбды для ответов Ruby: попробуйте онлайн! (Я изменил лимит на 100, чтобы он неPython 2 , 43 байта
Попробуйте онлайн!
Python 2 , 43 байта
Попробуйте онлайн!
Python , 46 байт
Попробуйте онлайн!
Другая стратегия. Принимает количество символов с конца, равное длине наибольшей серии
0
s в s.Python , 46 байт
Попробуйте онлайн!
Рекурсивная версия вышеперечисленного.
источник
... i*'0'in s[1:] for ...
или что-то в этом роде?R , 47 байт
Попробуйте онлайн!
1-индексированных
источник
"if"
вместоifelse
nchar
работает, как вы можете ожидать от чисел. Тем не менее, вам нужно обрабатывать вывод вашей продукции, так как это не будет работать при полной программе.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Дьялог) ,
1711 байтов-6 байт благодаря ngn .
Попробуйте онлайн!
⍳⊂
найти ɩ NDEX всего аргумента в{
…}
Результат этой анонимной функции:≢
длина аргумента⍳
ɩntegers до этого⍕¨
форматировать (stringify) каждый,\
совокупное объединение техисточник
{,\⍕¨⍳≢⍵}⍳⊂
(11 символов)Perl 5 , 19 байт
18-байтовый код + 1 для
-p
.Использует индексирование на основе 1. -7 байт благодаря @ nwellnhof «S гораздо лучше подход!
Попробуйте онлайн!
объяснение
$\
это специальная переменная, котораяprint
редактируется автоматически после каждого оператора, поэтому, используя ее для хранения нашего номера, нам не нужно обновлять$_
(которая автоматически печатается как часть функциональности-p
флага), чтобы содержать желаемый результат. Затем, пока ввод начинается с$\
, удалите его иredo
программу, которая снова увеличивает$\
и заменяет ее. Когда он больше не находит число в начале строки, мы закончили! Наконец, уменьшаем,$\
чтобы у нас был последний номер в диапазоне.источник
$i++while s/$i\B//
(18 + 1 байт)?Python 2 , 46 байт
0 индексированные
Попробуйте онлайн!
источник
CJam , 16 байтов
Попробуйте онлайн!
Альтернатива 16 байтов
Попробуйте онлайн!
источник
CJam , 13 байтов
Так много запятых ...
Попробуйте онлайн!
объяснение
источник
Perl 6 ,
30 2827 байтовПопробуй это
Попробуй это
Попробуй это
Expanded:
'',0...*
производит бесконечную последовательность значений''
,0
,1
,2
,3
...[\~] '',0...*
производит бесконечную последовательность всех возможных входовОбратите внимание, что этот код никогда не остановится, если вы введете неверный ввод.
источник
Pyth ,
1110 байт1-индексироваться.
Попробуй здесь
Если пустую строку можно игнорировать, ее можно сократить до 6 байт :
-1 байт благодаря @Mnemonic
источник
?QfqQjkUT)1
Я могу сделать это и в 11, но я чувствую, что какой-то переупорядочивание может отыграть байт. Любые идеи?jk
вместо s`m.CJam,
141211 байтовПопробуйте онлайн
источник
Дивиль ,
4238 байтТот же алгоритм, что и в этом ответе Java , за исключением того, что (ab) использует некоторые синтаксические особенности Dyvil.
Объяснение:
4
байты с использованием выражения доступа скобки вместо переменной для аккумулятораисточник
MATL , 14 байтов
1-индексироваться.
Попробуйте онлайн!
объяснение
источник
C # , 72 байта
Данные
String
i
Массив int для расшифровкиInt32
Число, используемое для создания массиваGolfed
Ungolfed
Ungolfed читаемый
Полный код
релизы
72 bytes
- Исходное решение.Заметки
источник
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 байтаSOGL V0.12 ,
11109 байтов1-индексироваться.
Попробуй здесь!
Объяснение:
..или 7 байт без пустого регистра
Попробуй здесь!
источник
Ацето ,
2725 байт1 основанный индекс.
Мы
r
читаем ввод иM
зачаровываем его (иL
снова непосредственно добавляем), затем отрицаем его (!
; приводя к истинному значению только для пустой строки). Если это значение truey (`
), мы переходим к концу (;
), гдеp
набираем неявный ноль.В противном случае мы увеличиваем текущее значение стека (изначально ноль), дублируем его и помещаем одну копию в стек справа, а также перемещаемся туда (
Id]
). Затем мы создаем убывающий диапазон (z
), объединяем стек как строку (¥
) и снова перемещаем значение (и нас) в исходный стек ([
). МыL
присваиваем значение, которое мы запомнили ранее (вход), и сравниваем его с этой строкой. Если равно, мы снова прыгаем до конца, где печатаем текущее значение счетчика (=`;
).Иначе, много пустого пространства пройдено до тех пор, пока кривая Гильберта в конечном итоге не достигнет точки,
<
котораяI
снова ставит IP на вершину , увеличивая счетчик и снова тестируя.источник
С накоплением , 23 байта
Попробуйте онлайн!
По сути, увеличивается
0
до тех пор , пока диапазон от0
числа не будет выглядеть как вход, сначала проверяя равенство.источник
Желе , 8 байт
Попробуйте онлайн!
источник