W PPCG stało się tradycją, że niektórzy użytkownicy tymczasowo zmieniają swoje nazwy za pomocą anagramu (nowa nazwa utworzona przez zmianę kolejności starych liter).
Czasami trudno jest ustalić, kto jest kim. Mógłbym użyć programu lub funkcji, aby stwierdzić, czy dwie frazy są względem siebie anagramami.
Wyzwanie
Program lub funkcja powinna wziąć dwa ciągi znaków i dać prawdziwy wynik, jeśli są one wzajemnymi anagramami, a fałszem w przeciwnym razie.
Zasady
- Dane wejściowe będą zawierać tylko litery (ASCII 65 do 90 i 97 do 122), cyfry (ASCII 48 do 57) lub spację (ASCII 32).
- Relacja anagramowa jest niezależna od wielkości liter. Zatem „Uzbrojenie” i „RAM” to anagramy.
- Miejsca też się nie liczą. Tak więc „klawiatura” i „Barked Yo” to anagramy
- Wszystkie wbudowane dozwolone
- Format wejściowy jest elastyczny (dwa ciągi, tablica dwóch ciągów, ciąg zawierający obie frazy z odpowiednim separatorem ...)
Kod golfa. Wygrywa najmniej bajtów.
Przypadki testowe
Prawda:
Lynn, Nyl N
Digital Trauma, Tau Digital Arm
Sp3000, P S 3000
Manage Trash So, Those anagrams
Falsy
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
źródło
źródło
Manage Trash So, Those anagrams
. Miły.So, the anagrams...
Odpowiedzi:
05AB1E ,
98 bajtówKod:
Wyjaśnienie:
Wypróbuj online!
źródło
lvyðK{}Q
terazSiatkówka, 25
Wypróbuj online! Dodatkowo możesz uruchomić zmodyfikowaną wersję wieloliniową .
Usuń litery przed przecinkiem oraz ich dopasowania po przecinku. Jeśli nie pozostały nam żadne litery, był to anagram.
źródło
\w
jako ostatni etap.\W
nie będzie działać w przypadku:Calvins Hobbies, Calvin's Hobbies
Pyth
1110 bajtówDzięki @FryAmTheEggman za nauczenie mnie mocy
;
!Wypróbuj tutaj!
Pobiera na wejściu listę dwóch ciągów.
Wyjaśnienie
źródło
Python 2,
6361 bajtówAnonimowa funkcja, która w rzeczywistości bierze n argumentów i określa, czy wszystkie n są wzajemnymi palindromami!
f("Lynn", "Nyl N")
zwracaTrue
.Ta sztuczka polegająca na zrozumieniu zestawu została opracowana przez xnor. Zaoszczędził dwa bajty, ale stare podejście wyglądało bardzo schludnie:
źródło
`sorted(input().lower())`.strip(" [',")
ma taką samą długość: /exec
Rzeczą jest mądry, ale wydaje się zbyt skomplikowane. Z tym możesz zrobić lepiejlambda*l:len({`sorted(s.lower())`[2::5].strip()for s in l})<2
.Galaretka, 12 bajtów
Wypróbuj online!
Jak to działa
Alternatywna wersja, niekonkurująca (9 bajtów)
Atom wielkiej litery Jelly miał błąd, a Jelly wciąż nie miała wbudowanego testowania list pod kątem równości ...
Wypróbuj online!
Jak to działa
źródło
CJam, 11
1214bajtów3
2bajty usunięte dzięki @FryAmTheEggmanWypróbuj online!
źródło
lel
.lel
==>1e1
Nikt nie wie. To jest tajemnica.JavaScript,
69616059 bajtów1 bajt off dzięki @ ӍѲꝆΛҐӍΛПҒЦꝆ . 1 bajt off z curry ( wskazane przez @apsillers )
Pokaż fragment kodu
źródło
n=>m=>...
n=>m=>(G=s=>[]+s.toLowerCase().split(/\S/).sort())(n)==G(m)
. Użycie podziału zamiast dopasowania powinno zaoszczędzić bajt.s='db cz'
... Teraz skutkuje ... i powodujes.match(/\S/g)
.sort()
['b','c','d','z']
s.split(/\s/).sort()
['cz','db']
MATL , 11 bajtów
EDYCJA (20 maja 2016 r.) Kod w linku używa
Xz
zamiast, zXv
powodu ostatnich zmian w języku.Wypróbuj online!
źródło
Poważnie,
119 bajtówWypróbuj online!
Wydaje się, że wszyscy używają tego samego algorytmu. Oto jeszcze raz.
Edycja: zrealizowane sortowanie działa poprawnie na ciągach znaków i sortuje spacje do przodu, dzięki czemu strip () będzie działać.
źródło
C, 165 bajtów
Czytelny iw kontekście roboczym,
źródło
zsh, 85 bajtów
Dane wejściowe jako argumenty wiersza poleceń, dane wyjściowe jako kod powrotu.
for
Składni czyni ten atakujących niekompatybilny.źródło
Japt, 12 bajtów
Przetestuj online!
Jak to działa
źródło
GNU Sed, 33
Wynik obejmuje +2 za
-rn
opcje sed.To jest prawie bezpośredni port odpowiedzi Retina @ FryAmTheEggman :
Ideone.
źródło
Perl,
3433 + 1 = 34 bajtyWymaga
-n
flagi i darmowego-M5.010
|-E
:Jak to działa:
Dzięki msh210 za sugerowanie użycia operatorów trójskładnikowych w celu zaoszczędzenia jednego bajtu
źródło
Baloch Gyr , 9 bajtów
Wypróbuj online!
Prawda / fałsz uzyskuje się poprzez predykat powodzenia / niepowodzenia, czyli Brachylog.
Wcześniej zapisywałem bajt,
cṇ₁cḷḍ
zamiast{ṇ₁cḷ}ᵐ
przy założeniu, że dwa ciągi wejściowe będą miały tę samą długość minus białe znaki, ale zdałem sobie sprawę, że odniesie sukces tam, gdzie powinien się zawieśćAh Hass, haha
.źródło
PHP,
10994 bajtyBlech, ta dwójka
function/return
mnie tutaj zabija.Zwraca różnicę między dwoma
string
wejściami jako liczbąarray
znaków. PHP uważa[]
fałsz, spełniającreturn
wymagania.źródło
function($x,$y){$S=str_split;return array_diff($S(trim($x)),$S(trim($y)));}
-> 75 bajtów. Tworzy anonimową funkcję, która zwraca wynik. Usunąłem tę długą funkcję i zastąpiłem wywołaniastr_split
zmienną przypisaną, aby ją skrócić.Narzędzia Bash + GNU, 51
f()
która:${@^^}
konwertuje wszystkie parametry na wielkie literyfold -1
dzieli znaki - jeden na linięsort
s liniediff
pomocą,-q
aby ukryć pełne wyjście różnicowe i-Bw
zignorować zmiany białych znakówźródło
Pyke (zatwierdzenie 30, niekonkurencyjne), 9 bajtów
Wyjaśnienie:
źródło
Mathematica,
7776 bajtówPierwsza część jest właściwie jedną z moich odpowiedzi na inne pytanie!
źródło
Szczupak,
5411210910996 bajtówmixed
bywa krótszy niżarray(string)
.s
zwraca,1
jeśli jego argumentami są anagramy.źródło
Q, 25 bajtów
UWAGA. - zliczanie obejmuje nazwę funkcji f: w celu ułatwienia testów (jako lambda możemy zmniejszyć 2 bajty)
Wersja do odczytu
dopasuj do {rosnąco nie zerowy niższy x} każdy x
Test
generuje (1b = prawda, 0b = fałsz)
O Q
Język ogólnego przeznaczenia (pochodna APL, specjalizująca się w przetwarzaniu danych) opracowany przez kx.com. Darmowa pełna funkcjonalna wersja ewaluacyjna dla Windows / Linux / MacOS.
źródło
f
jest to wymagane do poprawnej oceny kodu, należy go policzyć. W przeciwnym razie po prostu zostaw go w swoim kodzie przesyłania i użyj go tylko w przykładach, aby pokazać, jak przypisać funkcję.k)~/{x@<x:_x@&~^x}'
dla 17 bajtów .. ale powiedziałbym, że to 19, ponieważ potrzebujeszk)
nawiasu, ponieważ jest toK
kod, a nieQ
...APL, 31 znaków
Do użycia, więc:
Po angielsku:
{ ... }¨⍵
: dla każdego z dwóch elementów argumentux←('.'⎕R'\u0')⍵~' '
: przekształć na wielkie litery (używając wyrażenia regularnego ...) ciąg bez spacji i przypisz wynik tymczasowy dox
x[⍋x]
: sort x≡/
: porównaj dwa wyniki sortowania: jeśli pasują, zwróć 1.źródło
f 'first avatar' 'second avatar'
≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨
≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨'pp' '00'
daje 1.Java, 218 bajtów
Pierwszy raz pisałem w Javie ...
Gra w golfa:
Nie golfowany:
Testowanie:
źródło
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 bajtów ) Lub jeśli przekonwertujesz go na Java 8 lambda, może to być: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 bajtów ). Oto TIO z kodem testowym.Japt , 10 bajtów
Spróbuj
źródło
Rubinowy, 50 bajtów
Pisanie
f=->{...}
if[]==f[]
jest tak samo długie. :(źródło
PowerShell, 81 bajtów
Nieznaczne przepisanie mojej odpowiedzi dotyczącej powiązanego wyzwania Anagram.
Pobiera dane wejściowe jako tablice znaków, wykonuje
-replace
operację usuwania spacji,sort
s je (sortuje alfabetycznie, a nie według wartości ASCII), a następnie-join
s je z powrotem w ciąg znaków. W programie-eq
PowerShell domyślnie nie jest rozróżniana wielkość liter, ale tutaj należy ją wykonać na ciągach, ponieważ[char]'a'
nie jest ona równa[char]'A'
, stąd przyczyna-join
.źródło
Perl, 35 bajtów
Uwzględnij +1 dla
-p
Nieco obelżywe, ponieważ zależy to od podania programu w wierszu poleceń.
Następnie podaj ciągi jako 2 kolejne linie na STDIN
Bardzo obraźliwe rozwiązanie to 30 bajtów:
To ulega awarii, jeśli ciągi nie są anagramami i dlatego podaje fałszywy kod wyjścia z punktu widzenia powłoki. W tym przypadku daje również śmieci na STDERR. Jeśli ciągi są anagramami, program milczy i podaje „prawdziwy” kod wyjścia
źródło
PHP , 89 bajtów
Wypróbuj online!
PHP , 94 bajty
Wypróbuj online!
źródło
Excel VBA, 122 bajty
Anonimowe bezpośrednie okno VBE Funkcja, która przenosi dane wejściowe z zakresu
[A1:B1]
i wyjścia do bezpośredniego okna VBEźródło
C #, 378 bajtów
Potrzebuję handicapu !!
https://dotnetfiddle.net/FNDt0E
źródło
#
linię do pierwszego wiersza. Również w przypadku pytań związanych z golfem wymagana jest gra w golfa. Na początek powinieneś usunąć niepotrzebne białe znaki i użyć jednoznakowych nazw zmiennych. Zawsze możesz także użyć funkcji zamiast pełnego programu (chyba że jest to wyraźnie zabronione), aby zapisać więcej bajtów.