Apprendre Ruby avec AtCoder 10 [1er test pratique d'algorithme DoubleCamelCase Sort]

introduction

Dans le cadre de l'apprentissage Ruby, nous mettrons au défi le «test pratique de l'algorithme». Nous sortirons ce que nous avons appris dans l'apprentissage à cette fin. Cette fois, à partir de la 6ème question (Tri DoubleCamelCase) du "1er test pratique d'algorithme". Première question du test pratique de l'algorithme

Cette fois, je voudrais résumer ce que j'ai pu apprendre sur la base des réponses utiles.

problème

La chaîne S est donnée. Il s'agit d'une concaténation d'un ou plusieurs mots (sans aucun espace entre eux). Ici, chaque mot a deux caractères ou plus, seuls les premier et dernier caractères sont des lettres anglaises supérieures et toutes les autres lettres sont des lettres anglaises inférieures.

Contrainte -S est une chaîne de caractères d'une longueur de 2 ou plus et 100 000 ou moins. -Chaque lettre de S est alphabétique supérieure ou inférieure. ・ S est une concaténation de mots comme décrit dans l'énoncé du problème.

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

S

Exemple d'entrée
FisHDoGCaTAAAaAAbCAC
Exemple de sortie
=> AAAaAAbCACCaTDoGFisH

répondre

Voici la réponse à laquelle je vais me référer cette fois.

puts gets.scan(/[A-Z][a-z]*[A-Z]/).sort_by(&:upcase).join

Organisez les chaînes de caractères reçues comme éléments pour chaque mot. Après le tri à l'aide de la méthode sort_by, tous les éléments du tableau sont concaténés à l'aide de la méthode join et de la sortie.

Ce qui suit est un résumé de chaque méthode et de l'expression dans les expressions régulières.

méthode de scan

Le modèle spécifié dans () est mis en correspondance à plusieurs reprises avec l'objet et la sous-chaîne correspondante est renvoyée sous forme de tableau.

p "test".scan(/../)
#=> ["te", "st"]
p "test".scan("t")
#=> ["t"]
p "testet".scan(/te./)
#=> ["tes", "tet"]

C'est la meilleure méthode pour des cas comme celui-ci qui traitent de mots commençant et se terminant par une majuscule.

Partie d'expression régulière

Les mots manipulés cette fois sont exprimés dans des expressions régulières comme suit.

/[A-Z][a-z]*[A-Z]/

/ / //で囲むことで正規表現オブジェクトを生成することが出来ます。 En d'autres termes, c'est une déclaration que "ce qui est inclus dans // est une expression régulière".

[ ] La partie entre les crochets [] est appelée la classe de caractères. Une énumération d'un ou plusieurs caractères correspondant à un seul caractère (1 sur 0-9 ci-dessus).

[A-Z] Représente une seule lettre supérieure.

[a-z] Représente une seule lettre minuscule.

C'est un méta-caractère qui signifie que l'expression précédente est répétée 0 fois ou plus. Dans ce cas, cela signifie que les lettres minuscules sont répétées 0 fois ou plus. Lorsqu'un mot anglais avec trois caractères ou plus est affiché, cela signifie que la partie inférieure est toujours prise en sandwich entre la partie supérieure.

Vous pouvez maintenant faire correspondre le mot en fonction de la spécification du problème.

méthode sort_by

Il compare le contenu du tableau, le trie et crée un nouveau tableau dans l'état trié. Dans (), afin de faire une comparaison correcte, la méthode upcase est appliquée à chaque élément, et toutes les lettres majuscules sont utilisées avant la comparaison.

p ["AA", "AC", "AaA"].sort_by(&:upcase)
#=>["AA", "AaA", "AC"]

méthode de jointure

Renvoie une chaîne dans laquelle les éléments du tableau sont concaténés avec le délimiteur spécifié entre parenthèses () entre les deux. Si () n'est pas décrit, il sera concaténé sans délimiteur.

p ["AA", "AaA", "AC"].join(",")
#=>AA,AaA,AC
p ["AA", "AaA", "AC"].join
#=>AAAaAAC

finalement

Ce qui précède est un résumé des méthodes apprises dans la sixième question (DoubleCamelCase Sort) du "1er test pratique de l'algorithme". J'aimerais utiliser des expressions régulières et diverses méthodes afin de pouvoir faire une réponse simple et facile à comprendre comme celle à laquelle j'ai fait référence cette fois.

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

Recommended Posts

Apprendre Ruby avec AtCoder 10 [1er test pratique d'algorithme DoubleCamelCase Sort]
Apprendre Ruby avec AtCoder 9 [1er test pratique d'algorithme 3ème] Tri des éléments du tableau
Résolution avec Ruby AtCoder 1er test pratique de l'algorithme Une gestion des exceptions
Apprendre Ruby avec AtCoder 8 [1er test pratique de l'algorithme double vérification] Expression régulière
Apprentissage de Ruby avec AtCoder 14 [3rd Algorithm Practical Test Sprinkler] Création de hachage, ajout de clé / valeur
Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]
Apprendre Ruby avec AtCoder 7 [Contest 168 Triple Dots]
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Apprendre Ruby avec AtCoder 11 Comment recevoir une entrée standard souvent utilisée
Résolution avec Ruby AtCoder ABC177 D Union Find
[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Test du contrôleur avec RSpec
[Ruby on Rails] Test de modèle avec RSpec
Apprendre Ruby avec AtCoder 12 Comment utiliser correctement la sortie standard (p / met / print)