Jika Anda pikir ini bisa menyenangkan, tapi terlalu banyak pekerjaan, mempertimbangkan berpartisipasi dalam ini tantangan yang jauh lebih kecil.
Sedikit kesenangan (dan mungkin frustrasi!) Untuk 2016 ... "puzzle of the year" Dyalog . Nikmati!
Objektif
Temukan Dyalog APL ( unduh ) ekspresi (bahasa lain diizinkan, lihat Kelayakan di bawah) yang melibatkan digit tepat 2 0 1 6 agar sama dengan angka 0 hingga 100. Misalnya:
20=16
×2016
2⌊016
2+0+1*6
...
Tujuannya adalah untuk menggunakan karakter sesedikit mungkin dalam setiap ekspresi (jumlah minimum karakter untuk ekspresi adalah 5 - empat digit 2 0 1 6 dan satu fungsi / operator primitif tunggal).
Aturan
- Setiap ekspresi harus mengandung digit 2 0 1 6 (dalam urutan itu) dan tidak ada digit lainnya. Konstanta dan variabel yang telah ditentukan sebelumnya juga tidak diizinkan.
- Selain empat digit 2 0 1 6, hanya simbol dan nama bawaan, tanda kurung / kurung kurawal, spasi, tanda minus tinggi dan titik desimal yang dapat digunakan. Ekspresi yang dihasilkan harus deterministik (yaitu, memberikan hasil yang sama pada evaluasi berulang). Untuk non-APL, fungsi / operator dengan nama juga diperbolehkan; aturan yang sama dengan sini .
- Asumsikan semua pengaturan default untuk bahasa Anda. Untuk Dyalog APL, ini berarti
⎕ML
dan⎕IO
keduanya 1, dan⎕PP
adalah 10. - Setiap entri yang terdiri dari ekspresi yang benar untuk semua angka dari 0 hingga 100 akan dinilai berdasarkan jumlah karakter yang digunakan oleh ekspresi tersebut tidak termasuk ruang yang berlebihan (minimal 505 untuk semua 101 ekspresi).
Kelayakan
Siapa pun bisa masuk. Anda dapat menjawab dalam bahasa apa pun, tetapi hanya jawaban APL yang akan dipertimbangkan untuk menerima. Jika Anda menggunakan bahasa lain selain APL, Anda dapat menggunakan cuplikan, program, fungsi, dll. Sebagai alternatif untuk ekspresi, dan Anda dapat mencetak, meninggalkan nomor di lokasi memori yang dapat diakses, atau mengembalikan hasilnya, selama kode Anda langsung mengevaluasi ke nomor yang diinginkan sebagai tipe data numerik standar untuk bahasa Anda.
Tanggal Penutupan
30 November 2016.
Hadiah
- Dapatkan jawaban Anda diterima
- Diabadikan di Hall of Fame 2016 Dyalog!
Mengirimkan Entri Anda
Setelah 30 November 2016, saya akan menerima jawaban terpendek, dan mengirimkan jawaban Anda , atas nama Anda , ke Hall of Fame 2016 Dyalog.
Faq
- Apakah
J
(mis. 37 =⌈⍟!20J16
) diperbolehkan? - Tidak: Selain empat digit 2 0 1 6, hanya simbol dan nama bawaan, kurung / kurung kurawal, spasi, tanda minus tinggi dan titik desimal yang dapat digunakan.
- Apakah output sebagai string dapat diterima?
- Tidak: sama dengan angka 0 hingga 100.
- Digit fisik, atau digit data?
- Digit data, sesuai OP: aturan yang sama seperti di sini , di mana salah satu contoh berisi
LOG10(
. - Apakah menugaskan variabel kemudian menggunakannya sebagai bagian dari ekspresi (mis. 56 =
a+16+a←20
) diperbolehkan? - Ya, tetapi Anda mungkin tidak menggunakan tugas dari satu ekspresi di ekspresi lain.
Saya memiliki izin tertulis secara eksplisit untuk mengirimkan tantangan ini di sini dari penulis asli tantangan ini. Jangan ragu untuk memverifikasi dengan mengikuti tautan yang disediakan dan menghubungi penulis. Saya memberi tautan kepada penulis kompetisi asli tautan ke halaman ini begitu saya mempostingnya, sehingga mereka dapat memeriksa apakah saya mengirimkan jawaban seseorang sebagai milik saya.
⎕ML
dan⎕IO
(dianggap1
) dapat diterima?Jawaban:
Jelly, 686 byte
Saya menulis sekitar 50 di antaranya, lalu membuat sisanya secara otomatis dengan menambahkan
Ḥ
(× 2) dan‘’
(± 1) sesuai kebutuhan. Saya akan memperbaikinya nanti!sumber
201ÆCo6
. Saya tidak berpikir Anda dapat menggunakanṾ
(yang dilaksanakan pada bulan Februari), tetapi20|16Ḥ‘Ḥ
dan20|16‘ḤḤ’
sama-sama pendek.Ḥ
lebih disukai lebih dari‘’
- 46, di antara empat angka lainnya, seharusnya satu karakter lebih pendek. Saya sudah menggantinya dengan2016½Ċ‘
yang selama Anda.Hexagony , 888 byte
Oke, pertama beberapa aturan dasar untuk Hexagony, kalau-kalau ada yang ingin mengalahkan ini:
2|016
untuk 22), tetapi tampaknya sebagian besar dalam semangat tantangan.Jadi di sini adalah daftarnya. Saya memang menguji sebagian besar dari mereka tetapi tidak semua (beberapa modifikasi sepele dari yang lain), jadi saya harap saya tidak melakukan kesalahan:
Saya agak malas menjelang akhir, jadi saya yakin ini tidak optimal. Mungkin menarik (dan mungkin) untuk memaksa ini.
sumber
J,
1041... 838 byte981961952860859Saya sedikit malas sampai akhir, tetapi harus lebih diperbaiki daripada kurang.
Saya tidak berpikir saya akan pernah menyalip Hexagony, tetapi Anda tidak pernah tahu!mengalahkan hexagony! Disimpan 9 byte berkat Zgarb! dan masih banyak lagi bagi Lynn!Sorotan dan Catatan
Saya menggunakan bilangan prima banyak dalam hal ini. Bahkan, saya menggunakan
p:
fungsi (perdana ke-N) 37 kali dalam hal ini.90 dibuat menggunakan garpu. Yay! Ini perkiraan untuk ini:
Diterjemahkan sebagai
54 menggunakan ravel pembentuk!
Setara dengan
sumber
!20-16
54:<.^20-16
55:>.^20-16
97:p:!20-16
+:p:-2-016
(4 byte lebih pendek)?2]01+6
, 8 bisa2%~016
dan 12 bisa2*01]6
.JavaScript, 1021 byte
Memperbaiki dan menyimpan dua byte berkat Charlie Wynn dan ETHProductions .
sumber
2-~01+6
10, dan-~!2016
sebagai 1.JavaScript (ES7), 836 byte
Semuanya harus berfungsi di browser apa pun kecuali 81, 88, dan 97, yang menggunakan yang baru
**
operator .Hampir semuanya di sini dilakukan dengan tangan. Saya telah bekerja pada brute-forcer untuk meningkatkan apa pun yang dapat ditingkatkan. Saat ini telah menyimpan 103 byte pada berbagai item.
Brute-forcer
Ini bukan kode yang paling cantik, tapi itu sepertinya tidak masalah di sekitar bagian-bagian ini.
PERINGATAN: Jangan dijalankan kecuali Anda siap untuk browser / mesin Anda membeku selama beberapa menit. Tidak ada yang suka menghitung 7 loop bersarang.
sumber
PowerShell v3 +,
15751499 byte100% golf secara manual - tidak ada program brute force atau bantuan lain yang terdaftar.
Saya merasa 1500 mungkin dalam jangkauanSub-1500 tercapai!Mari kita lihat seberapa baik yang bisa saya lakukan untuk mendapatkan ini lebih rendah. (NB - Ini hanya diuji dalam v4, tetapi harus bekerja di v3 dan v5 tanpa modifikasi. Tidak akan bekerja di v2 atau v1 karena versi tersebut tidak memiliki operator shift bitwise.)
Poin kunci ditandai dengan
##.hashes.##
dalam kode di atas.# 11 adalah penugasan pertama untuk variabel
$a
. Tidak seperti beberapa bahasa lain, variabel tidak perlu diinisialisasi awal untuk penguraian, dan hanya selama eksekusi, variabel dapat diselesaikan. Sejak($a=01)
dikelilingi oleh parens, ini dievaluasi terlebih dahulu sehingga yang kedua-$a
setara-1
. Ini digunakan agak luas mulai dari sini, dan merupakan salah satu hal terbesar yang membuat bytecount turun.# 17 menunjukkan penggunaan pertama
!
untuk Boolean tidak. Di PowerShell, tipe-tipe dilemparkan dengan longgar, jadi jika casting dapat diimplikasikan, itu akan berhasil. Di sini, kami menggunakan fakta itu!!20
sama!$false
, yaitu$true
, yang dapat secara implisit dilemparkan sebagai[int]1
, yang menghasilkan17
. Ini digunakan beberapa kali untuk mendapatkan yang lain1
atau membuat sebagian masuk0
.# 22 Menampilkan
0x
operator cast heksadesimal, di sini berubah0x16
menjadi22
. Namun, karena0x16
hanya angka yang bisa kita dapatkan, kegunaannya terbatas.# 23 memiliki
-bor
operator, untuk "biner atau." Namun, karena keduanya-bor
dan-bxor
memiliki prioritas lebih rendah daripada operator aritmatika sederhana, menggunakannya biasanya memerlukan parens, yang sangat membatasi kegunaan. Ini adalah satu-satunya yang saya temukan di mana lebih pendek untuk menggunakan biner atau operator (saya menghilangkan operator dari 22).-bxor
# 30 adalah pertama kalinya
-bnot
operator diperkenalkan. Ini adalah operator "biner bukan", dan fungsinya mirip dengan~
di (misalnya) JavaScript. Namun, biasanya perlu parens, karena negasi akan ditampilkan sebagai--bnot
dan menghasilkan kesalahan parse / sintaks, dan karena lima karakter dibandingkan dengan satu~
, maka digunakan dengan hemat.# 39 adalah penggunaan pertama operator shift biner kami,
-shl
dan-shr
. Ini mirip dengan<<
atau>>
dalam bahasa lain, tetapi secara eksplisit bersifat diadik, artinya kita perlu nomor di kedua sisi agar dapat berfungsi, yang membatasi kegunaannya dalam tantangan ini. Selain itu, prioritas mereka tidak secara eksplisit disebut dalam dokumentasi, tetapi pengujian menunjukkan bahwa mereka lebih rendah dari aritmatika sederhana, yang berarti bahwa orangtua perlu digunakan secara bebas, sehingga mereka tidak membuat penampilan sebanyak dalam jawaban bahasa lainnya.sumber
CJam,
792791 byteSaya agak malas menjelang akhir, banyak dari mereka akhirnya menjadi kenaikan dan penurunan (101 banyak!), Meskipun saya tidak yakin apakah ada cara lain untuk beberapa angka. Masih ada banyak waktu untuk bermain golf jika perlu.
Sekitar # 40 ada beberapa wajah keriting;)
sumber
Mathematica,
2912250222822180 byteBisa pasti akan golfed lebih lanjut. Sebagian besar hanya memecahkan beberapa persamaan Frobenius yang terpisah, yang menghasilkan solusi O ( n ) panjang. Sisanya dihasilkan oleh brute-forcer saya.
sumber
c
untuk16
saat nomor bahkan dan besar? Seperti untuk 96, dll. Tidak yakin bagaimana pemecah persamaan Anda bekerja, tetapi menggunakana=20
juga harus membantu untuk beberapa di antaranya?Dyalog APL (Ini adalah lelucon, tolong jangan kirim), 25.957 byte.
Ya, ini adalah lelucon, kita membutuhkan solusi APL, bahkan jika itu benar-benar mengerikan. Bekerja dengan menambah
≢⍬
(0
)n
kali. Saya tidak ingin memberikan rahasia apa pun dari kiriman saya yang sebenarnya.Jelas bisa bermain golf lebih banyak.
sumber
JavaScript, 5244 karakter
Mungkin bisa bermain golf lebih jauh. Tes di konsol Chrome. Saya agak menyerah pada 10.
sumber
Java 7, 1.083 byte
Untuk byte-count saya hanya menghitung ekspresi itu sendiri antara tanda kurung. Jadi saya sudah mengecualikan
System.out.println
danclass
. Termasuk yang akan menjadi 3.049 byte .PS: Tidak sepenuhnya yakin apakah int-cast untuk
72
valid .. Meskipun itu tetap menambah 5 byte ..Tidak digabungkan & kode uji:
Coba di sini.
sumber