Pengantar:
Di rumah kami memiliki jam yang menyerang jumlah yang dinyatakan pada setiap jam, tetapi juga mogok setiap setengah jam. Jadi dari 0:01 hingga dan termasuk 12:00 itu menyerang dalam urutan ini:
1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12
Tantangan:
Diberikan bilangan bulat n
, mengeluarkan daftar kerangka waktu di mana total teguran sama dengan n
. Selain itu, selalu mulai setidaknya 1 menit sebelum kerangka waktu ini dan berakhir setidaknya 1 menit setelah kerangka waktu ini (dan paling banyak 29 menit).
Misalnya, jika inputnya adalah n=8
, outputnya bisa:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Di mana kerangka waktu ini memiliki jumlah berikut, semuanya sama dengan 8
:
[1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8]
Aturan tantangan:
- Keluaran fleksibel. Anda dapat menampilkan sebagai Waktu (atau Tanggal / Tanggal Waktu) objek, cap waktu, string (dengan atau tanpa angka nol di depan), desimal dengan
.29
/.31
/.59
/.01
(yaitu0.29-3.01
alih-alih00:29-03:01
), dll. Selama jelas, sebelum dan sesudah kerangka waktu .
Selain itu, Anda dapat memilih sendiri jumlahnya. Dalam semua contoh saya, saya menggunakan 1 menit, tetapi Anda juga dapat memilih 5 menit, 15 menit, dll. Ini juga berarti Anda dapat menggunakan.4
/.6
/.9
/.1
(mis.0.4-3.1
Alih-alih00:24-03:06
) misalnya. Daftar ini juga fleksibel. Dapat berupa daftar / koleksi, larik, string yang dipisahkan pembatas, mencetak per baris ke STDOUT, dll.
Sebutkan pilihan output yang Anda buat.Catatan: Anda tidak diizinkan untuk menampilkan jumlah kerangka waktu seperti di atas, ini hanya disebutkan sebagai klarifikasi. Anda harus menampilkan kerangka waktu, termasuk sedikit sebelum dan sesudahnya. - Serangan itu membungkus dari
12:00
ke00:30
. Jadi jikan=14
, dua kerangka waktu adalah11:29-00:31
dan11:59-01:01
. - Input akan berada dalam kisaran
1 <= n <= 90
, di mana 90 adalah jumlah total dari semua kemungkinan serangan. - Kerangka waktu yang Anda kembalikan bisa dalam urutan apa pun.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
(semua menggunakan 1 menit sebelum / sesudah kerangka waktu dan nol terkemuka)
Input: 8
Ouput:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Input: 14
Output:
[00:29-04:01, 00:59-04:31, 02:59-05:01, 04:29-06:31, 05:59-07:01, 11:29-00:31, 11:59-01:01]
Input: 90
Output:
[00:29-00:01, 00:59-00:31, 01:29-01:01, 01:59-01:31, 02:29-02:01, 02:59-02:31, 03:29-03:01, 03:59-03:31, 04:29-04:01, 04:59-04:31, 05:29-05:01, 05:59-05:31, 06:29-06:01, 06:59-06:31, 07:29-07:01, 07:59-07:31, 08:29-08:01, 08:59-08:31, 09:29-09:01, 09:59-09:31, 10:29-10:01, 10:59-10:31, 11:29-11:01, 11:59-11:31]
Input: 1
Output:
[00:29-00:31, 00:59-01:01, 01:29-01:31, 02:29-02:31, 03:29-03:31, 04:29-04:31, 05:29-05:31, 06:29-06:31, 07:29-07:31, 08:29-08:31, 09:29-09:31, 10:29-10:31, 11:29-11:31]
Input: 2
Output:
[00:29-01:01, 00:59-01:31, 01:59-02:01]
code-golf
arithmetic
date
clock
Kevin Cruijssen
sumber
sumber
.4
/.6
/.9
/.1
diizinkan (menjadi 6 menit seperti yang Anda nyatakan::24
/:36
/:54
/:06
).Jawaban:
APL (Dyalog Classic) , 34 byte SBCS
Cobalah online!
Solusi ini menggunakan
⎕io←1
(pengindeksan berbasis 1).Dari kanan ke kiri:
⍳12
adalah1 2 3...12
⍪
mengubahnya menjadi matriks 12x1 tipis tinggi1,
menambahkan kolom 1s ke kiri⍪⍨
menggabungkan matriks yang sama secara vertikal, jadi sekarang menjadi matriks 24x2,
meratakan matriks dalam urutan baris-utama, itu menjadi vektor ukuran 48:1 1 1 2 1 3...1 12 1 1 1 2...1 12
+\
jumlah parsial:1 2 3 5 6 9...
∘.-⍨
perbedaan antara setiap pasangan elemen, sebuah matriks 48x48⍉
mengubah urutan⎕=
sebuah matriks boolean 48x48 dengan 1s di mana pun input yang dievaluasi (⎕
) terjadi⍸
pasang koordinat di mana 1s berada.5×
membagi dua mereka.4 .1∘+¨
tambahkan 0,4 ke yang pertama dan 0,1 ke koordinat kedua di setiap pasangan12|
modulo 12∪
uniksumber
.1
dalam output? Juga, jawaban yang bagus.<sup>SBCS</sup>
seperti jawaban Adám.⍸
tidak ada dalam Dyalog Classic. Dan ya, saya tahu itu diizinkan secara eksplisit, saya hanya ingin tahu berapa menit0.1
dalam output;)JavaScript (ES6), 104 byte
Mencetak interval waktu dalam
H.MM,H.MM
format.Cobalah online!
Pada dasarnya menggunakan algoritma yang sama dengan versi non-rekursif di bawah ini.
Versi non-rekursif, 117 byte
Menghasilkan string interval waktu yang dibatasi ruang dalam
H.MM,H.MM
format.Uji kasus
Tampilkan cuplikan kode
Berkomentar
sumber
APL (Dyalog Unicode) ,
6259 byte SBCSBadan program penuh. Anjuran untuk
n
. Mencetak daftar daftar dua elemen menggunakan jam desimal.Cobalah online!
⍳24
d ndices 1… 2448⍴
secara siklis r eshape dengan panjang 48, yaitu 1 ... 12,1 ... 12.5×
kalikan setengahnya dengan itu⊂
menyertakan (untuk menggunakan seluruh array ini sebagai argumen yang tepat untuk setiap argumen kiri)(
...),/¨
untuk masing-masing berikut ini, kembalikan semua sub-daftar dengan panjang itu:⍳48
d ndices 1… 48l←
simpan dil
(untuk l engths)Sekarang kita memiliki semua daftar kemungkinan run kali untuk setiap run-length yang mungkin.
,/
concatenate (lit. concatenation-reduction) daftar sub-daftar⊃
mengungkapkan (karena pengurangan mengurangi peringkat dari 1 menjadi 0)(
...)¨
terapkan fungsi berikut untuk masing-masing:⊢/
elemen (pengurangan kanan) terakhir (waktu akhir)⊃,
tambahkan dulu elemen pertama (waktu mulai)¯.1 .1+
tambahkan persepuluhan negatif dan positif bagi mereka(
...)/
filter pasangan awal-akhir dengan:⍳12
d ndices 1… 121,¨
tambahkan satu1
untuk masing-masing∊
ϵ daftar (ratakan)48⍴
siklis r eshape dengan panjang 48, yaitu 1,1,1,2 ... 1,11,1,12⊂
menyertakan (untuk menggunakan seluruh array ini sebagai argumen yang tepat untuk setiap argumen kiri)l+/¨
untuk masing-masingl
(1 ... 48) kembalikan jumlah semua sub-daftar dengan panjang itu∊
ϵ daftar (ratakan)⎕=
bandingkan input numerik dengan itu∪
kembalikan hanya elemen unik (pasangan mulai-akhir)sumber
0.1
0.5
dapat menjadi.1
.5
Python 3 ,
118116 byteCobalah online!
Kerangka waktu direpresentasikan sebagai
(t1, t2)
,t1
dant2
menjadi desimal mewakili jam. Offsetnya adalah.1
atau 6 menit.sumber
Batch, 196 byte
Penjelasan:
t
adalah waktu dalam setengah jam, mulai dari0
untuk00:30
. Jumlah pemogokan pada waktu t kemudian1
,1
,1
,2
,1
,3
dll Mengurangkan1
memberikan urutan0
,0
,0
,1
,0
,2
dll yang merupakan bilangan bulat disisipkan dengan nol. Ini kemudian dapat diperoleh dengan termwise perkalian dari urutan0
,0
,1
,1
,2
,2
dll dengan urutan0
,1
,0
,1
,0
,1
dll Kedua urutan ini mudah dihitung dengan menggunakan modulo dan (integer) divisi.Kemudian tetap untuk mengulang semua 23 waktu mulai yang mungkin, kemudian mengambil semua 24 kali menyerang dan mengurangi jumlah serangan dari input, mencetak waktu ketika hasilnya adalah nol.
Kode jatuh setelah loop tetapi tidak ada salahnya dilakukan karena input tidak boleh lebih dari 90.
sumber
APL NARS, 559 byte
h (n) atau l (n) mengembalikan semua interval yang representatif dalam 0-24 jam yang memiliki n jam mogok. h (n) memiliki format jam sebagai 0..11.0..59; sebaliknya l (n) memiliki format jam sebagai uji 0..23.0..59
sumber