Saya memiliki jam alarm tua yang bodoh dengan dua tombol: hourdan minute. The hourtombol increment jam alarm set, dan minutekenaikan waktu menit alarm set. Namun, beberapa perancang pintar menyadari bahwa menekan kedua tombol pada saat yang sama harus memiliki makna, dan memutuskan bahwa menekan hourdan minutesecara bersamaan akan menyebabkan alarm diatur ke 12:00 am
/ 0:00
. Tugas Anda adalah untuk mensimulasikan perilaku ini.
Tugas
Diberikan waktu mulai dan urutan status tombol, cari tahu waktu akhir.
Mulai dari waktu mulai, naikkan jam untuk setiap kemunculan (1,0)
, tambah menit untuk setiap kemunculan (0,1)
, dan atur waktu untuk 0:00
untuk setiap kemunculan (1,1)
. Status (0,0)
harus diabaikan karena tidak sesuai dengan tombol yang ditekan.
Ketika menambahkan ke menit dan jam, jika menit / jam berjalan di atas maksimum, atur ke 0
, yaitu, penambahan nilai menit 59
harus mengatur nilai menit ke 0
dan kenaikan nilai jam 23
harus mengatur nilai jam 0
. Menambah nilai menit / jam di atas batasnya tidak memengaruhi nilai lainnya, misalnya menambah menit 10:59
hasil 10:00
, bukan 11:00
.
Contoh
Mengingat waktu 13:58
dan langkah input [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
. Ini sesuai dengan minutepenekanan. Waktunya sekarang13:59
.(0,1)
. Ini sesuai dengan minutepenekanan. Waktunya sekarang13:00
.(0,1)
. Ini sesuai dengan minutepenekanan. Waktunya sekarang13:01
.(0,0)
. Ini sesuai dengan tidak ada tombol yang ditekan. Waktu, tidak terpengaruh, sekarang13:01
(1,1)
. Ini sesuai dengan kedua tombol yang sedang ditekan. Waktunya sekarang0:00
.(1,0)
Ini sesuai dengan hourpenekanan. Waktunya sekarang1:00
.
Karena kita berakhir dengan 1:00
, itu adalah output.
I / O
Input akan terdiri dari waktu dan urutan status tombol. Outputnya adalah satu kali.
Waktu input dan waktu output mungkin
- 2-tupel
(hour, minute)
atau(minute, hour)
dalam24
-jam waktu seperti(13, 30)
(hour
berkisar dari0
ke23
danminute
berkisar dari0
ke59
) - sama seperti sebelumnya tetapi dalam
12
waktu -hour dan Booleanam
/pm
switch (hour
berkisar dari0
ke11
atau12
dan1
untuk11
denganminute
dari0
ke59
). - beberapa menit sejak
0:00
seperti 810 (dari 0 hingga 1439, inklusif) - format lain yang menyandikan informasi yang sama
Urutan status tombol adalah representasi dari daftar Boolean 2-tupel, misalnya:
- daftar tuple:
[(0,1),(1,0),(0,0),(1,1)]
- string yang dibatasi ruang:
"01 10 00 11"
- Sebuah benang:
"01100011"
- di Kuarter:
[1,2,0,3]
- dikonversi menjadi integer:
99
- format lain yang menyandikan informasi yang sama
Uji Kasus
time,steps -> output
06:49,[(0, 1)] -> 06:50
12:23,[(1, 0)] -> 13:23
02:23,[(0, 1), (1, 0)] -> 03:24
21:40,[(0, 1), (0, 1), (0, 1), (0, 1)] -> 21:44
13:10,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 1)] -> 00:02
21:33,[(1, 0), (0, 1), (1, 0), (0, 1)] -> 23:35
14:21,[(0, 1), (0, 1), (0, 1)] -> 14:24
02:39,[(0, 0), (0, 1)] -> 02:40
16:07,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 19:16
17:55,[(0, 1), (1, 0), (0, 1)] -> 18:57
15:55,[(1, 0), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0)] -> 23:00
22:11,[(0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 00:19
03:58,[(1, 0), (0, 0), (0, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1)] -> 07:03
13:02,[(0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0)] -> 16:06
04:37,[(1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (1, 0)] -> 08:47
00:01,[(0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 03:08
02:58,[(1, 0), (1, 0), (0, 1)] -> 04:59
01:43,[(0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1)] -> 04:52
07:54,[(1, 0), (0, 1), (1, 0), (1, 0), (1, 1)] -> 00:00
09:33,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 10:38
09:01,[(0, 1), (0, 1)] -> 09:03
19:04,[(0, 1), (1, 0), (0, 1), (1, 0)] -> 21:06
11:17,[(0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1)] -> 00:02
19:32,[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (1, 0)] -> 23:34
17:31,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 0), (1, 1), (0, 1)] -> 00:01
06:46,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)] -> 18:16
[h, m]
format dengan langkah Kuarter .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Jawaban:
Jelly , 13 byte
Cobalah online!
sumber
C,
8987 byteTerima kasih kepada @Jonathan Frech karena telah menghemat dua byte!
Cobalah online!
sumber
Jelly ,
21(17?) 19 byte17 byte? - Jika format input:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
dapat diterima, kami akan memiliki tautan monadik dan dapat menghapusW;
dari awal baris kedua.Catatan: Ini sekarang mengarah ke jawaban Erik the Outgolfers Jelly , jadi saya tidak akan repot-repot bermain golf lagi (saya belum melihatnya) ...
Tautan diad mengambil daftar waktu awal sebagai bilangan bulat
[hour, minute]
(24 jam) di sebelah kiri dan daftar tombol menyatakan[[hourPressed, minPressed], ...]
di sebelah kananyang mengembalikan daftar waktu hasil akhir sebagai bilangan bulat, lagi
[hour, minute]
(24 jam).Cobalah online! atau lihat test-suite
Bagaimana?
sumber
⁹Ạ¤
denganẠ}
. Lain -2 untuk menggunakan format yang diizinkan. Akhirnya, -1 lain karena rantai sebelum diµ
sini disebut sebagai angka dua ..Python 2 ,
8475 byteCobalah online!
Fungsi yang membutuhkan waktu sebagai tuple (jam, menit); output dengan cara yang sama.
sumber
all(b)
alih-alihb[0]&b[1]
:lambda c,a:reduce(lambda t,b:all(b)and((t[0]+b[0])%24,(t[1]+b[1])%60)or(0,0),a,c)
lambda(h,m),(d,e):
Apakah pola ini cocok dengan Python !?Retina , 75 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Hapus semuanya hingga dan termasuk tombol ganda terakhir tekan, ganti dengan waktu kosong (kalau-kalau itu tombol terakhir tekan).
Konversikan ke unary.
Sortir menit hingga akhir.
Tambahkan jam bersama.
Tambahkan menit bersama-sama, tetapi jaga jamnya terpisah.
Kurangi jam dan menit modulo 24 atau 60 sesuai kebutuhan.
Konversikan ke desimal.
Memformat menjadi dua digit.
sumber
Python 3,
135117115 byte-20 byte terima kasih kepada Jonathan Frech
Cobalah online!
Mengambil waktu sebagai daftar dalam formulir
[hour, minute]
.sumber
(m[0]+1)
dengan-~m[0]
danif m[0]<23 else 0
dengan*(m[0]<23)
.b
danc
selalu nilai boolean, Anda bisa menggantinyab+c>1
denganb&c
.Haskell , 58 byte
Cobalah online! Contoh penggunaan:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.sumber
JavaScript (ES6), 55 byte
Mengambil input dalam sintaks currying, dengan waktu mulai dalam bentuk array
[min, hour]
dan langkah-langkah sebagai array Kuarter. Waktu keluaran dalam format yang sama dengan waktu input.Uji Kasus
Tampilkan cuplikan kode
sumber
Perl 6 , 40 byte
Cobalah online!
Mengambil daftar yang berisi waktu mulai diikuti oleh tombol yang ditekan. Mengembalikan waktu akhir. Waktu dan tombol
(hour, minute)
berpasangan. Waktu 24 jam.sumber
Perl 5 , 70 byte
69 byte kode +1 untuk
-n
benderaCobalah online!
Masukkan format
hh:mm,abcdabcdabcdaddccbbaa
dimana:
Spasi atau pemisah lain di antara mesin cetak tidak signifikan.
Penjelasan
sumber
Swift ,
10696 byte-10, terima kasih kepada Xcoder
Cobalah di ideone!
fungsi akan mengambil nilai awal dan array tupel dan mengembalikan waktu akhir.
sumber
func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}
. Ini juga menghilangkantypealias
.Logo Terrapin, 304 bytes
Tidak dioptimalkan; banyak ruang.
Mengambil daftar sebagai input pertama dan jam awal + menit (input terpisah) masing-masing sebagai kedua dan ketiga.
Saya tidak dapat menyalin + menempel dari Logo Terrapin karena ini adalah versi uji coba jadi itu :(
sumber
R , 61 byte
Dibawa
I
sebagai vektor panjang-2c(H,M)
danB
sebagai daftar panjang-2 vektor untuk tombolc(H,M)
,. BeriterasiB
, pengaturanI
untukc(0,0)
jika jumlahnya adalah2
. Kemudian mod turun di akhir. Ada juga fungsi di header untuk menerjemahkan penekanan tombol ke format R yang tepat jika Anda ingin menguji semuanya; dibutuhkan array[(H,M),...]
sebagai string.Cobalah online!
sumber
C # (.NET Core) , 93 byte
Cobalah online!
Mengambil input seperti pada trinary, dengan 0 == (1,0), 1 == (0,1), 2 == (1,1), dan waktu dalam array dengan indeks 0 menjadi jam dan 1 menjadi menit. Memodifikasi susunan waktu pada tempatnya.
sumber
Pyth, 22 byte
Coba di sini.
sumber
Mathematica, 54 byte
Fungsi anonim. Mengambil daftar 2-tupel sebagai input dan mengembalikan 2-tupel sebagai output.
sumber
Scala , 116 byte
Jadi saya hanya mengambil waktu mulai sebagai dua parameter pertama dari func saya (
h
danm
), dan saya mengambil urutan input sebagai Array [Tuple2].Saya bertanya-tanya ... haruskah saya menghitung deklarasi func (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
ditambah akhir}
) dalam hitungan byte?Cobalah online!
sumber