Deskripsi tantangan
Anda memiliki perpustakaan musik dengan banyak lagu yang direkam oleh banyak band-band, yang masing-masing memiliki nama, seperti Queen
, Aerosmith
, Sunny Day Real Estate
, The Strokes
. Ketika pemutar audio menampilkan pustaka menurut abjad menurut nama band, biasanya lompatan The
bagian itu, karena banyak nama band mulai dengan The
, sehingga lebih mudah untuk menavigasi melalui koleksi media Anda. Dalam tantangan ini, diberi daftar (array) string, Anda perlu mengurutkannya seperti itu (yaitu, menghilangkan The
kata di awal nama). Anda dapat menulis metode atau program kerja penuh.
Input / output sampel
[Queen, Aerosmith, Sunny Day Real Estate, The Strokes] -> [Aerosmith, Queen, The Strokes, Sunny Day Real Estate]
[The Ramones, The Cure, The Pixies, The Roots, The Animals, Enrique Iglesias] -> [The Animals, The Cure, Enrique Iglesias, The Pixies, The Ramones, The Roots]
[The The, The They, Thermodynamics] -> [The The, Thermodynamics, The They]
Catatan / Tepi kasus
Mengurutkan secara leksikografis tidak peka huruf besar-kecil, jadi
The Police
,The police
danthe police
semuanya setara,Algoritme Anda hanya menghilangkan
the
kata pertama , sehingga band diberi namaThe The
atauThe The Band
diurutkan secara normal dengan kata keduathe
,Band bernama
The
(kata tiga huruf) diurutkan secara normal (tanpa melewatkan),Urutan dua band dengan nama yang sama, yang salah satunya dimulai dengan
the
(sepertiThe Police
danPolice
) tidak ditentukan,Anda dapat mengasumsikan bahwa jika nama band terdiri dari lebih dari satu kata, mereka dipisahkan oleh karakter spasi tunggal. Anda tidak perlu menangani spasi putih depan atau belakang,
Semua string input cocok
[A-Za-z0-9 ]*
, yaitu mereka hanya terdiri dari huruf kecil dan besar alfabet Inggris, digit dan karakter spasi,Ingat bahwa ini adalah tantangan kode-golf , jadi buat kode Anda sesingkat mungkin!
The
danThe The
? (Sebagian besar jawaban mungkin perlu diubah jika itu sesuatu selain yang tidak terdefinisi)Jawaban:
Python,
566264 byteCobalah
Terima kasih kepada @Chris H untuk menunjukkan bahwa
lstrip()
tidak menanganiThe The
dengan benar, karena strip ini meledakkan semua karakter yang cocok dan mengurutkannya sebagai string kosong, dan @manatwork untuk menemukan kesalahan dalam menggunakanreplace()
. Versi baru akan berfungsi.Versi lama:
sumber
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']
. Kasing tepi ke-2 menyarankan duduk harus ['The Animals', 'The The', 'The', 'Thermodynamics', 'The They'] (atau menukar item ke-2 dan ke-3). Sedikit mengutak-atik menyarankan ruang di dalamstrip('the ')
diabaikan - cobafor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
replace()
tidak jauh lebih baik:'what the snake'.replace('the ','',1)
hasil'what snake'
.V ,
3228 byteCobalah online!
Catatan untuk diri sendiri: Buat singkatan untuk
:sort
jadi saya tidak perlu 6 byte penuh untuk satu perintah!Penjelasan:
sumber
the
dalam semua huruf kecil, sepertithe pAper chAse
?Retina , 34 byte
Linefeed tambahan sangat penting.
I / O adalah satu band per baris.
Cobalah online!
Penjelasan
Gandakan setiap baris, menggunakan
;
sebagai pemisah.Putar semuanya di depan a
;
huruf kecil.Hapus apa saja
the
yang muncul di awal baris.Urutkan garis.
Hapus awal garis yang kami gunakan untuk menyortir.
sumber
(?i:the )?(.*)
/\L$1\E;$0
/Pyke, 16 byte
Coba di sini!
sumber
Perl, 52 byte
-13 byte terima kasih kepada @manatwork
-1 byte terima kasih ke @ msh210
Satu pita per baris sebagai input, dan demikian juga output.
Implementasinya cukup lurus ke depan: program mencetak daftar band, diurutkan dengan bantuan fungsi kustom (
f
) yang mengembalikan nama band huruf kecil tanpa akhirnya memimpinthe
.sumber
sub f{lc$_[0]=~s/^the //ir}
.lc
parameter dani
bendera sebagai pengganti. Atau pernahkah Anda bertemu dengan test case yang tidak berfungsi?perl -e 'sub f{lc$_[0]=~s/^the //ri}print sort{f($a)cmp f$b}<>' <<< $'Queen\nAerosmith\nSunny Day Real Estate\nThe Strokes'
.lc pop
bukannyalc$_[0]
, dansay
bukannyaprint
. (Yang terakhir membutuhkan-M5.01
, yang gratis.) Diuji dalam Strawberry 5.20.2 dengan hanya test case pertama dari pertanyaan.Python,
667269 byteGunakan
sorted
metode Python dengankey
argumen kata kunci untuk mengurutkan berdasarkan nama minus "The". Ini adalah lambda; untuk menyebutnya, beri nama dengan meletakkanf=
di depan.Sekarang dengan sensitivitas kasus ekstra!
sumber
the
, dalam hal ini metode ini tidak akan berfungsi dengan baik.Ruby, 42 byte
Cobalah online!
sumber
Perl 6 , 26 byte
Penjelasan:
Uji:
sumber
PowerShell v2 +,
333229 byteDisimpan 3 byte berkat @MathiasRJessen
Input melalui argumen baris perintah. Urutkan nama asli berdasarkan hasil dari blok skrip
{...}
yang melakukan regex-replace
untuk menghapus yang terkemuka (case-insensitive)"the "
.Contohnya
sumber
-replace
case-insensitive secara default,'^the '
sudah cukup untuk polanyaJavaScript / ECMAScript 6
9370 byte70 Terima kasih kepada Neil dan Downgoat untuk nasihatnya
Versi yang Dapat Dibaca untuk varian 70-byte
93
Versi yang Dapat Dibaca untuk varian 93-byte
sumber
^
di dalamnya? Juga, localeCompare tidak peka huruf besar-kecil pada sistem saya, jadi saya tidak perlutoLowerCase
, hanya sebuah/i
flag pada regexp. Akhirnya Anda dapat golf ini sebagai berikut:B=>B.sort((a,b)=>...,R=s=>...)
-sort
Mengabaikan parameter tambahan yang ditetapkanR
.^
shuold pergi di awal regexJava 8, 178 byte
Versi tidak disatukan:
Sebut seperti itu:
sumber
void q(String[]s){...}
kes->{...}
. Dan Anda dapat mengubah keduanya(x.toLowerCase().startsWith("the ")?x.substring(4):x)
denganx.replaceFirst("(?i)the ","")
. Jadi totalnya menjadi:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
- 118 bytes->{ ... }
tidak diizinkan dan saya harus memiliki tanda tangan metode lengkap dengan tipe dan yang lainnya. Saya tidak tahu apakah itu berubah sejak saat itu.Nim , 96 byte
Itu
import
mengambil banyak byte:|
Terjemahan dari jawaban Python saya .
Ini adalah prosedur anonim; untuk menggunakannya, itu harus dilewatkan ke dalam prosedur pengujian. Inilah program lengkap yang dapat Anda gunakan untuk pengujian:
sumber
Haskell, 84 byte
Telepon dengan
Kasus cobaan:
sumber
MATL , 16 byte
Format input adalah (setiap baris sesuai dengan kasus uji)
Cobalah online!
Penjelasan
sumber
C #, 139 Bytes
Coba online!
Tanpa menghitung usings, jawabannya adalah 102 byte.
sumber
ToLower()
karena persyaratan case-insensitivel=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));
Untuk 67 byte dan kemudian Anda perlu menambahkanusing System.Linq;
jugaToLower
karena persyaratan case-insensitive. Kalau tidak, pesanan akan peka huruf besar-kecil.BASH, 64 Bytes
Input: stdin, satu band per baris. Output: stdout
Catatan: Penggantian kedua (s / ^ The / / dan s / ^ / The /) menggunakan karakter tab, jadi mereka tidak selalu menyalin / menempel dengan benar.
sumber
Bash + coreutils, 44 byte
Penjelasan: format input dan output adalah satu pita per baris
Uji coba (menggunakan dokumen di sini dengan EOF sebagai penanda akhir):
Keluaran:
sumber
Vim, 18 byte
Nah sekarang saya menyadari ini mungkin, saya agak malu dengan jawaban 26 byte V saya, terutama karena V seharusnya lebih pendek dari vim. Tapi ini cukup builtin.
Penjelasan (langsung dari bantuan vim):
sumber
C,
216212135 + 5 (qsort
) =221217140 byteYah, aku akhirnya menyelesaikan ini
C
. Tips bermain golf sangat dihargai.Dalam pengajuan ini,
M
adalah fungsi perbandingan yang harus disediakanqsort
. Oleh karena itu, untuk mengaktifkan ini, Anda harus menggunakanqsort
dalam format diqsort(argv++,argc--,8,M)
manaargv
berisi argumen baris perintah danargc
jumlah argumen yang disediakan.Cobalah secara Online!
sumber
05AB1E, 27 bytes (non-competing)
Try it online!
Explanation
sumber
Groovy, 34 bytes
41% my answer is
.toLowerCase()
, kill me now.Output
When running...
The result is...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]
With no debug or error output.
sumber
q/kdb+,
3633 bytesSolution:
Example:
Explanation:
Strip out any "[Tt]he " from each input string, sort this list, then sort the original list based on the indexing of the sorted list.
sumber
Japt,
1110 bytesTry it
sumber
Java
176158 bytesMain Function
); }
Golfed sort function:
sumber
the
. The sort should be case insensitive.public String[]sort(String[]names){ for(int i=-1;++i<names.length;) names[i]=names[i].replaceFirst("(the|The)", ""); return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER); }
Since the and The should work, and strings a immutableArrays.sort
returns type voidthe pAper chAse