Wyzwanie
Biorąc pod uwagę dwa ciągi, sprawdź, czy oba zawierają dokładnie te same znaki.
Przykład
Wejście
słowo wrdo
Zwraca, true
ponieważ są takie same, ale tylko zakodowane.
Wejście
słowo, wwro
To zwraca false
.
Wejście
łódź, toba
To zwraca true
Zasady
Oto zasady!
- Załóżmy, że dane wejściowe będą miały co najmniej 1 znak i nie będą dłuższe niż 8 znaków.
- Bez znaków specjalnych, tylko
a
-z
- Wszystkie dane wejściowe można przyjmować małymi literami
Przypadki testowe
boat, boat = true
toab, boat = true
oabt, toab = true
a, aa = false
zzz, zzzzzzzz = false
zyyyzzzz, yyzzzzzy = true
sleepy, pyels = false
p,p = true
code-golf
string
permutations
Tom Gullen
źródło
źródło
Odpowiedzi:
Python, 32 bajty
źródło
def f(a,b):return sorted(a)==sorted(b)
że możesz zastąpić def + return przez lambda w zamian za nieużywanie żadnych instrukcjiGolfscript, 3 znaki?
stosowanie:
źródło
'
).J, 8
Dosłownie, match (
-:
) on (&
) sortuj w górę (/:~
)Przykładowe użycie:
Gdzie w grę wchodzą 64-bitowe liczby całkowite?
źródło
v arg
(monady) lub dwa po obu stronach jak warg1 v arg2
(dyady). Ten, który przedstawiłem, jest oczywiście diadem. Nie zawracałem sobie głowy nazwaniem go, ponieważ nie było to wymagane i jest w ten sposób krótsze. Jeśli naprawdę chcesz nadać jej nazwę, zrób tak:is_anagram_of =: -:&(/:~)
a następnie użyj jako'a' is_anagram_of 'aa'
.Javascript,
192157152147 147125 bajtówOk, niektóre z tych języków są znacznie bardziej elastyczne niż myślałem! W każdym razie jest to dłuższy sposób, ale przynajmniej inna technika.
Sprężony
Dzięki Peter i David za wyciskanie kolejnych znaków!
Następnie wykonaj:
Rozszerzony kod
Skompresowany miał wiele zmian, ale jest to podstawowa teoria:
źródło
a=[2];for(p=3,j=0;j<26;)if(a[j]){if(p%a[j++]==0){p++;j=0}}else{a[j]=p;j=0}
for(a=[j=p=2];j<123;)a[j]?p%a[++j]<1&&p++&&(j=0):(a[j]=p,j=0);function b(c,i){return c[i=i||0]?a[c.charCodeAt(i)]*b(c,++i):1}
Golfscript, 8 bajtów
Definiuje funkcję o nazwie
A
Przypadki testowe
źródło
Haskell, 31 bajtów
funkcja - 31
program -
815855Stosowanie:
Uznanie dla lambdabota i jego bezcelowe refaktoryzacja .
źródło
perl
nadal można nazwać „programem”? :-)x#y=sort x==sort y
jest 1 postać krótszaC #, 129 znaków
Czytelny:
źródło
using System.Linq;
zamiast w przestrzeń nazw?Rubinowy, 34 bajty
Korzystanie ze schematu IO rozwiązania Peter Taylors Perl:
źródło
-e:1:in '<main>': undefined method 'chars' for nil:NilClass (NoMethodError)
Program C, 118
źródło
t[256],i;main(c){for(;c+3;)(i=getchar())>10?t[i]+=c:(c-=2);for(i=257;--i&&!t[i-1];);puts(i?"false":"true");}
- to 108 znaków. Bardzo ważne jest, że Twojac
sztuczka inicjalizacyjna jest nadal stosowana.Perl, 58 bajtów
(kompletny program, w przeciwieństwie do innych odpowiedzi Perla, które są tylko funkcją)
49 jako funkcja
źródło
"
dookoła prawdę i fałsz, ponieważ bez użycia ścisłych / ostrzeżeń jedno słowo jest ciągiem.($c,$d)=map{[sort split//]}@ARGV;exit("@$c"ne"@$d")
(51 znaków), aby mógł przyjmować argumenty wiersza poleceń i używać kodów wyjścia wiersza poleceń. Będzie to 48 znaków zachowanych<>
z wejściem wieloliniowym.Clojure - 23 znaki
Jako funkcja anonimowa:
Przykład przypadku testowego:
źródło
JavaScript
Na podstawie rozwiązania @ zzzzBov.
Porównanie, 65 znaków (40 bez funkcji)
Komparator, 43 znaki
źródło
+""
przymusu do łańcucha.C ++ (104 znaki spoza ws)
Na podstawie sortowania liczącego. Uwaga: Zakłada ciągi o tej samej długości, co wydaje się sugerowane (choć nie określone) przez pytanie.
źródło
i=123;while(i&&u[--i]);return!i;
PHP (wiersz poleceń, 87 znaków)
źródło
JavaScript
(Bardzo) nieco krótsza wersja rozwiązania @ zzzzBov, która używa
.join()
zamiast boksu String:Podobnie:
źródło
Clojure REPL 41 znaków
źródło
Jawa
(najwyraźniej ulubiony język wszystkich!)
173 znaków:
(Nie drukuje znaku nowej linii, aby zapisać 2 znaki z println)
Skompiluj i uruchom:
Uwielbiam oglądać krótszy ...
źródło
java.util.Arrays x=null;
i używającx.
zamiastArrays.
:class g{public static void main(String[]p){java.util.Arrays x=null;String[]a=p[0].split(""),b=p[1].split("");x.sort(a);x.sort(b);System.out.print(x.equals(a,b));}}
( 163 bajtów ) I konwersja do Java 8class g{public static void main
może byćinterface g{static void main
również, ale myślę, że Java 8 nie była jeszcze w 2011 roku, więc utrzymanieclass
jest w porządku. ; psed, 45 znaków
Jest to nawet możliwe w moim ulubionym -
sed
! Tylko jedno wyrażenie regularne, aby rozwiązać anagram ! Po prostu usuwaj odpowiednie litery:(do wywołania
-nE
)Perl, 48
Aby zostać wywołanym z
-p
.Funkcja Perla, 39
źródło
APL, 2 znaki
Jest to funkcja Multiset Match firmy Nars2000 , jedna z wiodących implementacji APL. Po zastosowaniu do ciągów oblicza dokładnie wymaganą funkcję:
źródło
⍦
symbol, w co wątpię.05AB1E ,
64 bajtów (niekonkurencyjny)Wypróbuj online!
Trwało to trochę z powodu trudności z wprowadzaniem danych. Grał w golfa z powodu popu.
Wyjaśnienie:
źródło
Perl,
7775 znakówWe / wy problemu nie są dobrze określone; to odczytuje dwie linie ze standardowego wejścia i zwraca prawdę lub fałsz na standardowe wyjście.
(Podziękowania dla Tima za 77 -> 75)
źródło
$a=;
? Możesz także pomijać parenssort
i odstęp poprint
.Perl, 62 bajty
Ta funkcja przyjmuje ciągi jako argumenty i zwraca wartość true lub false.
Przechowuje wartości ASCII w tablicy i sprawdza, czy się wyrówna. Przyrosty dla pierwszego słowa i ubytki dla drugiego słowa.
źródło
Python 3,
107977664Oczywiście można to skrócić, jeśli nie weźmiemy słowa OP dosłownie i małych liter „prawda” i „fałsz” ...
źródło
;s=sorted
do pierwszej linii, a następnie wymienić dwie instancjesorted
zes
w drugiej linii. Czy należy zapisać ... 3 znaki?Python, 32 bajty
źródło
Bash, 88 znaków
źródło
R , 54 bajty
Wypróbuj online!
źródło
utf8ToInt
a jego odwrotność powoduje, że podział łańcucha jest krótszy niż w przypadku konwencjonalnych funkcji.Scala w REPL (32)
Funkcja Scala (43)
Program Scala (61)
Wykorzystują one ciekawą funkcję Scali, dzięki której Łańcuch może być również traktowany jako ciąg znaków (
Seq
), a wszystkie operacjeSeq
są dostępne.źródło
APL - 13 znaków
Zadzwoń tak:
W ostatnim przykładzie
'a'
reprezentuje pojedynczy znak, a prefiks,
przekształci go w ciąg.źródło
Java (134 bajty)
Powoduje to, że tablica zlicza liczbę wyświetleń każdej litery, a następnie porównuje tablice, aby sprawdzić, czy są one równe.
źródło
(c[0], c[1])
ifor (int i=0;
.JavaScript, 41
Funkcja porównania (41) :
Funkcja komparatora (21) :
Funkcja komparatora (48):
Funkcja porównania (78):
Zakłada, że
String
masplit
iArray
masort
.źródło
c=>d=>(a=b=>''+[...b].sort())(c)==a(d)