In der Sprache Nim sind die Regeln zur Unterscheidung von Bezeichnern etwas lockerer als in den meisten anderen Sprachen. Zwei Bezeichner sind äquivalent oder adressieren dieselbe Variable, wenn sie diesen Regeln folgen :
- Das erste Zeichen von beiden ist dasselbe (Groß- / Kleinschreibung beachten)
- beide Zeichenfolgen sind gleich (Groß- und Kleinschreibung beachten), nachdem alle Instanzen der Zeichen
-
und entfernt wurden_
Herausforderung
Schreiben Sie ein Programm / eine Funktion , die zwei Zeichenfolgen verwendet , die Nim-Bezeichner darstellen, und geben Sie einen Wahrheits- oder Falschwert aus, je nachdem, ob sie den obigen Regeln entsprechen oder nicht .
Spezifikationen
- Standard I / O - Regeln gelten .
- Standardlücken sind verboten .
- Die Zeichenfolgen enthalten nur ASCII-Ausdrucke . Sie müssen nicht überprüfen, ob es sich um eine gültige Kennung handelt.
- Die Zeichenfolgen können als zwei separate Eingaben, Liste der Zeichenfolgen usw. verwendet werden (Sie kennen den Drill).
- Leere Zeichenfolgen müssen nicht behandelt werden.
- Die Ausgabe muss konsistent sein für True- als auch für Falsey-Werte konsistent sein.
- Bei dieser Herausforderung geht es nicht darum, den kürzesten Ansatz in allen Sprachen zu finden, sondern darum, den kürzesten Ansatz in jeder Sprache zu finden .
- Ihr Code wird in Bytes bewertet , normalerweise in der Codierung UTF-8, sofern nicht anders angegeben.
- Integrierte Funktionen, die diese Aufgabe ausführen, sind zulässig, es wird jedoch empfohlen, eine Lösung zu verwenden, die nicht auf einer integrierten basiert.
- Erklärungen, auch für "praktische" Sprachen, sind erwünscht .
Testfälle
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
Ungolfed-Referenzimplementierung
Dies ist in Nim selbst geschrieben.
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
total menschlich
quelle
quelle
f("_test", "test")
.f("test", "tset")
, da ich denke, dass eine Antwort ein unerwartetes Ergebnis liefert.>
?Antworten:
JavaScript (ES6),
6261 Bytes1 Byte gespeichert dank @JohanKarlsson gespeichert
Übernimmt Eingaben in der Currying-Syntax
(a)(b)
. Gibt einen Booleschen Wert zurück.Testfälle
Code-Snippet anzeigen
quelle
/-|_/g
speichert ein BytePython 3 , 76 Bytes
Probieren Sie es online!
-1 Byte dank notjagan
-3 Byte dank Wheat Wizard
quelle
Eigentlich 15 Bytes
Probieren Sie es online!
Unterhaltsame Tatsache: Dies funktioniert mit einer beliebigen Anzahl von Eingaben (bei weniger als 2 Eingaben wird immer die Wahrheit zurückgegeben).
Erläuterung:
quelle
Pyth , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 12 Bytes
Probieren Sie es online!
-1 danke an Adnan .
Theoretisch
εćs„-_-«}Ë
hätte das für 10 Bytes funktionieren sollen, aber leider ist dieses Verhalten vorerst veraltet.quelle
„-_SK
instead of'-K'_K
.SK
toм
.м
existed back then. :PJelly, 11 bytes
Try it online!
-2 bytes thanks to Erik the Outgolfer
-1 byte thanks to Jonathan Allan
quelle
["symbolsAre_too>_>", "symbols_areTOO>>"]
and useḢ;ḟ⁾-_Œl$µ€E
instead for -2. Beat that Pyth!ḟ⁾-_Œl,Ḣµ€E
for 11 bytes.Ruby,
8664636151 bytesTry it online!
This
feels really longstill feels a bit long. I would appreciate the help of any Ruby gurus out there in making this at least a bit shorter.quelle
.delete("_-")
is shorter.f[x]
is always a valid substitution forf.call(x)
when stabby lambdas are involved.C++,
288248 bytes-5 bytes thanks to Zacharý
Thanks you, Preprocessor. Also, this code takes advantage of the fact that in C++ the rule to cast int to bool is
int_var!=0
quelle
;
after the definition ofF
. Then, change the firstreturn
statement toreturn 0;E(a,45)E(b,45)E(a,95)E(b,95)F(a)F(b)
.CJam, 20 bytes
Takes input in the form of ["string1","string2"].
Try it Online (testing version)
quelle
Haskell,
8578767168 bytes2 bytes saved thanks to Ørjan Johansen
Try it online!
Errors on the empty string.
quelle
all(/=a)"-_"
. Also after your latest edit,f
needs to become an operator.notElem
but I couldn't remember it for the life of me.Python 2, 72 bytes
Try it online!
Won't work with Python 3 because of the new
translate
syntax.quelle
Excel, 105 bytes
CODE() returns numeric code of first character.
String comparison in Excel is case insensitive.
quelle
Husk, 13 bytes
Try it online!
Builds for each string a pair consisting of the first character of the string and the whole string lowercased and with all occurrences of -/_ removed. Then checks if the two pairs are equal.
A particularity is that
-
in Husk is set difference (i.e. it removes only the first occurrence found): in order to remove all occurrences, the fixed point of-"-_
is found withω-"-_
.quelle
Japt,
1425 bytesChecks case-insensitive string equality by removing all characters in word 2 from word 1, and removing the-_
characters; that results in an empty string (""
) if the words are equal.Thanks Ørjan Johansen for pointing out the problem with this.
Checks first-char equality and if the uppercased inputs are equal after removing
_-
.Try it online!
Explanation
Implicit input:
U
andV
are input stringsCheck if first letter of
U
(implicit) equals (¥
) the first char ofV
.And (
©
) check ifU
, uppercased (u
) and with_-
removed (k
), equals (¥
) the same forV
. Implicitly return the boolean result.quelle
test
vs.tset
?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!
quelle
Perl 5, 67 bytes
Try it online!
Takes the identifiers as input on separate lines.
Explanation:
quelle
Retina, 28 bytes
Try it online!
quelle
Charcoal, 29 bytes
Try it online!
This prints a
-
for truthy and nothing for 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 (↧
).quelle
C#,
10189 bytesSaved 12 bytes thanks to @kusi581.
quelle
string.Concat(...)
you can save 2 bytes ;)Java (OpenJDK 8), 95 bytes
Try it online! Pretty straight forward.
quelle
Pyke, 13 bytes
Try it online!
quelle
C (gcc),
126114 bytesTry it online!
With whitespace and comments:
quelle
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?
quelle
⊃⍺=⍵
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:
quelle
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)
quelle
Brachylog, 17 bytes
Try it online!
Outputs through predicate success/failure.
quelle
Erlang 113 bytes
a pair of anonymous functions that compare the two lists. meant to be pasted in the erlang shell.
more readable:
quelle
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.quelle