Anda seorang peretas profesional dan bos Anda baru saja memerintahkan Anda untuk membantu seorang kandidat memenangkan pemilihan yang akan datang. Tugas Anda adalah mengubah data mesin pemungutan suara untuk meningkatkan hasil kandidat.
Mesin pemberi suara menyimpan hasil pemungutan suara sebagai dua bilangan bulat: jumlah suara untuk kandidat Anda ( v1
) dan jumlah suara untuk lawan mereka ( v2
).
Setelah berminggu-minggu penelitian, Anda telah menemukan lubang keamanan dalam sistem dan Anda dapat meningkatkan nilai v1
dengan integer x
, dan mengurangi nilai v2
dengan cara yang sama x
. Tetapi ada kendala, Anda harus menjaga kode hash keamanan konstan:
- kode hash keamanan:
(v1 + v2*2) modulo 7
Juga, nilai untuk x
harus minimal agar perubahan Anda tidak diperhatikan.
Program Anda harus menerima sebagai masukan v1
dan v2
; seharusnya menghasilkan nilai optimal untuk x
itu v1>v2
.
Ada beberapa kasus di mana Anda tidak dapat meretas hasilnya; Anda tidak harus menanganinya (ini mungkin menyebabkan masalah dengan atasan Anda, tapi itu cerita lain).
Uji kasus
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
sumber
.0
(Suka100.0 123.0
)?Jawaban:
Python 2, 30 byte
u
adalah suara kita,t
adalah suara mereka.sumber
(t-u)/14*7
mungkin adil(t-u)/2
?t-u == 16
. Kemudiany<x?0:(y-x)/2-(y-x)/2%7+7;
, Saya pikir saya harus mengambil perbedaan, membaginya menjadi dua, dan kemudian menemukan kelipatan terdekat dari 7. Bagaimana Anda sampai pada hal ini?Python 2, 30 byte
sumber
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Saya pikir saya harus mengambil perbedaan, membaginya menjadi dua, dan kemudian menemukan kelipatan terdekat dari 7. Bagaimana Anda sampai pada hal ini?(b-a)/2
, kita lakukan/7*7
untuk membulatkan ke kelipatan 7 terdekat, dan kemudian+7
naik ke yang berikutnya naik. Artinya, kecuali jika kita akan mendapatkan angka negatif, dalam hal ini kita tetap menang hanya bisa 0. Mengambilmax
dengan 0 mencapai ini. Beberapa di antaranya juga hanya mengubah ekspresi dan menjalankannya pada kasus uji untuk melihat apa yang berhasil./7*7
adalah semacam ekspresi yang cukup sering muncul di golf sehingga saya menganggapnya sebagai ungkapan. Idenya adalahn/7
mengambil lantain/7
, yaitu menemukan berapa banyak kelipatan7
cocok dalamn
. Kemudian, mengalikan dengan7
membawanya ke nomor kelipatan7
.-2/7*7
, dan karena putaran pembagian-lantai Python menuju infinity negatif,2/7
adalah -1, demikian7*-7+1
juga 0. Jadi, kedua belah pihak memberikan 0, yang bekerja dengan baik.Mathematica, 22 byte
Fungsi murni dengan argumen
#
dan#2
. Mencapai kedalaman rekursi maksimum jika perbedaan lebih dari7*2^16 = 458752
.Penjelasan
sumber
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Sebenarnya , 13 byte
Cobalah online!
Menggunakan
max((b-a)/14*7+7,0)
rumus yang sama yang digunakan xnor dan orlp.Penjelasan:
sumber
Groovy, 41
37byteIni adalah penutupan tanpa nama. Terima kasih kepada
xnor
danorlp
untuk formula danJames holderness
untuk menunjukkan bug.Solusi sebelumnya digunakan
intdiv()
untuk pembagian integer tetapi berperilaku berbeda dari yang//
digunakan dalam python.Coba di sini!
sumber
Haskell,
3024 byteOperator infiks mengambil jumlah suara dari kandidat pilihan Anda terlebih dahulu. Menggunakan logika yang sama dengan jawaban pembulatan lainnya
/14*7+7
.sumber
until
:,a#b=until(\c->a+c>b-c)(+7)0
atau lebih baika%b=until(>(b-a)/2)(+7)0
. Padahal rumus aritmatika masih cenderung lebih pendek.head[...]
hampir selalu dapat disingkat menjadi[...]!!0
Fractional a
, saya tidak yakin apakah itu diterima. Dengandiv
itu meskipun lebih pendek, jadi terima kasih! Akhirnya menggunakan pendekatan matematika - dan memang, itu dua byte lebih pendek dari sebelumnya. @Laikoni: golf yang bagus, tidak tahu tentang itu, akan mengingatnya.J, 15 byte
Agak menarik, saya sedang mengerjakan suatu masalah dan saya pikir saya punya solusi tetapi ternyata saya salah. Baiklah. Cobalah online! Inilah hasilnya:
sumber
CJam,
131215 byte]
menjadi[
berkat produk ETH.Mencuri metode orlp dan xnor secara terang-terangan.
Input adalah dua angka yang dipisahkan oleh spasi:
100 123
Penjelasan:
sumber
D
hanya13
. Dan Anda dapat menyimpan byte dengan menambahkan nilai sebelum perkalian alih-alih menambahkan 7 setelahnya.m]
itu langit-langit;m[
adalah lantai.Excel VBA,
2420 BytesSegera fungsi jendela yang mengambil input dari sel
A1
danB1
dan output ke VBE segera jendela.Versi Subrutin, 43 Bytes
mengambil input
b, c
sebagai varian \ integer dan mencetak ke jendela VBE segerasumber
Julia 0,5 , 26 byte
Cobalah online!
sumber
PHP,
4139 bytemengambil input dari argumen baris perintah; jalankan bersama
-r
.75 byte tambahan hanya untuk menangani $ a> $ b: - /sumber
Japt , 14 byte
Jalankan di sini!
Terima kasih ETHproduk untuk mencukur 3 byte!
sumber
f
menerima argumen dan lantai ke kelipatan angka itu, jadi saya pikir Anda bisaV-U /2+7 f7 w0
menghemat tiga byte.05AB1E , 9 byte
Cobalah online!
Penjelasan
Atau fungsi yang sesuai dengan byte-count yang sama yang beroperasi pada pasangan-nomor
Cobalah online!
sumber
Dyalog APL , 14 byte
Dibawa
v1
sebagai argumen kanan danv2
sebagai argumen kiri.0 ⌈
maksimum nol dan7 ×
tujuh kali1 + (
...)
satu tambah ...⌊
lantai14 ÷⍨
seperempat belas-
perbedaan (antara argumen)TryAPL online!
sumber
Befunge, 19 byte
Cobalah online!
Ini bergantung pada formula yang sedikit berbeda dengan yang digunakan oleh orlp dan xnor, karena juru bahasa referensi Befunge memiliki aturan pembulatan yang berbeda dengan Python. Befunge juga tidak memiliki kemewahan
max
operasi.Perhitungan dasar terlihat seperti ini:
Memeriksa kode lebih terinci:
sumber
Pergi , 36 byte
func(a,b int)int{return(b-a)/14*7+7}
Cobalah online!
sumber
JavaScript (ES6), 31 byte
Tampilkan cuplikan kode
sumber
Java 8, 31 byte
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Ini adalah ekspresi lambda yang ditugaskan untuk
IntBinaryOperator
.a adalah suara kandidat Anda, b adalah lawan Anda.
java rounds down untuk pembagian dengan bilangan bulat positif, sehingga
+7-a%7
digunakan untuk meningkatkan nilai ke kelipatan 7 berikutnya.sumber
a->b->(b=(b-a)/14*7+7)>0?b:0
lebih pendek 3 byte, tapi saya lebih suka pendekatan Anda, jadi +1 dari saya. Hampir setiap jawaban yang diberikan sudah menggunakanmax((b-a)/14*7+7,0)
..a->b->(b=(b-a)/14*7+7)>0?b:0
tidak mengembalikan hasilnya secara langsung juga: Coba di sini. Atau maksud Anda, Anda lebih suka lambda metode tunggal di atas kari lambda;(a,b)->
preferensi lebiha->b->
, meskipun lebih lama?Ruby,
2627 bytePada dasarnya sama dengan solusi Python xnor dan orlp,
dengan twist (tidak perlu menambahkan 7, karena modulo negatif, menyimpan 1 byte di ruby, tidak tahu tentang python)Tidak memelintir, memelintir itu hanya kasus buruk disonansi kognitif. Lupakan. Benarkah. :-)
sumber
Scala, 31 byte
Versi ternary lebih panjang 2 byte
sumber
Noodel , 16 byte
Persamaan yang ditarik dari jawaban xor dan orlp , tetapi karena Noodel tidak memiliki kemampuan maksimal harus menyelesaikannya.
Cobalah:)
Bagaimana itu bekerja
sumber
Pyth , 16 byte
Coba di sini!
sumber