Igualdad en la suma de dígitos

23

Introducción

Tomemos el número 180. Este es un número interesante porque la suma de dígitos de este número es igual a:

1 + 8 + 0 = 9

Y la versión al cuadrado de este número, o:

180² = 32400 > 3 + 2 + 4 + 0 + 0 = 9

Ambos son 9 . La suma de los dígitos del número original y el número al cuadrado son iguales. Por supuesto, esto también se encuentra en OEIS: A058369 .

Tarea

Dado un número entero no negativo n, genera el nnúmero positivo th con esta condición.

Casos de prueba ( indexados a cero )

Input > Output

0 > 1
1 > 9
2 > 10
3 > 18
4 > 19
5 > 45
6 > 46
7 > 55
8 > 90
9 > 99
10 > 100
11 > 145
12 > 180
13 > 189
14 > 190
15 > 198
16 > 199
17 > 289
18 > 351
19 > 361

La entrada también puede indexarse ​​1 si eso le queda mejor.

Este es el , por lo que gana el envío con la menor cantidad de bytes.

Adnan
fuente
En caso de que nadie lo haya visto todavía, solo los números que son equivalentes a 0 o 1 (mod 9) pueden aparecer en la lista.
Neil
@MamaFunRoll Um ... no. Lo siento. Los números con raíces digitales de 5 tienen cuadrados cuya raíz digital es 7.
Neil
@Neil owait nvm
Mama Fun Roll
Escribí un predicado de Brachylog para determinar si la entrada es o no un término de esta secuencia, pero no pude hacer funcionar la repetitiva find-nth, así que lo dejaré en un comentario:^₂;?{ẹ+}ᵛ
Cadena no relacionada

Respuestas:

5

Jalea, 13 bytes

,²DS€=/
1dz#Ṫ

La entrada está indexada en 1. Pruébalo en línea!

Cómo funciona

1dz#Ṫ    Main link. Argument: n (index)

1        Set the return value to 1.
   #     Execute ... until ... matches have been found.
 Ç         the helper link
  ³        n
    Ṫ    Extract the last match.


,²DS€=/  Helper link. Argument: k (integer)

,²       Pair k with k².
  D      Convert each to decimal.
   S€    Compute the sum of each list of base 10 digits.
     =/  Reduce by equality.
Dennis
fuente
4

Haskell, 54 bytes

s=sum.map(read.pure).show
([x|x<-[1..],s x==s(x^2)]!!)

Ejemplo de uso: ([x|x<-[1..],s x==s(x^2)]!!) 17-> 289.

s calculates the digit sum:

                    show     -- turn number into a string
     map(read.pure)          -- turn every character (the digits) in to a
                             -- one element string and convert back to integer
sum                          -- sum those integers

main function:

[x|x<-[1..]            ]     -- make a list of all x starting from 1
           ,s x==s(x^2)      -- where s x == s (x^2)
                        !!   -- pick nth element from that list
nimi
fuente
4

JavaScript (ES6), 76 73 72 bytes

n=>eval("for(q=s=>eval([...s+''].join`+`),i=1;q(i)!=q(i*i)||n--;i++);i")

Pasé 30 minutos tratando de hacer que esto funcionara hasta que me di cuenta de que estaba generando la variable incorrecta: |

Esto está indexado a cero.

Downgoat
fuente
1
Siento que convertir esto en una función recursiva acortaría mucho esto ...
Mama Fun Roll
4

Perl 6, 47 46 bytes

{(grep {$_.comb.sum==$_².comb.sum},1..*)[$_]}
Teclas de acceso rápido
fuente
4

05AB1E , 10 9 8 bytes

µNÐn‚1öË

1 indexado.

-1 byte gracias a @Emigna eliminando lo implícito ½(aumento counter_variabledespués de cada iteración) al final
-1 byte gracias a @Grimy eliminando lo duplicado SOusando‚1ö

Pruébalo en línea.

Explicación:

µ         # Loop while the counter_variable is not equal to the (implicit) input yet:
 NÐ       #  Push the 0-based loop index three times
   n      #  Take the square of this index
          #   i.e. 180 → 32400
         #  Pair it with the index
          #   i.e. 180 and 32400 → [180,32400]
     1ö   #  Convert both numbers from base-1 to base-10, which basically sums the digits
          #   i.e. [180,32400] → [9,9]
       Ë  #  Check if both sums are equal
          #   i.e. [9,9] → 1 (truthy)
          #  (if they are: implicitly increase the counter_variable by 1)
          # (after the loop: implicitly print the top of the stack, which is the remaining
          #  copy of the index from the triplicate we've used)
Kevin Cruijssen
fuente
2
No es necesario ½aquí, ya que está implícito
Emigna
1
-1: µNDn‚1öË. es como SOpero vectoriza, lo que nos permite evitar la duplicación de código.
Grimmy
@ Grimy Gracias de nuevo. También lo agregué como un consejo para mi publicación Small tips. :)
Kevin Cruijssen
3

Mathematica, 64 bytes

