Напишите программу или функцию, которая принимает положительное целое число N. Выведите список всех различных десятичных чисел, которые можно записать ровно в N символах, используя digits ( 0123456789
), десятичные точки ( .
) и отрицательные знаки ( -
).
Например, некоторые номера , которые были бы в выходном списке N = 4 представляют собой 1337
, 3.14
, .999
, -789
, -2.7
, и -.09
.
Числа должны быть написаны обычным способом, но в максимально короткой форме . Это означает:
Десятичная точка должна быть включена, только если число не является целым числом.
- например,
45.0
и45.
должен быть написан как простой45
-45.00
должно быть написано как-45
- например,
Не должно быть начальных нулей слева от десятичной точки.
03
и003
должно быть написано как3
, но30
и300
в порядке, как они0.3
и00.3
должно быть написано просто.3
-03
должно быть написано как-3
-0.3
должно быть написано как-.3
Справа от десятичной запятой не должно быть конечных нулей
.50
и.500
должен быть написан как.5
900.090
должно быть написано как900.09
Исключением из двух последних правил является сам ноль, который всегда
0
должен быть записан как простой .Положительные знаки (
+
) не должны использоваться, поскольку они излишне удлиняют число.
Также обратите внимание, что знак минус ( -
) не должен использоваться как знак вычитания. Это должно появиться только как первый символ чисел меньше нуля.
Форматирование
Порядок вывода списка чисел не имеет значения. Это может быть восходящий, нисходящий или полностью перепутанный. Имеет значение только то, что присутствуют все различные числа, которые могут быть записаны в N символов.
Список может быть отформатирован разумным способом, используя пробелы, символы новой строки, запятые или, возможно, что-то еще между числами, если все согласовано. Начальные и конечные скобки (или аналогичные) в порядке, но такие вещи, как кавычки вокруг чисел, - нет. (т.е. не путайте видимые строки и целые / плавающие числа в выводе.)
Например, когда N = 1, некоторые допустимые результаты будут:
0 1 2 3 4 5 6 7 8 9
[1, 2, 3, 4, 5, 6, 7, 9, 0]
ans = { 5 8 9 1 3 2 0 3 4 7 6 }
Но это было бы неверно:
[0, 1, 2, 3, 4, "5", "6", "7", "8", "9"]
Примеры
N = 1 -> 0 1 2 3 4 5 6 7 8 9
N = 2 -> -9 -8 -7 -6 -5 -4 -3 -2 -1 .1 .2 .3 .4 .5 .6 .7 .8 .9 10 11 12 ... 97 98 99
N = 3 -> -99 -98 ... -11 -10 -.9 -.8 ... -.2 -.1 .01 .02 ... .98 .99 1.1 1.2 ... 1.9 2.1 2.2 ... 2.9 3.1 ...... 9.9 100 101 ... 998 999
Списки расположены в порядке возрастания, а в некоторых местах имеют эллипс для удобства чтения.
счет
Самый короткий код в байтах побеждает. В случае связей победит ответ с более высоким рейтингом
-0
быть действительный вывод?Also note that the negative sign (-) should not be used as a subtraction sign. It should only appear as the first character of numbers less than zero.
0
».Ответы:
Pyth,
4745 байтБлагодаря FryAmTheEggman для отметить , что порядок не имеет значения.
Попробуйте онлайн.
Время выполнения ужасное, в основном O (12 n ), но я проверил его на
n
= 6 на моем компьютере (что заняло 2 минуты). Запускn
≥ 5 приведет к превышению времени ожидания в сети.Из-за того, как я генерирую символы,
0123456789.-
вывод происходит в действительно странном порядке.Можно технически удалить
{
ближний конец, но это приведет к сложности O (19 n ). (Это также даст много дубликатов, но это разрешено.)объяснение
Основная часть кода
".- \..*\. ^-?0. [.-]0*$"
, содержащая регулярные выражения, не должна совпадать ни с одним выводом .источник
Pyth, 57 байт
Попробуйте это на онлайн-переводчике .
Слишком длинный и с ужасающим временем выполнения (для N = 4 требуется несколько секунд, запуск с N = 5 не рекомендуется).
Regex объяснение:
источник
*Q
в свой процесс создания перестановок раньше,+
так что это влияет только на цифры, это должно немного улучшить производительность. Это может даже помочь сохранить некоторые байты в регулярном выражении?Юлия,
126117 байтЭто лямбда-функция, которая принимает целое число и возвращает массив строк. Чтобы вызвать его, присвойте его переменной. Подход здесь такой же , как Pyth дверной ручки в ответ .
Ungolfed:
источник
MATL , 60 байт
Попробуйте онлайн!
При этом используется супер-грубая сила (посредством декартовой силы) с последующей фильтрацией (через регулярное выражение). Я добавлю объяснение позже.
Результаты отображаются в конце программы. Это может занять некоторое время. Если вы хотите видеть результаты по мере их создания, добавьте
D
в конце :источник