Desafío
Entonces, um, parece que, si bien tenemos muchos desafíos que funcionan con números cuadrados o números de otras formas, no tenemos uno que simplemente pregunte:
Dado un entero n
(donde n>=0
) como entrada, devuelve un valor verdadero si n
es un cuadrado perfecto o un valor falsey si no.
Reglas
- Usted puede tomar la entrada por cualquier medio razonable, conveniente, siempre y cuando se permita la normativa de E / S estándar .
- No necesita manejar entradas mayores de lo que su idioma elegido puede manejar de forma nativa ni lo que conduciría a imprecisiones de coma flotante.
- La salida debe ser uno de los dos valores consistentes de verdad / falsey (por ejemplo,
true
ofalse
,1
o0
): verdad si la entrada es un cuadrado perfecto, falsey si no lo es. - Este es el código de golf, por lo que gana el conteo de bytes más bajo.
Casos de prueba
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
Lanudo
fuente
fuente
18014398509481982
(2**54-2
), que es representable con un doble, y hace que las respuestas que solíansqrt
fallar.2**54-2
que aún es más grande de lo que un doble puede manejar con seguridad, al menos en JavaScript18014398509481982 > 9007199254740991
2**54-2
en una consola JS y compare con lo que obtiene18014398509481982
(el valor exacto). JS genera el valor exacto, por2**54-2
lo tanto, es representable con un doble. Si eso aún no lo convence, tome los datos binarios0100001101001111111111111111111111111111111111111111111111111111
, inténtelos como un flotador de doble precisión IEEE-754 y vea qué valor obtiene.Respuestas:
Neim , 2 bytes
Explicación:
Cuando digo 'infinito' quiero decir hasta que alcanzamos el valor máximo de longs (2 ^ 63-1). Sin embargo, Neim está (lentamente) haciendo la transición a BigIntegers teóricamente infinitamente grandes.
¡Intentalo!
fuente
Jalea , 2 bytes
Pruébalo en línea!
fuente
TI-Basic, 4 bytes
Simplemente verifica si la raíz cuadrada es un número entero buscando una parte fraccionaria / decimal distinta de cero.
fuente
C #, 27 bytes
Una forma más correcta / precisa de hacer esto sería:
fuente
...<int>==0
está...!<int>
CreoJavaScript (ES6), 13 bytes
Devuelve verdadero si la raíz cuadrada de n es un número entero.
Retazo:
fuente
dc, 9
Salidas 1 para la verdad y 0 para falsey.
Pruébalo en línea .
dc
El^
comando de exponenciación de Note da 0 0 = 1 y 0 n = 0, donde n> 0.fuente
dc
de una manera tan ingeniosa.Retina , 18 bytes
Pruébalo en línea! Adaptado descaradamente de la respuesta de @ MartinEnder a ¿Es este número triangular? pero con la conversión base incluida a un costo de 6 bytes.
Tenga en cuenta que este número es triangular? no fue por alguna razón inexplicable requerida para admitir cero como un número triangular, por lo que parte de la adaptación fue agregar un
?
para hacer que el 1 inicial sea opcional, permitiendo que el grupo coincida con la cadena vacía y, por lo tanto, una entrada cero. Sin embargo, después de haber emparejado la cadena vacía, el+
operador deja de repetir, para evitar el bucle infinito que sucedería si se mantuviera codiciosamente coincidiendo con la cadena vacía (después de todo,^1?
ciertamente seguiría coincidiendo). Esto significa que ni siquiera intenta hacer coincidir la otra alternativa en el grupo, evitando así la coincidencia de 2, 6, 12, etc. anclar el partido en el inicio al tiempo que el grupo opcional para la misma cuenta de bytes:^(^1|11\1)*$
.fuente
2
,6
u otros números de la forman^2-n
. ;) (Una forma de evitar esa explicación para el mismo número de bytes sería^(^1|11\1)*$
.)(^|1\1)+$
, creo?+
también dejaría de repetirse si ya no hubiera una alternativa vacía, por ejemplo, en el caso de((?(1)11\1|1?))+
. Una vez que haya una iteración vacía, no intentará más, independientemente de si pueden estar vacías o no.C (gcc), 30 bytes
Pruébalo en línea!
C, 34 bytes
Pruébalo en línea!
C, 33 bytes
Pruébalo en línea!
fuente
MATL ,
54 bytesGracias a Luis por reducir mi código de un byte más largo en dos bytes, por lo que es el más corto.
Pruébalo en línea
Explicación:
Vieja respuesta:
Pruébalo en línea!
fuente
mod(2**127-, 1000)
. A menos que los cuatro últimos dígitos sean 0 ...t:Um
. Eso funciona para entradas hasta2^53
, debido a la precisión limitada de coma flotanteU: str2num / string to array / square
. Sabía que tenía que haber una función cuadrada, pero no pude encontrarla ...Python 3 ,
4038 bytes¡Gracias a squid por guardar 2 bytes!
Pruébalo en línea!
Demasiado lento para devolver una respuesta
2147483647
en un tiempo razonable. (Pero escrito usando un generador para ahorrar memoria, ya que no cuesta ningún byte).También funciona en Python 2, aunque
OverflowError
es una posibilidad debido a querange
si lo prueba con grandes entradas. (AMemoryError
también sería probable en Python 2, también debido arange
).fuente
Perl 5 , 14 bytes
13 bytes de código +
-p
bandera.Pruébalo en línea!
Calcula la raíz cuadrada y mira si es un número entero (más precisamente, si no contiene un punto (
/\./
).fuente
05AB1E , 4 bytes
Pruébalo en línea!
fuente
4111817668062926054213257208
2**127-1
, un primo de Mersenne).Python 3 , 19 bytes
Pruébalo en línea!
fuente
4111817668062926054213257208
. Ej .lambda n:int(n**.5)**2==n
sqrt
) falla en valores que están fuera del rango de un doble, como2**4253-1
.%1
es definitivamente<1
, por lo que su propuesta sería verdadera para todas las entradas. Tenga en cuenta quen**.5
es un flotador.SageMath , 9 bytes
Pruébalo en línea
La función incorporada hace exactamente lo que dice en la lata. Dado que Sage utiliza el cálculo simbólico, está libre de errores de precisión computacional que afectan a los flotadores IEEE-754.
fuente
Japt , 3 bytes
Pruébalo en línea!
Parece funcionar bien
2**54-2
en el intérprete de Japt pero falla en TIO por alguna razón ...fuente
2**127-1
, un primer Mersenne).2**127-1
está dentro del rango de un doble.2**53-1
?2**127-1
como un número. Lo más cerca que puede estar es2**127
.Haskell,
2624 bytesPruébalo en línea!
Comprueba si n está en la lista de todos los cuadrados desde
0
hastan
.fuente
f n=or[i*i==n|i<-[0..n]]
:)Prólogo (SWI) , 27 bytes
Pruébalo en línea!
Explicación
Busca a través de todos los números mayores o iguales
0
y menores o iguales aN
y prueba si ese número al cuadrado es igual aN
.fuente
MathGolf , 1 byte
Pruébalo en línea!
No creo que se necesite una explicación. Vi la necesidad de un operador "es un cuadrado perfecto" antes de ver este desafío, ya que el lenguaje está diseñado para manejar los desafíos de golf relacionados con las matemáticas. Devuelve 0 o 1, ya que MathGolf usa números enteros para representar booleanos.
fuente
PHP, 21 bytes
Si la raíz cuadrada no es un número entero,
(-1)**$argn**.5
esNAN
.fuente
-F
bandera y tuberías:echo 144 | php -F script.php
.f
organizo esa carta. Gracias.Rubí, 25 bytes
Probablemente hay un camino más corto, pero eso es todo lo que encontré.
Pruébalo en línea!
fuente
CJam , 8 bytes
Pruébalo en línea!
Explicación
Raíz cuadrada entera, cuadrada, compárela con el número original.
fuente
mq1%0=
, que también es de 6 bytes{
...}
hacer que el código funcione, así que el mismo byte cuentari
se requiere en ese casoMathematica, 13 bytes
Pruébalo en línea!
fuente
AtomQ
lugar deIntegerQ
.@*
.AtomQ@*Sqrt
es sinónimo deAtomQ@Sqrt@#&
. Por ejemplo,AtomQ@*Sqrt@4
devolucionesTrue
yAtomQ@*Sqrt@5
devolucionesFalse
. (Debido a la precedencia,AtomQ@*Sqrt[4]
no funciona bien, regresandoAtomQ@*2
).APL (Dyalog) , 8 bytes
Pruébalo en línea!
0=
[es] cero igual a1|
el módulo-1 (es decir, la parte fraccionaria) de*∘.5
el argumento elevado al poder de la mitadfuente
AWK , 27 + 2 bytes
Pruébalo en línea!
Agregue
+2
bytes para usar la-M
bandera para una precisión arbitraria. Originalmente utilicé la comparación de cadenas porque un gran número comparaba igual, aunque no lo fueran, perosqrt
también estaba devolviendo valores imprecisos.2^127-2
No debería ser un cuadrado perfecto.fuente
T-SQL, 38 bytes
Busca un punto decimal en la raíz cuadrada.
IIF
es específico de MS SQL, probado y funciona en MS SQL Server 2012.La entrada está en la columna a de la tabla t preexistente , según nuestras reglas de entrada .
fuente
Ohm , 2 bytes
Utiliza
CP-437
codificación.Explicación
Entrada implícita -> Cuadrado perfecto incorporado -> Salida implícita ...
fuente
Java 8, 20 bytes
La entrada es un
int
.Pruébalo aquí
fuente
int
,long
,short
. Y con las preguntas en las que piden un número entero pero el formato de entrada es flexible, a veces uso una entrada de cadena para guardar algunos bytes. Personalmente, creo que usarn->
está bien, y solo debes indicar cuál es el tipo, pero aparentemente no todos están de acuerdo con esto. Por otro lado, viniendo de un historial de respuestas de Java 7, pasar deint c(int n){return ...;}
a(int n)->...
tiene más sentido quen->...
(aunque personalmente prefiero el segundo ya que, por supuesto, más corto).R, 15
^ .5 es menos bytes que sqrt (). %% 1, el módulo, dará como resultado 0 si la respuesta es un número entero. scan () toma la entrada del usuario.
http://www.tutorialspoint.com/execute_r_online.php?PID=0Bw_CjBb95KQMSm1qVktIOUdSSDg
fuente
Añadir ++ ,
241311 bytesPruébalo en línea!
Eliminé la función torpe en la parte superior y la reescribí en el cuerpo de la pregunta para eliminar 11 bytes.
Como la primera sección ya se explica a continuación, solo veamos cómo funciona la nueva parte
Versión anterior, 24 bytes
Pruébalo en línea!
La función en la parte superior (
D,i,@,1@%!
) es la parte principal del programa, así que vamos a entrar en más detalles.fuente
Python 3 ,
28 2725 bytesPruébalo en línea!
fuente