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
code-golf
string
decision-problem
totalement humain
la source
la source
f("_test", "test")
.f("test", "tset")
, car je pense qu'une réponse donne un résultat inattendu.>
?Réponses:
JavaScript (ES6),
6261 octets1 octet enregistré grâce à @JohanKarlsson
Prend une entrée dans la syntaxe de curry
(a)(b)
. Renvoie un booléen.Cas de test
Afficher l'extrait de code
la source
/-|_/g
enregistre un octetPython 3 , 76 octets
Essayez-le en ligne!
-1 octet grâce à notjagan
-3 octets grâce à Wheat Wizard
la source
En fait , 15 octets
Essayez-le en ligne!
Fait amusant: cela fonctionne avec n'importe quel nombre d'entrées (il retourne toujours vrai pour moins de 2 entrées).
Explication:
la source
Pyth , 13 octets
Essayez-le en ligne!
Explication
la source
05AB1E , 12 octets
Essayez-le en ligne!
-1 merci à Adnan .
Théoriquement,
εćs„-_-«}Ë
aurait dû fonctionner pendant 10 octets, mais malheureusement ce comportement est déconseillé pour l'instant.la source
„-_SK
au lieu de'-K'_K
.SK
àм
.м
existait à l'époque. : PGelée , 11 octets
Essayez-le en ligne!
-2 octets grâce à Erik the Outgolfer
-1 octet merci à Jonathan Allan
la source
["symbolsAre_too>_>", "symbols_areTOO>>"]
et utilisezḢ;ḟ⁾-_Œl$µ€E
plutôt -2. Battez ce Pyth!ḟ⁾-_Œl,Ḣµ€E
pour 11 octets.Rubis ,
8664636151 octetsEssayez-le en ligne!
Cela
semble vraiment long,semble encore un peu long. J'apprécierais l'aide de tous les gourous de Ruby pour rendre cela au moins un peu plus court.la source
.delete("_-")
est plus court.f[x]
est toujours une substitution valablef.call(x)
lorsque des lambdas stabby sont impliqués.C ++,
288248 octets-5 octets grâce à Zacharý
Merci, préprocesseur. En outre, ce code tire parti du fait qu'en C ++, la règle de transtypage int en bool est
int_var!=0
la source
;
après la définition deF
. Ensuite, remplacez la premièrereturn
instruction parreturn 0;E(a,45)E(b,45)E(a,95)E(b,95)F(a)F(b)
.CJam, 20 octets
Prend l'entrée sous la forme de ["chaîne1", "chaîne2"].
Essayez-le en ligne (version de test)
la source
Haskell ,
8578767168 octets2 octets économisés grâce à Ørjan Johansen
Essayez-le en ligne!
Erreurs sur la chaîne vide.
la source
all(/=a)"-_"
. Aussi, après votre dernière modification,f
doit devenir opérateur.notElem
mais je ne m'en souvenais pas pour la vie de moi.Python 2 , 72 octets
Essayez-le en ligne!
Ne fonctionnera pas avec Python 3 en raison de la nouvelle
translate
syntaxe.la source
Excel, 105 octets
CODE () renvoie le code numérique du premier caractère.
La comparaison de chaînes dans Excel n'est pas sensible à la casse.
la source
Husk , 13 octets
Essayez-le en ligne!
Construit pour chaque chaîne une paire composée du premier caractère de la chaîne et de la chaîne entière en minuscules et avec toutes les occurrences de - / _ supprimées. Vérifie ensuite si les deux paires sont égales.
Une particularité est que
-
dans Husk est définie la différence (c'est-à-dire qu'elle supprime uniquement la première occurrence trouvée): pour supprimer toutes les occurrences, le point fixe de-"-_
est trouvé avecω-"-_
.la source
Japt ,
1425 octetsVérifie l'égalité de chaîne insensible à la casse en supprimant tous les caractères du mot 2 du mot 1 et en supprimant les-_
caractères; qui se traduit par une chaîne vide (""
) si les mots sont égaux.Merci Ørjan Johansen d'avoir signalé le problème.
Vérifie l'égalité de premier caractère et si les entrées en majuscules sont égales après la suppression
_-
.Essayez-le en ligne!
Explication
Entrée implicite:
U
etV
sont des chaînes d'entréeVérifiez si la première lettre de
U
(implicite) est égale à (¥
) le premier caractère deV
.Et (
©
) vérifie siU
, en majuscule (u
) et avec_-
supprimé (k
), est égal à (¥
) la même chose pourV
. Renvoie implicitement le résultat booléen.la source
test
vstset
?Python 2 ,
7973 octets-6 octets grâce à @notjagan: vérifiez que la longueur de l'ensemble de tous les noms réduits est 1 ou non.
Essayez-le en ligne!
la source
Perl 5 , 67 octets
Essayez-le en ligne!
Prend les identifiants en entrée sur des lignes distinctes.
Explication:
la source
Rétine , 28 octets
Essayez-le en ligne!
la source
Fusain , 29 octets
Essayez-le en ligne!
Cela imprime un
-
for truthy and nothing for falsey.Lien vers la version détaillée . Il compare d'abord le premier caractère des deux chaînes d'entrée (
⁼§θ⁰§η⁰
), puis compare le reste des deux chaînes après avoir supprimé les traits de soulignement et les tirets (⪫⪪⪫⪪θ_ω-ω
) et converti en minuscules (↧
).la source
C #,
10189 octetsEnregistré 12 octets grâce à @ kusi581.
la source
string.Concat(...)
vous pouvez économiser 2 octets;)Java (OpenJDK 8) , 95 octets
Essayez-le en ligne! Assez simple.
la source
Pyke, 13 bytes
Try it online!
la source
C (gcc),
126114 bytesTry it online!
With whitespace and comments:
la source
while
test can be shortened to*s%50==45
. (2) However, the lowercasing is wrong, e.g. it fails ont~
vs.t^
.>
was added, hmm.-
isn't actually allowed, but the algorithm still includes it...-
isn't in the grammar description of identifier - but then other parts of that document imply it is allowed.Dyalog APL,
473228272622 bytes-4 bytes thanks to Kritixi Lithos
Takes input as a list of the strings.
Try it online!
How?
la source
⊃⍺=⍵
instead instead of⍺[1]=⍵[1]
⊃⍵
instead of⍵[1]
should work⊃⍺=⊃⍵
instead of⍺[1]=⍵[1]
Common Lisp, 98 bytes
Try it online!
Ungolfed (super straightforward!) version:
la source
R, 76 bytes
Anonymous function that takes input as a list of two strings. Takes advantage of the fact that R's string operations, while quite long in # of characters, are vectorized. Additionally wrapping an assignment in parentheses will bind the variable, so
(g=substr(l,1,1))
retains a variable to be reused later in the line and similarly forh
.R returns the last evaluated expression as function output.
Ungolfed:
Try it online! (all test cases)
la source
Brachylog, 17 bytes
Try it online!
Outputs through predicate success/failure.
la source
Erlang 113 bytes
a pair of anonymous functions that compare the two lists. meant to be pasted in the erlang shell.
more readable:
la source
Clip, 25 bytes
Explanation:
x
,y
andz
may be referenced in a Clip program to implicitly take up to three inputs. Since this program only referencesx
andy
, it takes two inputs which are assigned tox
andy
.Takes two strings from standard input, outputs
1
and0
for true and false respectively.la source