Tulis program atau fungsi yang mengambil string karakter di -=o.
mana karakter -=o
's dan .
' selalu berganti, menjadi karakter. String akan memiliki panjang ganjil lebih besar dari satu dan selalu mulai dan berakhir di salah satu -=o
.
Pada dasarnya, input akan terlihat seperti garis wajah emotikon yang berbagi mata di berbagai keadaan kantuk, misalnya
o.=.=.-.-.o.o
Tujuan Anda adalah mencetak atau mengembalikan wajah yang paling mengantuk atau paling terjaga (terserah Anda yang Anda pilih). Jika ada banyak pilihan untuk siapa yang paling mengantuk / paling terjaga maka salah satu dari mereka mungkin menjadi output.
Ada sembilan wajah berbeda dan lima tingkat mengantuk:
-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy
Dalam kasus itu tidak jelas, persentase kantuk dihitung dengan menetapkan 1
untuk -
untuk sepenuhnya tertidur, 0.5
untuk =
selama setengah tertidur, dan 0
untuk o
untuk terjaga. Maka jumlah dari dua nilai mata dibagi dua adalah persentase.
Kode terpendek dalam byte menang.
Uji Kasus
Tertidur
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-
Kebanyakan terjaga
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o
-.-
Jawaban:
Pyth,
1210 byteIni mencetak emotikon yang paling mengantuk. Verifikasi semua kasus uji sekaligus di Pyth Compiler .
Kredit diberikan ke @ Sp3000 untuk gagasan menggunakan penyortiran .
Bagaimana itu bekerja
sumber
hS%2.:z3
?=.-
lebih mengantuk daripada-.o
, tetapi mereka disortir dengan cara lain. Saya telah melakukan kesalahan yang sama.Python 2,
5453 byteIni adalah fungsi yang mengembalikan wajah yang paling terjaga.
Terima kasih banyak kepada xnor karena telah memberikan banyak trik taktis untuk mempersingkat algoritma asli saya.
sumber
max
mengulanginya daripada mengulanginya melalui:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, karena=.-
vs-.o
adalah pengecualian pada aturan sortir.,key=sorted
akan menjadi solusi, tapi ini 11 karakter jadi milik Anda mungkin lebih pendek.CJam, 12 byte
Ini mencetak emotikon yang paling mengantuk. Coba biola ini atau test suite ini dalam juru bahasa CJam.
Kredit diberikan ke @ Sp3000 untuk gagasan menggunakan penyortiran .
Bagaimana itu bekerja
sumber
Dyalog APL,
3528 byteIni adalah fungsi monadik yang mengambil string di sebelah kanan dan menampilkan wajah paling mengantuk.
sumber
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
juga tidak perlu.Prolog,
205189 byteKode
Penjelasan
Contoh
Sunting: Disimpan 16 byte dengan menyatukan r-klausa dengan OR.
sumber
Clojure, 82 byte
Bonus: fungsi kecil berikut mencetak wajah yang sama, tetapi dengan lebih banyak gaya!
Tes di sini.
sumber
Ruby, 59 byte
Fungsi mengembalikan wajah paling mengantuk, menggunakan trik penyortiran.
Disebut seperti ini:
Bekerja pada tatanan mata canggung karena jenis mata internal:
sumber
Minkolang 0,12 , 119 byte
Pada awalnya, saya mencoba melakukan ini pendek dan sangat golf. Saya menyerah dan pergi untuk sesuatu yang sedikit lebih "menyenangkan", tetapi masih relatif golf.
Coba di sini!
Penjelasan
Tapi sungguh, klik tautan di atas dan klik Slow! Bagaimanapun...
Ini melompati
fv
, yang akan menjadi penting nanti.Apa yang dilakukan adalah meletakkan di
^
sebelah wajah yang cocok. Jadi sekarang kotak kode mungkin terlihat seperti ini:Tanpa komentar, tentu saja. Sekarang,
40w
lubang cacing mengirim pointer instruksiv
, yang segera mengarahkannya kembaliF
. Sekarang,F
adalah perintah "gosub". Ini seperti goto, tetapi Anda dapat kembali ke tempat Anda menyebutnya. Pada saatF
ditemui, tumpukan adalah[3,1]
, sehingga melompat ke1
(mungkin) di baris kedua. Saat penghitung program mengarah ke bawah, program berlanjut, mendorong1
s ke tumpukan di sepanjang jalan. Yaitu ... sampai menyentuh^
, pada titik mana itu diarahkan kembali, di mana ia mendorong masing-masing1
lagi. Penunjuk instruksi kemudian mengenaif
, yang mengembalikan posisi dan arahnya (ketikaF
ditemui sebelumnya). Untuk kenyamanan, saya akan mengambil kode berikut dan mengubah tata letaknya. (Itu</\
berfungsi untuk mengarahkan pointer instruksi sesuai kebutuhan.)Saya sebenarnya agak bangga dengan bagaimana saya menggunakan beberapa fitur unik untuk Minkolang yang belum pernah saya gunakan sebelumnya. Terutama ternary dan gosub. Bagaimanapun, begitulah!
sumber
C, 70 byte
Fungsi mengembalikan wajah yang paling terjaga. Ini memodifikasi string input di tempat, sehingga mengembalikan string yang diakhiri null.
sumber
Python 2/3, 54
56byteHanya ingin mengambil taktik alternatif untuk jawaban rekursif xsot.
Ini mengambil tuple terbaik (atau terburuk?) Dari sepasang mata yang berdekatan dan menggabungkannya.
Ganti maks dengan min untuk mengembalikan paling mengantuk (seperti ini mengembalikan paling terjaga)
Tampaknya bekerja, menggunakan tes berikut:
Yang memberikan hasil sebagai berikut:
sumber
f=
bagian diperlukan sebagai bagian dari ukuran kode untuk tantangan ini? Jika saya tidak melakukan itu akan membuat lambda dan kemudian segera membuangnya lagi ...f=
kemudian konsensus saat ini tampaknya bahwa fungsi anonim baik-baik saja secara default, sehingga Anda bisa dropf=
dalam kasus ini ( xsot membutuhkannya karena ini bersifat rekursif)Brachylog , 10 byte
Cobalah online!
Diterjemahkan dari jawaban Pyth Dennis.
sumber
Mathematica, 61 byte
Cocok untuk yang paling mengantuk.
sumber
%
yang diandalkannya.F # 60
Pengembalian paling wajah terjaga (perubahan
max
olehmin
karena yang tidur itu)sumber
Perl 5, 127 byte
(Saya yakin ini bisa dilakukan lebih singkat.) Cara kerjanya:
--pos
dilakukannya).sumber
ES6,
8172 byteMungkin membutuhkan Chrome 45 atau Firefox 41.
Terima kasih kepada @ETHproductions untuk menghemat 9 byte
sumber
"=.-"
harus diganti dengan"-.o"
; sama dengan"=.o"
dan"o.-"
. Anda juga dapat menyimpan beberapa byte dengan meletakkan semuanya dalam satu string, dipisahkan dengan koma, dan menggunakan.split`,`
.> <> , 55 byte
coba di sini!
Output wajah paling terjaga.
Karena nilai ASCII untuk -, =, dan o masing-masing meningkat, saya dapat menggunakannya untuk keuntungan saya. Pada dasarnya ia menambahkan nilai-nilai dari bagian mata saat ini dan sebelumnya, memeriksa apakah itu nilai yang lebih tinggi dari sebelumnya, jika itu menyimpan nilai baru dan memperbarui apa yang diwakilinya, kemudian loop sampai akhir input. Lalu output wajah yang tersisa. (Saya sangat senang melihat betapa bagusnya semua kode di tempatnya)
sumber
Perl 5
-MList::Util=max -p
, 68 byteCobalah online!
Raih masing-masing set tiga karakter, abaikan
.
di tengah, petakan penambahan dua lainnya ke integer di kisaran 0-4, gabungkan bahwa ke depan wajah emotikon, lalu urutkan berdasarkan itu. Raih entri terakhir (paling terjaga), hapus nomor dari depan, dan keluarkan.sumber