Diberikan daftar dua atau lebih nomor seri yang dieja dengan panjang yang sama lebih besar dari dua, misalnya
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
urutkan daftar dengan angka-angka yang diwakili kata-kata:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Anda mungkin perlu angka dieja dalam huruf kecil atau huruf besar, tetapi tidak bercampur.
Uji kasus
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
memberi[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
memberi[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
memberi[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
memberi[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Jawaban:
Sekam ,
98 byteCobalah online!
Algoritma "diilhami" oleh jawaban Stax rekursif (saya baru saja mengubah string pencarian sedikit), pergilah angkat dia!
Caranya adalah memetakan setiap huruf ke posisinya dalam string
tfsen
(dikompresi di akhir program ini). Daftar sekam berbasis 1, dan item yang hilang menghasilkan 0, jadi kami mendapatkan pemetaan ini:Seperti yang Anda lihat, daftar tersebut tertata dengan sempurna.
Agar lebih jelas, inilah cara perbandingan daftar bekerja di Husk (dan dalam banyak bahasa lain):
sumber
tfrsen
tapi saya kira memiliki kata-kata sepertiwith
dansen
di sana membantu kompresi[1,0,0]
dianggap lebih kecil dari[1,0,0,0]
(tetapi untuk program ini tidak akan ada bedanya)Stax ,
2422171614 byteJalankan dan debug itu
Program ini mengambil array angka dieja huruf kecil untuk input. Output dipisahkan oleh baris seperti itu.
Program ini mengurutkan input menggunakan urutan yang diperoleh di bawah transformasi tertentu. Setiap karakter di setiap kata digantikan oleh indeksnya dalam string
"wo thif sen"
. Array asli diurutkan berdasarkan urutan ini. Kemudian hasilnya dicetak setelah bergabung dengan spasi.Spasi tidak memiliki tujuan, tetapi sebenarnya memungkinkan kompresi yang lebih besar dalam string literal.
sumber
Jelly , 12 byte
Tautan monadik.
Cobalah online! ... atau lihat test-suite
Bagaimana?
Mengkonversi digit ke ordinals dan kemudian dari base 10 kemudian mengambil modulos pada 4752 lalu 147 memberikan urutan naik:
Ini kemudian dapat digunakan sebagai fungsi utama untuk mengurutkan:
sumber
Python , 62 byte
Cobalah online! ... atau lihat test-suite
catatan:
yang bekerja di Python 2 (tetapi bukan 3) lebih panjang dua byte.
sumber
APL (Dyalog Classic) , 12 byte
Cobalah online!
Ini adalah bagaimana saya menemukan argumen kiri yang cocok untuk diad
⍒
(saya mencoba⍋
dan panjang 6 pertama):sumber
Perl 6 , 37 byte
Cobalah
Diperluas:
Blok kode akan mengambil nilai formulir
("three","one","four")
dan menerjemahkannya ke("3","1","4")
nilai yang.sort
dapat digunakan dengan mudah.sumber
APL (Dyalog) , 38 byte
Cobalah online!
Berdasarkan solusi hebat Jonathan Allan .
sumber
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
tetapi Anda dapat melakukan ini lebih sederhana dalam waktu kurang dari setengah dari jumlah byte Anda saat ini.Ruby, 48 byte
Menyalahgunakan fakta yaitu
"zero".to_i(35)
0 (karena 'z' bukan angka yang valid pada basis 35), jadi jauh lebih mudah untuk memaksa paksa rumus untuk sembilan digit lainnya.sumber
K (ngn / k) , 14 byte
Cobalah online!
sumber
JavaScript (Node.js) , 70 byte
Cobalah online!
sumber
Ruby , 47 byte
Cobalah online!
Memanfaatkan fakta bahwa menggunakan basis kurang dari digit maksimum menghasilkan hasil nol (seperti yang ditunjukkan oleh histokrat dalam jawaban mereka )
sumber
Python 2 ,
858180 byteCukup gunakan dua huruf pertama dari setiap kata untuk menentukan angka, kemudian mengurutkan setiap daftar menggunakan fungsi pengindeksan sebagai kunci.
Cobalah online!
Disimpan 4 byte, terima kasih kepada Jonathan Allan
sumber
Ruby , 49 byte
Cobalah online!
sumber
05AB1E , 27 byte
Cobalah online!
sumber
Haskell ,
133122109107106 byteTidak Disatukan:
sumber
Python 2 , 59 byte
Cobalah online!
Mengganti solusi Python 3 Jonathan Allan ...
sumber
Java (JDK 10) , 132 byte
Cobalah online!
sumber
Ruby , 64 byte
Cobalah online!
Sebuah lambda menerima array string 2D dan mengembalikan array string 2D.
Piggybacking off dari mbomb007's Python 2 jawaban untuk -26 byte dari apa yang akan saya posting.
sumber
Perl 5 , 103 byte
Cobalah online!
sumber
Retina 0.8.2 , 38 byte
Cobalah online! Tautan termasuk test suite. Bekerja dengan mengganti sementara surat-surat
zowithfsen
dengan posisi mereka di string itu, yang memungkinkan angka untuk diurutkan secara leksikal.sumber
Jelly ,
302827 byteCobalah online!
-1 terima kasih kepada Jonathan Allan.
Menemukan indeks setiap digit dalam string 'onetwo ... sembilan' lalu mengurutkan menggunakan ini sebagai fungsi kunci
Þ
. Tidak perlu memasukkan'zero'
di awal karena pencarian untuk dua karakter pertama'zero'
akan gagal dan0
akan dikembalikan sebagai ganti indeks, membuat'zero'
leksikografis "awal".sumber
'zeontw...ni'
akhirnya menjadi lebih lama.Python 3, 141 byte
Cobalah online!
sumber
C (dentang) , 229 byte
Cobalah online!
Tidak ada cara mudah untuk mengirim berbagai array string ke fungsi C, jadi dalam semangat kode-golf, saya telah mengambil kebebasan kecil dalam format input.
f()
menerima deretan pointer ke string, di mana setiap string adalah angka, diwakili oleh digit yang dipisahkan dengan angka koma dalam huruf kecil. Selain itu, perlu jumlah string dalam array di parameter kedua. Saya harap ini bisa diterima.f()
mengganti pointer di tempat dalam urutan yang diurutkan menggunakanqsort()
.r()
membaca nomor input dari string angka yang dipisah koma. Ini hanya membandingkan dua karakter pertama untuk mengidentifikasi angka.c()
adalah fungsi perbandingansumber
strstr("i"-19,t)-"zeontwthfofisiseeini"
? Apakah ini khusus untuk kompiler atau standar?.rodata
yang terlihat seperti0x69 0x00
dan kompiler menempatkan alamat"i"
di akhir"zeo..."