Perbedaan seharusnya tidak membuat perbedaan

40

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 stdinatau 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 abdakan 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 stdoutatau 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.

Sanchises
sumber
1
Apakah program harus menafsirkan apa pun selain kodenya sendiri? Dan hanya untuk memperjelas, dua karakter yang sama berturut-turut adalah nilai 0?
Daniel M.
10
uh .
bopjesvla
1
@bopjesvla Baik. String sewenang-wenang, tetapi Anda mungkin menganggap mereka mampu masuk di alam semesta. Atau di komputer Anda, dalam hal ini.
Sanchises
11
Orang pertama yang membuat jawaban yang valid di Unary menang!
ETHproductions
3
Terlambat sekarang, tetapi satu opsi untuk mencegah jawaban Unary-style adalah mendefinisikan perbedaan antara karakter yang sama dengan 1. Juga akan membuat logika sedikit lebih menarik.
Reto Koradi

Jawaban:

19

CJam, 1051 827 643 569 545 407 327 279 235 233 229

''"','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''"
f{-ci'(*''2*\}'^,40>"*/:N"-"][ZZ[\^__`bcdgimpstsz{}~~~"

Program di atas menghasilkan kode sumber aktual, yang panjangnya 1.179.112 byte.

Pengujian

Menggunakan penerjemah Java , kode sumber dapat dibuat dan diuji seperti ini:

$ alias cjam='java -jar cjam-0.6.5.jar'
$ cjam gen.cjam > diff.cjam
$ cksum diff.cjam 
896860245 1179112 diff.cjam
$ cjam diff.cjam < diff.cjam
#CJam, 229

Versi alternatif

Dengan biaya 36 poin - untuk skor akhir 265 - kita dapat membuat kode sumber 99,92% lebih pendek:

'''()))))(''''(((('''())))))))))))))))))))))))))))('''()))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''()))))(''''((((((('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))('()))))))))))))))))))('())))))('())))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''(((('()))))))))))))))))))('())))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''((((''''''''''''''''''()+,-.0123456789;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]][ZZ[\^__`bcdgimpstsz{}~~~

Anda dapat mencoba versi ini secara online di juru bahasa CJam .

Ide

Kami ingin mengeksekusi kode

'#'C'J'a'm',' qYew::-Yf#:+

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 berurutan

    Karakter 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

e# Push these characters on the stack: ','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''

''
'()))))(
''
''((((
''
'())))))))))))))))))))))))))))(
''
'()))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'()))))(
''
''(((((((
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))(
'()))))))))))))))))))(
'())))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
'()))))))))))))))))))(
'())))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
''
''
''
''
''
''
''
''
''()

+                         e# Concatenate the two topmost single quotes.
,                         e# Push the length of the resulting string (2).
-.0123456789              e# Push that number.
;                         e# Discard it from the stack.
<                         e# Compare a single quote with 2. Pushes 0.
=                         e# Compare a single quote with 0. Pushes 0.
>                         e# Compare a single quote with 0. Pushes 1.
?                         e# Ternary if. Discards a single quote and 1.
@                         e# Rotate the remaining three single quotes.
ABCDEFGHIJKLMOPQRSTUVWXYZ e# Push 25 items on the stack.
[\]                       e# Swap the last two and wrap them in an array.

e# So far, we've pushed the elements of "','#'C'J'a'm',' qYew::-Yf#:+e#'''"
e# followed by the elements of [10 11 12 13 14 15 16 17 18 19 20]
e# and ["" "" "" 3.141592653589793 "" "" " " 0 0 0 -1 1 [3 2]].

]    e# Wrap the entire stack in an array.
[    e# Begin an array. Does nothing.
ZZ   e# Push 3 twice.
[    e# Begin an array. Does nothing.
\^   e# Swap both 3s and push the bitwise XOR. Pushes 0.
__   e# Push two copies.
`    e# Inspect the last copy. Pushes the string "0".
b    e# Convert "0" from base 0 to integer. Pushes 48.
cd   e# Cast 48 to Character, then Double. Pushes 48.0.
gi   e# Apply the sign function, then cast to integer. Pushes 1.
mp   e# Check 1 for primality. Pushes 0.
s    e# Cast the result to string. Pushes the string "0".

e# We now have three elements on the stack: an array, 0, and "0"

t    e# Set the element at index 0 of the array to the string "0".
s    e# Cast the array to string.

e# This pushes the string consisting of the characters
e#     0,'#'C'J'a'm',' qYew::-Yf#:+
e# and
e#     e#'''10111213141516171819203.141592653589793 000-1132
e#
e# When evaluated this does the following:
e#   0,                Push an empty array. Does not affect output.
e#   '#'C'J'a'm','     Push the characters of "#CJam, ".
e#   q                 Read all input from STDIN.
e#   Yew               Push the overlapping slices of length 2.
e#   ::-               Reduce each pair of characters to their difference.
e#   Yf#               Square each difference.
e#   :+                Add the results.
e#   e#…               Comment. Does nothing.

z    e# Zip. This wraps the string on the stack in an array.
{}~  e# Execute an empty block.
~    e# Unwrap the array.
~    e# Evaluate the string.
Dennis
sumber
6
........... wat
DLosc
Sepertinya bahasa ini dibangun untuk tantangan yang tepat ini. Bagus!
Domino
3
Mengutuk. Saya pikir saya akhirnya membuat tantangan yang akan menempatkan CJam pada posisi yang kurang menguntungkan karena sering kali merupakan perpaduan antara simbol 'awal' dan huruf 'terlambat'. Tapi tidaaaak, kamu muncul dan merusaknya lagi ... Ceria!
Sanchises
7

Haskell, 152827 95742 91196 83921 77447 71742

a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=("#Haskell, "++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(""++)

Penggunaan (catatan: "harus diloloskan):

_ZYXWVUTSRQPONMLKJIHGFEDCBA   "a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=(\"#Haskell, \"++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(\"\"++)"

"#Haskell, 71742"

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.

nimi
sumber
6

> <>, 30227

0&ii:0(?v:@-:*&+&20.
'#><>, '<;n&oooooo

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 penuh dari 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):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;
cole
sumber
Bagus, entri yang kompetitif di> <>!
Sanchises
5

Jawa, 66465 65506 62434

Sangat pendek. Menerima array char bukan string.

ABCD->{int A98=0,GFEDCBA=1,A987;for(;GFEDCBA<ABCD.length;A98=A98+(A987=ABCD[GFEDCBA]-ABCD[GFEDCBA++-1])*A987-0);return"#Java, "+A98;}

Saya menggunakan program untuk menghasilkan nama variabel terbaik.

TheNumberOne
sumber
Bagaimana Anda menggunakannya dalam suatu program? (Saya belum sepenuhnya akrab dengan fitur java 8)
aditsu
@aditsu ideone.com/0yy6id
TheNumberOne
Oh, jadi Anda harus mendefinisikan antarmuka fungsional target untuk itu ... bukan objek kelas satu.
aditsu
@aditsu Anda juga bisa menggunakan Function <char [], String> jika Anda mau.
TheNumberOne
Oh, begitu ... ((Function<char[],String>) ABCD->{…}).apply(…)terima kasih. Lambda ini tampaknya cukup lengkap tanpa jenis konteks.
aditsu
4

K5, 25478

"#K5, ",$+/1_{x*x}'-':

Solusi yang cukup sederhana. Ini adalah fungsi yang mengambil inputnya melalui string.

kirbyfan64sos
sumber
1
@TimmyD Diperbaiki !!
kirbyfan64sos
4

Windows PowerShell ISE Host, 62978 63894 67960 77050

PARAM($4)($4.LENGTH-2)..0|foreach{$9=+$4[$_]-$4[$_+1];$0+=$9*$9};'#'+$HOST.NAME+', '+$0

Edit - menyimpan beberapa poin dengan menghilangkan $Avariabel dan bukannya menghitung mundur melalui string, dan juga dengan mengonversi beberapa kata kunci ke CAPS

Edit2 - 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.

AdmBorkBork
sumber
1
Ini persis apa yang saya harapkan. Tepuk tangan!
Sanchises
4

MATLAB, 19214 39748 39444 38785 37593

@(A9876543210)sprintf('#MATLAB, %d',diff(A9876543210)*diff(A9876543210'))

Terima 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?

  1. Deklarasikan fungsi anonim yang disimpan dalam ansvariabel default di MATLAB
  2. Fungsi mengambil string yang disimpan A9876543210dan mencetak jumlah perbedaan tetangga kuadrat dari string.
  3. diffmenemukan perbedaan tetangga berpasangan dalam array dan menghasilkan array length(A9876543210)-1. Dengan menggunakan diffpada 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.
  4. Untuk menemukan jumlah perbedaan kuadrat, Anda cukup mengambil produk titik dari array perbedaan ini dengan dirinya sendiri. Melakukan diff(A9876543210)'sebenarnya menghasilkan lebih banyak suara daripada dengan A9876543210.'(terima kasih Luis Mendo!)
  5. Hasilnya dicetak ke layar.
rayryeng - Reinstate Monica
sumber
Biasanya di PPCG untuk memungkinkan fungsi yang tidak disebutkan namanya. Jadi Anda dapat menghapusA=
Luis Mendo
Juga, norm(diff(B))^2lebih pendek
Luis Mendo
@LuisMendo - Mencoba itu. Mencetak notasi ilmiah dan tidak menghormati %d.
rayryeng
Mengapa Anda menggunakan Bnama variabel? A=@(A)...adalah MATLAB yang valid, karena Ascoped.
Sanchises
3
A -> A9876543210
TheNumberOne
4

QBasic, 38140

YAY UNTUK SYNTAX SHOUTY

LINE INPUT A9876543210$:AAA=ASC(A9876543210$):WHILE A<LEN(A9876543210$):AA9876543210=AAA:A=1+A:AAA=ASC(MID$(A9876543210$,A)):A98765432100=A98765432100+(AA9876543210-AAA)*(AA9876543210-AAA):WEND:?"QBasic,";A98765432100

(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 INPUTdapat menangani apa pun selama itu hanya satu baris).

Deobfuscated:

LINE INPUT line$
b=ASC(line$)
WHILE i<LEN(line$)
    a=b
    i=i+1
    b=ASC(MID$(line$,i))
    score=score+(a-b)*(a-b)
WEND
PRINT "#QBasic,"; score

Dengan mudah, melewatkan string multi-karakter untuk ASCmemberikan nilai ASCII dari karakter pertama. Juga nyaman, variabel numerik diinisialisasi-otomatis ke nol.

DLosc
sumber
Saya belum pernah mengkodekan dalam QBasic sebelumnya, jadi maafkan saya jika saya salah, tetapi apakah mungkin untuk mengganti variabel dengan huruf besar untuk menyimpan beberapa poin tambahan?
ASCIIThenANSI
@ Doc Ah, OK. Saya sedang membaca versi deobfuscated sebagai program yang sebenarnya. : |
ASCIIThenANSI
3

Python 2, 91026

lambda A:"#Python 2, "+`sum((ord(A9876543210)-ord(A98765432100))**2for A9876543210,A98765432100 in zip(A,A[1:]))`

Menentukan fungsi anonim yang mengambil string dan mengembalikan skor. Cobalah online .

Sebagian besar ini adalah implementasi fungsional yang cukup mudah: zip Adengan A[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 adalah 0. Lebih jauh, setiap peluang yang kita miliki untuk membagi satu lompatan besar menjadi dua lompatan yang lebih kecil akan menurunkan skor: A0biaya 289, tetapi A90hanya 145 danA9876543210 sedikit 73.

(Pendekatan ini tidak membantu variabel lambda A, mungkin karena diikuti oleh [satu kejadian.)

DLosc
sumber
3

JSFuck, 144420642

Bangun dari:

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

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.

...)[+!+[]])('abd')

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.

u     ([][[]]+[])[+[]]                    17237
n     ([][[]]+[])[+!+[]]                  17437
f     (![]+[])[+[]]                       18041
t     (!![]+[])[+[]]                      18041
a     (![]+[])[+!+[]]                     18241
r     (!![]+[])[+!+[]]                    18241
d     ([][[]]+[])[!+[]+!+[]]              23405
N     (+[![]]+[])[+[]]                    23669
e     (!![]+[])[!+[]+!+[]+!+[]]           29217
i     ([![]]+[][[]])[+!+[]+[+[]]]         33581
l     (![]+[])[!+[]+!+[]]                 24209
s     (![]+[])[!+[]+!+[]+!+[]]            29217
uu    ([][[]]+[])[+[]]+([][[]]+[])[+[]]   36983

Ini adalah JavaScript yang saya terjemahkan ke JSFuck:

score = 0;
for (u = 1; u < input.length; ++u)
  score += (difference = input.charCodeAt(u) - input.charCodeAt(u-1)) * difference;
return '#JSFuck, ' + score;

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 ...

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

(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)

Kartu domino
sumber
Anda abstidak perlu. Saya kira itu mungkin akan membuat perbedaan ... :)
Sanchises
6
Saya menemukan skor membingungkan. Anda harus menghapus spasi. Terutama karena output dari program Anda seharusnya JSFuck, 102280181.
mbomb007
Aku benar-benar lupa, aku benar-benar lupa meletakkan dua persegi pada awalnya, itulah sebabnya ada Math.ab. Akan memperbaiki.
Domino
@ mbomb007 Oh, baiklah kalau begitu, akan diperbaiki juga.
Domino
3

CJam, 23.663 19.389 11.547

"#CJam,"32A;clYew[]ULC;;;;::- 0$.*:+

Cobalah 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 mdan ,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 ...

Reto Koradi
sumber
3

JAVASCRIPT, 33911

$0123456789ABCDEFGHIJKLMNOPQRS=>/**/('#')+('JAVASCRIPT,')+(" ")+(($)/**/=0,($0123456789ABCDEFGHIJKLMNOPQRS[`split`]``[`map`]/**/(($$,$$$)/**/=>/**/($)/**/=Math[`pow`]/**/($0123456789ABCDEFGHIJKLMNOPQRS[T=`charCodeAt`]/**/($$$)+-($0123456789ABCDEFGHIJKLMNOPQRS[T]/**/(($$$)/**/>=6-5?/**/($$$)+-1:0.)),2)+($))),($))

Sejauh ini ini adalah salah satu optimasi paling konyol yang pernah saya lakukan dalam kode golf ...

Props to Neil untuk saran "spam komentar" = =

Mwr247
sumber
Saya pikir Anda dapat menghemat 5180 hanya dengan memasukkan /**/di tempat yang tepat.
Neil
3

JAVASCRIPT, 31520

Solusi ini secara signifikan lebih konyol sangat berbeda dari solusi saya yang lain, jadi saya merasa itu layak untuk jawabannya sendiri.

A=>/**/(($)/**/=/**/(''),('000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010/-,+*)(')/**/[`split`]``[`reduce`]/**/(($$,$$$,$$$$)/**/=>/**/($$$)/**/>7.-07?/**/(($)+=/**/((/**/String[`fromCharCode`]/**/)(($$$$)+-($$))),($$$$))/**/:/**/($$)),/**/eval/**/($))

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).

Mwr247
sumber
2

R, 68911 57183 53816 52224

Mengambil 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.

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))
MickyT
sumber
@nimi Terima kasih untuk itu, 2 macet karena berusaha membuatnya pendek :)
MickyT
2

Mathematica, 33552

A=ToExpression;A@ExportString[A@Characters@(**)"001000100010001101001101011000010111010001101000011001010110110101100001011101000110100101100011011000010010110000100000001000100011110000111110010101000110111101010011011101000111001001101001011011100110011101011011001000110010111000100011001001100100000001000100011010010110011001100110011001010111001001100101011011100110001101100101011100110100000001010100011011110100001101101000011000010111001001100001011000110111010001100101011100100100001101101111011001000110010101000000001000110101110100100110"(**),(**)"Bit"(**)]

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

"#Mathematica, "<>ToString[#.#&@Differences@ToCharacterCode@#]&

yang akan menjadi jawaban yang valid sendiri, mencetak 37.848.

Yang lainnya

A=ToExpression;A@ExportString[A@Characters@(**)"001..110"(**),(**)"Bit"(**)]

hanya menerjemahkan kode string biner dan menafsirkannya sebagai kode Mathematica. Perhatikan bahwa komentar kosong Mathematica (**)sangat "rendah noise" dan sebenarnya menghilangkan noise dari "s.

murphy
sumber
2

Java8: 117170 100508 99062 98890

Dengan bantuan ekspresi lambada dan penugasan sebaris variabel dapat mempersingkat kode ini sedikit.

A->{int B=0,D=0,E=0;char[] C=A.toCharArray();for(;D<C.length-1;)B+=(E=C[D]-C[++D])*E;return"#java, "+B;}
CoderCroc
sumber
A -> A9876543210; B -> $ 0123456; C -> A; D -> AA; E -> $ 0123456789
TheNumberOne
2

Java, 129300 128400 110930 106581 105101

B->{int A=0,C=A;char[]Z=B.toCharArray();for(;++C<Z.length;A=A+(Z[C]-Z[C-1])*(Z[C]-Z[C-1]));return\"#Java, \"+A;}

Tantangan 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 Bmenjadi string yang mewakili fungsi. Jangan lupa untuk menghindari tanda kutip ( ") saat meneruskan ini sebagai string.

TNT
sumber
2

Pyth, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Satu-satunya trik catatan yang digunakan di sini adalah pengkodean basis-256 #Pyth,, yang harganya jauh lebih murah daripada string itu sendiri.

++C38828542027820dsm^-ChdCed2,Vztz    Implicit: d=' ', z=input()
                             ,Vztz    Pair each char in the input with its neighbour
                   m                  Map d in the above to:
                      Chd               ASCII code of 1st char
                         Ced            ASCII code of 2nd char
                     -                  Difference between the two
                    ^       2           Squared
                  s                   Take the sum
  C38828542027820                     '#Pyth,'
++               d                    '#Pyth,' + ' ' + result, implicit print
Sok
sumber
2

M, 47033 52798

A9876543210(A9876543210) F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210
    Q "#M, "_AAA9876543210

Untuk menggunakan ini, kita harus menghindari tanda kutip dan "lolos" karakter spasi putih (yang signifikan dalam MUMPS!) Seperti:

>$$A9876543210^MYROUTINE("A9876543210(A9876543210)"_$C(9)_"F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210"_$C(10,9)_"Q ""#M, ""_AAA9876543210")
#M, 47033

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.

senshin
sumber
Bukankah Anda seharusnya menginisialisasi AAAA?
SSH
Juga karena kurangnya prioritas operator, Anda hanya dapat S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - harus memberikan yang lebih rendah skor ...
SSH
@ SSH Saya mengasumsikan tabel simbol bersih sebelum memanggil fungsi (jadi saya tidak perlu NEWbarang). Jadi ketika saya mulai melakukan aritmatika pada AAAA(sekarang AAA9876543210), ia dipaksa 0(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.)
senshin
Bagus! Selain itu, karena eksekusi dari kiri ke kanan, Anda tidak perlu tanda kurung sebelum ** 2
SSH
@ SSH Terima kasih, tidak tahu bagaimana mereka bisa masuk ke sana. Versi yang saya ukur sebenarnya tidak memilikinya, jadi nilainya masih sama.
senshin
1

Ruby, 118402

puts "#Ruby, #{a=0;aa=nil;File.read(ARGV[0]).each_byte{|aaa| aa||=aaa;a+=(aaa-aa)**2;aa=aaa};a}"

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.

PotatoOmeletteSandwich
sumber
1

C ++ 166345

void n(){int b=0,c,d;string a;cin >>a;for(c=1;c<a.length();++c){d=(a[c]-a[c-1]);b+=d*d;}cout<<"#C++, "<<b;}
EvgeniyZh
sumber
1

Perl, 93556

chomp($A=<>);$AAA=$AAAA=0;foreach$AAAAA(split'',$A){$AA=ord($AAAAA);$AAA+=($AAAA-$AA)**2 if($AAAA!=0);$AAAA=$AA}print'#Perl, '.$AAA

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 memformat ifseperti yang saya lakukan, dan mengapa saya menggunakan $AAAAAbukannya kekasih Perl $_.

Sayangnya, semua variabel dengan simbol di dalamnya hanya baca, jadi saya tidak bisa memanfaatkan kombinasi suka $#dan $$.

ASCIIThenANSI
sumber
1

F #, 136.718 130.303

let(A)=Seq.map;
(stdout.Write(Seq.sum(A(fun(AA)->AA*AA)(A((<||)(-))(((Seq.pairwise(A(int)(stdin.ReadToEnd())))))))))

Di mana ada \nsetelah ;.

pswg
sumber
1

POSIX Shell, 172026

{ while IFS= read -N 1 A; do A1=$(printf %d \'"$A");test "$A1" -eq 0 && break;case $A11 in "")A111=0;;*)A111=$((A1-A11));;esac;A11="$A1";A1111=$((A111**2+A1111));done;echo "# POSIX Shell, $A1111";}

Sayang sekali saya tidak bisa mendapatkan hasil yang sama dengan Pyth checker (178386) ...

Alois Mahdal
sumber
1. "Shell" bukan bahasa pemrograman. Ini seperti Bash. 2. Anda cukup membaca dari STDIN. Tidak perlu membaca kode sumbernya sendiri.
Dennis
@Dennis Terima kasih, diedit ... Meskipun saya tidak bisa mendapatkan hasil yang sama, mungkin masih ada bug (setidaknya sekali saya mendapatkan hasil yang sama tetapi tidak dalam versi "terkompresi") ...
Alois Mahdal
1

Lua, 171078 117896

Golf:

A=string AA=A.sub AAA=io.read()AAAA=#AAA AAA=AAA..AA(AAA,AAAA,AAAA)AAAAA=0 AAAAAA=A.byte for AAAAAAA=1,AAAA do AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))AAAAA=AAAAA+AAAAAAAA*AAAAAAAA end print(AAAAA)

Tidak Disatukan:

A=string 
AA=A.sub 
AAA=io.read()
AAAA=#AAA 
AAA=AAA..AA(AAA,AAAA,AAAA)
AAAAA=0 
AAAAAA=A.byte 
for AAAAAAA=1,AAAA do 
    AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))
    AAAAA=AAAAA+AAAAAAAA*AAAAAAAA 
end 

print(AAAAA)
Nikolai97
sumber
0

C ++, 49031

makro C ++ yang mengambil c-string dan menulis hasilnya ke output standar

<::>(auto(A))<%long(AAA)=0,AA=A<:0:>;while(*++A)<%AAA+=(*A-AA)*(*A-AA);AA=A<:0:>;%>cout<<"#C++, "<<AAA;%>

Cobalah online!

xibu
sumber
-3

C ++, 5

    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;

    void convertToASCII(string letter)
    {
        int count = 0;
        int ans = 0;
        int *diff = new int[]; //dynamic array

        for(int i=0; i<letter.length(); i++)
        {
            char x = letter[i]; //letter.at(i);

            if(i!=0){
                diff[i-1] = int(x)- int(letter[i-1]);
                count++;
            }
        }

        for(int j=0; j<count; j++){
            ans += pow(diff[j], 2.0);
        }

        cout << "#C++, " << ans << endl;
    }

    int main()
    {
        string plainText;
        cout << "Enter text: ";
        getline(cin, plainText);
        convertToASCII(plainText);
        system ("pause");
        return 0;
    }
Levaine
sumber
7
Selamat Datang di Programming Puzzles & Code Golf! Ini adalah jawaban yang valid, tetapi skor Anda untuk tantangan ini harus hasil teks program Anda dijalankan melalui program. Anda juga harus berusaha meminimalkan skor itu sebanyak mungkin. Coba lihat tips di halaman ini untuk melihat bagaimana Anda dapat mempersingkat kode Anda dan menurunkan skor Anda.
ETHproduksi