a=Tr@*IntegerDigits;Nest[NestWhile[#+1&,#+1,a@#!=a[#^2]&]&,1,#]&

Función anónima simple. Indexado a cero.

LegionMammal978
fuente
3

Pyth, 15

e.fqsjZTsj^Z2TQ

¡1 byte gracias a DenkerAffe!

Pruébelo aquí o ejecute un Test Suite .

Utiliza la opción 1 indexada.

Implementación ingenua .fque utiliza los primeros nnúmeros que coinciden con la condición dada.

FryAmTheEggman
fuente
Puede guardar un byte eliminando hsi usa la indexación 1, que está explícitamente permitida.
Denker
@DenkerAffe Oh, gracias, debería leer más de cerca: P
FryAmTheEggman
2

MATL , 24 23 bytes

x`@2:^"@V!Us]=?@]NG<]1$

Utiliza una entrada basada en 1.

Pruébalo en línea!

x        % take inpout and delete it (gets copied into clipboard G)
`        %   do...while
  @      %   push loop iteration index: candidate number, n
  2:^    %   array [n n^2]
  "      %   for each element of that array 
    @    %     push that element 
    V!U  %     get its digits (to string, transpose, to number)
    Xs   %     compute their sum
  ]      %   end for each
  =      %   are the two sums equal?
  ?      %   if so
    @    %     the candidate number is valid: push it
  ]      %   end if
  NG<    %   is number of elements in stack less than input?
]        % if so, proceed with next iteration. End do...while. 
1$       % specify 1 input for implicit display: only top of stack
Luis Mendo
fuente
1
¡Qué bueno que MATL finalmente aparezca entre los compiladores distantes allí!
Abr001am
1

Julia, 79 66 bytes

f(n,x=0,i=1,s=c->sum(digits(c)))=x<n?f(n,x+(s(i)==s(i^2)),i+1):i-1

Esta es una función recursiva que acepta un entero y devuelve un entero. Utiliza indexación basada en 1.

Almacenamos algunas cosas como argumentos de función:

  • n : La entrada
  • x : Un contador de cuántos números con esta condición hemos encontrado
  • i : Un número para verificar la condición
  • s : Una función para calcular la suma de los dígitos de su entrada

Si bien xes menor que la entrada, recurrimos, incrementando xsi icumple con la condición e incrementando i. Una vez x == n, volvemos i, pero tenemos que restar 1 porque se habrá incrementado demasiadas veces.

Alex A.
fuente
1

Convexo 0.2, 36 35 bytes

Convex es un nuevo lenguaje que estoy desarrollando que se basa en gran medida en CJam y Golfscript. El intérprete y el IDE se pueden encontrar aquí . La entrada es un número entero en los argumentos de la línea de comando. Los índices están basados ​​en uno. Utiliza la codificación CP-1252 .

