Tantangan
Diberikan dua string, tentukan jika mereka berdua memiliki karakter yang persis sama di dalamnya.
Contoh
Memasukkan
kata, wrdo
Ini kembali true
karena mereka sama tetapi hanya diacak.
Memasukkan
kata, wwro
Ini kembali false
.
Memasukkan
perahu, toba
Ini kembali true
Aturan
Ini peraturannya!
- Asumsikan input akan setidaknya 1 karakter, dan tidak lebih dari 8 karakter.
- Tidak ada karakter khusus, hanya
a
-z
- Semua input dapat dianggap huruf kecil
Uji Kasus
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
sumber
sumber
Jawaban:
Python, 32 byte
sumber
def f(a,b):return sorted(a)==sorted(b)
trade offnya yaitu Anda bisa mengganti def + return dengan lambda dengan imbalan tidak menggunakan pernyataanGolfscript, 3 karakter?
pemakaian:
sumber
'
).J, 8
Literaly, cocokkan (
-:
) di (&
) sortir (/:~
)Penggunaan sampel:
Di mana integer 64-bit ikut bermain?
sumber
v arg
(monads) atau dua di kedua sisi seperti diarg1 v arg2
(diad). Yang saya kirimkan jelas angka dua. Saya tidak repot-repot menyebutkannya, karena tidak diminta dan lebih pendek dengan cara ini. Jika Anda benar - benar ingin memberi nama, Anda akan melakukannya seperti ini:is_anagram_of =: -:&(/:~)
dan kemudian gunakan sebagai'a' is_anagram_of 'aa'
.Javascript,
192157152147125 byteOk beberapa bahasa ini jauh lebih fleksibel daripada yang saya kira! Bagaimanapun ini adalah cara yang lebih panjang saya kira, tetapi teknik yang berbeda setidaknya.
Terkompresi
Terima kasih kepada Peter dan David karena telah memeras lebih banyak karakter!
Lalu lakukan:
Kode yang Diperluas
Terkompresi telah memiliki banyak perubahan, tetapi ini adalah teori dasar:
sumber
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 byte
Ini mendefinisikan fungsi yang disebut
A
Uji kasus
sumber
Haskell, 31 byte
fungsi - 31
program -
815855Pemakaian:
Kudos to lambdabot dan refactoring pointfree -nya .
sumber
perl
masih disebut "program"? :-)x#y=sort x==sort y
lebih pendek 1 karakterC #, 129 karakter
Dapat dibaca:
sumber
using System.Linq;
bukannya menamainya?Ruby, 34 byte
Menggunakan skema IO solusi Peter Taylors Perl:
sumber
-e:1:in '<main>': undefined method 'chars' for nil:NilClass (NoMethodError)
Program C, 118
sumber
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");}
- itu 108 karakter. Sangat penting,c
trik inisialisasi Anda masih digunakan.Perl, 58 byte
(program lengkap, tidak seperti jawaban Perl lainnya yang hanya berfungsi)
49 sebagai fungsi
sumber
"
sekitar benar dan salah, karena tanpa menggunakan ketat / peringatan sebuah kata kunci adalah string.($c,$d)=map{[sort split//]}@ARGV;exit("@$c"ne"@$d")
(51 karakter) sehingga dapat mengambil argumen baris perintah dan menggunakan kode keluar baris perintah. Ini akan menjadi 48 karakter yang dipertahankan<>
dengan input multi-line.Clojure - 23 karakter
Sebagai fungsi anonim:
Contoh kasus uji:
sumber
JavaScript
Berdasarkan solusi @ zzzzBov.
Perbandingan, 65 karakter (40 tanpa fungsi)
Pembanding, 43 karakter
sumber
+""
untuk memaksa ke string.C ++ (104 karakter non-ws)
Berdasarkan jenis penghitungan. Catatan: Menganggap string dengan panjang yang sama, yang tampaknya tersirat (meskipun tidak dinyatakan) oleh pertanyaan.
sumber
i=123;while(i&&u[--i]);return!i;
PHP (baris perintah, 87 karakter)
sumber
Javascript
Versi (sangat) sedikit lebih singkat dari solusi @ zzzzBov, yang menggunakan
.join()
alih-alih String boxing:Demikian pula:
sumber
Clojure REPL 41 karakter
sumber
Jawa
(Bahasa favorit semua orang rupanya!)
173 karakter:
(Tidak mencetak char baris baru untuk menyimpan 2 karakter dari println)
Kompilasi dan jalankan:
Senang melihat yang lebih pendek ...
sumber
java.util.Arrays x=null;
dan menggunakanx.
bukanArrays.
: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 bytes ) Dan dengan mengubahnya menjadi Java 8,class g{public static void main
bisainterface g{static void main
juga, tapi saya kira Java 8 wasn sekitar tahun 2011, jadi menjagaclass
juga baik-baik saja. ; psed, 45 karakter
Itu bahkan mungkin di favorit saya -
sed
! Hanya satu ekspresi reguler untuk menyelesaikan anagram ! Terus keluarkan huruf yang sesuai:(untuk dipanggil
-nE
)Perl, 48
Untuk dipanggil dengan
-p
.Fungsi Perl, 39
sumber
APL, 2 karakter
Ini adalah fungsi Pencocokan Multiset dari Nars2000 , salah satu implementasi APL terdepan. Ketika diterapkan pada string, ia menghitung persis fungsi yang diperlukan:
sumber
⍦
simbol, yang saya ragu.05AB1E ,
64 byte (tidak bersaing)Cobalah online!
Ini memakan waktu cukup lama karena kesulitan input. Golf turun karena pop.
Penjelasan:
sumber
Perl,
7775 karakterI / O masalah tidak dirinci dengan baik; ini membaca dua baris dari stdin dan menampilkan true atau false ke stdout.
(Terima kasih kepada Tim untuk 77 -> 75)
sumber
$a=;
? Anda juga dapat melewati parenssort
dan spasi setelahnyaprint
.Perl, 62 byte
Fungsi ini mengambil string sebagai argumen dan mengembalikan true atau false.
Menyimpan nilai-nilai ASCII dalam sebuah array dan memeriksa apakah nilai tersebut keluar. Peningkatan untuk kata pertama dan penurunan untuk kata kedua.
sumber
Python 3,
107977664Jelas ini dapat dipersingkat jika kita tidak menggunakan kata-kata OP secara harfiah dan huruf kecil "benar" dan "salah" ...
sumber
;s=sorted
ke baris pertama dan kemudian mengganti dua contohsorted
dengans
di baris kedua. Haruskah menyimpan ... 3 karakter?Python, 32 byte
sumber
Bash, 88 karakter
sumber
R , 54 byte
Cobalah online!
sumber
utf8ToInt
dan kebalikannya cenderung membuat pemisahan string lebih pendek dari fungsi konvensional.Scala dalam REPL (32)
Fungsi scala (43)
Program scala (61)
Ini memanfaatkan fitur rapi Scala dimana String juga dapat diperlakukan sebagai urutan karakter (
Seq
), dengan semua operasiSeq
yang tersedia.sumber
APL - 13 karakter
Panggil seperti ini:
Dalam contoh terakhir,
'a'
mewakili karakter tunggal, dan awalan,
akan mengubahnya menjadi string.sumber
Java (134 byte)
Ini membuat array untuk menghitung berapa kali setiap huruf muncul, dan kemudian membandingkan array untuk memeriksa apakah mereka sama.
sumber
(c[0], c[1])
danfor (int i=0;
.JavaScript, 41
Fungsi perbandingan (41) :
Fungsi komparator (21) :
Fungsi pembanding (48):
Fungsi perbandingan (78):
Diasumsikan
String
telahsplit
danArray
sudahsort
.sumber
c=>d=>(a=b=>''+[...b].sort())(c)==a(d)