Berapa lama lagi?
Baru-baru ini, saya membuat pizza menggunakan penghitung waktu 5 menit di ponsel saya. Ketika seseorang masuk dan bertanya kepada saya berapa lama yang tersisa, pada awalnya saya bingung bagaimana menjawab pertanyaan itu. Anda tahu, jika penghitung waktu saat ini adalah jam 3:47, pada saat saya membacakan 'Tiga menit empat puluh tujuh detik' dengan keras, waktu akan berubah. Oleh karena itu, saya harus mencari waktu yang timer akan mencapai hanya karena saya selesai membaca itu.
Ini adalah tantangan Anda: untuk mengotomatisasi proses ini. Diberi waktu dalam format apa pun yang sesuai (":" dibatasi, atau sebagai argumen menit dan kedua), mengeluarkan waktu paling awal dari momen saat ini yang akan mengambil jumlah waktu yang sama untuk dibacakan karena waktu yang diperlukan pengatur waktu untuk mendapatkan untuk. Kami mengasumsikan bahwa setiap suku kata membutuhkan waktu 1 detik untuk membacanya.
Aturan lebih lanjut
- Anda harus menghitung 'menit' dan 'detik' sebagai dua suku kata masing-masing, serta 'dan' di antara mereka.
- Pizza tidak akan pernah membutuhkan lebih dari 59:59 untuk memasak.
- '11 menit dan 0 detik 'bukan 10 suku kata: Anda harus menyederhanakan menjadi '11 menit' (yaitu 5 suku kata). Sama halnya dengan menit: '0 menit dan 7 detik' juga hanya dihitung sebagai 4 suku kata.
- Program Anda dapat memberikan output dalam format apa pun: array
[minutes, seconds]
, atau bahkan sebagai<minutes> minutes and <seconds> seconds
(teks biasa dituliskan). - Celah standar berlaku.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Uji kasus
Semua input sebagai (minutes, seconds)
(4, 47) = (4, 38) (Four MiNutes And ThirTy Eight SeConds - 9 syllables/seconds)
(1, 1) = (0, 56) (FifTy-Six SeConds - 5 syllables/seconds)
(59, 57) = (59, 46) (FifTy Nine Minutes And Forty Six SeConds - 11 syllables/seconds)
(0, 10) = null/error/0 (no positive answer)
Referensi jumlah suku kata
Untuk referensi, berikut adalah jumlah suku kata di setiap nomor hingga 59.
0,0 (does not need to be counted)
1,1
2,1
3,1
4,1
5,1
6,1
7,2
8,1
9,1
10,1
11,3
12,1
13,2
14,2
15,2
16,2
17,3
18,2
19,2
20,2
21,3
22,3
23,3
24,3
25,3
26,3
27,4
28,3
29,3
30,2
31,3
32,3
33,3
34,3
35,3
36,3
37,4
38,3
39,3
40,2
41,3
42,3
43,3
44,3
45,3
46,3
47,4
48,3
49,3
50,2
51,3
52,3
53,3
54,3
55,3
56,3
57,4
58,3
59,3
sumber
Jawaban:
JavaScript (ES6),
112 106105 byteVersi yang lebih pendek berdasarkan saran dari @EmbodimentofIgnorance
6 byte lebih disimpan oleh @DaniilTutubalin
(minutes)(seconds)
[minutes, seconds]
Cobalah online!
JavaScript (ES6),
126119 byte(minutes)(seconds)
[minutes, seconds]
Cobalah online!
Berkomentar
sumber
30774612>>2*n%(n>12?20:26)&3
bagian saya bingung tentang.g=x=>x&&(x%10==7)+(x==11?6:x<13?4:x<21|x%10<1?5:6)
mungkin berfungsi (belum diuji sejak Internet sedang tidak aktif dan menggunakan telepon saya)g()
mengembalikan hasil yang berlawanan dan XOR'ing dengan~d
.Python 3 ,
287285 byteCobalah online!
Ini bukan solusi yang sangat pintar - itu sebagian besar striaghtforward. Mengambil
'm: s'm dan s sebagai input terpisah(tidak perlu diisi),dan output (m, s). Melempar kesalahan jika tidak ada output yang valid.Program ini sangat bergantung pada casting boolean secara implisit ke 0 dan 1. Baris pertama mengambil input. Baris kedua mendefinisikan fungsi lambda y yang memberikan suku kata dalam angka - ia mengasumsikan basis 3 suku kata, kemudian menambahkan 1 jika berakhir dengan 7, mengurangi 1 jika berakhir dengan 0, dan mengurangi 1 jika itu dalam 10 dan 2 jika dalam satu digit. Dua belas dan sebelas disesuaikan secara manual di akhir. Baris ketiga adalah lambda untuk suku kata dalam keseluruhan ekspresi. Akhirnya, baris keempat memberi waktu setelah t detik. Baris kelima adalah output - ini membangun array dari semua waktu yang memenuhi masalah, dan output yang pertama.
EDIT 1: Terima kasih kepada Matthew Anderson di komentar, 2 byte dicukur dengan mengambil input secara terpisah.
sumber
m=int(input()) s=int(input())
Anda dapat menyimpan 2 byte.C # (Visual C # Interactive Compiler) , 141 byte
Cobalah online!
sumber
Jelly , 46 byte
Cobalah online!
Tautan monadik mengambil sebagai argumennya waktu
[minutes, seconds]
dan mengembalikan waktu yang tepat untuk mengatakan sebagai[minutes, seconds]
atau[seconds]
jika kurang dari satu menit.sumber
CJam , 102 byte
Cobalah online!
Hanya mencari biner angka-sihir tua yang membosankan, tidak ada yang bisa dilihat di sini.
sumber