1\{\__2#¶{s:~:+}%:={\(\)\}{)\}?}h;(
GamrCorps
fuente
1

Mathematica, 63 60 61 59 bytes

Select[Range[9^#],Equal@@Tr/@IntegerDigits/@{#,#^2}&][[#]]&

Al hacer esto, apareció la otra respuesta, pero les estoy ganando un solo byte y estoy publicando esto antes de que ese sea golfizado. Uno indexado.

CalculadoraFeline
fuente
Falla para la entrada >2457. Simplemente aumentar su Rangeno ayudará, porque A058369[n]/nno parece converger.
murphy
¿Mejor? filler +
CalculatorFeline
10^#sería más corto que 2^#*9. Por supuesto, se vuelve demasiado lento después de que n es mayor que aproximadamente 6 ...
feersum
¿Por qué no 9^#? Fil
CalculatorFeline
¿Tienes una prueba de que f (n) <= 9 ^ n? (10 es obvio porque 10 ^ n es siempre una solución).
feersum
1

Retina, 103 bytes

\d+
$*1 x
{`x+
$.0$*x¶$.0$*a¶$.0$*b
%`b
$_
a+|b+
$.0
\d
$*
+`1¶1
¶
1(.*)¶¶$|¶[^d]+
$1x
}`^ ?x

x

Definitivamente golfable.

Utiliza la nueva función Retina% para cuadrar (por lo tanto, todavía no funciona con la versión en línea).

randomra
fuente
1

Mathcad 70 50 bytes

Mathcad no tiene funciones integradas para convertir un número a su cadena de dígitos, por lo que la función de usuario d (a) hace este trabajo. Luego, un programa itera a través de los enteros positivos, probando la igualdad de sumas, hasta que haya acumulado n números en el vector v. El programa se evalúa utilizando el operador =, que muestra el vector de resultados. ( Tenga en cuenta que todo el programa aparece exactamente como se muestra a continuación en la hoja de trabajo de Mathcad )

Programa actualizado: asume la inicialización predeterminada de a a cero y utiliza el hecho de que Mathcad devuelve el valor de la última instrucción evaluada en un programa.
Utiliza el orden de evaluación de las expresiones para incrementar la variable a en la primera suma (y que luego está disponible para su uso en la suma del cuadrado)

ingrese la descripción de la imagen aquí

Programa original: Devuelve un vector de todos los números hasta n.

ingrese la descripción de la imagen aquí

Stuart Bruff
fuente
0

Java 8, 113 bytes

n->{int r=0;for(;n>=0;)if((++r+"").chars().map(c->c-48).sum()==(r*r+"").chars().map(c->c-48).sum())n--;return r;}

0 indexado

Explicación:

Pruébalo en línea.

n->{           // Method with integer as both parameter and return-type
  int r=0;     //  Result-integer, starting at 0
  for(;n>=0;)  //  Loop as long as `n` is zero or positive
    if((++r    //   Increase `r` by 1 first
       +"").chars().map(c->c-48).sum()
               //   And if the sum of its digits
       ==(r*r+"").chars().map(c->c-48).sum())
               //   equals the sum of the digit of its square
      n--;     //    Decrease `n` by 1
  return r;}   //  Return the result
Kevin Cruijssen
fuente
0

Perl 5 -p , 53 bytes

Incluye +1para-p

1 basado

#!/usr/bin/perl -p
$.++while$_-=!eval+("-($.) ".$.**2)=~s/\B/+/gr;$_=$.

Pruébalo en línea!

Ton Hospel
fuente
0

TI-BASIC 66 62 bytes

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A
sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans

norteAns
norte

La función auxiliar genera la suma de los dígitos del valor en Ans.

Ejemplos:

3:prgmCDGF1E
             10
5:prgmCDGF1E
             19
8:prgmCDGF1E
             55
10:prgmCDGF1E
             99

Explicación:

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A ;prgmCDGF1E

Ans→N            ;store the input in N
While X<N        ;loop until the Nth term has been reached
IS>(A,A:         ;add 1 to A
                 ; (Increment A and skip the next statement if A>A)
A                ;leave A in Ans
prgmA            ;call the helper program below
Ans→B            ;store the result of the helper program in B
A²               ;square A and leave the result in Ans
prgmA            ;call the helper program below
                 ; (result is in Ans)
If B=Ans         ;if the two results are equal
IS>(X,N          ;add 1 to X
                 ; (Increment X and skip the next statement if X>N)
End
A                ;leave A in Ans
                 ;implicit print of Ans

sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans   ;prgmA

                      seq(⁻X-1,X,0,log(Ans    ;generate a list...
                                              ; using X as the variable,
                                              ; starting at 0,
                                              ; ending at the log of Ans,
                                              ; and evaluating "⁻X-1" for each element
                                              ; (implicit increment of 1)
                   ₁₀^(                       ;raise 10 to the power of each element
                Ans                           ;multiply each element by the input
          fPart(                              ;remove the integer part from each element
        10                                    ;multiply each element by 10
    int(                                      ;round each element to the nearest integer
sum(                                          ;then sum the resulting list

Nota: TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.

Tau
fuente
0

J , 62 bytes

[:{:({.@](>:@[,],[#~(=&(1#."."0@":)*:)@[)}.@])^:(#@]<1+[)^:_&1

Pruébalo en línea!

1 indexado. Una vez más, J no se desempeña bien en estas "enésimas" tareas, debido a la excesiva mecánica de mantenimiento.

Jonás
fuente
0

APL (NARS), 49 caracteres, 98 bytes

r←h w;c
c←r←0
→2×⍳∼=/+/¨(⍎¨⍕)¨r,r×r+←1⋄→2×⍳w>c+←1

1 indexado, prueba:

  h¨⍳20
1 9 10 18 19 45 46 55 90 99 100 145 180 189 190 198 199 289 351 361 
RosLuP
fuente
0

MathGolf , 10 bytes

♪╒gÆ‼Σ²Σ=§

Pruébalo en línea!

Explicación

ú10norte

♪            push 1000
 ╒           range(1,n+1)
  gÆ         filter list using the next 5 operators
    ‼        apply next two commands to TOS
     Σ       sum(list), digit sum(int)
      ²      pop a : push(a*a) (square)
       Σ     sum(list), digit sum(int) (pushes the digit sum of the square)
        =    pop(a, b), push(a==b) (compares the two)
         §   get from array (returns the <input>th item from the filtered list
maxb
fuente
Tal vez debería crear un chat para MathGolf. De todos modos, tengo una pregunta: ¿hay algún builtins para reemplazar, dividir por, y tal para cadenas? Tengo la sensación de que la compresión podría ahorrar bytes aquí, pero no estoy seguro de si existen los componentes para lograrlo.
Kevin Cruijssen
Hay un chat cerrado de MathGolf. Traté de mantenerlo con vida, pero últimamente me he visto inundado de trabajo, y seguía cerrándose. No quiero molestar a los mods cada vez. Para responder a su pregunta, MathGolf en realidad no estaba destinado a manejar operaciones de cadenas, pero he implementado la funcionalidad para el manejo de cadenas para manejar algunos desafíos básicos. Como habrás notado, todavía hay mucho que desear. Si agrego algo, probablemente será algo similar a lo que tiene 05AB1E, pero realmente no he tenido tiempo libre para el desarrollo de MathGolf en estos últimos meses.
maxb