Dans la langue Nim , les règles de différenciation des identifiants sont légèrement plus souples que la plupart des autres langues. Deux identifiants sont équivalents ou adressent la même variable s'ils suivent ces règles :
- le premier caractère des deux est le même (sensible à la casse)
- les deux chaînes sont les mêmes (cas dans sensible) après le retrait de toutes les instances des caractères
-
et_
Défi
Écrivez un programme / fonction qui prend deux chaînes qui représentent des identifiants Nim et génère une valeur true ou falsey selon qu'elles sont ou non équivalentes selon les règles ci-dessus.
Caractéristiques
- Les règles d'E / S standard s'appliquent .
- Les failles standard sont interdites .
- Les chaînes ne contiendront que des imprimables ASCII . Vous n'avez pas besoin de vérifier s'il s'agit d'un identifiant valide.
- Les chaînes peuvent être considérées comme deux entrées distinctes, une liste de chaînes, etc. (vous connaissez l'exercice)
- Les chaînes vides n'ont pas besoin d' être gérées.
- La sortie doit être cohérente pour les valeurs true et falsey.
- Ce défi ne consiste pas à trouver l'approche la plus courte dans toutes les langues, mais plutôt à trouver l' approche la plus courte dans chaque langue .
- Votre code sera noté en octets , généralement dans le codage UTF-8, sauf indication contraire.
- Les fonctions intégrées qui effectuent cette tâche sont autorisées, mais il est recommandé d' inclure une solution qui ne repose pas sur une fonction intégrée.
- Des explications, même pour les langues "pratiques", sont encouragées .
Cas de test
Input Output
count, Count falsey
lookMaNoSeparator, answer falsey
_test, test falsey
test, tset falsey
aVariableName, a_variable_name truthy
numbers_are_cool123, numbersAreCool123 truthy
symbolsAre_too>_>, symbols_areTOO>> truthy
Implémentation de référence non golfée
Ceci est écrit en Nim lui-même.
import strutils, re
proc sameIdentifier(a, b: string): bool =
a[0] == b[0] and
a.replace(re"_|–", "").toLower == b.replace(re"_|–", "").toLower
f("test", "tset")
, car je pense qu'une réponse donne un résultat inattendu.
>
?
f("_test", "test")
.