Saya mencoba untuk menurunkan C ++. Apakah mungkin membuat kondisi ini lebih pendek?
X > 3 & X - Y > 1
(Selain menghapus spasi putih, tentu saja.)
Jadi, X
setidaknya 4
tapi X >= Y + 2
.
X
dan Y
bilangan bulat dalam interval [0,5].
Saya telah mencoba menemukan beberapa formula bitwise tetapi gagal.
code-golf
number
tips
c++
code-golf
popularity-contest
obfuscation
code-golf
c
code-golf
board-game
hexagonal-grid
code-golf
game
grid
code-golf
number
permutations
popularity-contest
math
graphical-output
number-theory
king-of-the-hill
code-challenge
compression
code-challenge
fastest-code
code-golf
math
ascii-art
animation
code-golf
popularity-contest
generation
counting
fastest-code
fastest-code
popularity-contest
image-processing
king-of-the-hill
code-golf
conversion
binary-tree
code-golf
math
number
rational-numbers
division
code-golf
restricted-source
hashing
atomic-code-golf
logic-gates
code-golf
function
code-challenge
puzzle-solver
ai-player
test-battery
popularity-contest
music
compression
code-golf
number
stack
atomic-code-golf
logic-gates
ascii-art
popularity-contest
code-golf
date
grid
code-challenge
game
code-golf
parsing
code-golf
math
geometry
sequence
popularity-contest
code-trolling
code-golf
string
restricted-source
code-golf
quine
king-of-the-hill
code-golf
math
code-golf
simulation
code-golf
ascii-art
code-challenge
sorting
optimization
Cristy
sumber
sumber
x*x-y*y>9
. Itu jumlah karakter yang sama, tetapi Anda mungkin dapat menemukan jalan pintas / alternatif untuk pendekatan itu. Hanya cara lain untuk melihatnya.3<x>y+1
y+3<2^x
, tetapi prioritas operator C berbeda. Saya yakin ada solusi 7-char, hanya perlu memodifikasi skrip saya untuk berurusan dengan prioritas operator CJawaban:
Setelah dengan kasar memaksa setiap kombinasi simbol di bawah 9 karakter, saya menemukan tidak ada solusi yang lebih kecil dari itu
x>3&x-y>1
.Untuk bersenang-senang, inilah beberapa solusi 9 karakter funky yang ditemukan oleh brute forcer:
Pemaksaan brutal dilakukan dengan Python, membangun pohon sintaksis top-down di mana tidak ada anak yang memiliki operator dengan prioritas lebih rendah dari induknya menurut aturan C. Untuk mengurangi kemungkinan saya hanya mengizinkan satu digit literal, dan tidak ada operator biner yang dapat memiliki dua anak tetap. Saya tidak mungkin memikirkan solusi apa pun yang akan memiliki dua digit literal, atau yang membangun konstanta menggunakan operator biner. Kemudian setiap ekspresi dievaluasi untuk [0, 5] dan jika cocok maka akan dicetak.
sumber
x*x-y*y>9
. Mungkin Anda harus mencoba konstanta multi-digit juga? (juga, tanda kurung)xy
, dan 2 harus menjadi kurung, hanya menyisakan 4 karakter logika. Saya akan mencoba menjalankan forcer kasar dengan konstanta 2 digit, tapi saya benar-benar tidak berpikir itu akan memberikan hasil.(a#b)$c
adalah formatnya. Dariabc
dua harusx
dany
, meninggalkan 3 lokasi yang mungkin untuk[0-9xy]
, dan hanya satu flipxy
. Hanya operator yang menarik+-*/&|^<>
, jadi ada 9 kemungkinan. Dengan demikian total kemungkinan kurang dari 3 * 12 * 2 * 9 * 9 <5832.Menanggapi golf (luar biasa) oleh
orlp
:Kebenaran harus didahulukan
int16_t
- sehingga ada asumsi. Mungkin pergeseran bit perlu +16 untuk 32 bit int (itu cukup banyak di mana-mana hari ini). Ini membuat mereka menjadi karakter yang lebih besar ...Satu-satunya cara "benar" untuk menulisnya, IMO adalah
(x>3) && (x > y+1)
, yang dapat di-golf hinggax>3&x>y+1
(9 karakter).(Anda benar-benar perlu mempertimbangkan kemungkinan (lebih besar) tipe unsigned menjadi pertimbangan, terutama karena unsigned-ness adalah "menular" dalam ekspresi C ++. Saya kira "memperbaiki" bahwa dengan
static_cast<>
s yang sesuai agak akan mengalahkan tujuan ...)MEMPERBARUI
Dengan tes-tes berikut, saya sudah bisa mengetahui ekspresi mana yang benar-benar berfungsi dengan baik:
Live On Coliru
Output pada coliru, di sini untuk referensi:
Ringkasan
Karena ini tentang "biaya" elemen elemen kode berulang, Anda mungkin menggunakan tabel pencarian. Anda bisa "menyembunyikan" tabel pencarian, jadi itu baik
atau
Tentu saja Anda bisa bertele-tele dan tumpul dan mengganti nama LUT
Jadi "versi" saya adalah ... 7 karakter . (Atau buat jika fungsi dan
L(x,y)
bahkan lebih pendek).Atau, yang lebih penting: benar, dapat diuji dan dipelihara.
sumber