In PPCG ist es zu einer gewissen Tradition geworden, dass einige Benutzer ihre Namen vorübergehend durch ein Anagramm ändern (ein neuer Name, der durch Umordnen der Buchstaben des alten gebildet wird).
Manchmal ist es schwierig herauszufinden, wer wer ist. Ich könnte ein Programm oder eine Funktion verwenden, um festzustellen, ob zwei Phrasen Anagramme voneinander sind.
Die Herausforderung
Das Programm oder die Funktion sollte zwei Zeichenfolgen verwenden und ein wahres Ergebnis liefern, wenn sie Anagramme voneinander sind, und ansonsten falsch.
Regeln
- Die Eingabe enthält nur Buchstaben (ASCII 65 bis 90 und 97 bis 122), Ziffern (ASCII 48 bis 57) oder Leerzeichen (ASCII 32).
- Die Anagrammrelation ist unabhängig vom Einzelfall. "Arm" und "RAM" sind also Anagramme.
- Leerzeichen zählen auch nicht. "Keyboard" und "Barked Yo" sind also Anagramme
- Alle eingebauten erlaubt
- Das Eingabeformat ist flexibel (zwei Zeichenfolgen, ein Array aus zwei Zeichenfolgen, eine Zeichenfolge, die beide Phrasen mit einem geeigneten Trennzeichen enthält ...)
Code Golf. Wenigste Bytes gewinnt.
Testfälle
Wahrheit:
Lynn, Nyl N
Digital Trauma, Tau Digital Arm
Sp3000, P S 3000
Manage Trash So, Those anagrams
Falsch
Calvins Hobbies, Helka Homba
Android, rains odd
In between days, bayed entwine
Code golf, cod elf got
code-golf
string
decision-problem
permutations
Luis Mendo
quelle
quelle
Manage Trash So, Those anagrams
. Nett.So, the anagrams...
Antworten:
05AB1E ,
98 BytesCode:
Erläuterung:
Probieren Sie es online!
quelle
lvyðK{}Q
jetztRetina, 25
Probieren Sie es online! Darüber hinaus können Sie eine geänderte mehrzeilige Version ausführen .
Löschen Sie Buchstaben vor dem Komma und die Übereinstimmungen nach dem Komma. Wenn wir keine Buchstaben mehr haben, war es ein Anagramm.
quelle
\w
als letzte Stufe um drei Byte kürzer sein .\W
wird nicht funktionieren für den Fall von:Calvins Hobbies, Calvin's Hobbies
Pyth,
1110 BytesVielen Dank an @FryAmTheEggman für das Erlernen der Macht von
;
!Probieren Sie es hier aus!
Nimmt eine Liste von zwei Zeichenfolgen als Eingabe.
Erläuterung
quelle
Python 2,
6361 BytesEine anonyme Funktion, die n Argumente akzeptiert und bestimmt, ob alle n gegenseitige Palindrome sind!
f("Lynn", "Nyl N")
kehrt zurückTrue
.Dieser Set-Verständnis-Trick stammt von xnor. Es wurden zwei Bytes gespart, aber der alte Ansatz sah sehr ordentlich aus:
quelle
`sorted(input().lower())`.strip(" [',")
ist die gleiche Länge: /exec
Ding ist schlau, scheint aber zu komplex. Mit können Sie es besser machenlambda*l:len({`sorted(s.lower())`[2::5].strip()for s in l})<2
.Gelee, 12 Bytes
Probieren Sie es online!
Wie es funktioniert
Alternative Version, nicht konkurrierend (9 Bytes)
Jellys Atom in Großbuchstaben hatte einen Fehler und Jelly hatte noch keine eingebauten Testlisten für Gleichheit ...
Probieren Sie es online!
Wie es funktioniert
quelle
CJam, 11
1214Bytes3
2Bytes entfernt dank @FryAmTheEggmanProbieren Sie es online!
quelle
lel
.lel
==>1e1
Niemand weiß es. Es ist ein Mysterium.Javascript,
69616059 Bytes1 Byte aus danke @ ӍѲꝆΛҐӍΛПӍѲꝆΛҐӍΛ . 1 - Byte - off mit currying ( wies darauf hin , durch @apsillers )
Code-Snippet anzeigen
quelle
n=>m=>...
n=>m=>(G=s=>[]+s.toLowerCase().split(/\S/).sort())(n)==G(m)
. Using split instead of match should save you a byte.s='db cz'
... Nows.match(/\S/g)
.sort()
results in['b','c','d','z']
... ands.split(/\s/).sort()
results in['cz','db']
MATL, 11 bytes
EDIT (May 20, 2016) The code in the link uses
Xz
instead ofXv
, owing to recent changes in the language.Try it online!
quelle
Seriously,
119 bytesTry It Online!
Everyone seems to be using the same algorithm. Here it is yet again.
Bearbeiten: Die realisierte Sortierung funktioniert korrekt für Zeichenfolgen und sortiert Leerzeichen nach vorne, sodass strip () funktioniert.
quelle
C 165 Bytes
Lesbar und im Arbeitskontext
quelle
zsh, 85 Bytes
Eingabe als Kommandozeilenargumente, Ausgabe als Returncode.
Die
for
Syntax macht diese Bash-inkompatibel.quelle
Japt, 12 Bytes
Online testen!
Wie es funktioniert
quelle
GNU Sed, 33
Die Punktzahl enthält +2 für
-rn
zu sedierende Optionen.Dies ist fast ein direkter Port von @ FryAmTheEggmans Retina-Antwort :
Ideone.
quelle
Perl,
3433 + 1 = 34 BytesBenötigt die
-n
Flagge und die freie-M5.010
|-E
:Wie es funktioniert:
Vielen Dank an msh210 für den Vorschlag, mit ternären Operatoren ein Byte zu sparen
quelle
Baloch Gyr , 9 Bytes
Probieren Sie es online!
Wahrheits- / Falschausgabe wird durch Prädikat Erfolg / Misserfolg erreicht, dies ist Brachylog.
Zuvor wurde ein Byte mit gespeichert,
cṇ₁cḷḍ
anstatt{ṇ₁cḷ}ᵐ
unter der Annahme, dass die beiden Eingabezeichenfolgen die gleiche Länge minus Leerzeichen haben, aber ich erkannte, dass es dort erfolgreich sein würde, wo es fehlschlagen sollteAh Hass, haha
.quelle
PHP,
10994 BytesBlech, die beiden bringen
function/return
mich hier um.Gibt die Differenz zwischen zwei
string
Eingaben alsarray
Zeichen zurück. PHP hält es für[]
falsch, diereturn
Anforderungen zu erfüllen.quelle
function($x,$y){$S=str_split;return array_diff($S(trim($x)),$S(trim($y)));}
-> 75 Bytes. Erstellt eine anonyme Funktion, die das Ergebnis zurückgibt. Ich habe diese lange Funktion entfernt und die Aufrufe anstr_split
durch eine zugewiesene Variable ersetzt, um sie zu verkürzen.Bash + GNU-Dienstprogramme, 51
f()
die:${@^^}
wandelt alle Parameter in Großbuchstaben umfold -1
Teilt Zeichen auf - eines pro Zeilesort
s Zeilendiff
mit-q
auf, um die vollständige Diff-Ausgabe zu unterdrücken und-Bw
Leerraumänderungen zu ignorierenquelle
Pyke (Commit 30, nicht konkurrenzfähig), 9 Bytes
Erläuterung:
quelle
Mathematica,
7776 BytesDer erste Teil ist eigentlich eine meiner Antworten auf eine andere Frage!
quelle
Pike,
5411210910996 Bytesmixed
zufällig kürzer alsarray(string)
.s
Gibt zurück,1
ob es sich bei den Argumenten um Anagramme handelt.quelle
Q, 25 Bytes
ANMERKUNG: Zählen Sie den Funktionsnamen f, um die Tests zu erleichtern (als Lambda können 2 Bytes dekrementiert werden).
Lesbare Version
Übereinstimmung über {aufsteigend nicht null niedriger x} jedes x
Prüfung
erzeugt (1b = wahr, 0b = falsch)
Über Q
Von kx.com entwickelte Allzwecksprache (APL-Derivat, spezialisiert auf Datenverarbeitung). Kostenlose voll funktionsfähige Testversion für Windows / Linux / MacOS.
quelle
f
Code ordnungsgemäß ausgewertet werden soll, muss er gezählt werden. Ansonsten lassen Sie es einfach in Ihrem Einreichungscode weg und verwenden Sie es nur in Beispielen, um zu zeigen, wie Sie die Funktion zuweisen.k)~/{x@<x:_x@&~^x}'
für 17 Bytes. Aber ich würde sagen, es ist 19, da Sie diek)
Klammer benötigen , da diesK
eher Code ist alsQ
...APL, 31 Zeichen
So verwendet werden:
Auf Englisch:
{ ... }¨⍵
: für jedes der beiden Elemente des Argumentsx←('.'⎕R'\u0')⍵~' '
: transformiere den String ohne Leerzeichen in Großbuchstaben (unter Verwendung einer Regex ...) und weise das temporäre Ergebnis zux
x[⍋x]
: sortiere x≡/
: Vergleichen Sie die beiden Ergebnisse der Sortierung: Wenn sie übereinstimmen, geben Sie 1 zurück.quelle
f 'first avatar' 'second avatar'
≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨
≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨'pp' '00'
gibt 1.Java, 218 Bytes
Zum ersten Mal habe ich Java geschrieben ...
Golf gespielt:
Ungolfed:
Testen:
quelle
boolean f(String...a){java.util.Arrays x=null;String[]A=g(a[0]),B=g(a[1]);x.sort(A);x.sort(B);return x.equals(A,B);}String[]g(String a){return a.replace(" ","").toUpperCase().split("");}
( 186 Bytes ) Oder wenn Sie es in ein Java 8 Lambda konvertieren, kann es sein:a->b->{java.util.Arrays x=null;String[]A=g(a),B=g(b);x.sort(A);x.sort(B);return x.equals(A,B);};String[]g(String a){return a.replace(" ","").toUpperCase().split("");}
( 167 Bytes ). Hier ist ein TIO mit Testcode.Japt , 10 Bytes
Versuch es
quelle
Ruby, 50 Bytes
Schreiben
f=->{...}
undf[]==f[]
ist genauso lang. :(quelle
PowerShell, 81 Byte
Eine leichte Umschreibung von meiner Antwort auf die verknüpfte Anagram-Herausforderung.
Übernimmt Eingaben als Zeichen-Arrays, führt eine
-replace
Operation zum Entfernen von Leerzeichen aus,sort
sortiert sie (alphabetisch, nicht nach ASCII-Wert) und setzt sie dann-join
wieder in eine Zeichenfolge um. In-eq
PowerShell wird standardmäßig nicht zwischen Groß- und Kleinschreibung unterschieden, aber hier muss dies für Zeichenfolgen durchgeführt werden, da dies[char]'a'
nicht gleich ist[char]'A'
, daher der Grund für-join
.quelle
Perl, 35 Bytes
Fügen Sie +1 für
-p
Etwas missbräuchlich, da es davon abhängt, welches Programm auf der Kommandozeile angegeben wird.
Geben Sie dann die Zeichenfolgen als 2 aufeinanderfolgende Zeilen auf STDIN
Eine sehr missbräuchliche Lösung sind 30 Bytes:
Dies stürzt ab, wenn die Zeichenfolgen keine Anagramme sind, und gibt daher aus Sicht der Shell einen falschen Exit-Code aus. Es gibt auch Müll auf STDERR für diesen Fall. Wenn es sich bei den Zeichenfolgen um Anagramme handelt, ist das Programm still und gibt einen "wahren" Exit-Code aus
quelle
PHP , 89 Bytes
Probieren Sie es online!
PHP , 94 Bytes
Probieren Sie es online!
quelle
Excel VBA, 122 Bytes
Anonymes VBE-Sofortfenster Funktion, die Eingaben aus dem Bereich
[A1:B1]
und Ausgaben in das VBE-Sofortfenster übernimmtquelle
C #, 378 Bytes
Ich brauche ein Handicap !!
https://dotnetfiddle.net/FNDt0E
quelle
#
in die erste Zeile ein Anführungszeichen einfügen. Auch für Code-Golf-Fragen ist es erforderlich, Ihr Programm zu golfen. Zu Beginn sollten Sie nicht benötigte Leerzeichen entfernen und Variablen mit einem Zeichen verwenden. Sie können auch immer eine Funktion anstelle eines vollständigen Programms verwenden (sofern dies nicht ausdrücklich verboten ist), um weitere Bytes zu speichern.