[RUBY] J'ai essayé de faire divers programmes de nombre d'amitié, nombre parfait, nombre excessif, nombre de pénurie, nombre de fois

Je me demande s'il y a quelque chose que je peux poster sur Qiita. J'ai déterré le script quand j'ai essayé Project Euler il y a plus de 6 ans, donc Écris le

L'environnement d'exécution est le suivant. ruby 2.6.3p62 macOS Catalina 10.15.6 zsh

:zero::one::two::three::four::five::six::seven::eight::nine::ten:

Générer une fraction

Veuillez vous référer à ce qui suit pour ceux qui parlent du nombre. https://ja.wikipedia.org/wiki/約数

divisor.rb


def create_divisor (num)
    divisor_ary = Array.new
    partner_divisor_ary = Array.new
    
    if num < 1 then
        return nil
    elsif num == 1 then
        divisor_ary.push 1
    else
        i = 1
        partner_divisor = 0
        until i == partner_divisor do
            if num % i == 0 then
                divisor_ary.push i
                partner_divisor = num / i
                if partner_divisor != i then
                    partner_divisor_ary.unshift partner_divisor
                else
                    break
                end
            end
            i += 1
        end
        divisor_ary += partner_divisor_ary
    end
    
    return divisor_ary
end

class Integer
	def divisor
		return create_divisor(self)
	end
end

p 8.divisor
p 128.divisor
p 12345.divisor

Le résultat de l'exécution est le suivant.

% ruby divisor.rb
[1, 2, 4, 8]
[1, 2, 4, 8, 16, 32, 64, 128]
[1, 3, 5, 15, 823, 2469, 4115, 12345]

Générer des numéros d'amitié

Nombre d'amis ... Je pense que c'est un bon nom avec beaucoup d'arrière. Comme nombres naturels a et b ・ Somme des fractions de a -a = b Et, ・ Somme des fractions de b-b = a Quand cela devient, il semble que a et b sont appelés nombres d'amitié. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/友愛数

number_amicable.rb


class Integer
	def divisor
		return create_divisor(self)
	end
    def amicable
        amicable_number = nil
        
        if self < 1 then
            return amicable_number
        end
        
        divisor_ary = self.divisor
        divisor_ary.pop
        unless divisor_ary.empty? then
            partner_number = divisor_ary.inject(:+)
            if partner_number != self then
                partner_divisor_ary = partner_number.divisor
                partner_divisor_ary.pop
                if partner_divisor_ary.inject(:+) == self then
                    amicable_number = partner_number
                end
            end
        end
        return amicable_number
    end
end

p 220.amicable
p 284.amicable
p 17296.amicable
p 18416.amicable
p 200.amicable

Le résultat de l'exécution est le suivant.

% ruby number_amicable.rb
284
220
18416
17296
nil

Déterminez s'il s'agit d'un nombre complet, d'un nombre excédentaire ou d'un numéro manquant

En tant que nombre naturel a (1) Si la somme des fractions = a * 2, alors a est le nombre parfait. (2) Si la somme des fractions> a * 2, alors a est un nombre abondant. (3) Si la somme des fractions <a * 2, alors a est le nombre déficient. il semble que. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/完全数 https://ja.wikipedia.org/wiki/過剰数 https://ja.wikipedia.org/wiki/不足数

number_p_a_d.rb


class Integer
	def divisor
		return create_divisor(self)
	end
	def compare_divisor_total
		sum_divisor = self.divisor.inject(:+)
		sum_divisor -= self
		if sum_divisor > self then
			return "abundant number"
		elsif sum_divisor == self then
			return "perfect number"
		else
			return "deficient number"
		end
	end
end

p 496.compare_divisor_total
p 20.compare_divisor_total
p 15.compare_divisor_total
p 1.compare_divisor_total

Le résultat de l'exécution est le suivant.

% ruby number_p_a_d.rb
"perfect number"
"abundant number"
"deficient number"
"deficient number"

Déterminez si c'est le nombre de fois

Le nombre de fois est le même que vous lisez du haut ou du bas. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/回文数

number_palindrome.rb


class Integer
	def palindrome?
		str = self.to_s
		if str[0, (str.length / 2).floor] == str.reverse[0, (str.length / 2).floor]
			return true
		else
			return false
		end
	end
end

p 341.palindrome?
p 121.palindrome?
p 3456543.palindrome?

Le résultat de l'exécution est le suivant.

% ruby number_palindrome.rb
false
true
true

c'est tout.

:zero::one::two::three::four::five::six::seven::eight::nine::ten:

Recommended Posts

J'ai essayé de faire divers programmes de nombre d'amitié, nombre parfait, nombre excessif, nombre de pénurie, nombre de fois
J'ai essayé de créer divers programmes de séquence de nombres tels que le numéro Koratz, le numéro Fibonatch, le numéro Triangle
J'ai créé un client RESAS-API en Java
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
J'ai essayé de faire une authentification de base avec Java
C # (base de l'encapsulation)
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé de résumer divers link_to utilisés cette fois
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
J'ai essayé node-jt400 (Programmes)
J'ai essayé de résumer les bases de kotlin et java
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
J'ai essayé de faire de Ben figure une animation GIF facile à comprendre
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé de me permettre de définir le délai pour le client Android UDP
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "J'ai essayé de créer une fenêtre avec Bootstrap 3"
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~