Вызов
Итак, кажется, что, хотя у нас есть множество задач, которые работают с квадратными числами или числами других фигур, у нас нет такой, которая просто спрашивает:
Если в качестве входных данных указать целое число n
(где n>=0
), верните истинное значение, если n
это идеальный квадрат, или значение Фолси, если нет.
правила
- Вы можете принимать ввод любым разумным и удобным способом, если это разрешено стандартными правилами ввода / вывода. .
- Вам не нужно обрабатывать входные данные, которые больше, чем те, которые выбранный вами язык может обрабатывать изначально, и которые могут привести к неточностям с плавающей запятой.
- Выходными данными должно быть одно из двух последовательных значений истинности / ложности (например,
true
илиfalse
,1
или0
) - true, если вход является идеальным квадратом, и false, если это не так. - Это код-гольф, поэтому выигрывает меньшее количество байт.
Тестовые случаи
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
code-golf
math
number
decision-problem
мохнатый
источник
источник
18014398509481982
(2**54-2
), который является представим с двойным, и вызывает ответы , что использованиеsqrt
на провал.2**54-2
он по-прежнему больше, чем может безопасно обработать double, по крайней мере в JavaScript18014398509481982 > 9007199254740991
2**54-2
в консоль JS и сравните то, что вы получите18014398509481982
(точное значение). JS выводит точное значение, поэтому2**54-2
представляется двойным. Если это все еще не убеждает вас, возьмите двоичные данные0100001101001111111111111111111111111111111111111111111111111111
, интерпретируйте их как число с плавающей запятой IEEE-754 и посмотрите, какое значение вы получите.Ответы:
Нейм , 2 байта
Объяснение:
Когда я говорю «бесконечный», я имею в виду, пока мы не достигнем максимального значения длинных (2 ^ 63-1). Однако Нейм (медленно) переходит к теоретически бесконечно большим BigIntegers.
Попытайся!
источник
Желе , 2 байта
Попробуйте онлайн!
источник
TI-Basic, 4 байта
Просто проверяет, является ли квадратный корень целым числом, ища ненулевую дробную / десятичную часть.
источник
C #, 27 байт
Более правильный / точный способ сделать это будет:
источник
...<int>==0
это...!<int>
я думаюJavaScript (ES6), 13 байт
Возвращает true, если квадратный корень из n является целым числом.
Отрывок:
источник
DC, 9
Выходы 1 для правды и 0 для фальси.
Попробуйте онлайн .
Примеч
dc
«сек^
команда экспоненцирование дает 0 0 = 1 и 0 п = 0, где п> 0.источник
dc
таким гениальным способом.Сетчатка , 18 байт
Попробуйте онлайн! Бесстыдно адаптировано из ответа @ MartinEnder на треугольник Это число?но с включенным базовым преобразованием по стоимости 6 байтов.
Обратите внимание, что это число треугольное? не по какой-то необъяснимой причине требовалось поддерживать ноль как треугольное число, поэтому частью адаптации было добавление a,
?
чтобы сделать начальную 1 необязательной, позволяя группе соответствовать пустой строке и, следовательно, нулевому вводу. Однако теперь, сопоставив пустую строку,+
оператор прекращает повторение, чтобы избежать бесконечного цикла, который случился бы, если бы он продолжал жадно сопоставлять пустую строку (в конце концов,^1?
безусловно, продолжал бы совпадать). Это означает, что он даже не пытается сопоставить другую альтернативу в группе, таким образом избегая совпадения 2, 6, 12 и т. Д. Как указывает @MartinEnder, более простой способ избежать этого при сопоставлении пустой строки заключается в якорь матч на старте, делая группу необязательным для того же счетчику байтов:^(^1|11\1)*$
.источник
2
,6
или других чисел в формеn^2-n
. ;) (Можно было бы избежать такого объяснения для одного и того же числа байтов^(^1|11\1)*$
.)(^|1\1)+$
, я думаю?+
он также прекратил бы цикл, если бы не было пустой альтернативы, например, в случае((?(1)11\1|1?))+
. После того, как была пустая итерация, она не будет пробовать дальнейшие, независимо от того, могут ли они быть пустыми или нет.C (gcc), 30 байтов
Попробуйте онлайн!
C, 34 байта
Попробуйте онлайн!
C, 33 байта
Попробуйте онлайн!
источник
MATL ,
54 байтаСпасибо Луису за то, что он сократил мой однобайтовый длинный код на два байта, сделав его самым коротким.
Попробуйте онлайн
Объяснение:
Старый ответ:
Попробуйте онлайн!
источник
mod(2**127-, 1000)
. Если только последние четыре цифры не равны 0 ....t:Um
. Это работает для входов до2^53
, из-за ограниченной точности с плавающей точкойU: str2num / string to array / square
, Я знал, что должна быть квадратная функция, но я не мог ее найти ...Python 3 ,
4038 байтСпасибо squid за сохранение 2 байта!
Попробуйте онлайн!
Слишком медленно, чтобы вернуть ответ
2147483647
разумное количество времени. (Но написано с использованием генератора для экономии памяти, так как это не стоит никаких байтов.)Работает в Python 2 также, хотя это
OverflowError
возможно,range
если вы попробуете это с огромными затратами. (АMemoryError
также вероятно в Python 2, также из-заrange
.)источник
Perl 5 , 14 байт
13 байт кода +
-p
флаг.Попробуйте онлайн!
Вычисляет квадратный корень и ищет, является ли оно целым числом (точнее, если оно не содержит точку (
/\./
).источник
05AB1E , 4 байта
Попробуйте онлайн!
источник
4111817668062926054213257208
2**127-1
простое число Мерсенна).Python 3 , 19 байт
Попробуйте онлайн!
источник
4111817668062926054213257208
.lambda n:int(n**.5)**2==n
sqrt
) терпит неудачу на значениях, которые находятся вне диапазона двойного, например2**4253-1
.%1
- это определенно<1
, поэтому ваше предложение вернет true для всех входных данных. Обратите внимание, чтоn**.5
это поплавок.SageMath , 9 байт
Попробуйте онлайн
Встроенная функция делает именно то, что говорит на жестяной банке. Поскольку Sage использует символьные вычисления, в нем нет ошибок точности вычислений, которые мешают IEEE-754.
источник
Japt , 3 байта
Попробуйте онлайн!
Кажется, хорошо работает
2**54-2
в интерпретаторе Japt, но по какой-то причине не работает на TIO ...источник
2**127-1
простое число Мерсенна).2**127-1
находится в диапазоне двойного.2**53-1
?2**127-1
в виде числа. Самое близкое, что это может получить2**127
.Haskell,
2624 байтаПопробуйте онлайн!
Проверяет, находится ли n в списке всех квадратов от
0
доn
.источник
f n=or[i*i==n|i<-[0..n]]
:)Пролог (SWI) , 27 байт
Попробуйте онлайн!
объяснение
Выполняет поиск по всем числам, большим или равным
0
и меньшим или равным,N
и проверяет, равно ли это число в квадратеN
.источник
MathGolf , 1 байт
Попробуйте онлайн!
Я не думаю, что объяснение необходимо. Прежде чем я увидел эту проблему, я увидел необходимость в операторе «идеально квадрат», поскольку этот язык предназначен для решения математических задач в гольф. Возвращает 0 или 1, поскольку MathGolf использует целые числа для представления логических значений.
источник
PHP, 21 байт
Если квадратный корень не является целым числом,
(-1)**$argn**.5
естьNAN
.источник
-F
флагом и трубопровода:echo 144 | php -F script.php
.f
написал это письмо. Спасибо.Рубин, 25 байт
Вероятно, есть более короткий путь, но это все, что я нашел.
Попробуйте онлайн!
источник
CJam , 8 байт
Попробуйте онлайн!
объяснение
Целочисленный квадратный корень, квадрат, сравните с исходным числом.
источник
mq1%0=
, что также 6 байтов{
...}
сделать код функцией, таким же счетчиком байтовri
в этом случае требуетсяMathematica, 13 байт
Попробуйте онлайн!
источник
AtomQ
вместоIntegerQ
.@*
.AtomQ@*Sqrt
это синоним дляAtomQ@Sqrt@#&
. Например,AtomQ@*Sqrt@4
возвращаетTrue
иAtomQ@*Sqrt@5
возвращаетFalse
. (Из-за старшинстваAtomQ@*Sqrt[4]
не работает правильно, возвращаясьAtomQ@*2
.)APL (Дьялог) , 8 байт
Попробуйте онлайн!
0=
[равно] ноль равно1|
модуль-1 (то есть дробная часть)*∘.5
аргумент, приведенный к власти половиныисточник
AWK , 27 + 2 байта
Попробуйте онлайн!
Добавьте
+2
байты для использования-M
флага для произвольной точности. Первоначально я использовал сравнение строк, потому что большое число сравнивалось, хотя они не были, но ониsqrt
также возвращали неточные значения.2^127-2
не должно быть идеальным квадратом.источник
T-SQL, 38 байт
Ищет десятичную точку в квадратном корне.
IIF
специфичен для MS SQL, протестирован и работает в MS SQL Server 2012.Входные данные находятся в столбце a существующей таблицы t согласно нашим правилам ввода .
источник
Ом , 2 байта
Использует
CP-437
кодирование.объяснение
Неявный ввод -> Встроенный идеальный квадрат -> Неявный вывод ...
источник
Java 8, 20 байт
Вход является
int
.Попробуй это здесь.
источник
int
,long
,short
. И с вопросами, где они задают целое число, но формат ввода гибкий, я иногда использую ввод String, чтобы сохранить несколько байтов. Лично я думаю, что использованиеn->
- это хорошо, и вы должны просто указать, что это за тип, но, очевидно, не все с этим согласны. С другой стороны, если исходить из истории ответов Java 7, переход отint c(int n){return ...;}
к(int n)->...
имеет больше смысла, чемn->...
(хотя я лично предпочитаю второе, поскольку оно короче, конечно).R, 15
^ .5 меньше байтов, чем sqrt (). %% 1, модуль, приведет к 0, если ответ является целым числом. scan () принимает пользовательский ввод.
http://www.tutorialspoint.com/execute_r_online.php?PID=0Bw_CjBb95KQMSm1qVktIOUdSSDg
источник
Добавить ++ ,
241311 байтПопробуйте онлайн!
Я удалил неуклюжую функцию сверху и переписал ее в основной части вопроса, чтобы удалить 11 байтов.
Как первый раздел уже объяснен ниже, давайте узнаем только, как работает новая часть
Старая версия, 24 байта
Попробуйте онлайн!
Функция top (
D,i,@,1@%!
) является основной частью программы, поэтому давайте углубимся в детали.источник
Python 3 ,
28 2725 байтПопробуйте онлайн!
источник