Saya sangat suka saat-saat yang mengikuti pola tertentu. Khususnya, saya suka saat-saat di mana semua digitnya sama, atau semua angka bertambah secara hitung satu dari kiri ke kanan. Lebih jauh lagi, saya sangat benci ketika orang-orang menaruh surat di zaman saya, jadi semua omong kosong AM / PM itu mati bagi saya. Jadi, waktu favorit saya adalah:
0000 0123 1111 1234 2222 2345
Untuk ketenangan pikiran saya, saya ingin Anda menulis saya satu program yang, mengingat waktu saat ini sebagai masukan, keduanya: (A) jika sekarang bukan salah satu waktu favorit saya, ceritakan pada saya (i) berapa menit sudah sejak waktu favorit terakhir saya serta (ii) berapa menit dari sekarang waktu favorit saya berikutnya akan terjadi; dan (B) jika adalah sekarang salah satu kali favorit saya, memasok 'nilai sinyal' tunggal.
Memasukkan
Program Anda harus menerima (dengan metode apa pun: argumen fungsi,, stdin
argumen baris perintah, dll.) Waktu saat ini, dalam salah satu format berikut:
Waktu empat digit sebagai string
Bilangan bulat yang dapat diisi nol di sebelah kiri untuk membuat waktu empat digit sebagai string
Urutan empat (atau lebih sedikit) bilangan bulat, diurutkan sedemikian rupa sehingga bilangan bulat pertama dalam urutan adalah digit paling kiri (signifikan) dalam input waktu (misalnya,
0951
dapat secara sah direpresentasikan sebagai[0, 9, 5, 1]
atau[9, 5, 1]
)- Mewakili
0000
sebagai urutan panjang nol dapat diterima
- Mewakili
Dalam hal input string, input hanya berisi digit, tanpa titik dua, atau tanda baca lainnya. Input dapat diasumsikan selalu valid 24 jam:, di HHMM
mana 0 <= HH <= 23
dan0 <= MM <= 59
. Abaikan kemungkinan lompatan kedua.
Keluaran
Program Anda harus menyediakan (pengembalian fungsi stdout
, dll. Semuanya baik-baik saja) baik (A) atau (B) , yang sesuai dengan apakah nilai input adalah waktu target atau tidak.
Untuk sebuah):
Berikan dua nilai numerik dalam format apa pun yang masuk akal, seperti:
Output string tunggal dengan pembatas yang sesuai
Output integer / string berurutan, misalnya,
bash
mencetak dua baris kestdout
:49 34
Panjang-dua nilai pengembalian yang diurutkan, seperti daftar Python, array C, dll .:
[49, 34]
Nilai bisa datang dalam urutan apa pun. Misalnya, kedua hal berikut ini akan menjadi output yang valid untuk input 1200
:
49 34
34 49
Namun, urutan dan pemisah harus sama untuk semua nilai input!
Untuk (B):
Menghasilkan hasil yang tidak dapat dicapai. Namun, hasil yang sama harus dihasilkan untuk keenam target waktu. Loop tak terbatas dikecualikan.
Input / Output Sampel
YAY!!!
digunakan di sini sebagai contoh demonstratif dan tidak bersifat preskriptif.
Input Output
------ --------
0000 YAY!!!
0020 20 63
0105 65 18
0122 82 1
0123 YAY!!!
0124 1 587
0852 449 139
1111 YAY!!!
1113 2 81
1200 49 34
1234 YAY!!!
1357 83 505
1759 325 263
1800 326 262
1801 327 261
2222 YAY!!!
2244 22 61
2345 YAY!!!
2351 6 9
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Celah standar tidak diijinkan.
Jawaban:
Jelly ,
3433323128 byte3 byte terima kasih kepada Tn. Xcoder
.ị
dan³
triknya.Cobalah online!
Beberapa bagian persis seperti dalam jawaban Jonathan Allan , tapi saya mempostingnya karena saya pikir itu cukup berbeda dari itu dan ditulis secara independen berdasarkan jawaban Pyth saya (dan lebih pendek: D). Seharusnya juga ada ruang untuk perbaikan.
Input adalah bilangan bulat, output adalah array dari waktu sebelumnya dan berikutnya atau array kosong untuk waktu khusus.
Penjelasan
Menggunakan input contoh
1200
.d³
mengonversi waktu ke basis 100, menjadi jam dan menit:[12,0]
.ḅ60
mengkonversi dari basis 60 untuk mendapatkan total menit:720
.;15
pasangkan dengan 15:[720, 15]
.83,588
menciptakan array[83, 588]
.ṁ5
membuat panjang 5:[83, 588, 83, 588, 83]
.¤
menggabungkan dua tindakan di atas. Hanya masalah teknis.j
bergabung pasangan dengan array:[720, 83, 588, 83, 588, 83, 15]
._\
mengurangi setiap nilai array dari pertama dan mendapat hasil antara:[720, 637, 49, -34, -622, -705, -720]
.ṠÞ
stabil macam ini dengan signum:[-34, -622, -705, -720, 720, 637, 49]
.A
mengambil nilai absolut:[34, 622, 705, 720, 720, 637, 49]
.µ
memulai rantai monadik baru. Sekali lagi, masalah teknis..ị
mengambil item terakhir dan pertama:[49, 34]
.×Ạ
mengulangi bahwa sekali jika tidak ada nol, atau nol kali sebaliknya:[49, 34]
.sumber
,
menjadi;
karena diambil sebagai daftar literal).³
bukan100
yang diperbolehkan ) TheYAY!!!
nilainya[0, 0]
, selalu sama.xẠ
sebagai filter nol karena saya[]
lebih suka[0, 0]
karena lebih jelas berbeda.JavaScript (ES6),
8783 byteDisimpan 4 byte berkat @ l4m2
Mengambil input sebagai string. Mengembalikan
0
array 2 atau elemen.Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Kami tidak peduli dengan hasil
.every()
loop. Asalkan input tersebut valid, itu akan selalu palsu. Yang benar-benar kami minati adalah kapan kami keluar dari loop ini.Kami keluar segera setelah kami menemukan waktu favorit
i
(dinyatakan dalam menit) yang lebih besar dari atau sama dengan waktu referensik
(waktu inputt
dikonversi dalam menit). Kami kemudian kembali0
jikai == k
atau 2 penundaan sebaliknya.sumber
t%100+(t/25>>2)*60
=>t-(t/100|0)*40
Befunge-93,
8885868074 byteCobalah online!
Menghasilkan jumlah menit sejak waktu favorit terakhir, diikuti oleh jumlah menit hingga waktu favorit berikutnya (dipisahkan oleh dua urutan karakter: spasi, tanda hubung). Jika ini sudah menjadi waktu favorit, maka satu nol dikembalikan.
sumber
C, 121 byte
Output baris baru jika waktu adalah waktu favorit.
Cobalah online!
sumber
Bersih , 126 byte
Menentukan fungsi
?
, mengambilInt
dan mengembalikan(Int, Int)
.Ketika argumennya adalah waktu favorit, ia membuat crash program panggilan
hd of []
.Cobalah online!
sumber
Pyth,
484542 byteCobalah online. Suite uji.
Kode mengambil string waktu dan menampilkan waktu sebelumnya dan berikutnya sebagai array, atau
0
jika waktu khusus.Menariknya, pendekatan imperatif juga 42 byte:
Penjelasan
cz2
membagi input (z
) menjadi dua karakter.sM
mengevaluasinya sebagai bilangan bulat.i
...60
mem-parsing array dua item yang dihasilkan sebagai basis 60.,83 588
mewakili array[83, 588]
.*3
rangkap tiga untuk[83, 588, 83, 588, 83, 588]
.P
menghapus yang terakhir588
.+
...15
menambah15
akhir..u-NY
mulai dari angka yang diuraikan, kurangi setiap angka dalam array darinya dan kembalikan nilai-nilai perantara. Inilah perbedaan dari setiap waktu khusus.J
menugaskan perbedaan ini untukJ
.*F
menghitung produk dari perbedaan. Ini akan menjadi 0 jika waktunya khusus.&
hentikan evaluasi di sini dan kembalikan 0 jika waktunya khusus.._DJ
stable-macam perbedaan dengan tanda.K
menghemat bahwa array diK
.e
mengambil item terakhir dalam array._hK
mengambil item pertama dalam array dan meniadakannya.,
mengembalikan keduanya sebagai sebuah array.sumber
cz2 60
kec2z60
(mereka setara dengan daftar 4-elemen)Jelly ,
33 3234 byte+3+2 byte untuk diperbaiki sehingga semua output waktu yang disukai sama.Pasti jalan yang lebih pendek!
Tautan monadik yang mengambil daftar empat digit dan mengembalikan daftar yang berisi dua bilangan bulat
- jika ini adalah waktu yang disukai, hasil kedua entri akan menjadi nol.
Cobalah online! atau lihat test-suite .
Bagaimana?
sumber
Sekam , 36 byte
Cobalah online!
Terima kasih kepada Zgarb karena menjelaskan kepadaku cara kerja terner dalam obrolan. Mencoba bermain golf
↑0
, tetapi saya tidak membuatnya bekerja jika tidak karena beberapa alasan (?). Ini adalah jawaban Husk non-sepele pertama saya, dan mengesampingkan yang disebutkan di atas, saya cukup puas dengan itu. Nilai yang digunakan bukannyaYAY!!!
adalah[]
(tapi saya harap itu akan berubah untuk tujuan bermain golf).Penjelasan
sumber
Kotlin , 293 byte
Yg diperindahkan
Uji
TIO
TryItOnline
sumber