Diberikan daftar pekerjaan, yang harus dilakukan secara berurutan, dengan masing-masing mengambil slot untuk dilakukan, berapa lama waktu yang dibutuhkan untuk melakukan semuanya jika setelah melakukan pekerjaan, pekerjaan yang sama tidak dapat dilakukan untuk dua slot berikutnya (mendinginkan slot )? Namun, pekerjaan yang berbeda dapat ditugaskan dalam slot pendinginan ini.
Sebagai contoh,
[9,10,9,8] => output: 5
Karena pekerjaan akan dialokasikan sebagai [9 10 _ 9 8]
.
1. Pertama, 9 membutuhkan dua titik pendinginan _ _. Jadi kita mulai dengan 9 _ _
.
2. Pekerjaan berikutnya 10 berbeda dari pekerjaan sebelumnya 9, jadi kami dapat mengalokasikan salah satu dari _ _. Maka kita akan punya 9 10 _
.
3. Ketiga, 9 tidak dapat dialokasikan sekarang, karena pekerjaan pertama 9 adalah pekerjaan yang sama dan perlu pendinginan waktu. 9 10 _ 9
.
4. Terakhir, 8 tidak sama dengan dua pekerjaan sebelumnya lainnya, sehingga dapat dialokasikan setelah 9 dan karena ini adalah pekerjaan terakhir, tidak perlu pendinginan waktu. Daftar akhir adalah 9 10 _ 9 8
dan output yang diharapkan adalah 5, yang merupakan jumlah tempat (atau jumlah slot)
Kasus uji:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
Nilai input dapat berupa bilangan bulat apa saja (negatif, 0, positif). Panjang daftar pekerjaan adalah 0 <= panjang <= 1.000.000.
Output akan berupa integer, jumlah total slot, yang ditunjukkan dalam test case sebagai output. Daftar di dalam tanda kurung adalah bagaimana output akan dihasilkan.
Memenangkan kriteria
kode-golf
sumber
[]
?Jawaban:
Jelly , 14 byte
Cobalah online!
sumber
05AB1E , 22 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Brachylog , 10 byte
Selalu menyenangkan melihat masalah di mana Brachylog berkinerja terbaik
Penjelasan
Cobalah online!
sumber
R , 123 byte
Cobalah online - satu program!
Cobalah online - beberapa contoh!
Program lengkap yang membaca daftar bilangan bulat yang dipisahkan koma sebagai input, dan mengeluarkan slot yang dibutuhkan. Saya yakin ini bisa lebih golf, dan menerapkan solusi berbasis regex ini dalam beberapa bahasa lain akan lebih efisien dalam byte.
Catatan pada TIO kedua saya membungkusnya dalam suatu fungsi untuk memungkinkan beberapa contoh ditampilkan. Fungsi ini juga menunjukkan daftar akhir, tetapi ini bukan output program utama saya jika dijalankan secara terpisah.
sumber
Permintaan TSQL, 158 byte
Masukkan data sebagai tabel.
Kueri bersifat rekursif jadi
diperlukan, karena daftar angka dapat melebihi 100 walaupun hanya bisa menangani 32.767 rekursi - apakah pembatasan benar-benar diperlukan dalam tugas ini?
Cobalah online
sumber
R ,
8170 byteCobalah online!
Setelah beberapa upaya gagal, kode berubah agak jelek dan tidak terlalu pendek, tetapi setidaknya berfungsi sekarang ...
Pertama, kami mengevaluasi durasi berturut-turut dari pekerjaan yang sama. Misalnya untuk
3, 3, 4, 3
ini memberi:Setiap
(len - 1) * 3 + 1
langkah ini menghasilkan langkah-langkah (+ 1
ditangani secara terpisah).Selanjutnya, kami memproses kejadian dengan pekerjaan yang sama 2 tempat terpisah, seperti:,
x, y, x
dengan menggunakandiff(s, lag=2)
. Vektor yang dihasilkan juga dipotong menjadi run berurutan (r
) berdasarkanrle
fungsi. Sekarang, karena berbagai pergantian berselang kita perlu menambahkanceiling(r$len/2)
langkah untuk semua run dari nol. Misalnya:x y x
(panjang 1) danx y x y
(panjang 2) keduanya membutuhkan 1 langkah ekstra:x y _ x (y)
x y x y x
(panjang 3) danx y x y x y
(panjang 4) keduanya membutuhkan 2 langkah ekstra:x y _ x y _ x (y)
Akhirnya, kita perlu mengimbangi kemunculan dari pergantian-pergantian ini di tengah jangka panjang dari pekerjaan yang sama:,
x, x, x, x...
karenanya1-l%/%6
alih-alih sederhana1
.sumber
diff(s,lag=2)
untuk mendeteksi kedekatan! Sekarang Anda satu byte lebih pendek dari solusi saya ...Python 2 , 67 byte
Cobalah online!
Menerapkan tantangan secara harfiah. Menggunakan salinan daftar itu sendiri sebagai "kosong", karena ini tidak dapat sama dengan angka berapa pun.
sumber
Arang ,
2723 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Lewati pekerjaan.
Tambahkan titik pendinginan saat pekerjaan adalah salah satu dari dua yang terakhir di hasilnya.
Tambahkan pekerjaan saat ini ke hasilnya.
Cetak jumlah tempat.
sumber
R ,
7468 byteCobalah online!
Bangun susunan kerja (terbalik), lalu ambil panjangnya. Hanya sedikit
lebih pendekdari jawaban Kirill L. , jadi terkadang, pendekatan naifnya cukup bagus. Sunting: lebih pendek lagi! Saya juga meminjam template uji Kirill.-6 byte diganti
max(0,which(y==x[2:1]))
denganmatch(y,x,0)
.sumber
c
fungsinya?c
singkatancombine
, meskipunconcatenate
mungkin lebih baik; itu menggabungkan argumennya menjadi satu daftar.Perl 6 , 98 byte
Cobalah online!
Blergh, pasti ada cara yang lebih baik untuk melakukan ini. Saya tidak 100% yakin ini sepenuhnya benar, meskipun melewati semua kasus tepi yang dapat saya pikirkan.
Pada dasarnya, ini dimulai dengan mengelompokkan semua kembar tiga dari daftar input, dengan bantalan di kedua sisi. Misalnya,
[1,2,1,2]
menjadi(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Kami mendapatkanrepeated
elemen di setiap triplet, menjadi(), (1), (2), ()
.Kemudian
squish
elemen berurutan yang bukan daftar yang sama, tetapi memiliki ukuran yang sama (untuk tidak squish seperti[1,1,1]
), dan elemen pertama tidak sama dengan elemen sebelumnya (karena kita tidak dapat menggabungkan jam di[1,1,2,2]
), dan akhirnya elemen sebelumnya juga belum di-squished ([1,2,1,2,1,2]
). Jadi(1), (2)
dalam contoh di atas akan diperas bersama.Akhirnya, kami mendapatkan
sum
semua panjang dari daftar ini, yang mewakili jam yang dimasukkan, dan menambahkan panjang dari daftar asli.Sebagai contoh:
sumber
JavaScript (ES6), 57 byte
Cobalah online!
Berkomentar
sumber
C (gcc) , 69 byte
Cobalah online!
Rekursi langsung.
sumber
Perl 6 , 48 byte
Cobalah online!
45 byte jika daftar memiliki setidaknya dua elemen:
Cobalah online!
sumber
Smalltalk, 125 byte
Penjelasan
sumber
Perl 5
-pl
,4240 byteCobalah online!
sumber
-p
dan pengerjaan ulang substitusi: Cobalah online!Batch, 184 byte
Input melalui argumen baris perintah dan output melalui kode keluar. Penjelasan:
Lacak dua pekerjaan terakhir.
Inisialisasi penghitungan.
Proses setiap pekerjaan.
Keluarkan hitungan akhir.
Untuk setiap pekerjaan:
Jika kami memproses pekerjaan baru-baru ini, tambahkan jumlah titik pendinginan yang tepat. Selain itu, bersihkan pekerjaan terakhir sehingga pekerjaan berikutnya hanya memicu pendinginan jika sama dengan pekerjaan ini.
Perbarui dua pekerjaan terakhir dan alokasikan satu tempat untuk pekerjaan ini.
sumber
Swift, 114 byte
Cobalah online!
sumber
3,4,3,4
, harus bertaruh 5, bukan 6.s = a
bisas=a
, dan Anda dapat melakukans+=
daripada beberapas=s+...
dan menghapus spasi setelah?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
untuk menyimpan 9 byte.Python 3 ,
7975 byte-3 byte terima kasih kepada mypetlion
-1 byte terima kasih kepada Sara J
Cobalah online!
sumber
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
dapat menjadif(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
menghemat 2 byte.[a[0]]+b
dapat menjadia[:1]+b
menghemat 1 byte.['']+b
dengan[b]+b
menyimpan byte -b
adalah daftar, sehingga tidak akan pernah sama dengan nilai apa pun dia
Java (JDK) , 110 byte
Cobalah online!
Kode komentar yang tidak disatukan:
sumber
3,4,3,4,3,4
, mengembalikan 7 bukannya 8Jelly , 20 byte
Cobalah online!
Meskipun ini agak mirip dengan jawaban pendek @ EriktheOutgolfer , saya menulisnya tanpa melihatnya. Bagaimanapun dia lebih baik!
Penjelasan
Tautan dyadic helper, mengambil daftar saat ini sebagai item kiri dan item berikutnya sebagai kanan
Tautan monadik utama, mengambil daftar bilangan bulat sebagai input
sumber
Python 2 , 75 byte
Cobalah online!
sumber
JavaScript (Node.js) , 52 byte
Cobalah online!
sumber
APL (Dyalog Classic) , 22 byte
Cobalah online!
sumber
JavaScript (V8), 101 byte
Cobalah online!
Kode yang dibongkar terlihat sebagai berikut:
Upaya kode-golf pertama saya, mungkin dapat dioptimalkan banyak dengan mengecilkan array dan meneruskannya secara rekursif.
sumber
Zsh ,
6660 byte-6 byte dari implisit
"$@"
Cobalah online! Saya sangat merekomendasikan
set -x
untuk menambahkan ke awal sehingga Anda dapat mengikuti.a
selalu berisi dua pekerjaan terakhir, jadi jika pencarian menemukan pekerjaan yang cocoka[2]
, kami bertambah tiga (karena slot pekerjaan akan menjadi[... 3 _ _ 3 ...]
).Jika
a
tidak disetel, pencarian akan gagal dan ekspansi aritmatika akan mengembalikan kesalahan, tetapi itu hanya terjadi pada pekerjaan pertama dan tidak fatal.Kita dapat menyimpan satu byte lagi jika kita menggunakan
$[x+=i+1]
sebaliknya, dan tidak ada perintah pada sistem pengguna yang seluruhnya terdiri dari digit.sumber
K (ngn / k) , 27 byte
Cobalah online!
sumber