W języku Nim zasady rozróżniania identyfikatorów są nieco łagodniejsze niż w większości innych języków. Dwa identyfikatory są równoważne lub odnoszą się do tej samej zmiennej, jeśli są zgodne z tymi zasadami :
- pierwszy znak obu znaków jest taki sam ( wielkość liter ma znaczenie)
- oba ciągi są takie same (przypadek w czuły) po usunięciu wszystkich wystąpień bohaterów
-i_
Wyzwanie
Napisz program / funkcję, która pobiera dwa ciągi znaków, które reprezentują identyfikatory Nim i generują wartość true lub falsey na podstawie tego, czy są one równoważne z powyższymi regułami.
Dane techniczne
- Zasady Standard I / O zastosowania .
- Standardowe luki są zabronione .
- Ciągi będą zawierać tylko pliki do wydruku ASCII . Państwo nie trzeba sprawdzić, czy jest to poprawny identyfikator.
- Ciągi mogą być traktowane jako dwa osobne dane wejściowe, lista ciągów itp. (Znasz ćwiczenie)
- Puste łańcuchy nie muszą być obsługiwane.
- Wynik musi być spójny zarówno dla wartości zgodnych z prawdą, jak i falsey.
- Wyzwanie to nie polega na znalezieniu najkrótszego podejścia we wszystkich językach, chodzi raczej o znalezienie najkrótszego podejścia w każdym języku .
- Twój kod będzie oceniany w bajtach , zwykle w kodowaniu UTF-8, chyba że określono inaczej.
- Wbudowane funkcje wykonujące to zadanie są dozwolone, ale zalecane jest rozwiązanie, które nie opiera się na wbudowanym.
- Zachęca się do wyjaśnień, nawet w przypadku „praktycznych” języków .
Przypadki testowe
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
Implementacja referencji bez golfisty
Jest to napisane w samym Nim.
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"), ponieważ myślę, że jedna odpowiedź daje nieoczekiwany wynik.
>?
f("_test", "test").