Cada término en la secuencia de cuadratura, x n , se crea tomando x n-1 , cuadrándolo y eliminando todos menos los primeros cuatro dígitos.
La secuencia siempre comienza con x 1 = 1111 . Al cuadrar esto se obtiene 1234321, entonces x 2 = 1234
Los primeros términos son:
1111
1234
1522
2316
5363
...
El reto
Su tarea es, dado un número entero no negativo n , calcular x n . Puede enviar un programa completo que realice E / S o una función que tome n como parámetro.
Su solución puede ser cero o una indexada, siempre que especifique cuál.
Como todos los términos en esta secuencia son más cortos que 5 dígitos, su código también debe ser lo más corto posible. Se aplican las lagunas de código estándar de golf .
¡Que gane el mejor golfista!
Casos de prueba
Nota: Estos están indexados en 1.
1 -> 1111
8 -> 6840
15 -> 7584
20 -> 1425
80 -> 4717
Respuestas:
05AB1E ,
87 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
JavaScript (ES7),
444336 bytesEste es un gran ejemplo de abuso de la coerción de tipos:
**
convierte ambos argumentos en números y+
convierte ambos argumentos en cadenas a menos que ambos sean números. Esto significa quef(n)**2+f
primero se conviertef(n)
en un número y lo cuadra, luego concatena el resultado con la representación de cadena def
. Luego podemos usar.slice
para recuperar los primeros 4 caracteres de la cadena.Aquí hay algunos enfoques alternativos que no usan cadenas:
Fragmento de prueba
Mostrar fragmento de código
Nota: esto se usa
Math.pow
porque**
no es compatible con todos los navegadores.fuente
Haskell, 40 bytes
Es una secuencia basada en 0. Ejemplo de uso:
((iterate(read.take 4.show.(^2))1111)!!) 79
->4717
.Cómo funciona:
fuente
Mathematica, 48 bytes
Función sin nombre que toma un argumento entero; 0 indexado. Utiliza cuatro caracteres de tres bytes
⌊⌊⌋⌋
: Mathematica usa cualquieraFloor[x]
o⌊x⌋
para redondear un número real a un entero, y este último generalmente es un byte menos. Los nombres de comando en Mathematica para convertir enteros en cadenas son demasiado largos, por lo que en su lugar hacemos un cálculo matemático para encontrar los primeros cuatro dígitos de x ^ 2: tomamos el logaritmo de base 10 de x ^ 2, restamos su parte entera, elevamos 10 de vuelta a ese poder, y multiplicar por 1000 y redondear hacia abajo.tl; dr: logaritmos ftw
fuente
Python 2,
514644 Bytes¡Nuevamente incorrecto! La función recursiva regresa. Esto es un índice.Me gustaría deshacerme del torpeResulta que por el momentoif
si es posible, pero creo que unexec
podría ser más corto ...exec
es más corto.Una solución alternativa de 46 bytes con
exec
:Una solución recursiva alternativa de 49 bytes:
Gracias a Flp.Tkc por guardar un byte recordándome que la cuadratura no necesita exponenciación :)
fuente
f=lambda n:1111if n<2else int(`f(n-1)**2`[:4])
V , 19 bytes
Pruébalo en línea!
Esto usa indexación basada en 0.
Por supuesto, dado que los números no son exactamente el fuerte de V , esto no es muy complejo. Sin embargo, muestra una buena ventaja que V tiene sobre vim. Puede ejecutar una macro 0 veces, lo que no es posible en vim ya que '0' es un comando, no un conteo.
Este contiene muchos caracteres no imprimibles, así que aquí hay un hexdump:
Y aquí hay una versión legible:
Explicación:
fuente
Jalea ,
129 bytes-3 bytes gracias a Dennis que usa la indexación basada en 1 y el
ṁ
átomo de molde / remodelación. Sugerencias de golf bienvenidas! Pruébalo en línea!No golfista
fuente
1
lugar de⁽¡n
.Perl, 37 bytes
36 bytes de código +
-p
bandera.Para ejecutarlo:
fuente
Powershell,
7355 bytes¡Muchas gracias a TimmyD por reducir 18 bytes!
Código:
for($A=1111;$args[0]---1;$A=-join"$(+$A*$A)"[0..3]){}$A
$A=1111;1..($n=2)|%{[string]$B=[math]::pow($A,2);$A=$B.substring(0,4)};$A
$n
es n en x n-1Explicación y código explotado:
Algunas notas:
1..($n=4)|%
establecerá $ n en 4 y luego iniciará un ciclo que se ejecuta $ n veces.1
se puede cambiar a cualquier entero y se repetirá $ n- [su entero] +1 veces.[math]::
en Powershell es un doble. En el código anterior, tenemos que convertir explícitamente$B
a una cadena para poder invocarla.substring()
porque no hay.substring()
función para los dobles en Powershell.fuente
Python 2,
4441 bytes-3 bytes gracias a xnor (use una división entera para evitar
and
)repl.it
Función recursiva basada en 1.
Cuando
n>1
la división entera1/n
da como resultado0
, entonces,0*1111=0
que es falsey , entonces se evalúa el derecho delor
, que toma los primeros cuatro caracteres de la representación del cuadrado deln-1
resultado th; esto luego se lanza a unint
.Cuando
n=1
la división entera1/n
, resulta1
, entonces1*1111=1111
, que es verdad, y elint
1111
elenco a unint
es1111
.fuente
int
exterior. Si indexas 1, puedes acortar el caso base cong=lambda n:int(1/n*1111or`g(n-1)**2`[:4])
.
s!Groovy, 49 bytes
fuente
Pyke, 10 bytes
Pruébalo aquí!
fuente
MATL ,
14, 13 bytesPruébalo en línea!
Explicación:
fuente
U
(cuadrado, para entrada numérica) en lugar det*
R,
58565553 bytesToma
N
de stdin. 3334 es prácticamente X_0, lo cual es necesario porque el bucle for debe ejecutarse al menos una vez (sería más largo omitirlo).R realmente es un lenguaje terrible para tomar los primeros cuatro dígitos de un número, pero como el número de casos es limitado, solo tenemos que preocuparnos por los cuadrados de
x<3163
yx>3162
, el primero produce un número de 6 dígitos, el último un número de 7 dígitos .El resto es bastante sencillo,
%/%
divide e ignora el resto.x
está impreso en stdout.Guardado 2 bytes gracias a @ETHproductions
fuente
3334
(o quizás3333
)?3333^2 = 11108889
produciría1110
, y .... como estoy comprobando esto, veo3334
que funcionaría: | . No estoy seguro de por qué ya no compruebo eso.Javagony - 153 bytes
Javagony es una versión restringida de Java, que no permite ningún flujo de control, excepto la recursión y
try-catch
no para bucles, bucles while o if. Codificarlo es un ejercicio bastante divertido, pero frustrante. No es que Java normal no sea tan frustrante por sí mismo.fuente
PHP,
5552 bytesGuardado 3 bytes gracias a @ user59178
Ejecutar desde la línea de comando, indexado a cero.
¡Gracias por no preocuparte por el tipo de variables que tengo, PHP! Aquí simplemente cuadramos el número y recortamos todo más allá de los primeros 4 dígitos, alternando casualmente entre número y cadena sin importar el mundo.
fuente
$argv[1]--
como contador de bucles.Brachylog , 18 bytes
Pruébalo en línea!
Esta respuesta está indexada a 0.
Explicación
fuente
C, 56 bytes
Un índice.
fuente
Clojure, 76 bytes
Primero golf Clojure (parece un buen lenguaje). Esto es 1 indexado.
Explicaré el código más tarde.
fuente
C #,
6460 bytes¡Ahorré 4 bytes siguiendo el comentario de Olivier Grégoire en una respuesta Java!
Versión anterior ( 64 bytes ):
Programa completo con método no protegido y casos de prueba:
fuente
n-->1
Ruby, 47 bytes
Primero golf! Guarda bytes con la
-n
opción (¡pero aún cuenta como 1! :)).0 indexado. Para ejecutarlo:
fuente
Pyth,
1312 bytesGracias a @Jakube por -1 byte
Un programa que toma la entrada de un entero indexado 1 e imprime el resultado.
Banco de pruebas
Esto utiliza un enfoque similar a la respuesta de @ Adnan .
Cómo funciona
fuente
*GG
en lugar de^G2<space>
CJam , 15 bytes
Utiliza indexación basada en 0.
Pruébalo en línea!
fuente
Lote, 82 bytes
Al igual que Perl, los enteros son cadenas, pero a diferencia de Perl, solo puedo tomar la subcadena de una variable, y tomar subcadenas dentro de un bucle es algo incómodo.
fuente
Perl 6 , 36 bytes
Explicación:
Prueba:
fuente
Matlab,
79, 78 bytesCasos de prueba:
No es una solución asombrosa. Estoy seguro de que debe haber una mejor manera de truncar a 4 dígitos, pero no lo sé hoy.
Editar: afeitó un byte configurando 0.5 -> .5
fuente
Java 8,
779374716978 bytesCada repetición forma
n
los primeros 4 caracteres den*n
.Prueba Java en línea !
Historial de publicaciones:
77 bytes: código inicial (incompleto)
+16 bytes, por Olivier Grégoire: código completado al convertirlo en una función Lambda.
-19 bytes: reemplazar
while
confor
ciclo.-4 bytes:
long
s usado en lugar deint
s-2 bytes, por Roman Gräf: se eliminaron los corchetes innecesarios
+9 bytes,
return
declaración faltante¡Gracias a @ OlivierGrégoire y @ RomanGräf por señalar algunos problemas!
Espera, Java late ... (redoble de tambores) ¡ Clojure y Matlab aquí! Un gran aplauso a Java por favor!
fuente
x
no se declara Esto debería ser una función o un programa completo. No es un fragmento de código.x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}return n;}
(para un recuento total de bytes de 91). Esto se debe a que los fragmentos no están permitidos: solo funciones o programas completos.x->{Long n=1111;for(;--x>0;)n=n.valueOf((n*n+"").substring(0,4));return n;}
con varias técnicas utilizadas (solíaLong
ser capaz de usarLong.valueOf
con menos bytes, no se recomienda en la programación normal, pero totalmente en golf; se eliminam
porque es innecesario si disminuimosx
en su lugar, eliminó llaves innecesarias)Perl, 36 bytes
Un enfoque diferente de la otra solución de Perl, lo que lleva a un código ligeramente más corto. No se necesitan argumentos de línea de comandos (aparte del argumento de selección de versión habitual
-M5.010
, que no cuenta para el recuento de bytes), lo que significa que esta es la misma cantidad de código pero con menos penalizaciones, dando una mejor puntuación general.Creamos un estilo de subcarga de bucle mediante la repetición y
eval
-ing de una cadena; Experimenté comenzando la cadena en el medio, pero comenzarla al principio resulta ser la más corta. Multiplicamos$&
(el resultado de la última coincidencia de expresiones regulares) por sí mismo para cuadrarlo; si el resultado es cero, usamos1x4
(es decir1111
, Perl tiene un operador para repetir cosas, incluidos los dígitos de un número) en lugar del resultado. Luego regexamos los primeros cuatro caracteres. Todo se ejecuta en el contexto de la lista debido a que está dentrosay
, por lo que el resultado finaleval
será el contenido de los paréntesis de la coincidencia final.fuente
Java,
79676664 bytesGracias a @Oliver Grégoire.
Gracias a @ETHProduction.
Subcadena reemplazada y otras cosas con la idea de @Xanderhall
Aunque hay soluciones más cortas, quería publicar una recursiva :). Y yo soy la función "real" más corta :). Editar: Parece que soy el más bajo ahora :)))
fuente
for(i*=i;i>1e4;)i/=10;
? Eso ahorraría un byte.long
s? Puede matar dos bytes usandoint
s.Pushy ,
2620 bytesDa argumentos en la línea de comandos:
$ pushy sqseq.pshy 79
.Bien formateado, con explicación:
fuente