Participer à une programmation compétitive dans le cadre de l'apprentissage de Ruby et des algorithmes. Ici, nous sortirons ce que nous avons appris dans l'apprentissage à cet effet. Cette fois, je voudrais résumer le "comment recevoir des entrées standard" que j'ai utilisé pour résoudre le problème jusqu'à présent.
Exemple d'entrée
Ruby
s = gets.chomp
# print s
# => Ruby
La méthode chomp renvoie une chaîne avec le code de saut de ligne supprimé de la fin de la chaîne. Vous pouvez l'attacher en toute sécurité afin de ne recevoir que la chaîne de caractères que vous souhaitez recevoir.
Exemple d'entrée
64
s = gets.to_i
# print s
# => 64
L'entrée standard reçue par la méthode gets est reçue sous forme de type String. Convertit la chaîne reçue en type Integer en ajoutant la méthode to_i à la fin. Dans ce cas, la méthode chomp n'est pas nécessaire.
Selon le problème, il existe pas mal de cas où vous pouvez vous rapprocher de la réponse en démontant les éléments. Voici quelques exemples.
Exemple d'entrée
Ruby
ary = gets.split("")
ary = gets.split(//) #Expressions régulières
# print ary
# => ["R", "u", "b", "y"]
La méthode split est une méthode qui divise une chaîne de caractères en un tableau. Vous pouvez spécifier un délimiteur comme premier argument dans (). Si vous souhaitez diviser chaque caractère, vous pouvez utiliser ("") ou (//).
Exemple d'entrée
RubyRuby
ary = gets.scan(/../) #①
ary = gets.scan("R") #②
ary = gets.scan(/Ru./) #③
# print ary
#① => ["Ru", "by", "Ru", "by"]
#② => ["R", "R"]
#③ => ["Rub", "Rub"]
La méthode scan correspond à plusieurs reprises au modèle spécifié dans l'argument et renvoie la sous-chaîne correspondante sous forme de tableau. Par conséquent, il peut être utilisé lorsque vous souhaitez diviser l'entrée selon une certaine règle et la gérer. Cela peut être un peu difficile jusqu'à ce que vous vous habituiez à exprimer les règles avec des expressions régulières.
C'est un motif qui reçoit plusieurs éléments à la fois, séparés par un espace demi-largeur.
Exemple d'entrée
Ruby PHP
ary = gets.split(" ")#L'espace entre les doubles deux points est un espace demi-largeur
# print ary
# => ["Ruby", "PHP"]
En spécifiant un espace demi-largeur comme ci-dessus dans le premier argument de la méthode split, Vous pouvez recevoir plusieurs éléments séparés par un espace demi-largeur à la fois.
Exemple d'entrée
Ruby PHP
a,b = gets.split(" ")
# print a
# => "Ruby"
# print b
# => "PHP"
Si vous avez un nombre limité d'éléments à recevoir, il peut être plus pratique de recevoir chacun dans une variable. Dans ce cas, vous pouvez recevoir chacun d'eux en séparant les variables par "," comme décrit ci-dessus.
Exemple d'entrée
123 456
ary = gets.split(" ").map(&:to_i) #① Recevoir dans un tableau
a,b = gets.split(" ").map(&:to_i) #② Recevoir en tant que variable
# print ary
# => [123, 456]
# print a
# => 123
# print b
# => 456
La méthode map parcourt les blocs autant de fois qu'il y a d'éléments dans le tableau et renvoie le tableau résultant. Lorsque vous souhaitez appliquer une méthode à chaque élément (cette fois, vous souhaitez convertir tous les éléments en type entier), Il peut être abrégé comme ci-dessus en utilisant &.
Dans la question de la programmation compétitive Tout d'abord, "le nombre d'éléments donnés après cela" est entré, Il y a de nombreux problèmes avec le modèle selon lequel les «éléments nécessaires à la réponse» sont donnés à partir de la ligne suivante. Dans ce cas, vous pouvez utiliser la méthode times pour recevoir les éléments ensemble.
Exemple d'entrée
3 #Nombre d'éléments donnés après cela
4 8
8 2
5 2
#Lors de la réception sous forme de type entier
n = gets.to_i #Nombre d'éléments donnés dans la première ligne
ary = n.times.map{gets.split.map(&:to_i)}
# print ary
# => [[2, 2], [8, 2], [5, 2]]
#Lors de la réception en tant que type de chaîne
n = gets.to_i
ary = n.times.map{gets.split}
# print ary
# => [["2", "2"], ["8", "2"], ["5", "2"]]
Avec une combinaison de méthode de temps et de méthode de carte Les entrées sont organisées sous la forme d'un tableau bidimensionnel, ce qui est pratique pour effectuer divers jugements.
Voici comment recevoir une entrée standard souvent utilisée. Si je rencontre d'autres méthodes en résolvant le problème, j'aimerais les ajouter à chaque fois.
Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.
Recommended Posts