Cómo escribir un programa ruby ​​para mostrar los números de Armstrong en una matriz (siendo la matriz; Números = [123,124,153,370,234,23,45]

Numbers.select {| n | n == n.to_s.split (//). inject (0) {| sum, x | sum + x.to_i ** 3}}

Descargué Ruby y encontré mi viejo pico. El código anterior funciona para mí, y así es como:

x.to_i ** 3 # toma un dígito en forma de cadena, lo convierte en un entero y calcula el cubo

.inject(0){|sum, x| sum + x.to_i ** 3} .inject(0){|sum, x| sum + x.to_i ** 3} # calcula la suma de cubos de una matriz de dígitos en forma de cadena

n.to_s.split(//) # toma un número entero (digamos 123), lo convierte en una cadena (“123”) y lo divide en una matriz de dígitos individuales.

.select {| n | n == …} .select {| n | n == …} # obtiene valores de una matriz y compara cada valor con el cálculo anterior, lo que da como resultado verdadero para igual o falso para no igual. Devuelve una matriz que solo contiene los valores de la matriz original que resultó en valores verdaderos.

Los requisitos son un poco vagos, pero supongo que está trabajando solo en la base 10 y necesita construir un filtro para eso (con una condición booleana como n.split("").map{|d| d.to_i**n.size} , suponiendo que n ya se haya convertido en una cadena) o solo necesita mostrarlos en un rango dado, en cuyo caso simplemente tomaría números precalculados en lugares como aquí.

Puede pensar que es un engaño, prefiero pensarlo como una memorización u optimización, ya que puede ver fácilmente qué tan grande es la brecha entre los números y cuántos debe verificar solo para obtener el próximo bueno a medida que avanza desde 0 .

Espero que esto ayude, feliz codificación y aprendizaje 🙂

Por lo tanto, tiene una matriz de números y desea mostrar solo los narcisistas. Así es cómo:

puts array.select { |x| x == x.to_s.chars.map{ |c| c.to_i**x.to_s.size }.sum }.inspect

Mucha suerte con tus futuros deberes.