Beberapa tahun yang lalu, Hot Wheels membuat flash game sederhana yang disebut "Formula Fuelers Racers" *. Untuk memainkan permainan, Anda memilih tiga bahan dari lemari es untuk dimasukkan ke dalam mobil Anda, yang kemudian berpacu melawan mobil yang dihasilkan secara acak komputer. Ternyata mekanisme permainan ini cukup sederhana. Pertama-tama, "waktu" balapan sebenarnya dari mobil Anda dihasilkan secara acak dan tidak berpengaruh apakah Anda memenangkan perlombaan atau tidak. Kedua, pemenang lomba ditentukan oleh skor yang dihitung dari bahan-bahan yang dipilih (bahan rangkap diperbolehkan, dan urutannya penting). Setiap bahan memiliki "nilai" dan "operasi" terkait seperti yang ditunjukkan pada tabel berikut:
# ingredient val op
1 Hot Salsa 2 +
2 Root Beer 1 +
3 Milk 1 +
4 Pickle Juice 2 +
5 Mystery Lunch -3 *
6 BBQ Sauce 2 +
7 Egg 1 +
8 Ketchup 2 +
9 Mustard -1 *
10 Melon 1 +
11 Chocolate Milk 1 +
12 Mayonnaise -2 *
13 Baby Food 0 +
14 Pepper 1 +
15 Salt 2 +
16 Syrup -1 *
17 Salad Dressing 2 +
18 Orange Juice 1 +
19 Soy Sauce 2 +
Untuk kenyamanan, tantangan ini akan merujuk pada bahan dengan nomor mereka dan bukan nama mereka. Berikut adalah langkah-langkah untuk menghitung skor:
- Pertama, inisialisasi skor dengan nilai bahan pertama.
- Kemudian, gunakan operasi bahan kedua untuk menggabungkan skor saat ini dan nilai bahan kedua untuk mendapatkan skor yang diperbarui.
- Akhirnya, gunakan operasi bahan ketiga untuk menggabungkan skor saat ini dan nilai bahan ketiga untuk mendapatkan skor akhir.
Skor yang lebih tinggi lebih baik dan selalu mengalahkan skor yang lebih rendah.
Misalnya, bahan 1 2 3
memiliki skor (2+1)+1 = 4
. Bahan 7 5 6
memiliki skor (1*-3)+2 = -1
. Karena itu, 1 2 3
ketukan 7 5 6
.
Tantangan
Dalam tantangan ini, Anda harus menulis sebuah program yang mengambil daftar 3 bilangan bulat yang diurutkan dan menghasilkan skor yang sesuai.
Memasukkan
Program Anda dapat menerima daftar tiga bilangan bulat dalam format yang paling nyaman. Anda diperbolehkan menggunakan indeks-1 untuk nama bahan (seperti di atas) atau indeks-0 (kurangi 1 dari setiap indeks di atas).
Ouput
Program Anda harus mengeluarkan bilangan bulat tunggal yang menunjukkan skor.
Uji Kasus
4 5 5 => 18 // max score
5 5 5 => -27 // min score
13 13 13 => 0
1 2 3 => 4
7 5 6 => -1
16 2 19 => 2
19 7 12 => -6
* Halaman ini cukup usang dan tidak berfungsi di beberapa browser, tetapi Anda tidak perlu bermain game untuk tantangan ini.
sumber
Jawaban:
Jelly , 24 byte
Mengambil daftar bahan yang diindeks 0.
Cobalah online! atau lihat test suite
Bagaimana?
Menggunakan bentuk yang agak berbelit-belit untuk mengompresi nilai sebagai angka dasar-6 dan fakta bahwa entri multiplikatif adalah yang negatif. Alih-alih hanya bergeser ke atas dengan 3 untuk mendapatkan digit basis-6, nilai-nilai yang ditambahkan bertambah digunakan - ini menghemat byte dengan memungkinkan
Ị
atom untuk memilih entri negatif sebelum langkah komplemen sambil juga menyimpan byte di basis-250 kompresi.sumber
zẈ€$ụ¤
dibaca sebagai indeks (1-diindeks) mereka di halaman kode Jelly, yang[123,188,13,37,226,4]
, dan ditafsirkan sebagai nomor base-250:123*250**5+188*250**4+13*250**3+37*250**2+226*250**1+4*250**0=120851767994004
(lihat bagian string-literal dari tutorial .)JavaScript (ES6),
8984827873 byteMengambil input sebagai array 3 bilangan bulat, menggunakan 0-indexing.
Uji kasus
Tampilkan cuplikan kode
Versi sebelumnya, 78 byte
Mengambil 3 bilangan bulat dalam sintaks currying
(a)(b)(c)
, menggunakan pengindeksan 0.Bagaimana itu bekerja
Satu hal yang agak tidak biasa tentang kode ini adalah hanya dibutuhkan 2 argumen dalam sintaks currying 'umum'
a => b =>
dan akhirnya mengembalikan fungsi yang mengambil ke-3.Kerusakan
Uji kasus
Tampilkan cuplikan kode
sumber
Befunge,
7473 byteCoba di sini! Sungguh aneh bahwa kode saya hanya bekerja pada satu penerjemah saja.
Baris kedua pada dasarnya berisi semua nilai dari tabel. Nilai-nilai non-numerik sebenarnya nilai negatif karena mereka datang sebelum digit pada tabel ASCII. Ada sedikit logika di sana yang menentukan apakah angka itu negatif atau tidak, dan jika ya, angka ini dikalikan dengan hasilnya.
Sisi kanan dari baris ketiga menginisialisasi angka pertama. Jika saya tidak harus melakukan itu, saya bisa menghemat banyak byte.
sumber
PHP, 128 Bytes
PHP, 138 Bytes
Versi Online
Diperluas
sumber
Python 2 ,
123110107 byteCobalah online!
-3 byte terima kasih kepada @mathjunkie
sumber
5445054524413452545
kemudian kurangi 3 dapat menghemat banyak byte.n=[n+i,n*i][i<0]
di dalam lingkaran menghemat 3 byte05AB1E , 29 byte
Cobalah online!
Ini sebenarnya berfungsi untuk input sebanyak atau sesedikit yang Anda inginkan, sehingga Anda dapat memiliki mobil dengan 4 atau lebih sifat atau mobil dengan hanya 2. Ini tidak disengaja, hanya bagaimana akhirnya.
sumber
CJam ,
4338 byteMungkin ada cara untuk mengompres daftar lebih lanjut ...
Menggunakan pengindeksan berbasis 0.
Cobalah online!
Penjelasan
Program ini memanfaatkan fakta bahwa suatu nilai adalah multiplikatif dan bukan aditif jika dan hanya jika negatif.
sumber
+ *
Trik yang bagus !Lua,
140131 bytesumber
JavaScript,
8572 byteMengambil input dalam format
[a,b,c]
-13 byte berkat ETHproductions
sumber
x=>(b="...",b<0?"*":"+")+b
untuk menghindarireturn
, saya pikir. (Juga, Anda tidak memerlukan[... ]
, pengindeksan bekerja pada string)a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b)).join``)
berfungsi untuk Anda?)
setelah+b
, saya percayaR,
125123 byteFungsi anonim yang mengambil tiga bilangan bulat sebagai input. Menentukan daftar nilai dan operasi, dan kemudian hanya mengevaluasi yang disebut oleh input, yaitu
o3(o2(v1,v2),v3)
. Hampir pasti ada cara golf untuk melakukan ini!Pembaruan: setelah beberapa kembali bekerja, saya punya alternatif, juga 123 byte . Sekali lagi, fungsi anonim, tetapi mengambil input sebagai vektor tunggal dari tiga nilai. Menggunakan pendekatan yang sama, mendefinisikan daftar nilai dan operasi dan mengevaluasinya.
sumber
Haskell,
186116112108 byteFungsi utamanya adalah
k
. Baru di Code Golf jadi saya yakin ada beberapa byte yang bisa saya hilangkan dengan menggunakan$
operator yang pintar dibandingkan tanda kurung. Saya mungkin akan memperbarui jawabannya karena saya terus menemukan peningkatan.Intinya program dapat dipecah seperti ini:
*
mana nilai positif selalu+
)v
dipetakan ke input integer dan mengambil operasi dan nilai yang sesuai dari masing-masing dan mengembalikan output yang tepat.MEMPERBARUI
Terima kasih khusus untuk menunjukkan trik fromEnum! Itu berhasil dengan baik. Saya juga melewatkan bagian dalam aturan yang menyatakan solusi yang dapat diterima bisa menjadi fungsi yang mengambil daftar bilangan bulat. Itu menghemat banyak sekali pekerjaan.
PEMBARUAN 2
Seperti saran lainnya, mencukur beberapa byte dengan menata ulang operasi, membuat penjaga lain yang selalu mengevaluasi ke True, dan pola yang cocok pada W yang cocok dengan pola pada daftar 3 elemen. Terima kasih atas sarannya!
PEMBARUAN 3
Terima kasih lain kepada Laikoni karena menunjukkan lebih banyak aturan golf kode yang tidak saya sadari. Juga memetakan v ke input saya untuk membuat daftar fungsi yang diterapkan sebagian adalah ide yang fenomenal dan menyelamatkan saya 4 byte tambahan!
sumber
[Int] -> Int
alih-alih membaca dari stdin dan menulis ke stdout. Melakukan hal itu diperbolehkan secara default, tetapi dalam kasus ini bahkan secara eksplisit disebutkan dalam tantangan yang mengaitkan daftar bilangan bulat sebagai input dapat diterima.fromEnum
bukandigitToInt
cenderung lebih pendek karena memungkinkan Anda untuk menjatuhkan impor.v=(map((-51+).fromEnum)"95 ... 5"!!)
menghemat dua tanda kurung.o x|x<0=(*)|0<1=(+)
menyimpan satu byte di penjaga kedua.w
adalah ruang ekstra yang tersisa. Juga, karena Anda hanya perlu menangani daftar panjang 3, Anda dapat menggunakanw[x,y,z]=
sebagai pencocokan pola.Haskell,
9287 byteCobalah online!
Berdasarkan jawaban @ maple_shaft, saya hanya memfaktorkannya sedikit.
Terima kasih kepada @Laikoni selama 5 byte!
sumber
f=
karena fungsi anonim diizinkan sebagai kiriman. Mereka hanya diminta untuk membuat contoh tio bekerja.C,
171161 bytesumber
8086 kode mesin, 62 byte
Tiga byte terakhir berisi input (diindeks-nol). Hei, Anda bilang saya bisa menggunakan format input yang paling nyaman. Dalam hal ini, itu hardcoding!
Output adalah kode kesalahan yang dikembalikan ke shell.
Bagaimana itu bekerja:
sumber