Tentu saja, jaringan SE sangat berpengetahuan tentang bagaimana menjadi terhormat di kamar kecil, tetapi bagi Anda yang membutuhkan rekap, menghormati berarti menyiram toilet, dll. Yang terpenting, meskipun, itu berarti menggunakan kios sejauh mungkin. dari orang lain sebanyak mungkin.
Tantangan
Diberikan cetak biru dari serangkaian kios dengan indikasi yang digunakan sebagai string, Anda harus kembali atau mencetak dari fungsi atau program di mana tempat paling terhormat untuk melakukan bisnis Anda adalah.
Input
0 1 2 3 4 5 <- The stall number which is not actually visible in the input.
| | |-| |-|-| <- the stalls
Kios diberi nomor dalam urutan menaik dari kiri ke kanan. Akan selalu ada setidaknya satu kios kosong. Mungkin ada hingga 50 kios dalam satu input. Anda juga dapat mengambil input sebagai array atau string 0
s dan 1
s atau booleans jika Anda lebih suka melakukannya.
Kios-kios yang digunakan ada -
di dalamnya (di antara pipa-pipa).
Hasil
Kios yang paling terhormat untuk dikunjungi adalah kios yang rata-rata terjauh dari yang sedang digunakan. Jarak antara dua kios adalah nilai absolut dari perbedaan angka di atas mereka.
Untuk memperjelas: Anda menemukan jarak rata-rata dari semua kios — bukan hanya yang berdekatan.
Anda harus menampilkan jumlah terendah dari kios paling terhormat untuk pergi ke yang kosong .
Contohnya
Input:
|-| |-| OR 101
Output:
1
Input:
| | |-| |-|-| OR 001011
Output:
0
Input:
|-| |-| | | | |-|-| OR 101000011
Output:
1
Input:
|-| | | | | |-|-| | | | | OR 100000110000
Output:
11
Input:
|-|-|-|-| | | | | | |-| OR 11110000001
Output:
9
Input:
|-| | OR 10
Output:
1
Input:
|-| | |-| OR 1001
Output:
1
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
Anda dapat menggunakan pengindeksan berbasis 0 atau 1 dalam jawaban Anda - mana yang Anda inginkan; jika Anda menggunakan 1 pengindeksan berbasis, maka Anda harus mengatakannya secara eksplisit dalam jawaban Anda.
[1,0,0,1]
sebagai test case. Tak satu pun dari kasus uji saat ini memverifikasi apakah ikatan rusak dengan benar.101000011
mengembalikan 1 (bukan 4 atau 5)?Jawaban:
Jelly ,
109 byteMenggunakan pengindeksan berbasis 1. Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Swift,
158, 157, 128,100 BytesMengambil input dari
Array<Bool>
variabeli
, mengembalikan jawaban dari ekspresi terakhir.Edit 1:
Menyimpan byte dengan mengkonversi ke bools melalui perbandingan string
Edit 2:
Mengolah ulang algoritma saya:
Edit 3:
Mengambil keuntungan dari aturan baru yang memungkinkan mengambil input langsung dari array boolean.
Tidak Disatukan:
sumber
Jelly , 13 byte
1-diindeks.
Cobalah online!
Algoritma
Implementasi yang naif dari pertanyaan tersebut.
sumber
Java "hanya"
270 200 196 187 196 138 148146 byte!menyelamatkan
4 13byte yang tak terhitung jumlahnya berkat Leaky Nun!1 byte berkat MichealGolfedTidak disatukan
input sebagai array boolean di mana true menyiratkan kios terbuka.
sumber
a
.Ruby,
797876 +n
bendera = 77 byteOutput adalah pengindeksan berbasis 0. Input adalah garis STDIN dari 0 dan 1.
sumber
0...~/$/
adalah trik yang bagus. 👍🏻MATL , 14 byte
Cobalah online!
Output berbasis 1.
Penjelasan
sumber
Perl 84 + 3 (
-alp
bendera) = 87 bytePerlu
-alp
bendera untuk dijalankan. Mengambil string 1 dan 0 dipisahkan oleh spasi sebagai input. Contohnya :Perhatikan bahwa saya menambahkan
$m=0
di awal, tetapi itu hanya untuk mengujinya pada beberapa entri.sumber
+7
:F'' alp
.-
Tidak dihitung.Matlab, 87 byte
Mengambil array satu dan nol; menggunakan pengindeksan berbasis 1.
Seperti beberapa jawaban lain, memaksimalkan total bukan jarak rata-rata.
Mungkin masih ada lagi kemungkinan bermain golf ...
sumber
JavaScript (ES6),
87868275 byteMengambil array boolean (true / false atau 1/0). Tidak ada gunanya menghitung jarak rata-rata karena mereka semua menggunakan faktor umum yang sama, jadi hitung saja jarak total untuk setiap kios dan temukan indeks pertama dari yang tertinggi. Sunting: Disimpan 1 byte dengan menggunakan
*
alih-alih&&
. Disimpan 5 byte dengan mencari jarak tertinggi secara manual berdasarkan komentar dari @Dendrobium. Disimpan 7 byte dengan menggunakan kembaliu
sebagai akumulator pengurangan semu berdasarkan komentar oleh @ edc65.sumber
a=>(x=0,a.map((o,i)=>x<(t=a.reduce((r,u,j)=>r+(b=i-j)*b*u*!o,0))&&(x=t,r=i)),r)
reduce
bukannyamap
- mmmms=>s.map((u,i)=>u||(s.map((w,j)=>u-=w*Math.abs(j-i)),u<x&&(x=u,r=i)),x=0)|r
1100011101
ikatan di2
dan8
ketika menggunakan absolut,8
ketika menggunakan kuadrat), bukan karena itu penting karena tampaknya aturan telah diklarifikasi dan ikatan sekarang diselesaikan dengan kios paling kiri ...J, 27 byte
Penerjemah online .
sumber
Ruby,
8776 byteLemparkan draf pertama ini dengan cepat, tetapi sementara itu Value Ink sudah memposting jawaban Ruby 80 byte ...
edit: melepas beberapa byte dengan bantuan dari Value Ink:
Ini adalah fungsi anonim yang mengambil array nilai true / falsy, seperti misalnya:
sumber
(r=0...a.size)
dan kemudian peta pada bahwa alih-alih menggunakanwith_index
:r.map{|j|a[j]?(i-j).abs: 0}
. Ini seharusnya membuat Anda 78 byte.Mathematica, 53 byte
Menggunakan pengindeksan berbasis 1 dan mengambil input sebagai daftar 0s dan 1s.
sumber
Javascript ES6 -
989591868488 byteSunting: Tampaknya kios paling kiri harus digunakan dalam kasus dasi. Jarak kuadrat tidak lagi berfungsi, dikembalikan ke jarak absolut.
Tidak Disatukan:
Tes berjalan:
sumber
Lua,
165150 ByesIni sedikit menipu menggunakan fakta bahwa secara umum, lua melewati tabel yang disebut arg yang berisi input baris perintah apa pun untuknya.
Saya agak kecewa karena saya menggunakan for in loop, tapi saya tidak bisa memikirkan cara yang lebih kecil untuk melakukannya.
Juga, Karena lua, 1 pengindeksan berbasis digunakan.
Edit Terpotong 15 byte dari gsub yang boros.
sumber
C #, 127 byte
Test Bed
sumber