Tugas Anda adalah mengurutkan array yang berisi string "quarter", "dime", "nickel", dan "sen" berapa kali tanpa urutan tertentu dan mengurutkannya sehingga mereka berada dalam urutan ini: quarter dime nickel penny
(dengan kata lain, terbesar ke nilai moneter paling kecil).
Aturan
- Program Anda harus mengambil array sebagai input yang berisi nama-nama koin AS dan mengurutkannya dari yang terbesar hingga yang paling kecil berdasarkan nilai moneter.
- Bagi mereka yang bukan dari AS atau tidak menggunakan perubahan, nilai-nilai koin AS, dari yang terbesar hingga yang terkecil, adalah:
- Kuartal: 25 sen
- Dime: 10 sen
- Nikel: 5 sen
- Penny: 1 sen
- Bagi mereka yang bukan dari AS atau tidak menggunakan perubahan, nilai-nilai koin AS, dari yang terbesar hingga yang terkecil, adalah:
- Anda dapat mengurutkan array ini dengan cara apa pun yang Anda inginkan, selama output diurutkan berdasarkan nilai moneter yang ditunjukkan di atas.
- Input dapat diambil dengan cara apa pun, baik itu argumen baris perintah atau STDIN.
- Array input adalah semua string huruf kecil, seperti ini:
quarter dime nickel nickel quarter dime penny penny
- Format input dan output yang sebenarnya terserah Anda.
Uji Kasus
"penny nickel dime quarter"
-> "quarter dime nickel penny"
"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"
"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"
Ini adalah kode-golf , jadi aturan & celah standar berlaku.
code-golf
string
array-manipulation
sorting
ckjbgames
sumber
sumber
Jawaban:
Japt ,
53 byteUji secara online!
Penjelasan
Saya juga telah menambahkan fungsi penyortiran ke bahasa saya dalam beberapa minggu terakhir :-)
ñ
mengambil array dan fungsi dan mengurutkan array seolah-olah setiap item telah dipetakan melalui fungsi itu.The
g
fungsi pada string mengambil di sejumlahn
dan kembali dengann
arang th dalam string, pembungkus jikan
negatif atau melewati akhir string. String dengan demikian dapat disejajarkan sebagai berikut:Karakter ke-9 (0-diindeks) dari setiap string telah disorot dalam huruf tebal. Ini dalam urutan yang benar, jadi yang harus kita lakukan adalah
ñg9
. (Meskipun sekarang aku melihatnya kembali,ñg5
akan bekerja juga ...)sumber
V , 7 byte
Cobalah online!
Ini menggunakan perintah sortir spiffy baru yang saya tambahkan ke V sekitar seminggu yang lalu (
ú
). Waktu yang manis!Cara kerjanya adalah dengan menyortir setiap baris dengan penyortiran default (nilai ASCII) tetapi mengabaikan kecocokan pertama dari regex tertentu. Dalam hal ini, regex adalah
(qu)?
, meskipun memiliki beberapa hal non-ASCII kotor untuk menghindari penggunaan backslash. Jika Anda mengabaikan dua huruf pertama dari "quarter", itu dimulai dengan 'a', dan kemudian semua koin sudah dalam urutan abjad.Versi yang tidak bersaing, 4 byte
Fitur ini sudah diterapkan, tetapi saya belum mengujinya secara luas sehingga memiliki bug yang saya sadari hanya karena tantangan ini. Tidak ada tautan TIO karena TIO sedikit ketinggalan.
Ini berfungsi dengan membalikkan menyortir setiap baris tetapi mengabaikan karakter pertama pada setiap baris.
sumber
Python, 36 byte
Fungsi tanpa nama yang mengurutkan daftar di tempat oleh fungsi kunci yang diberikan.
Irisan setiap nama koin kemudian,
arter
,dime
,ickel
, danpenny
- yang dalam abjad (atau lebih penting, ordinal) order.sumber
el
yang salah di sekitar saya merindukanc
: pBash + coreutils, 18
Cobalah online .
sumber
Python 3 ,
424138 byteFungsi lambda tanpa nama yang mengambil input sebagai daftar string, diurutkan di tempat.
(Outgolfed oleh Jonathan Allan)
Cobalah online!
Solusi lain yang saya mainkan:
sumber
PowerShell , 21 byte
Cobalah online!
Penjelasan
Tanpa malu-malu mencuri algoritma dalam jawaban ETHproductions (pada dasarnya). Saya mengalikan setiap string dengan 3, lalu mengurutkan berdasarkan karakter ke-9 dari string yang dihasilkan.
sumber
$_
di PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
akan menampilkan setiap angka 2 kali; blok skrip dijalankan sekali per item input.Jelly , 4 byte
Cobalah online! (footer,,
ÇY
bergabung dengan daftar yang dihasilkan dengan umpan garis untuk hasil cetakan yang lebih bagus.)Bagaimana?
Indeks Nth dari daftar di Jelly adalah item N mulai dari kiri, dihitung dari 1, dan kembali ke awal ketika diperlukan. (Angka 0 di sebelah kanan, yang ke-1 di sebelah kiri dan seterusnya juga).
Jadi karakter keenam
['d','i','m','e']
adalah'i'
karena enam kongruen dengan dua modulo empat.Karakter keenam dari empat koin secara berurutan adalah quart
e
r, di
me, nickel
, ennyp
. Ini dalam urutan abjad (atau lebih penting, ordinal).Cara lain untuk mencapai hal yang sama akan urutkan berdasarkan string diputar dengan
ṙ5µÞ
, di manaṙ
berputar ke kanan, membuat stringerquart
,imed
,lnicke
, danpenny
.sumber
Python , 32 byte
Cobalah online! Urutkan daftar di tempat.
Idenya adalah menggunakan fungsi kunci penyortiran tanpa a
lambda
. Calon yang baik adalahx.strip
, yang mengambil stringx
dan menghilangkan sisi kiri dan kanan semua karakter dalam input. Sebagai contoh"abcdef".strip("faces") == "bcd"
,.Metode ini
"npr".strip
mengambil:yang diurutkan secara leksikografis. Saya menemukan string
npr
dengan kekerasan.npu
dannpt
juga bekerja, dan tidak ada yang lebih pendek.sumber
Bash (+ coreutils) 11 byte
Golf
Bagaimana itu bekerja
Urutkan terbalik, dengan "tombol sortir" dari karakter kedua dari bidang pertama (kata) hingga akhir baris, yaitu:
Uji
Cobalah secara Online!
sumber
CJam , 8 byte
Cobalah online!
Penjelasan
sumber
Pyke,
975 byteCoba di sini!
sumber
Retina, 10
610 byte disimpan berkat @ETHproductionsq
keb
b
kembali keq
Cobalah online .
sumber
V ,
87 byte1 byte disimpan berkat @DJMcMayhem
[Coba online!]
Lihat jawaban @ DJMcMayhem dalam V (
10 byte lebih pendek dari milik saya)Cobalah online!
Berikut adalah solusi yang lebih tua pada 1 byte lebih besar, tetapi saya sangat menyukainya.
V , 8 byte
[Coba online!]
Cobalah online!
Penjelasan
Sekarang buffer akan berada dalam format ini:
Satu-satunya yang tersisa untuk dilakukan sekarang adalah memindahkan perempat ke atas.
sumber
:m0
solusi alternatif Anda untuk menghemat satu byte (dan mengikat saya)Úçq/:m0
:move
Japt , 3 byte
Cobalah online!
Beberapa solusi 3-byte lainnya:
Cobalah online!
Cobalah secara online!
sumber
T-SQL,
413634 bytePenjelasan
Asumsikan input telah dimuat sebelumnya dalam variabel tabel bernama
@
, dengan satu kolom bernamaa
, di mana setiap nilai adalah satu koin yang akan diurutkan.The
select * from @
Bagian adalah boiler-plate 'mendapatkan semua nilai untuk kembali'. Sihir yang nyata terjadi diorder by
klausa.Menggunakan strategi yang sama seperti Johnathan Allan , saya urutkan berdasarkan lima karakter terakhir (SQL akan mengembalikan seluruh string kalau terlalu pendek):
arter
,dime
,ickel
,penny
.sumber
q
adalah huruf berikutnya setelah itup
, jadi untuk mod sederhana untuk menghasilkanq
kurang darip
nilai perlu menjadi faktorq
, yang prima. Anda dapat mengurangi 1 terlebih dahulu dan kemudian modulus 7 akan bekerja, tetapi itu mungkin akan memakan waktu setidaknya sebanyak byte sebanyak 113.JavaScript (ES6),
3533 byteUji kasus
Tampilkan cuplikan kode
sumber
Befunge, 158 byte
Cobalah online!
Pemrosesan string dan pemilahan bukan jenis hal yang biasanya ingin Anda coba di Befunge, tetapi solusi ini mengambil keuntungan dari pengamatan John Kasunich bahwa kita sebenarnya tidak perlu memilah apa pun. Kami hanya menghitung jumlah kemunculan dari setiap koin (yang dapat dengan mudah ditentukan dari karakter pertama), dan kemudian menampilkan banyak dari setiap nama koin dalam urutan yang sesuai.
Sama sekali tidak bersaing dengan bahasa lain dalam hal ukuran, tetapi pendekatan ini setidaknya lebih baik daripada jika kita mencoba menangani tantangan sebagai latihan menyortir string.
sumber
Pyth, 3 byte
Demonstrasi
Berdasarkan ETHproductions jawaban 's di Japt.
Penjelasan:
sumber
APL (Dyalog APL) , 11 byte
Mengambil dan mengembalikan daftar string.
Cobalah online!
{
fungsi anonim:⍵[
...]
argumen diindeks oleh⍋
indeks naik dari↑
matriks yang barisnya adalah bantalan5⌽
diputar lima langkah¨⍵
item dari argumen}
sumber
Brachylog , 3 byte
Cobalah online!
Pendekatan dicuri dari jawaban Japt produk ETH.
sumber
Sekam , 3 byte
Cobalah online!
Diporting dari jawaban Brachylog saya, yang merobek jawaban Japt ETHproductions tetapi bukan terjemahan yang tepat karena menggunakan rotasi alih-alih sederhana mengakses elemen-n. Di sana, saya melakukannya karena
∋
tidak membiarkan Anda mengindeks melewati akhir input (yang mungkin cukup membantu dalam banyak keadaan karena sifat deklaratif bahasa). Dalam Husk,!
tidak membiarkan Anda indeks melewati ujung input, dengan membungkus di sekitar modular yang sama bahwa Japtñg9
menggunakan, tapi itu dari 1 sehingga program ini khususnya akan berakhir menjadi satu byte lagi:Ö!10
.sumber
Batch, 82 byte
Membawa input sebagai argumen baris perintah dan output ke STDOUT. Berfungsi dengan menggabungkan daftar yang dihasilkan dari penyaringan daftar asli pada setiap koin.
sumber
Ruby, 34 byte
input dan output sebagai array string
sumber
Ruby, 31 byte
sumber
Ruby, 30 byte
Angka ajaib ditemukan dengan coba-coba. Agak canggung, tetapi lebih pendek daripada menggunakan
.reverse
.sumber
Perl 6 ,
40 3634 byteCobalah
Cobalah
Cobalah
Diperluas:
sumber
Mathematica, 50 byte
sumber
RProgN , 18 byte
Dijelaskan
Cobalah online!
sumber
java 8,
128112 byteIni adalah ungkapan lambda untuk a
java.util.function.Function<String[],String[]>
Penjelasan: Untuk masing-masing dari 4 koin secara berurutan, periksalah input dan tambahkan nama koin ke hasil setiap kali ada kecocokan untuk karakter unik koin itu. Bagi hasil menjadi sebuah array dan kembalikan.
sumber
Ruby, 27 byte
sumber