Вступление:
Как Twitter, Instagram и другие, я хотел отображать цифры как 1.2K
и 3.8 M
вместо 1,222
или 3,823,456
.
Но это не все! Как мы все знаем, могут быть некоторые люди, которым, несомненно, не понравятся эти сокращения, и они попытаются обратить их вспять. Итак, 1.2k
станет 1,200
и 3.8 M
станет 3,800,000
.
Задание:
- Ваша задача - написать программу или функцию, которая преобразует список чисел ( которые представлены в виде строк ) в их сокращенные пары и наоборот.
Например, если список ввода (или любой STDIN
) был ['1.4k', '1,234,567', '7.99M']
, то вы должны вывести:
['1,400', '1.2M', '7,990,000']
Вы можете следовать следующей схеме для сокращений:
- 10 3 -> один килограмм -> К
- 10 6 -> миллион -> М
- 10 9 -> один миллиард -> B
Ваш код может принимать все строчные, все прописные, смешанные или неопределенные регистры для ввода и использовать любой из них для вывода, но должен быть согласованным.
Правила и ограничения:
- Вы можете написать программу или функцию, принимая ввод через
STDIN
(или ближайшую альтернативу), аргумент командной строки или аргумент функции и выводя результат черезSTDOUT
(или ближайшую альтернативу), возвращаемое значение функции или параметр функции (out). - ввод может быть в любом удобном формате списка или строки. Вы можете предположить, что их меньше, чем каждый, и что список содержит хотя бы один элемент.
ai
231
- каждое сокращенное число будет содержать только одно, в
.
то время как обычное число будет содержать столько,,
сколько необходимо (вы можете предположить, что эти числа не будут изменены). - Вы НЕ МОЖЕТЕ вводить номер, а
'123456'
скорее123,456
- применяются стандартные правила игры в гольф .
Тестовые случаи:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Разъяснения:
- для чисел <1000 после десятичной точки в выводе аббревиатуры у вас должно быть столько цифр, сколько необходимо для получения правильного результата. (например:
2
-> станет0.002k
) - это означает не более 3 десятичных знаков ; для чисел> 1000 вы можете иметь до 1 десятичного знака . - сокращение может быть как в нижнем, так и в верхнем регистре
- Я снял встроенные ограничения, как это было предложено в комментариях
Самый короткий код в байтах побеждает!
'123,456,789' -> '123.4M'
? Кроме того, это не уточняет, сколько десятичных знаков использовать. Конечно, все, что меньше 1000, не должно быть сокращено в любом случае.["k", "M", "G"]
. Что означает «хотя обычное число будет содержать столько, сколько необходимо », в моей стране было бы ошибкой использовать любое.Ответы:
PHP,
234224213201205 байт6 байтов, сохраненных здесь именем пользователя, 4 байта, вдохновленные этим.
-r
-2 байта, если подчеркивание как разделитель в порядке: заменить
" "
на_
.-1 байт, если правильное округление в порядке: заменить
($y*10|0)/10
наround($y,1)
.-17 байт для PHP 7.1: заменить
substr($x,strlen($x)-1)
на$x[-1]
.80 (63) байтов для расширения только одного аргумента:
сохранить в файл, затем выполнить (или заменить
<?=
наecho
+ пробел и запустить с-r
.источник
for($j=1;$x=$argv[$j++];)
- вместоforeach($argv as$i=>$x)if($i)
kmb[$i]
- вместо"kmb"[$i]
.JavaScript,
545524522518514508504498494214 байтовСпасибо @ETHproductions за сохранение 180 байт!
Для вызова функции:
Выходы как
alert
, где каждыйalert
содержит отдельный элемент вводаЧитаемая версия:
Сводка правок: преобразованная функция в функцию стрелки
var
|0
вместо пола.reverse().join''
источник