2013 год имел интересное свойство: цифры сортируются последовательно (0123). Давайте назовем этот тип числа сортируемым числом: неотрицательным целым числом, чьи 10 основных цифр являются последовательными после сортировки. К сожалению, это не повторится до 2031 года, а после этого - до 2103. Ваша задача - написать программу или функцию, которая при получении неотрицательного целого числа через любой стандартный метод выводит или возвращает следующее сортируемое число.
правила
- Вход и выход должны быть в базе 10.
- Вывод может быть в любом приемлемом формате (числовой литерал, строковый литерал, массив из одного элемента, ...).
- Ваш код должен выдавать правильный вывод в течение 1 минуты для всех входов до 98764.
Контрольные примеры
0 -> 1
1 -> 2
9 -> 10
10 -> 12
11 -> 12
99 -> 102
233 -> 234
234 -> 243
243 -> 312
2016 -> 2031
2031 -> 2103
2103 -> 2130
2130 -> 2134
2134 -> 2143
9876 -> 10234
98764 -> 98765
Сортируемые номера формы A215014 . Список всех записей до 98765 можно найти здесь .
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Ответы:
Python 2 , 61 байт
Попробуйте онлайн!
источник
'0123456789'
быть чем-то вроде1./81
, но это не совсем работает.1./81.0000001
что все еще не будет работать должным образом и дольше1./81-1e-10
но это все еще 10 байтов, и вам все равно придется его урезать.Желе ,
11109 байтВозвращает одноэлементный массив. Попробуйте онлайн!
Как это работает
источник
MATL , 8 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
JavaScript (ES6),
6454 байтаСохранено 10 байтов, благодаря Нейлу
Контрольные примеры
Показать фрагмент кода
источник
map
обратного вызова является сам массив, но вы можете продолжать делать это намного лучше:f=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 байтТестирование
источник
PowerShell v2 +,
716867 байтПопробуйте онлайн!
Итеративное решение, которое работает практически мгновенно на моей машине.
Да, это
do
/until
петля в код-гольфе. Жаль не жаль. В основном мы зацикливаемся вверх от нашего ввода$n
до тех пор, пока$n|sort
ed не выражает-match
против0123456789
. Затем мы помещаем$n
в конвейер, и вывод неявный.Сохраняет байт, понимая, что
-join(0..9)
он на один байт короче литеральной строки0123456789
.источник
Mathematica, 63 байта
Заменяет
#+1
следующее значение до тех пор, пока оноDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
равно false, то есть условие, что текущее значение можно отсортировать.Вот еще одна забавная идея, которая, к сожалению, оказалась слишком длинной:
В этом я сначала генерирую все сортируемые годы, а затем выбираю первый, который больше входного.
Еще несколько идей, которые не оказались короче первой попытки:
источник
PHP
10510389 байтНовая версия 89 байтов благодаря Титу:
Использование:
Предыдущая 103-байтовая версия благодаря Xanderhall:
Предыдущая 105-байтовая версия:
Использование:
sortable-years.php?n=9000
выходы9678
.Ungolfed версия с тестовыми примерами:
Тест онлайн! (Новая версия 89 байтов)
Тест онлайн! (Предыдущая версия 103 байта)
Тест онлайн! (Предыдущая версия 105 байт)
Время выполнения может быть <= 1 секунда для всех тестовых случаев.
источник
break
(exit
в версии для гольфа), вы нашли это! Отлично.$i=0
не нужен (-4).join
псевдоним дляimplode
(-3).echo$n
достаточно выхода (-5).$argv[1]
вместо$_GET[n]
позволяет,-r
что позволяет опустить<?
тег (-2).join
псевдонимеimplode
! Чтоphp -r
касается параметра, который я использовал в прошлом, но в последнее время я не использую его, потому что (я не знаю почему) иногда я не могу заставить его работать должным образом в некоторых случаях.Perl 6 , 49 байт
объяснение
Тест:
источник
C #,
153130101 байт (1229983, исключая объявления пространства имен)-23 байта благодаря pinkfloydx33
еще -29 благодаря Link Ng (я действительно должен был знать, что мне не нужно преобразовывать его в массив)
Чертовы преобразования.
(Добавленный бонус это на удивление быстро)
источник
$"{n}".ToCharArray()
или,(""+n).ToCharArray()
и вам не нужны скобки черезwhile(!s.Contains...)n++;
некоторое время: или, что еще лучше, объедините их и оставьте пустое тело цикла:while(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
объявите s сvar s="... "
или удалите его целиком:while(!"0123456789".Contains(...
n++
и вместо этого объединить его с вышеупомянутым и сделать$"{++n}".ToCharArray()
use System;
и использоватьstring
вместоString
11 байт. Используйтеstring.Concat
вместоstring.Join
и оставьте только 2-й параметр для 1 байта. Изменение""+ ++n
в++n+""
1 байт. Оставлено для вас в качестве упражнения: можно удалить еще 14 байтов.Befunge , 117 байт
Попробуйте онлайн!
Мы проверяем, отсортирован ли год, путем создания «массива» (записанного в строковый литерал в строке пять), и для каждой цифры года мы устанавливаем этот индекс в массив равным 1. После того, как все цифры были обработано, мы подсчитываем, сколько единиц в последовательности, и если это число равно длине года, мы можем предположить, что год отсортирован.
Детальное объяснение
источник
Рубин, 51 байт
источник
Python 2, 68 байт
Хорошо побитый @Dennis, но в любом случае просто опубликованный как альтернативный метод.
источник
C #, 127 байт
Превзойти текущее представление C # на 3 байта: pОтбитый уже,я знаю, что этот ответ будет легко отброшен ...
repl.it demo
Ungolfed
источник
05AB1E ,
109 байтов-1 спасибо Эмигне.
Попробуйте онлайн!
Новое описание придет, когда у меня будет время.
источник
[>D{žhså#
для 9 байтов.Python 2,
118 117 114108 байтРЕДАКТИРОВАТЬ:
-1 байт благодаря @ Габору Фекете
-6 байт благодаря @Zachary T
источник
sorted
функции.PHP,
908988 байтсовершенно другой подход:
Беги с
-r
.сломать
источник
Clojure,
1049691 байтДлинные имена методов не делают это настолько коротким ... По крайней мере,
map-indexed
и-
основные вычисления выполняются аккуратно.Изменить 1 : аккуратно, я забыл также
=
может принимать несколько аргументов, поэтому мне не нужно проверять, равно ли количество различных значений 1.Редактировать 2 : не нужно запускать
(sort(seq(str %)))
,(sort(str %))
работает одинаково хорошо.Ungolfed:
источник
R, 87 байт
Как обычно, когда дело доходит до разбиения чисел на цифры, у R нет собственного способа сделать это. Следовательно, мы должны принудительно ввести ввод в символ, разделить его на вектор символов и затем преобразовать обратно в любой числовой тип.
Попробуйте онлайн
источник