В языке Nim правила различения идентификаторов немного более мягкие, чем в большинстве других языков. Два идентификатора эквивалентны или обращаются к одной и той же переменной, если они следуют этим правилам :
- первый символ обоих одинаков (с учетом регистра)
- обе строки одинаковы ( с учетом регистра) после удаления всех экземпляров символов
-
и_
Вызов
Напишите программу / функцию, которая принимает две строки, которые представляют идентификаторы Nim, и выводит истинное или ложное значение в зависимости от того, эквивалентны они или нет по приведенным выше правилам.
Характеристики
- Применяются стандартные правила ввода / вывода .
- Стандартные лазейки будут запрещены .
- Строки будут содержать только печатные формы ASCII . Вам не нужно проверять, является ли это действительным идентификатором.
- Строки могут быть взяты как два отдельных ввода, список строк и т. Д. (Вы знаете упражнение)
- Пустые строки не нужно обрабатывать.
- Выходные данные должны быть согласованы как для истинных, так и для ложных значений.
- Эта задача заключается не в том, чтобы найти кратчайший подход на всех языках, а в том, чтобы найти кратчайший подход на каждом языке .
- Ваш код будет оцениваться в байтах , обычно в кодировке 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
Неразвитая эталонная реализация
Это написано в самой 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")
, так как я думаю, что один ответ дает неожиданный результат для него.
>
?
f("_test", "test")
.