Perusahaan Anda baru-baru ini menyewa sekelompok sysadmin yang sangat berdedikasi . Mereka merasa bahwa hanya menonton layar komputer cukup terbatas (maksud saya, refresh rate 60Hz tidak cukup), jadi mereka menghubungkan bus data CPU ke DAC dan memainkannya pada speaker melalui ruang server sehingga mereka dapat mendengar hingga 20kHz. Satu masalah: mereka sysadmin, bukan insinyur listrik, dan pengaturan pengeras suara mereka terus rusak. Mereka menduga bahwa ini disebabkan oleh perubahan nilai byte yang terlalu mendadak dalam kode yang dikompilasi oleh insinyur perangkat lunak pada mainframe. Sysadmin sekarang mengadakan kompetisi kecil untuk melihat siapa yang dapat membuat kode yang paling lembut untuk pengaturan speaker mereka.
Tantangan
Misi Anda adalah membuat program atau fungsi dalam bahasa pilihan yang memiliki selisih sesedikit mungkin antara byte berturut-turut (lihat bagian Perhitungan). Program ini akan memiliki tugas menghitung nilainya sendiri.
Memasukkan
String ASCII aktif stdin
atau padanan terdekat bahasa Anda, atau sebagai input fungsi jika Anda membuat suatu fungsi. Karena program Anda harus mengambil sendiri sebagai input untuk menghitung skor Anda, program Anda harus mendukung Unicode jika berisi Unicode. Kalau tidak, ASCII sudah cukup. Panjang input dapat dianggap minimal 2 byte.
Perhitungan
Setiap karakter string akan dikonversi menjadi setara numerik, menggunakan standar ASCII. Kemudian, perbedaan antara semua karakter pertama akan dikuadratkan dan kemudian dijumlahkan . Misalnya, string abd
akan mendapatkan skor 1²+2²=5
.
Keluaran
Output akan menjadi judul untuk entri Anda. Ini berarti bahwa itu harus diawali dengan a #
atau ditambahkan oleh baris baru dan -
(tanda hubung). Kemudian, itu harus menampilkan nama bahasa pemrograman Anda, diikuti oleh koma, spasi dan kemudian bilangan bulat yang mewakili hasil perhitungan. Sebagai contoh
#C++, 98
akan menjadi output yang valid. Output harus diberikan pada stdout
atau setara dengan bahasa Anda, atau sebagai nilai balik ke fungsi Anda.
Mencetak gol
Skor Anda akan menjadi nilai yang dihitung oleh program Anda, dengan program itu sendiri sebagai input.
Sunting: Harus menangani baris baru sekarang, maaf untuk sebelumnya, kawan
Berikut ini adalah skrip Pyth untuk memverifikasi perhitungan skor.
sumber
Jawaban:
CJam,
1051827643569545407327279235233229Program di atas menghasilkan kode sumber aktual, yang panjangnya 1.179.112 byte.
Pengujian
Menggunakan penerjemah Java , kode sumber dapat dibuat dan diuji seperti ini:
Versi alternatif
Dengan biaya 36 poin - untuk skor akhir 265 - kita dapat membuat kode sumber 99,92% lebih pendek:
Anda dapat mencoba versi ini secara online di juru bahasa CJam .
Ide
Kami ingin mengeksekusi kode
menjaga skor serendah mungkin. Untuk mencapai ini, kita akan membangun karakter string dengan karakter (dengan beberapa no-ops sebelum dan sesudah) dan mengevaluasi hasilnya.
Untungnya,
'
(push character literal),(
(decrement) dan)
(increment) adalah karakter ASCII yang berurutan, sehingga mendorong karakter arbitrer relatif murah.Setelah karakter ASCII
'
dapat didorong sebagai'()…)(
, di mana jumlah)
tergantung pada titik kode.Misalnya,
+
dapat didorong sebagai'())))(
. Jarak antara'
dan(
,(
dan)
adalah 1. Trailing)(
saling membatalkan; satu-satunya fungsi mereka adalah membuka jalan bagi yang berikut'
(sesuai dengan karakter berikutnya) dengan karakter yang berurutanKarakter yang didorong dengan cara ini akan meningkatkan skor dengan 4 poin.
Karakter ASCII sebelumnya
'
dapat didorong sebagai''(…(
, di mana jumlah(
tergantung pada titik kode.Misalnya,
#
dapat didorong sebagai''((((
. Jarak antara'
dan(
adalah 1.Karakter yang didorong dengan cara ini akan meningkatkan skor dengan 2 poin.
''(…(
sebenarnya bekerja untuk semua karakter ASCII, karena Karakter adalah 16 bit lebar dan membungkus. Misalnya,+
dapat didorong sebagai''
, diikuti oleh 65.532(
dtk.Teknik ini digunakan dalam versi kode 1.2 megabyte.
Karakter
'
dapat didorong sebagai''
, meninggalkan skor tidak terpengaruh.Kode
sumber
Haskell,
1528279574291196839217744771742Penggunaan (catatan:
"
harus diloloskan):Saya menambahkan string kosong
""
ke string input untuk membantu juru bahasa Haskell mencari tahu jenis-jenisnya. Tanpa itu ketik inferensi gagal, kode terlalu polimorfik. Sisanya adalah bisnis seperti biasa: memetakan setiap karakter ke ascii, membuat daftar perbedaan tetangga, kuadrat, jumlah dan nama bahasa yang ditambahkan.sumber
> <>, 30227
Gah, gelar itu menggandakan skor saya; dalam kata-kata program saya sendiri, n & oooooo! Saya akan mengambil beberapa waktu kemudian untuk membuat ini lebih baik. Saya juga tahu bahwa skor ini mungkin tidak aktif karena saya tidak dapat benar-benar memasukkan baris baru pada juru bahasa online dan saya tidak yakin ada cara untuk mengisi tumpukan input pada yang resmi.
Tidak berarti sepenuhnya dioptimalkan, tetapi mengambil keuntungan
penuhdari kedekatan relatif (setidaknya dalam hal karakter ASCII) dari perintah di> <>. Saya tidak bisa dengan mudah mengirimkan baris baru sebagai input, jadi saya menggunakan pemeriksa skor Pyth, tetapi cocok untuk sekelompok kasus uji acak yang saya gunakan sehingga seharusnya tidak masalah mengenai hal itu.Inilah satu dengan skor 30353 (yang seharusnya benar karena satu baris):
sumber
Jawa,
664656550662434Sangat pendek. Menerima array char bukan string.
Saya menggunakan program untuk menghasilkan nama variabel terbaik.
sumber
((Function<char[],String>) ABCD->{…}).apply(…)
terima kasih. Lambda ini tampaknya cukup lengkap tanpa jenis konteks.K5, 25478
Solusi yang cukup sederhana. Ini adalah fungsi yang mengambil inputnya melalui string.
sumber
Windows PowerShell ISE Host, 62978
638946796077050Edit - menyimpan beberapa poin dengan menghilangkan
$A
variabel dan bukannya menghitung mundur melalui string, dan juga dengan mengonversi beberapa kata kunci ke CAPSEdit2 - menyimpan beberapa poin lagi dengan menggunakan
$($HOST.NAME)
bukanPowerShell
Edit3 - menyimpan beberapa poin lagi dengan menukar nama variabel dan mengubah cara output dihasilkan.
Gunakan variabel yang dinamai dengan angka, karena mereka "lebih dekat"
$
sehingga penalti kita lebih sedikit.Sangat menarik untuk tidak menggunakan teknik golf biasa. Misalnya,
|%{$
adalah 22534, sedangkan|foreach{$
hanya 8718.Ini mungkin mendekati optimal tanpa mengubah teknik.
sumber
MATLAB,
1921439748394443878537593Terima kasih kepada Luis Mendo karena mengurangi selisih lebih lanjut!
Terima kasih kepada NumberOne untuk mengurangi jumlah kebisingan dengan mengubah nama variabel input!
Bagaimana ini bekerja?
ans
variabel default di MATLABA9876543210
dan mencetak jumlah perbedaan tetangga kuadrat dari string.diff
menemukan perbedaan tetangga berpasangan dalam array dan menghasilkan arraylength(A9876543210)-1
. Dengan menggunakandiff
pada array string, ini dilemparkan ke adouble
array di mana kode ASCII masing-masing karakter dihasilkan dan perbedaan dari pasangan berturut-turut menghasilkan array yang lain.diff(A9876543210)'
sebenarnya menghasilkan lebih banyak suara daripada denganA9876543210.'
(terima kasih Luis Mendo!)sumber
A=
norm(diff(B))^2
lebih pendek%d
.B
nama variabel?A=@(A)...
adalah MATLAB yang valid, karenaA
scoped.QBasic, 38140
YAY UNTUK SYNTAX SHOUTY
(Diuji dengan QB64 .)
Ini adalah program lengkap yang menginput string dan menampilkan jawabannya. Satu-satunya batasan di sini adalah bahwa program tidak dapat mengambil input multiline (
LINE INPUT
dapat menangani apa pun selama itu hanya satu baris).Deobfuscated:
Dengan mudah, melewatkan string multi-karakter untuk
ASC
memberikan nilai ASCII dari karakter pertama. Juga nyaman, variabel numerik diinisialisasi-otomatis ke nol.sumber
Python 2, 91026
Menentukan fungsi anonim yang mengambil string dan mengembalikan skor. Cobalah online .
Sebagian besar ini adalah implementasi fungsional yang cukup mudah: zip
A
denganA[1:]
untuk mendapatkan daftar pasangan surat, lalu kurangiord
, persegi, dan jumlah mereka dengan ekspresi generator.Mengamati bahwa dua variabel dalam generator ekspresi hanya pernah diikuti oleh karakter berikut:
)
,,
, dan ruang. Ketiganya memiliki nilai ASCII yang sangat rendah, sehingga kita harus mengakhiri setiap variabel dengan karakter ASCII yang paling rendah. Karakter terendah yang dapat mengakhiri variabel dalam Python adalah0
. Lebih jauh, setiap peluang yang kita miliki untuk membagi satu lompatan besar menjadi dua lompatan yang lebih kecil akan menurunkan skor:A0
biaya 289, tetapiA90
hanya 145 danA9876543210
sedikit 73.(Pendekatan ini tidak membantu variabel lambda
A
, mungkin karena diikuti oleh[
satu kejadian.)sumber
JSFuck, 144420642
Bangun dari:
Rekatkan ini ke kotak input kecil JSFuck.com untuk mengompilasinya ke JSFuck. Hasilnya adalah skrip panjang 112701 karakter, jadi saya tidak dapat meletakkannya di sini. Dua karakter terakhir dari skrip ini adalah tanda kurung, masukkan input di antara mereka.
Butuh program hampir 20 detik di komputer saya untuk mengevaluasi sendiri.
Penjelasan
Saya mendapat lebih banyak waktu untuk mengerjakan ini, jadi saya duduk dan mencoba mengoptimalkan nama variabel. Berikut adalah nama variabel yang layak digunakan, berdasarkan skor mereka.
Ini adalah JavaScript yang saya terjemahkan ke JSFuck:
Saya melihat lebih dekat pada penerjemah JSFuck.com dan menemukan cara kerjanya berfungsi. Dengan "Sumber eval" dicentang, kode akan menjadi fungsi JSFuck yang dapat dieksekusi sendiri. Untuk mendapatkan input, bagaimanapun, kita perlu mengakses argumen [0] dari dalam fungsi. Ini membawa kode JS terakhir kami ke ...
(Jika Anda bertanya-tanya mengapa versi saya sebelumnya memiliki skor lebih rendah dari ini, itu karena itu adalah program JSFuck yang mengembalikan string yang perlu dievaluasi sebagai JS. Ini juga mengapa saya tidak meninggalkannya di pos)
sumber
abs
tidak perlu. Saya kira itu mungkin akan membuat perbedaan ... :)JSFuck, 102280181
.CJam,
23.66319.38911.547Cobalah online
Ini mulai merasa seperti ini dapat didorong hampir tanpa henti dengan menambahkan lebih banyak karakter secara strategis. Tapi saya pikir saya mulai mencapai titik pengembalian yang berkurang di sini, jadi saya akan berhenti untuk saat ini. Misalnya, di mana saya miliki
ULC;;;
, saya bisa menggunakan seluruh alfabet mundur diikuti oleh 26;
, tetapi keuntungannya semakin kecil.Sejauh ini kesenjangan terbesar yang tersisa adalah antara
m
dan,
di string awal. Saya belum menemukan sesuatu yang masuk akal untuk menyingkirkannya. Saya yakin ada beberapa cara. Tetapi jika saya mendorongnya ke batas, itu mungkin mulai tampak seperti solusi Dennis ...sumber
JAVASCRIPT, 33911
Sejauh ini ini adalah salah satu optimasi paling konyol yang pernah saya lakukan dalam kode golf ...
Props to Neil untuk saran "spam komentar" = =
sumber
/**/
di tempat yang tepat.JAVASCRIPT, 31520
Solusi ini
secara signifikan lebih konyolsangat berbeda dari solusi saya yang lain, jadi saya merasa itu layak untuk jawabannya sendiri.Itu 7306 karakter, yang sebagian besar adalah program aktual dikodekan ke string 0/1, dan sisanya hanya untuk memecahkan kode itu. Ia bekerja dengan mendapatkan indeks masing-masing '1' minus indeks dari sebelumnya '1' untuk mendapatkan nilai karakter yang diperlukan. Ini kemudian mengevaluasi string yang dihasilkan ke fungsi aktual, yang pada dasarnya adalah program golf standar untuk memecahkan masalah (yang hanya sekitar 105 karakter itu sendiri).
sumber
R,
68911571835381652224Mengambil string dari STDIN dan mengubahnya menjadi integer via raw. Diffs, kuadratkan dan jumlah vektor yang dihasilkan. Hasilnya dikembalikan sebagai string. Terima kasih kepada @nimi untuk tip nama variabel.
sumber
Mathematica, 33552
Kode ini mengevaluasi ke fungsi yang tidak disebutkan namanya, yang menghitung "noise" dari string input. Itu memanfaatkan fakta bahwa representasi ASCII dari data biner pada dasarnya "tanpa suara". Data biner yang Anda lihat adalah string
yang akan menjadi jawaban yang valid sendiri, mencetak 37.848.
Yang lainnya
hanya menerjemahkan kode string biner dan menafsirkannya sebagai kode Mathematica. Perhatikan bahwa komentar kosong Mathematica
(**)
sangat "rendah noise" dan sebenarnya menghilangkan noise dari"
s.sumber
Java8:
1171701005089906298890Dengan bantuan ekspresi lambada dan penugasan sebaris variabel dapat mempersingkat kode ini sedikit.
sumber
Java,
129300128400110930106581105101Tantangan ini sebenarnya membuat saya berpikir lebih dalam tentang karakter untuk digunakan dan optimisasi lebih daripada menemukan solusi terpendek. Saya akan terus bekerja untuk menurunkan nomornya.
Ini adalah fungsi lambda, dengan
B
menjadi string yang mewakili fungsi. Jangan lupa untuk menghindari tanda kutip ("
) saat meneruskan ini sebagai string.sumber
Pyth, 16391
Satu-satunya trik catatan yang digunakan di sini adalah pengkodean basis-256
#Pyth,
, yang harganya jauh lebih murah daripada string itu sendiri.sumber
M, 47033
52798Untuk menggunakan ini, kita harus menghindari tanda kutip dan "lolos" karakter spasi putih (yang signifikan dalam MUMPS!) Seperti:
Perhatikan bahwa "M" adalah nama alternatif untuk "MUMPS" - ada ketidaksepakatan di antara praktisi tentang mana yang benar. Secara alami, saya telah memilih opsi yang lebih pendek di sini.
sumber
NEW
barang). Jadi ketika saya mulai melakukan aritmatika padaAAAA
(sekarangAAA9876543210
), ia dipaksa0
(mungkin itu hanya detail implementasi Caché? Saya tidak memiliki instalasi GT.M untuk diuji terhadap). Panggilan yang baik pada hal prioritas operator; Saya selalu merasa sulit untuk berpikir dalam hal operasi murni dari kiri ke kanan. (Saya juga lupa bahwa M memiliki operator eksponensial - ini bukan sesuatu yang sering muncul ketika Anda sedang menulis aplikasi CRUD.)Ruby, 118402
Bunyinya dalam file melalui baris perintah, seperti
ruby diff.rb /path/to/file
. Ada ruang untuk diperbaiki, dan itu sesuatu yang sedang saya kerjakan sekarang.sumber
C ++ 166345
sumber
Perl, 93556
Saya akan mencoba untuk mengurangi ini lagi.
Ternyata kurung kurawal (
{
dan}
, ASCII 123 dan 125) dan garis bawah (_
, ASCII 95) sangat mahal karena semua karakter lain berada di kisaran 30-70, itulah sebabnya saya memformatif
seperti yang saya lakukan, dan mengapa saya menggunakan$AAAAA
bukannya kekasih Perl$_
.Sayangnya, semua variabel dengan simbol di dalamnya hanya baca, jadi saya tidak bisa memanfaatkan kombinasi suka
$#
dan$$
.sumber
F #,
136.718130.303Di mana ada
\n
setelah;
.sumber
POSIX Shell, 172026
Sayang sekali saya tidak bisa mendapatkan hasil yang sama dengan Pyth checker (178386) ...
sumber
Lua,
171078117896Golf:
Tidak Disatukan:
sumber
C ++, 49031
makro C ++ yang mengambil c-string dan menulis hasilnya ke output standar
Cobalah online!
sumber
C ++, 5
sumber