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
code-golf
string
decision-problem
całkowicie ludzki
źródło
źródło
f("_test", "test")
.f("test", "tset")
, ponieważ myślę, że jedna odpowiedź daje nieoczekiwany wynik.>
?Odpowiedzi:
JavaScript (ES6),
6261 bajtówZapisano 1 bajt dzięki @JohanKarlsson
Pobiera dane wejściowe w składni curry
(a)(b)
. Zwraca wartość logiczną.Przypadki testowe
Pokaż fragment kodu
źródło
/-|_/g
zapisuje bajtPython 3 , 76 bajtów
Wypróbuj online!
-1 bajt dzięki notjagan
-3 bajty dzięki Kreator pszenicy
źródło
Właściwie 15 bajtów
Wypróbuj online!
Ciekawostka: działa z dowolną liczbą danych wejściowych (zawsze zwraca wartość true dla mniej niż 2 danych wejściowych).
Wyjaśnienie:
źródło
Pyth , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 12 bajtów
Wypróbuj online!
-1 dzięki Adnan .
Teoretycznie
εćs„-_-«}Ë
powinien był działać przez 10 bajtów, ale niestety to zachowanie jest na razie przestarzałe.źródło
„-_SK
zamiast'-K'_K
.SK
naм
.м
istniał. : PGalaretka , 11 bajtów
Wypróbuj online!
-2 bajty dzięki Erikowi Outgolfer
-1 bajt dzięki Jonathanowi Allanowi
źródło
["symbolsAre_too>_>", "symbols_areTOO>>"]
i użyjḢ;ḟ⁾-_Œl$µ€E
zamiast tego dla -2. Pokonaj tego Pytha!ḟ⁾-_Œl,Ḣµ€E
na 11 bajtów.Rubinowy ,
8664636151 bajtówWypróbuj online!
To
wydaje się naprawdę długie,wciąż wydaje się trochę długie. Byłbym wdzięczny za pomoc każdego guru Ruby, który uczynił to co najmniej nieco krótszym.źródło
.delete("_-")
jest krótszy.f[x]
jest zawsze ważnym zamiennikiem,f.call(x)
gdy w grę wchodzą dźgnięcia lambdas.C ++,
288248 bajtów-5 bajtów dzięki Zacharýowi
Dziękuję, Preprocesorze. Ponadto ten kod wykorzystuje fakt, że w C ++ reguła rzucania int na bool jest
int_var!=0
źródło
;
po definicjiF
. Następnie zmień pierwsząreturn
instrukcję nareturn 0;E(a,45)E(b,45)E(a,95)E(b,95)F(a)F(b)
.CJam, 20 bajtów
Pobiera dane wejściowe w postaci [„string1”, „string2”].
Wypróbuj online (wersja testowa)
źródło
Haskell ,
8578767168 bajtów2 bajty zapisane dzięki Ørjan Johansen
Wypróbuj online!
Błędy w pustym ciągu.
źródło
all(/=a)"-_"
. Również po ostatniej edycjif
musi zostać operatorem.notElem
ale nie pamiętałem tego przez całe życie.Python 2 , 72 bajty
Wypróbuj online!
Nie działa z Python 3 z powodu nowej
translate
składni.źródło
Excel, 105 bajtów
CODE () zwraca kod numeryczny pierwszego znaku.
Porównanie ciągów w programie Excel nie uwzględnia wielkości liter.
źródło
Łuska , 13 bajtów
Wypróbuj online!
Tworzy dla każdego łańcucha parę składającą się z pierwszego znaku łańcucha i całego łańcucha pisanego małymi literami i po usunięciu wszystkich wystąpień - / _. Następnie sprawdza, czy dwie pary są równe.
Szczególną
-
cechą jest to, że w Łusce ustawiana jest różnica (tzn. Usuwa tylko pierwsze znalezione wystąpienie): w celu usunięcia wszystkich wystąpień znajduje się stały punkt-"-_
zω-"-_
.źródło
Japt ,
1425 bajtówSprawdza równość ciągów znaków bez rozróżniania wielkości liter, usuwając wszystkie znaki ze słowa 2 ze słowa 1 i usuwając-_
znaki; powoduje to pusty ciąg (""
), jeśli słowa są równe.Dzięki Ørjan Johansen za wskazanie problemu z tym.
Sprawdza równość pierwszego znaku i czy po usunięciu wejściowe wielkie litery są równe
_-
.Wypróbuj online!
Wyjaśnienie
Dane niejawne:
U
iV
są łańcuchami wejściowymiSprawdź, czy pierwsza litera
U
(niejawna) jest równa (¥
) pierwszemu znakowiV
.I (
©
) sprawdź, czyU
wielkie litery (u
) i_-
usunięte (k
) są równe (¥
) dlaV
. Domyślnie zwróć wynik boolowski.źródło
test
vstset
?Python 2,
7973 bytes-6 bytes thanks to @notjagan: check the length of set of all reduced names is 1 or not.
Try it online!
źródło
Perl 5 , 67 bajtów
Wypróbuj online!
Pobiera identyfikatory jako dane wejściowe w oddzielnych wierszach.
Wyjaśnienie:
źródło
Siatkówka , 28 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 29 bajtów
Wypróbuj online!
To drukuje
-
na prawdę i nic na falsey.Link to the verbose version. It first compares the first character of both input strings (
⁼§θ⁰§η⁰
) and then compares the rest of both strings after removing the underscores and the hyphens (⪫⪪⪫⪪θ_ω-ω
) and converting to lowercase (↧
).źródło
C#,
10189 bytesSaved 12 bytes thanks to @kusi581.
źródło
string.Concat(...)
you can save 2 bytes ;)Java (OpenJDK 8), 95 bytes
Try it online! Pretty straight forward.
źródło
Pyke, 13 bytes
Try it online!
źródło
C (gcc),
126114 bytesTry it online!
With whitespace and comments:
źródło
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?
źródło
⊃⍺=⍵
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:
źródło
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)
źródło
Brachylog, 17 bytes
Try it online!
Outputs through predicate success/failure.
źródło
Erlang 113 bytes
a pair of anonymous functions that compare the two lists. meant to be pasted in the erlang shell.
more readable:
źródło
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.źródło