Saya punya tugas sederhana yang seharusnya relatif mudah diimplementasikan dengan menggunakan kode. Tujuan Anda adalah untuk menulis program yang akan menampilkan waktu yang ditulis dalam bahasa Spanyol, mengingat waktu dalam format HH: MM. Banyak orang mungkin tidak tahu bagaimana melakukan ini, jadi saya akan menguraikan.
Waktu dalam bahasa Spanyol cukup logis. Biasanya mengikuti pola "Es la / Son las (jam) y (menit)." Jam dalam format 12 jam, dan "Es la" hanya digunakan jika jamnya 1 (yaitu jam satu). Berita acara adalah cerita yang berbeda. Jika menitnya kurang dari 30, maka itu ditunjukkan seperti yang ditunjukkan di atas. Namun, jika menit lebih dari 30, maka jam dibulatkan dan menit dikurangi. Misalnya, 7:35 diterjemahkan ke dalam yang setara dengan "8 jam minus 25 menit." Beberapa contoh lagi akan diberikan di bawah ini. Daftar nomor Spanyol yang diperlukan dapat ditemukan di sini . Ada aksen pada beberapa angka, tetapi ini tidak perlu.
Catatan: Sumber mengatakan "uno," tetapi secara tata bahasa harus benar "una." Ini seharusnya tidak mempengaruhi jawaban apa pun sejauh ini.
Catatan 2: Juga, "cero" tidak perlu. Jika program Anda menampilkan "Es la una" atau "Son las tres," tidak masalah bagi saya. Maaf atas perubahan aturan ini.
Aturan
- Masukan akan diberikan melalui STDIN atau yang setara dalam bahasa Anda.
- Tidak ada bacaan dari perpustakaan luar.
- Kode Anda dapat melakukan apa saja dengan input yang tidak valid.
Bonus
- -10 jika kode Anda menambahkan frasa tambahan ini - "y cuarto" untuk: 15, "y media" untuk: 30, dan "menos cuarto" untuk: 45 (dibulatkan).
- -15 jika kode Anda dapat menangani AM dan PM, merespons dengan "de la mañana" dan "de la tarde," sesuai.
- -15 jika kode Anda dapat menerjemahkan waktu saat ini jika tidak ada input yang diberikan.
Mencetak gol
- Ini adalah tantangan kode-golf, dan itu akan dinilai dengan byte, bukan karakter.
Contohnya
Input: 8:10
Keluaran:Son las ocho y diez.
Input: 6:45
Keluaran:Son las siete menos quince (or cuarto).
Input: 1:29
Keluaran:Es la una y veintinueve.
Input: 12:55
Keluaran:Es la una menos cinco.
Beri tahu saya jika ada yang perlu ditentukan di sini. Ini adalah pertanyaan pertama saya, jadi pasti tidak sempurna.
Es la una y cero
cukup berulang, jadi saya mengerti maksud Anda. Saya tidak menentukan ini, jadi saya kira salah satu akan baik-baik saja. Terima kasih untuk umpan baliknya.01:21
sebagai test case, karena setidaknya satu penjawab bingung dengan apa yang Anda katakan tentang una vs uno .Jawaban:
JavaScript (ES6) 308
316Edit2 perbaikan bug Edit lupa mengklaim bonus
Sebagai program dengan I / O via popup
Sebagai fungsi yang dapat diuji
Uji di konsol FireFox / FireBug
Keluaran
sumber
Ya, bahasa yang paling tidak diharapkan untuk muncul di kontes golf, yang diberi kode oleh pegolf terburuk di dunia, kembali!
Java - 676 byte (716-10-15-15)
Golf:
Tidak Disatukan:
Berurusan dengan
quarto
danmedia
, dengan AM / PM dan tidak memiliki input. Jadi saya bisa mengklaim semua bonus, meskipun itu, jika saya tidak mengimplementasikan fitur-fitur itu, saya akan mendapat skor yang lebih rendah lagi, lol. facepalmssumber
Python 3: 294 karakter - 10 = 284
Ini mendapatkan bonus sepuluh poin untuk menggunakan "cuarto" dan "media"
Kami membaca jam dan menit sebagai
int
s. Jika menit di atas 30, kita beralih ke jam berikutnya, mengukur menit dari 60, dan mengubah kata sambung menjadi "menos".Daftar
d
memiliki terjemahan dari angka Spanyol hingga 15. Kami membuatd[0]
menjadi''
untuk mencegah hal-hal seperti "diecicero". Ini dilakukan dengan panggilan yang canggungsplit(' ')
dengan ruang awal; yang biasasplit
hanya akan mengabaikannya. Kasing nol menit ditangani kemudian.Untuk mendapatkan angka di atas 15, kami menggabungkan string puluhan digit dengan string satu digit yang sesuai.
15
dan30
ditulis sebagai "media" dan "cuarto" tanpa biaya.Python 3 menyimpan satu jaring arang di atas Python 2: -4 untuk
input
alih - alihraw_input
, +2 untuk parens di cetak, +1 untuk//
.sumber
una
keuno
, harus berfungsi sekarang.PHP,
351349360 - 15 = 345 BytesProgram ini bukan baris perintah: dibutuhkan input melalui $ _GET [0]. Anda mungkin harus menonaktifkan pemberitahuan di php.ini Anda. Sekarang hadir dengan waktu otomatis tanpa input, terima kasih kepada Niet the Dark Absol.
Trik yang digunakan:
~(...)
menghemat satu byte dengan bitwise membalikkan sebuah string, karena Anda tidak perlu tanda kutip karena PHP biasanya mengasumsikan semua ASCII dari 0x80 ke 0xFF adalah sebuah string.<?=preg_filter(...,...)
:<?=
adalah jalan pintas untuk menulis<? echo
.preg_filter()
biasanya menerapkan penggantian pada string menggunakan regex, tetapi kita dapat menggunakan modifier disusutkan / e untuk mengevaluasi string yang dihasilkan sebagai kode PHP. Oleh karena itu, alih-alih harus membagi string input menjadi dua variabel terpisah, kita dapat menggunakan referensi-kembali ($ 1 dan $ 2) pada string input yang cocok, menghemat sejumlah besar byte.sumber
$_GET[0]?:date(~·Å–)
untuk mengurangi 3 dari skor Anda.C ++:
474...422411 byteVersi ini menebus bonus media / media (-10).
Upaya pertama saya di golf kode! Akan mencoba memperbaikinya akhir pekan ini.
Tidak Disatukan:
sumber
m%=10
Lua, 450 - 10 (cuarto / media) - 15 (manana / tarde) = 425
H>=12
denganH<12
dan mengalihkan ekspresi dependen.table.concat
untuk operasi string, dan menambahkan saran @ edc65, akhirnya menambahkan 22 byte.function
tubuh keluar ke bongkahan utama mengurangi panjangnya dengan 15 byte kekalahan .sumber
Es la una y uno
D - 484 byte
sumber
Es la una y uno
Python 3, 409 byte
sumber
'string1 string2 string3'.split()
d[j]if i<31 else d[(j+1)%12]
menjadid[(j+(i>30))%12]
. Secara umum, jika dua alternatif Anda memiliki struktur yang sama, Anda sering dapat membuat ekspresi sederhana yang sama dengan masing-masing tergantung pada Boolean.Ruby, 313 (338 - 15 - 10)
Solusi ini menerjemahkan waktu saat ini ketika tidak ada input yang diberikan dan menambahkan tiga frasa "y cuarto", "y media" dan "menos cuarto".
sumber
Son las ocho y diecioch
Bash 423
(433 - 10 = 423, menghilangkan diakritik dan cuarto kita bisa turun ke 381)
sumber
Perl - 297 - 10 + 1 = 288 (menghitung
p
benderanya)Sunting: terima kasih kepada @guifa, sekarang saya dapat mengklaim bonus :)
Berikut adalah kode yang sama dalam beberapa baris untuk keterbacaan:
sumber
Es la una y uno
Scala 652 byte - 25
sumber
Pyth :
277a bunch lebih234 - 10 (cuarto / bonus media) = 224 byteSekarang dikurangi lebih dari 50 byte dari aslinya!
Sangat menginginkan Pyth, tapi itu karena ada beberapa data mentah. Mungkin bisa bermain golf lebih jauh. Menggunakan teknik pemisahan tugas yang jelas menjadi beberapa jam, y / meno, puluhan digit menit, dan satu digit menit dan kemudian menerjemahkan angka menggunakan array terjemahan dan yang lainnya menggunakan omong kosong terner.
Sejarah Golf
sumber
":"
dan"i"
, gunakan\:
dan\i
sebagai gantinya.