Apprendre Ruby avec la sélection des débutants AtCoder [Quelques sommes] Augmentez les méthodes qui peuvent être utilisées

introduction

Dans le cadre de l'apprentissage de Ruby, nous mettrons au défi la «programmation de concours (compétition pro)». Nous sortirons ce que nous avons appris dans l'apprentissage à cette fin. Cette fois à partir de la sixième question (Quelques sommes) de "Chez Coder Beginners Selection". https://atcoder.jp/contests/abs

problème

D'entiers entre 1 et N Trouvez la somme de ceux qui sont supérieurs ou égaux à A et inférieurs ou égaux à B en notation décimale.

Contrainte 1 ≤ N ≤ 10,000 1 ≤ A ≤ B ≤ 36 Toutes les entrées sont des entiers

L'entrée est donnée sous la forme suivante.

N A B

#Exemple
20 2 5
Exemple de sortie
#Dans le cas de l'exemple ci-dessus
=> 84

Parmi les nombres entiers de 20 ou moins, la somme de chaque chiffre est de 2 ou plus et de 5 ou moins Il est 2,3,4,5,11,12,13,14,20. Sorties 84, qui est la somme de celles-ci.

Réponse ①

Tout d'abord, d'après ma réponse.

n, a, b = gets.split(" ").map(&:to_i)
r = 0
(1..n).each do |i|
  r += i if i.to_s.split("").map(&:to_i).inject(:+).between?(a, b)
end
print r

Les méthodes que j'ai apprises en répondant à cette question sont résumées ci-dessous.

méthode de fractionnement

J'avais l'habitude de l'utiliser lorsque je recevais des entrées, En l'utilisant dans chaque instruction cette fois, j'ai pu la reconnaître à nouveau comme une méthode de la classe String. La réponse est de le convertir une fois en type String, d'utiliser la méthode de fractionnement, puis de le renvoyer au type Integer.

#Exemple
print "1234".split("")
=> ["1", "2", "3", "4"]

entre? méthode

self.between?(min, max)
#self est compris entre min et max (min,Renvoie vrai si (y compris max)

#Exemple
print 6.between?(1, 5) 
=> false

En utilisant cette méthode, qui spécifie les valeurs minimum et maximum et renvoie true si self est dans cette plage, Il est jugé si la somme de chaque chiffre est dans la plage de a ou plus et b ou moins.

Réponse ②

Voyons la réponse de l'autre personne.

n, a, b = gets.split.map(&:to_i)
puts (1..n).select{|e|(a..b).include?(e.to_s.chars.map(&:to_i).inject(&:+))}.inject(&:+)

Jusqu'au point de réception de l'entrée, c'est presque la même chose que la réponse ①. En regardant le flux après ça, (1) Utilisez la méthode include? Pour déterminer si la somme de chaque chiffre de l'entier est supérieure ou égale à a et inférieure ou égale à b. (2) Pour les entiers qui ont passé (1), utilisez la méthode select pour créer un nouveau tableau et l'ajouter à celui-ci. (3) Lorsque tous les entiers qui remplissent les conditions sont disponibles, utilisez la méthode inject à la fin pour trouver la somme des entiers et la sortir.

Voici un bref résumé des méthodes utilisées ici.

include? méthode (classe Range)

Renvoie true si l'objet est à portée.

#Exemple
print (1..5).include?(4)
=> true

sélectionner la méthode

Obtient les éléments qui correspondent aux critères et les renvoie sous la forme d'un nouveau tableau.

#Exemple
print [1,2,3,4,5].select { |num| num > 3 }
=> [4, 5]

finalement

Jusqu'à présent, j'ai présenté les méthodes que j'ai apprises en résolvant AtCoder Beginners Selection [Some Sums].

Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.

Recommended Posts

Apprendre Ruby avec la sélection des débutants AtCoder [Quelques sommes] Augmentez les méthodes qui peuvent être utilisées
Organiser les méthodes qui peuvent être utilisées avec StringUtils
Méthodes de tableau Ruby pouvant être utilisées avec Rails (autres que chacun)
Ruby on Rails 5 guide pratique d'apprentissage rapide qui peut être utilisé sur le terrain Résumé
[Rails] "Pry-rails" qui peuvent être utilisés lors de l'enregistrement avec la méthode create
Plage où les variables peuvent être utilisées avec ruby [Scope]
À propos du problème que hidden_field peut être utilisé de manière insensée
Créer un contrôle de page qui peut être utilisé avec RecyclerView
Base de données Firebase-Realtime sur Android pouvant être utilisée avec copie
Quatre rangées avec gravité pouvant être jouées sur la console
Apprendre Ruby avec la sélection des débutants AtCoder [Coins] Réponse avec un code court
SwiftUI View qui peut être utilisé en combinaison avec d'autres frameworks
Apprendre Ruby avec AtCoder 11 Comment recevoir une entrée standard souvent utilisée
Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]
Définissez la charge d'accès qui peut être modifiée graphiquement avec JMeter (partie 2)
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
Implémentation de machine à sous simple qui peut être utilisée avec copie
Définissez la charge d'accès qui peut être modifiée graphiquement avec JMeter (Partie 1)
Outils d'analyse des performances et de diagnostic des pannes utilisables avec OpenJDK
Jusqu'à ce que le rubis puisse être utilisé dans les fenêtres ...
À propos du cas où ("b" .. "aa") ne pourrait pas être utilisé dans Ruby Range
L'histoire du port devenant inutilisable dans l'exemple de programme Spring Boot