У мові Nim правила розмежування ідентифікаторів дещо спокійніше, ніж у більшості інших мов. Два ідентифікатори еквівалентні або адресують одну і ту ж змінну, якщо вони дотримуються цих правил :
- перший символ обох однаковий (залежно від регістру)
- обидва рядки однакові (регістр у чутливому) після видалення всіх екземплярів символів
-і_
Виклик
Напишіть програму / функцію, яка містить два рядки, що представляють ідентифікатори Nim та виводять значення truthy або falsey, залежно від того, чи вони еквівалентні правилам, наведеним вище.
Технічні умови
- Застосовуються стандартні правила вводу / виводу .
- Стандартні лазівки будуть заборонені .
- Рядки містять лише друковані файли ASCII . Вам не потрібно перевіряти, чи це дійсний ідентифікатор.
- Рядки можуть сприйматися як два окремі входи, список рядків тощо (ви знаєте свердло)
- Порожні рядки не потрібно обробляти.
- Вихідні дані повинні відповідати як значенням truthy, так і фальси.
- Ця проблема полягає не в пошуку найкоротшого підходу на всіх мовах, а в пошуку найкоротшого підходу в кожній мові .
- Ваш код буде набраний у байтах , як правило, в кодуванні UTF-8, якщо не вказано інше.
- Вбудовані функції, які виконують це завдання, дозволені, але рекомендується включати рішення, яке не покладається на вбудований.
- Пояснення навіть для "практичних" мов заохочуються .
Тестові кейси
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
Реалізація нестворених посилань
Про це написано в самому Німі.
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"), оскільки, думаю, одна відповідь дає несподіваний результат для цього.
>?
f("_test", "test").