Соревнование
Если в качестве входных данных ( x
и y
) задано два целых числа , выведите x
в виде строки столько начальных нулей, сколько необходимо, чтобы y
символы были длинными без знака.
правила
Если
x
содержит большеy
цифр, вывести вx
виде строки без изменений.Вывод в виде целого числа не принимается, даже если нет начальных нулей.
При
x
отрицательном-
значении оставьте значение как есть и действуйте по абсолютному значению.Отрицательный
y
должен рассматриваться как 0, что означает, что вы выводитеx
как есть (но как строка)
Примеры:
IN: (1,1) OUT: "1"
IN: (1,2) OUT: "01"
IN: (10,1) OUT: "10"
IN: (-7,3) OUT: "-007"
IN: (-1,1) OUT: "-1"
IN: (10,-1) OUT: "10"
IN: (0,0) OUT: "0"
IN: (0,1) OUT: "0"
IN: (0,4) OUT: "0000"
Самый короткий код в байтах выигрывает, применяются стандартные лазейки.
(-1,1)
дает?+
Приемлем ли ведущий знак для положительных чисел?Ответы:
Japt ,
138 байтПринимает первый input (
x
) как строку.Попытайся
Сохранено 5 байтов благодаря ETHproductions.
объяснение
Неявный ввод строки
U=x
и целого числаV=y
.® }'-
разбиваетсяU
на массив с символом минус, отображает его и объединяет в строку с символом минус.©
является логическим AND (&&
), поэтому, если текущий элемент - truey (непустая строка), тогда pad left (ù
) с 0 (T
) в длинуV
.источник
-
: ethproductions.github.io/japt/…q
, что позволитq-_©ùTV
сохранить 1 байт :-)S.q()
(давая намS.q(s,f)
), тоS
будет разделенаs
, запущенаf
и присоединенаs
? Мне это нравится! :)N.s
,S/A.y
,N.ì
сделать это уже) с кучей методов? У меня был разговор с кем-то, я просто не помню, кто сейчас: sPyth , 12 байт
Попробуй это здесь!
источник
Python 2 , 29 байт
Попробуйте онлайн!
Просто
str.zfill
так близко.источник
05AB1E ,
1110 байтВход дан как
amount_of_digits, number
Попробуйте онлайн!
объяснение
источник
Python, 29 байт
Примите вход как
f(x,y)
. Использование%
оператора Python .Попробуйте онлайн!
источник
C #, 56 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) , 47 байт
Попробуйте онлайн!
Сначала я подумал, легко, максимум 30 символов (что довольно мало при работе со строками в Java). Затем произошли исключения.
источник
JavaScript (ES6), 42
Рекурсивно, параметры в обратном порядке, сначала y, затем x. И карри
Тест
источник
f(y)(x)
вместоf(x,y)
.y=>r=x=>x<0?'-'+r(-x):(x+='')[y-1]?x:r(0+x)
так близко ...Python 3.6 ,
2837 байтПопробуйте онлайн! (Тестовый пример из ответа Колеры Су)
Воспользовавшись новым способом форматирования строк в Python 3.6
+9 байт для обработки
y<0
источник
y
отрицательный: tio.run/##K6gsycjPM/…bash,
27, 25 байт-2 байта благодаря Брюсу Форте
попробуйте это онлайн
источник
printf %\ 0$[1+$1]d $2|xargs
.printf %\ 0$[1+$2]d $1|xargs
, я не запомнил этот формат для чисел со знаком, а также трюк XARGS для удаления пробелаШелуха , 12 байт
Попробуйте онлайн!
объяснение
источник
R,
5648 байтовПопробуйте онлайн!
-8 байт благодаря джурио
объяснение
sprintf("%0zd",x)
возвращаетсяx
как строка, дополненная нулями, чтобы иметь длинуz
paste0("%0",y+(x<0),"d")
создает строку"%0zd"
, гдеz
естьy
, плюс 1, еслиx
меньше нуляz
количество цифр меньшеx
,x
печатается в виде строки как естьисточник
function(x,y)sprintf(paste0("%0",y+(x<0),"d"),x)
Алиса , 23 байта
Попробуйте онлайн!
Ввод должен быть разделен переводом строки с номером в первой строке и шириной во второй.
объяснение
Это обычная структура для линейных программ в обычном режиме. Единственный улов в этом случае - этот бит:
Это заставляет IP переходить в кардинальный режим по вертикали и выполнять только
&
в кардинальном режиме, прежде чем возобновить в обычном режиме.Развернув зигзагообразный поток управления, вы получите:
Вот две альтернативы, также по 23 байта, которые используют Cardinal
H
( abs ), чтобы избавиться от-
:В принципе, это команда короче, но
&
она не вписывается в позицию, где в стеке находится строка из 1 символа, поэтому мы должны пропустить ее с помощью символа a#
.источник
C, 33 байта
Попробуйте онлайн!
источник
Древесный уголь ,
1613 байтПопробуйте онлайн!
Это самое короткое, что я мог получить, используя древесный уголь без печати начальных или конечных пробелов. По крайней мере, сейчас я начинаю понимать, как использовать
Modulo
функцию для форматирования строк.Развернутый код выглядит следующим образом:
источник
-
или ничего не очень легко в древесном угле: печать 1 печатает,-
а печать 0 печатает ничего. Итак, троичная избыточна, экономя 3 байта.InputNumber()
сCast(q)
, я думаю, что вы можете переключиться на сравнение строк, чтобы сохранить еще один байт.Ternary
!Сетчатка , 39 байт
Попробуйте онлайн!
Ввод должен быть разделен запятыми с первым номером и второй шириной.
источник
PHP, 45 байт
или
Запустите
-nr
или попробуйте их онлайн .источник
Mathematica, 118 байт
Попробуйте онлайн!
источник
Mathematica,
6362 байтаПопробуйте онлайн!
источник
IntegerLength
а неIntegerDigits
. Вы можете сохранить байт, используяIntegerLength@#
вместо этогоIntegerLength[#]
.Excel, 29 байт
Использование
TEXT
функциональности Excel («Преобразует значение в текст в определенном числовом формате»).x
в A1,y
в B1источник
)))
байты на -3, преобразовав их в Google SheetsОктава , 44 байта
Попробуйте онлайн!
источник
Haskell , 54 байта
Попробуйте онлайн!
источник
Рубин ,
3128 байтСпасибо Карлу за сохранение 3 байтов с помощью интерполяции.
Попробуйте онлайн!
источник
Japt ,
1412 байтСохранено 2 байта благодаря @ETHproductions
Попробуйте онлайн
источник
x
в качестве строки для 10 байтов .U
в виде строки, позволяющей нам играть в гольф первыми двумя символами.PowerShell ,
2540 байтПопробуйте онлайн!
объяснение
Это вызывает
.ToString()
номер с сгенерированной форматной строкой, но умножает его на -1, 0 или 1 в зависимости от того , отрицателен ли$b
(y
), 0 или положителен соответственно; это должно обрабатывать отрицательныеy
значения, которые строки формата не делают сами по себе.Кажется, это требует обертывания отрицательных чисел в подзаголовке,
()
чтобы это работало, что является просто причудой вызова при использовании литералов; если бы передал переменные типа integer, это бы не понадобилось.источник
y
отрицательно.C # 6,0, 35 байт
Альтернативное решение (51 байт)
источник
Чисто ,
908683 байтаПопробуйте онлайн!
источник
C (gcc) , 45 байт
Попробуйте онлайн!
объяснение
printf
форматирует три аргумента:%s
форматирует строку"-"+(x>=0)
."-"
это действительно просто адрес, что-то вроде41961441
. В памяти это выглядит примерно так:При форматировании в строку C берет адрес (скажем, 41961441) и продолжает получать символы, пока не будет достигнут нулевой байт (0x00). Когда x меньше нуля, значение
"-"+(x>=0)
имеет значение исходного адреса (41961441). В противном случаеx>=0
равно 1, поэтому выражение становится"-"+1
равным нулю, после которого указывается нулевой байт"-"
, и ничего не печатается.%0*i
печатает целое число, дополненное указанным числом0
s.y
обозначает это число. Мы дополняем,abs(x)
чтобы избежать негатива в некоторых аргументах.источник
Perl, 25 +
-n
флаг = 26 байтПопробуйте онлайн!
источник
Perl 5, 22 + 1 (-
n
) = 23 байтаПопробуйте онлайн
источник
10,-1
+5 bytes
-5 bytes