Люди продолжают говорить мне, что квадрат числа - это число, умноженное на себя. Это очевидно ложно. Правильный способ возвести число в квадрат - превратить его в квадрат, сложив его поверх себя число раз, равное количеству цифр, которое он имеет, а затем считав все числа из результирующего квадрата, оба по горизонтали (из только слева направо) и по вертикали (только сверху вниз), а затем складывают их вместе. Итак, для числа 123 вы сначала создаете квадрат:
123
123
123
Затем вы берете все строки и столбцы из квадрата и складываете их вместе:
123+123+123+111+222+333
Что дает нам результат 1035
.
Для отрицательных чисел вы обычно складываете (помните, что вы учитываете только количество цифр , поэтому отрицательный знак не включается в длину), а затем считываете горизонтальные числа в обычном порядке (с отрицательными знаками), а затем игнорируете отрицательные знаки для вертикальные числа. Итак, за число -144
получаем квадрат:
-144
-144
-144
Что дает нам -144-144-144+111+444+444
, что равно567
Для чисел, состоящих только из одной цифры, квадрат всегда равен удвоенному числу (читается один раз по горизонтали и один раз по вертикали). Так 4
дает нам
4
Что дает нам 4+4
, что равно 8
.
Для чисел с десятичными частями сложите как обычно (помните, что количество раз, которое вы сложите , считаются только цифры , и, следовательно, десятичная точка не считается), и игнорируйте десятичные символы при чтении вертикальных чисел. Например, номер 244.2
дает нам
244.2
244.2
244.2
244.2
Что дает нам 244.2+244.2+244.2+244.2+2222+4444+4444+2222
, что равно 14308.8
.
Дробные или комплексные числа не могут быть возведены в квадрат.
Твое задание:
Я устал от квадратов чисел, поэтому решил автоматизировать процесс. Напишите мне программу или функцию, которая принимает плавающее число или строку, в зависимости от того, что вы предпочитаете, в качестве входных данных и возвращает результат ее возведения в квадрат.
Примеры:
123 -> 1035
388 -> 3273
9999 -> 79992
0 -> 0
8 -> 16
-6 -> 0
-25 -> 27
-144 -> 567
123.45 -> 167282.25
244.2 -> 14308.8
2 -> 4
-0.45 -> 997.65
0.45 -> 1000.35
Подсчет очков:
Мои руки становятся тесными от записи всех этих квадратов, и мой компьютер не поддерживает копирование / вставку, поэтому запись с наименьшим количеством кода, который я могу напечатать (измеряется в байтах по какой-то причине?), Выигрывает!
244.2
это не число с плавающей точкой. Он не может быть преобразован в строку"244.2"
.Ответы:
05AB1E , 7 байтов
Попробуйте онлайн!
объяснение
источник
Желе ,
1312 байтМонадическая ссылка, принимающая список символов (правильно сформированное десятичное число, одиночный начальный ноль является требованием для -1 <n <1 ) и возвращающий число.
Попробуйте онлайн!
14 байт , чтобы принимать и возвращает число (вход ограничен +/- 10 -5 с
ŒṘ
):ŒṘfØDẋ€L$ŒV+⁸S
.Как?
источник
+€
с+
в 15-разрядной версии для -1.Haskell,
5956 байтВвод принимается как строка.
Попробуйте онлайн!
Как это работает
источник
Japt v2 , 16 байт
Проверьте это онлайн!
объяснение
источник
C # (.NET Core),
150141133 байтаСохранено 9 байтов благодаря @TheLethalCoderСохранено еще 8 байтов благодаря @TheLethalCoder
Попробуйте онлайн!
Принимает строку в качестве входных данных и выводит квадратное число в виде числа с плавающей запятой.
Этот код следует следующему алгоритму:
Создайте новую строку из ввода, но без десятичных точек и символов, чтобы мы могли получить оттуда нашу длину и числа для столбцов.
Рассчитайте время ввода длины строки, которую мы создали в точке 1.
Для каждого столбца в нашем «квадрате» создайте новую строку с номером столбца и длиной строки и добавьте ее в наш результат.
Пример:
Входные данные:
-135.5
1355
длиной4
.-135.5 * 4 = -542
.1111
,3333
,5555
,5555
.Если мы суммируем эти числа, мы получим
15012
, что именно то, что выведет наша программа.источник
string.Replace()
, но я думаю, это единственный способ, которым это работает!i
иl
плавая..Length
не может быть неявно преобразована в плавающую.a=>{var c=a.Replace(".","").Replace("-","");int i=0,l=c.Length;var r=float.Parse(a)*l;for(;i<l;)r+=int.Parse(new string(c[i++],l));return r;}
141 байт. Может быть в состоянии сохранить, принимая входные данные какfloat
и приведение к строке,n+""
но я не проверял.Брахилог , 23 байта
Попробуйте онлайн!
Brachylog плохо сочетается с поплавками ...
Объяснение:
источник
Шелуха , 15 байт
Принимает строку и возвращает число. Попробуйте онлайн!
объяснение
Немного раздражает, что встроенная функция
r
синтаксического анализа выдает ошибки синтаксического анализа недопустимых входных данных, а не возвращает значение по умолчанию, что означает, что я должен явно отфильтровывать столбцы, состоящие из нецифровых чисел. Если он вернул 0 на некорректных входах, я мог бы сброситьfΛ±
и сохранить 3 байта.источник
Python 3 ,
95 94 87 8584 байтаТестовый пакет .
Python 3 , 78 байт
Тестирование.
Второй подход - это порт на Python 3, вдохновленный решением @ officialaimm.
источник
Python 2 ,
8174 байта-7 байт благодаря @Mr. Xcoder :
'/'<i
Попробуйте онлайн!
Объяснение:
Скажем
123.45
, дан как вход.[i for i in`x`if"/"<x]
дает список строковых целых чисел['1','2','3','4','5']
(что такжеz
). Теперь мы перебираем[x]+z
то есть[123.45,'1','2','3','4','5']
, умножая каждый элемент наlen(z)
, здесь5
и конвертируя каждый элемент в число с плавающей точкой (чтобы строки также конвертировались соответствующим образом), получая результат[617.25,11111.0,22222.0,33333.0,44444.0,55555.0]
. Наконец мы вычисляемsum(...)
и получаем167282.25
.источник
i.isdigit()
на"/"<i<":"
i.isdigit()
с"/"<i
, на самом деле, потому что как.
и-
имеют более низкие коды ASCII , чем цифры, ADN/
находится между нимиJavaScript,
7562 байтаПопробуйте онлайн
-2 байта благодаря Арнаулду
-5 байтов благодаря Шегги (хотя функция должна получать число, но теперь я вижу, что многие другие ответы тоже получают строку)
источник
Perl 5 ,
3733 + 1 (-p) =3834 байтаПопробуйте онлайн!
Использовал некоторые трюки из кода Dom, чтобы побрить 4 байта
Разъяснение:
источник
-n
и-p
буквально обернулwhile(){...}
вокруг кода, так что}{
вырывается из этого. Это сбрасывает,$_
но если вы используете в$\
качестве переменной, она все равно будет напечатана, так$\
как добавляется к каждой печати. Значит, вы можете хранить номер или что-то в этом и игнорировать$_
. Не уверен, что это было хорошим объяснением, но ознакомьтесь с советами по игре в гольф в Perl , я уверен, что это объяснит лучше! Рад, что помог ваш счет, хотя!Желе , 17 байт
Попробуйте онлайн!
источник
Pyth, 18 байт
Попробуй это здесь.
источник
Pyth ,
2120 байтТестирование.
Использует совершенно иной подход, чем ответ @ EriktheOutgolfer , который помог мне сыграть 1 байт в чате с 22 до 21.
объяснение
источник
Октава ,
10082 байтаБольшое спасибо @TomCarpenter за то, что научили меня, что присваивания имеют возвращаемое значение, и сэкономили мне
18
байты!Попробуйте онлайн!
Ungolfed / Пояснение
Это работает так, что нам нужно добавить само число
n
раз, а затем добавить сумму столбцов. Суммированиеs' * logspace(0,n-1,n)
достигает суммы столбцов, например, еслиv=-123.4
эта матрица будет:Так что нам просто нужно
sum
это сделать, и мы закончили.источник
@(v)(n=nnz(s=strrep(num2str(abs(v)),'.','')-'0'))*v+sum(sum(s'*logspace(0,n-1,n)))
. Попробуйте онлайн!Swift 4 ,
139134 байтаТестирование.
объяснение
func f(s:String)
- Определяет функциюf
с явным параметром Strings
.let k=s.filter{"/"<$0}
- Фильтрует цифры: я заметил, что оба-
и.
имеют меньшие значения ASCII, чем все цифры, и/
между ними.
,-
и0
. Следовательно, я только что проверил,"/"
меньше ли текущий символ, как я сделал в своем ответе на Python.print(...)
- печатает результат.Float(s)!*Float(k.count)
- Преобразует и строку, и количество цифр в число с плавающей запятой и умножает их (Swift не допускает умножения чисел с плавающей запятой и Int :()) Таким образом, он добавляет количествоx
раз, гдеx
это количество цифр, которые он содержит.k.map{Int(String(repeating:$0,count:k.count))!
-k.map{}
картыk
с текущим значением$0
.String(repeating:$0,count:k.count)
берет каждую цифру, создает строкуx
идентичных цифр иFloat(...)!
преобразует ее в число с плавающей точкой..reduce(0,+)
- Получает сумму из списка выше.И, наконец,
+
подводит итоги двух результатов.Давайте возьмем пример!
Скажем , наша Строка
"0.45"
. Во-первых, мы фильтруем цифры, поэтому мы остаемся с0, 4, 5
. Мы превращаем"0.45"
в Float и умножить на количество цифр:0.45 * 3 = 1.35
. Затем мы берем каждую цифру и превратить его в строку повторяя эту цифру , пока не заполнит ширину квадрата (сколько цифр есть):0, 4, 5 -> 000, 444, 555
. Мы суммируем это000 + 444 + 555 = 999
. Тогда мы просто сложим результаты вместе1.35 + 999 = 1000.35
.источник
C #,
139137 байтСохранено 2 байта благодаря @Ian H.
Попробуйте онлайн!
Полная / Отформатированная версия:
источник
var d=(n+ ...
вместоvar d = (n ...
.Mathematica, 107 байт
источник
PHP,
7888 +1 байтБеги как труба с
-nR
.Может выдавать предупреждения в PHP 7.1. Repace
$c,$e
с ,$c>0?$c:0,$e
чтобы исправить.источник
Python 3 , 68
707377байтПопробуйте онлайн!
Перебирает каждый символ цифры и повторяет его по количеству символов в целом, превращает его в целое число и добавляет к нему
n
. Таким образом,n
добавляютсяd
времена, горизонтальная часть суммы, а также повторение цифры, которая является вертикальной частью. Изначально использовался,str.isdigit
но>"/"
, благодаря другим в этой теме, сэкономил много байтов. Сохраняет два байта, принимаяn
в качестве строки, но результат получается более сложным.Попробуйте онлайн!
источник