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.
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
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.
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.
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.
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"]
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
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