Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]

introduction

Nous allons contester la «programmation de la compétition (compétition pro)» dans le cadre de l'apprentissage de Ruby. Nous sortirons ce que nous avons appris dans l'apprentissage à cette fin. Cette fois à partir de la première question (par conséquent) de "At Coder Beginners Contest 168". https://atcoder.jp/contests/abc168/tasks/abc168_a

Je vais le résumer en fonction de la solution que j'ai utilisée et du commentaire publié par le fonctionnaire.

problème

Lors du comptage des crayons en japonais, "livre" est ajouté comme numéro auxiliaire après le nombre. La lecture de ce numéro auxiliaire diffère selon le numéro auquel il est attaché. Pour les nombres entiers de 999 ou moins, comment lire «livre» en disant «N livres»

・ Lorsque la 1ère place de N est "2,4,5,7,9", 'hon' ・ Lorsque la 1ère place de N est "0,1,6,8", 'pon' ・ Lorsque la 1ère place de N est "3", c'est "bon"

Étant donné N, imprimez le "livre" correspondant.

Contrainte N est un entier positif inférieur ou égal à 999

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

N

#Exemple
16

Dans l'exemple ci-dessus, il peut être divisé jusqu'à 2 fois.

Exemple de sortie
#Dans le cas de l'exemple ci-dessus
=> pon

Réponse ①

Le premier est le code que j'ai écrit en premier.

a = gets.to_i.modulo(10)
if [2,4,5,7,9].include?(a)
  print "hon"
elsif [0,1,6,8].include?(a)
  print "pon"
else
  print "bon"
end

Utilisez la méthode modulo pour recevoir uniquement les chiffres des unités de l'entrée Le jugement est fait par la déclaration if et la méthode d'inclusion. comprendre? En ce qui concerne la méthode, j'ai écrit une fois sur l'article suivant, donc [Apprentissage Ruby avec AtCoder Beginners Selection [Quelques sommes] Augmentez les méthodes qui peuvent être utilisées](https://qiita.com/jag_507/items/cd3ad74d77ad933897b7#include%E3%83%A1%E3%82%BD%E3%83%83 % E3% 83% 89 plage% E3% 82% AF% E3% 83% A9% E3% 82% B9) Ici, je vais aborder la méthode modulo.

méthode modulo

Renvoie le reste divisé par le nombre spécifié. Dans la réponse, le chiffre des unités est retiré comme reste en divisant l'entier par 10.

#Exemple
13.modulo(4)
=> 1
42.modulo(10)
=> 2

Réponse ② phrase de cas

Dans le commentaire diffusé après le concours, Une manière plus intuitive de décrire avec une instruction de cas est introduite.

Dans ce qui suit, nous allons introduire la déclaration de cas après avoir répondu avec la déclaration de cas.

n = gets.to_i.modulo(10)
case n
when 2,4,5,7,9
  print 'hon'
when 0,1,6,8
  print 'pon'
else
  print 'bon'
end

Dans la première réponse, j'ai mis la condition dans un tableau et j'ai fait un jugement avec la méthode include?, En utilisant l'instruction case, vous pouvez écrire le code comme si vous pensiez "Si la première place est 2,4,5,7,9 ...". Certainement celui-ci semble être meilleur.

déclaration de cas

Ceci est utile lors de la recherche d'une correspondance parmi plusieurs candidats pour une seule valeur. L'opérateur "===" détermine s'il correspond à ce qui est spécifié dans when.

case object
when value1
  # object ===Instruction à exécuter lorsque value1
when value2
  # object ===Instruction à exécuter lorsque value2
else
  #Instruction à exécuter lorsque tous ne correspondent pas
end

L'opérateur "===" qui apparaît ici est Si l'objet mentionné ci-dessus est une chaîne de caractères ou une valeur numérique, définissez-le comme "==". Pour les expressions régulières, utilisez "= ~" Dans le cas d'une plage, il semble juger si la valeur y est incluse comme include? Il semble être flexible et facile à utiliser.

finalement

Jusqu'à présent, nous avons présenté les méthodes apprises à partir de la première question (Donc) de "AtCoder Beginners Contest 168".

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

Recommended Posts

Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]
Apprendre Ruby avec AtCoder 7 [Contest 168 Triple Dots]
Ruby apprentissage 4
Ruby apprentissage 5
Ruby apprentissage 3
Apprendre Ruby avec AtCoder 10 [1er test pratique d'algorithme DoubleCamelCase Sort]
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Ruby apprentissage 2
Ruby apprentissage 6
Ruby apprentissage 1
Apprendre Ruby avec AtCoder 11 Comment recevoir une entrée standard souvent utilisée
Résolution avec Ruby AtCoder ABC177 D Union Find
Apprendre Ruby avec AtCoder 8 [1er test pratique de l'algorithme double vérification] Expression régulière
Concours AtCoder Débutant 168
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Apprendre Ruby avec AtCoder 12 Comment utiliser correctement la sortie standard (p / met / print)
Apprendre Ruby avec AtCoder 9 [1er test pratique d'algorithme 3ème] Tri des éléments du tableau
Points d'apprentissage Ruby (basique)
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
AtCoder Beginner Contest 170 A, B, C jusqu'au rubis
Apprentissage de Ruby avec AtCoder 14 [3rd Algorithm Practical Test Sprinkler] Création de hachage, ajout de clé / valeur
Premiers pas avec Ruby
[Rails] Didacticiel Apprendre avec les rails
Evolve Eve avec Ruby
Apprendre Ruby avec la sélection des débutants AtCoder [Quelques sommes] Augmentez les méthodes qui peuvent être utilisées
Apprendre Ruby avec la sélection des débutants AtCoder [Coins] Réponse avec un code court
Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Article sur la participation au concours AtCoder
Record d'apprentissage de Ruby on rails -2020.10.03
Changer de version Ruby avec rbenv
Record d'apprentissage Ruby on rails -2020.10.04
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
Ruby: envoyer des e-mails avec Starttls