Fark fark yaratmamalı


40

Son zamanlarda şirketiniz çok sayıda yeni sistem yöneticisi seçti . Sadece bilgisayar ekranlarını izlemenin oldukça kısıtlayıcı olduğunu düşünüyorlar (60Hz yenileme hızı yeterli değil), böylece CPU veri yolunu bir DAC'ye bağladılar ve bunu duyabilecekleri şekilde sunucu odasındaki bir hoparlörde çaldılar. ila 20 kHz. Bir sorun: onlar elektrik mühendisleri değil, sistem yöneticileri ve konuşmacılarının kurulumları bozulmaya devam ediyor. Bunun, yazılım mühendislerinin anabilgisayarda derlediği koddaki bayt değerlerinde çok ani değişikliklerden kaynaklandığını tespit ettiler. Sysadmins, konuşmacı kurulumunda en nazik olan kodu kimin yapabileceğini görmek için küçük bir rekabete ev sahipliği yapıyor.

Meydan okuma

Göreviniz, ardışık baytlar arasında olabildiğince az farklılık gösteren, tercih edilen bir dilde bir program veya işlev oluşturmaktır (Hesaplama bölümüne bakın). Bu program kendi puanını hesaplama görevine sahip olacaktır.

Giriş

Bir ASCII dizgisi stdinveya dilinizin en yakın eşdeğeri veya bir işlev oluşturuyorsanız bir işlev girişi olarak. Programınız puanınızı hesaplamak için girdi olarak almak zorunda olacağından, programınız herhangi bir Unicode içeriyorsa Unicode'u desteklemelidir. Aksi takdirde, ASCII yeterlidir. Girişin en az 2 bayt uzunluğunda olduğu varsayılabilir.

Hesaplama

Dizenin her karakteri ASCII standardı kullanılarak sayısal eşdeğerine dönüştürülecektir. Ardından, tüm karakterler arasındaki fark önce kare olacak ve sonra toplanacaktır . Örneğin, dize abdbir puan alacak 1²+2²=5.

Çıktı

Çıktı, girişinize verilen başlık olacaktır. Bu, #tarafından yeni bir satır ve bir -(kısa çizgi) tarafından eklenmeli veya eklenmelidir . Ardından, programlama dilinizin adını, ardından virgül, boşluk ve ardından hesaplamanın sonucunu temsil eden bir tamsayı yazmalıdır. Örneğin

#C++, 98

geçerli çıktı olurdu. Çıktı, stdoutsizin dilinize veya en yakın eşdeğerinize veya işleve dönüş değeri olarak verilmelidir .

puanlama

Puanınız, programın girdi olarak programın kendisi tarafından hesaplanan değer olacaktır.

Düzenleme: Şimdi yeni satırları işlemeli, daha önce özür dilerim millet

İşte puan hesaplamasını doğrulamak için bir Pyth betiği.


1
Programın kendi kodu dışındaki herhangi bir şeyi yorumlaması gerekecek mi? Ve sadece netleştirmek için, ardışık iki eşit karakter 0 değeridir?
Daniel M.


1
@bopjesvla Güzel. Rasgele dizeler, ancak onların evrene sığabileceklerini varsayabilirsin. Veya bilgisayarınızda, bunun için.
Sanchises,

11
Unary'de geçerli bir cevap üreten ilk kişi kazanır!
ETHProductions

3
Şimdi çok geç, ancak Unary tarzı cevapları engelleme seçeneklerinden biri, eşit karakterler arasındaki farkı 1 olarak tanımlamak olacaktı. Ayrıca mantığı biraz daha ilginç hale getirecekti.
Reto Koradi 29:15

Yanıtlar:


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{}~~~"

Yukarıdaki program, 1.179.112 bayt uzunluğunda olan gerçek kaynak kodunu oluşturur.

Test yapmak

Kullanımı Java tercüman , kaynak kodu oluşturulur ve bunun gibi test edilebilir:

$ 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

Alternatif sürüm

36 puan pahasına - 265 final puanı için - kaynak kodunu% 99.92 kısaltabiliriz:

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

Bu sürümü CJam tercümanında online olarak deneyebilirsiniz .

Fikir

Kodu yürütmek istiyoruz

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

skoru mümkün olduğunca düşük tutmak. Bunu başarmak için, bu karakter dizisini karaktere göre (önce ve sonra birkaç işlem dışı) oluşturacağız ve sonucu değerlendiriyoruz.

Neyse ki, '(basma karakteri değişmez), ((azalma) ve )(artış) ardışık ASCII karakterleridir, bu nedenle keyfi karakterleri itmek nispeten ucuzdur.

  • Ardından ASCII karakterleri , sayıların kod noktasına bağlı olduğu yerlerde 'itilebilir .'()…)()

    Örneğin, +olarak itilebilir '())))(. 'Ve (, ve (ve arasındaki mesafe )1'dir. İzler )(birbirini iptal eder; onların tek işlevi, 'ardışık karakterlerle izlemenin (bir sonraki karaktere karşılık gelir) yolunu açmaktır .

    Bu şekilde basılan karakterler skoru 4 puan artıracak.

  • ASCII karakterleri daha önce , sayıların kod noktasına bağlı olduğu yerlerde 'itilebilir .''(…((

    Örneğin, #olarak itilebilir ''((((. Arasındaki mesafe 've (1'dir.

    Bu şekilde basılan karakterler skoru 2 puan artıracak.

  • ''(…(aslında tüm ASCII karakterleri için çalışıyor , çünkü Karakter 16 bit genişliğinde ve etrafına sarılıyor. Örneğin, 65,532 s ardından +itilebilir .''(

    Bu teknik, kodun 1.2 megabayt sürümünde kullanılır.

  • Karakter etkilenmeden bırakılarak karakter 'itilebilir ''.

kod

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.

6
........... wat
DLosc

Neredeyse bu dil bu kesin meydan okuma için inşa edilmiş gibi görünüyor. Güzel!
Domino

3
Lanet olsun. Sonunda CJam'i dezavantajlı hale getirecek bir meydan okuma yaptığımı düşündüm, çünkü bu genellikle 'erken' sembollerin ve 'geç' harflerin bir karışımı. Ama nooooo, tekrar ortaya çıkıp onu mahvedersin ... Şerefe!
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`(""++)

Kullanım (not: "kaçınılması gerekir):

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

"#Haskell, 71742"

""Haskell yorumlayıcısının türlerini anlamasına yardımcı olmak için boş dizeyi giriş dizisine hazırlarım. Bu tür çıkarım başarısız olmazsa, kod çok polimorfiktir. Gerisi her zamanki gibi iş: her karakteri ascii ile eşleştir, komşuluk farklılıkları, kareler, toplamalar ve dil adı hazırla.


6

> <>, 30227

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

Gah, başlık puanımı ikiye katladı; kendi programımın sözleriyle, n & oooooo! Bunu daha iyi hale getirmek için biraz zaman alacağım. Online çevirmene gerçekten yeni satırlar giremediğim için bu puanın kapalı olabileceğini de biliyorum ve resmi notta bir girdi yığını doldurmanın bir yolu olmadığından emin değilim.

Hiçbir şekilde tamamen optimize edilmemiş, ancak > <> komutlarındaki komutların göreceli yakınlığından (en azından ASCII karakterleri bakımından) tam olarak faydalanacaktır. Newline'ı girdi olarak kolayca gönderemedim, bu yüzden Pyth skoru denetleyicisini kullandım, ancak kullandığım bir sürü rastgele test vakasıyla eşleşiyor, bu yüzden bu konuda iyi olmalı.

İşte 30353'lük bir puan (bir satırdan beri doğru olması gereken):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;

Güzel,> <> 'da rekabetçi bir giriş!
Sanchises

5

Java, 66465 65506 62434

Şaşırtıcı derecede kısa. Dize yerine char dizesini kabul eder.

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

En iyi değişken isimlerini üretmek için bir program kullandım.


Bunu bir programda nasıl kullanırsınız? (Henüz java 8'in özelliklerine tam olarak aşina değilim)
aditsu


Demek ki, bunun için bir hedef fonksiyonel arayüz tanımlamalısınız ... tam olarak birinci sınıf bir nesne değil.
aditsu 11:15

@aditsu İsterseniz, İşlev <char [], String> işlevini de kullanabilirsiniz.
TheNumberOne

Oh anlıyorum… ((Function<char[],String>) ABCD->{…}).apply(…), teşekkürler. Bu lambdaların tip bağlamı olmadan tamamlanmamış olduğu görülüyor.
aditsu

4

K5, 25478

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

Oldukça basit bir çözüm. Bu, girişini bir dizge üzerinden alan bir işlevdir.


1
@ TimmyD Sabit!
kirbyfan64sos

4

Windows PowerShell ISE Sunucusu, 62978 63894 67960 77050

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

Düzen - $Adeğişkenden kurtulup yerine dize boyunca geriye doğru sayıp bazı anahtar kelimeleri CAPS'a dönüştürerek bazı noktaları kurtardı

Edit2 - $($HOST.NAME)yerine daha fazla puan kaydettiPowerShell

Düzen3 - değişken adlarını değiştirerek daha fazla puan kazandı ve çıktının üretilme şeklini değiştirdi.

Sayımızla adlandırılmış değişkenleri kullanır, çünkü "yakına" onlar $bizim cezamız daha azdır.

Bu ilginç değil normal golf teknikleri kullanır. Örneğin |%{$, 22534, |foreach{$sadece 8718'dir .

Bu muhtemelen teknikleri değiştirmeden en iyisine yakındır.


1
Bu tam olarak umduğum şeydi. Şerefe!
Sanchises,

4

MATLAB, 19214 39748 39444 38785 37593

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

Farkı azaltmak için Luis Mendo'ya teşekkür ederiz!

Giriş değişken adını değiştirerek gürültü sayısını azaltmak için NumberOne sayesinde!

Bu nasıl çalışır

  1. ansMATLAB'deki varsayılan değişkende saklanan isimsiz bir işlevi bildirir.
  2. İşlev, içinde saklanan bir dizgiyi alır ve dizgenin A9876543210kare komşu farklılıklarının toplamını yazdırır.
  3. diffBir dizide çift komşu farkları bulur ve bir dizi üretir length(A9876543210)-1. Kullanarak diffbir dize dizisinde, bu artığını alır doubleher karakterin ASCII kodları oluşturulur dizinin ve başka bir dizide ardışık çiftleri sonuçlarının farklılıkları.
  4. Kare farkların toplamını bulmak için, basitçe, bu fark dizisinin nokta çarpımını kendisinin aktarılması ile alırsınız. Yapmak diff(A9876543210)'aslında olduğundan daha fazla ses A9876543210.'çıkardı (teşekkürler Luis Mendo!)
  5. Sonuç ekrana yazdırılır.

Adsız işlevlere izin vermek PPCG'de olağandır. Yani kaldırabilirsinizA=
Luis Mendo

Ayrıca, norm(diff(B))^2daha kısadır
Luis Mendo

@LuisMendo - Bunu denedim. Bilimsel gösterimi yazdırır ve saygı duymaz %d.
rayryeng - Monica

Neden Bdeğişken bir isim kullanıyorsunuz? kapsamlıdır A=@(A)...çünkü MATLAB geçerlidir A.
Sanchises,

3
A -> A9876543210
TheNumberOne

4

QBasic, 38140

DENİZCİLİK SYNTAX İÇİN YAY

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

( QB64 ile test edilmiştir .)

Bu, dizeye giren ve cevabı veren tam bir programdır. Buradaki tek sınırlama, programın çok satırlı girdi alamamasıdır ( LINE INPUTtek bir satır olduğu sürece herhangi bir şeyi kaldırabilir).

gizlemesi:

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

Uygun bir şekilde, çok karakterli bir dizgenin ASCgeçirilmesi, ilk karakterin ASCII değerini verir. Ayrıca uygun olarak, sayısal değişkenler otomatik olarak sıfıra başlatılır.


Daha önce hiç QBasic kodlamadım, bu yüzden hatalıysam beni affet, fakat bazı ekstra puanlar kazanmak için değişkenleri büyük harflerle değiştirmek mümkün müdür?
ASCIIThenANSI

@DLosc Ah, tamam. Gerçek program olarak deobfuscated sürümünü okuyordum. : |
ASCIIThenANSI

3

Python 2,91026

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

Bir dize alan ve puanı döndüren adsız bir işlevi tanımlar. Çevrimiçi deneyin .

Bunun büyük kısmı oldukça basit bir fonksiyonel uygulamasıdır: zip Aile A[1:]daha sonra çıkarma, mektup çiftlerinin bir listesini almak için ordkare, s ve bir jeneratör ifade ile toplamı.

Jeneratör ifadenin içinde iki değişken sadece hiç aşağıdaki karakterleri takip ettiği gözlemleyin: ), ,, ve boşluk. Bunların üçünün de ASCII değerleri çok düşük olduğundan, her değişkeni mümkün olduğu kadar düşük ASCII değerinde bir karakterle sonlandırmamız gerekiyor. Python'da bir değişkeni sonlandırabilen en düşük karakter 0. Dahası, tek bir büyük sıçramayı iki küçük sıçramaya bölmek zorunda olduğumuz her fırsat, puanı A0düşürür : 289'a mal olur, ancak A90sadece 145'tir ve A9876543210parazit olur 73.

(Bu yaklaşım lambda değişkenine yardımcı olmadıA , muhtemelen [bir olayda takip etti .)


3

JSFuck, 144420642

Şuradan oluştur:

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

Yapıştırın JSFuck.com JSFuck bunu derlemek için 'ın küçük giriş kutusunda. Sonuç 112701 karakter uzunluğunda bir senaryo, bu yüzden buraya koyamıyorum. Bu betiğin son iki karakteri parantez içindedir, girişi aralarına koyun.

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

Programın bilgisayar üzerinde kendini değerlendirmesi neredeyse 20 saniye sürüyor.


açıklama

Bunun üzerinde çalışmak için daha fazla zamanım oldu, bu yüzden oturdum ve değişken isimlerini optimize etmeye çalıştım. İşte puan değerlerine göre kullanmaya değer değişken isimleri.

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

JSFuck'a çevirdiğim JavaScript:

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

JSFuck.com'un tercümanına daha yakından baktım ve değerlendirme fonksiyonunun nasıl çalıştığını anladım. "Eval source" işaretlendiğinde, kod kendi kendine çalışan bir JSFuck işlevi haline gelir. Bununla birlikte, girişi elde etmek için, işlev içindeki [0] argümanlarına erişmemiz gerekir. Bu bizim son JS kodumuzu getiriyor.

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

(Önceki sürümümün neden bundan daha düşük bir puana sahip olduğunu merak ediyorsanız, bunun nedeni, JS olarak değerlendirilmesi gereken bir dize döndüren bir JSFuck programı olmasıydı.


Sizin absgereksizdir. Sanırım bu sadece bir fark yaratabilir ... :)
Sanchises 29:15

6
Skor kafa karıştırıcı buldum. Boşlukları kaldırmalısınız. Özellikle programınızın çıktısı olması gerektiği için JSFuck, 102280181.
mbomb007 29:15

@ sanchises gerçekten, ilk önce kare iki koymak için unuttum, bu yüzden bir Math.abs vardı. Düzeltecek.
Domino

@ mbomb007 Oh, tamam o zaman da düzeltecek.
Domino

3

CJam, 23663 19389 11547

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

Çevrimiçi deneyin

Stratejik olarak daha fazla karakter ekleyerek bunun neredeyse sonsuz şekilde itilebileceğini hissetmeye başlıyor. Ama burada azalan bir dönüş noktasına ulaşmaya başladığımı düşünüyorum, bu yüzden şimdilik duracağım. Mesela, sahip ULC;;;olduğum yerde , tüm alfabeyi 26 geriye ve ardından geri kullanabiliyordum ;, ancak kazançlar küçülüp küçülüyor.

Şimdiye kadar bıraktığım en büyük boşluk ilk dizgede mve ile ,arasında. Ondan kurtulmak için makul bir şey bulamadım. Eminim yollar vardır. Ama bunu sınıra zorlarsam, Dennis'in çözümüne benzemeye başlayabilir ...


3

JAVASCRIPT, 33911

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

Bu şimdiye kadar yaptığım kod golfünde yaptığım en saçma optimizasyonlardan biri.

"Yorum spam'ı" önerisi için Neil’e aittir = P


Sadece /**/uygun yerlere takarak 5180'i kurtarabileceğinizi düşünüyorum .
Neil

3

JAVASCRIPT, 31520

Bu çözüm diğerinden çok daha saçma oldu ve ben de kendi cevabını hakettiğini hissettim.

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

7306 karakter, çoğu o 0/1 dizgisine kodlanmış asıl program ve geri kalanını basitçe çözmek için. Gerekli karakter değerini elde etmek için her bir '1' indeksini ekleyerek önceki '1' indeksini alarak çalışır. Daha sonra, esas olarak sorunu çözmek için standart bir golf programı olan (sadece yaklaşık 105 karakter olan) gerçek işleve giren dizgisini değerlendirir.


2

R, 68.911 57.183 53.816 52224

STDIN'den bir dize alır ve onu raw aracılığıyla bir tamsayıya dönüştürür. Diffler, kareler ve elde edilen vektörü toplar. Sonuç bir dizge olarak döndürülür. Değişken ad ipucu için @nimi'ye teşekkür ederiz.

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))

@nimi Bunun için teşekkürler, 2 kısa tutmaya çalışırken sıkışmış :)
MickyT

2

Mathematica, 33552

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

Bu kod, bir giriş dizesinin "gürültüsünü" hesaplayan adsız bir işlevi değerlendirir. İkili verilerin ASCII temsilinin esasen “sessiz” olduğu gerçeğinden faydalanır. Gördüğünüz ikili veri dizesidir.

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

37848, kendi başına geçerli bir cevap olurdu.

Diğer her Şey

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

sadece ikili dizgenin kodunu çözer ve Mathematica kodu olarak yorumlar. Mathematica'nın boş yorumunun (**)çok "düşük gürültü" olduğunu ve "s'den gelen gürültüyü ortadan kaldırdığını unutmayın .


2

Java8: 117170 100508 99062 98890

Lambada ifade ve değişken inline ataması sayesinde bu kodu biraz kısaltabilirsiniz.

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;}

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;}

Bu meydan okuma aslında en kısa çözümü bulmaktan çok, kullanılacak karakterleri ve optimizasyonu daha derin düşünmemi sağladı. Numarayı düşürmek için çalışmaya devam edeceğim.

Bu, işlevi Btemsil eden dize olan bir lambda işlevidir. Bunu "bir dize olarak geçirirken , tırnak ( ) ' dan kaçmayı unutmayın .


2

Pyth, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Burada kullanılan tek not numarası #Pyth,, dizginin kendisinden çok daha ucuz olan base-256 kodlamasıdır .

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

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

Bunu kullanmak için, alıntılardan kaçmalı ve boşluk karakterlerinden (MUMPS!

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

"M" nin "MUMPS" için alternatif bir isim olduğuna dikkat edin - hangisinin doğru olduğu uygulayıcıları arasında anlaşmazlık var. Doğal olarak, burada daha kısa seçeneği seçtim.


AAAA'yı başlatmamalı mıydın?
SSH

Ayrıca operatör öncelikleri eksikliği nedeniyle, sadece S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - daha düşük puan ...
SSH

@SSH İşlevi çağırmadan önce temiz bir sembol tablosu alıyorum (bu yüzden NEWdoldurmam gerekmiyor ). Bu yüzden AAAA(şimdi AAA9876543210) üzerinde aritmetik işlem yapmaya başladığımda , zorlamaya 0başlıyor (belki de bu sadece bir Caché uygulama detayı mı? Buna karşı test edilecek bir GT.M kurulumum yok). Operatör öncelikleri konusuna iyi çağrı; Tamamen soldan sağa işlemler açısından düşünmeyi her zaman zor buluyorum. (Ayrıca M'nin bir üs işletme operatörü olduğunu da unuttum - CRUD uygulamaları yazarken sıkça ortaya çıkan bir şey değil.)
senshin

Güzel! Ayrıca, soldan sağa yürütme nedeniyle ** 2
SSH

@SSH Teşekkürler, oraya nasıl girdiklerini bilmiyorum. Gerçekte ölçtüğüm sürümde bulunmuyor, bu yüzden skor hala aynı.
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}"

Bir dosyadaki gibi komut satırı üzerinden okur ruby diff.rb /path/to/file. Geliştirilmesi gereken oda var, ve şu an üzerinde çalışıyorum.


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;}

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

Bunu biraz daha kesmeye çalışacağım.

Kıvrımlı kaşlı ayraçların ( {ve }, ASCII 123 ve 125) ve alt çizginin ( _, ASCII 95) çok pahalı olduğu ve diğer tüm karakterlerin 30-70 aralığında olduğu ve bu yüzden yaptığım gibi biçimlendirdiğim için ortaya çıktı if. neden $AAAAAPerl’in sevgilisi yerine kullanıyorum $_.

Ne yazık ki, içinde semboller olan tüm değişkenler salt okunur, bu nedenle $#ve gibi kombinasyonlardan yararlanamıyorum $$.


1

F #, 136718 130303

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

Bir \nsonra bir olduğu yerde ;.


1

POSIX Kabuğu, 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";}

çok kötü Pyth checker (178386) ile aynı sonucu alamıyorum ...


1. "Kabuk" bir programlama dili değildir. Bu Bash'e benziyor. 2. Sadece STDIN'den okuyabilirsiniz. Kaynak kodun kendisini okumasına gerek yok.
Dennis,

@Dennis Düzenlendi, düzeltildi ... Aynı sonucu elde edemesem de, belki hala bir hata var (en azından bir kere aynı sonucu aldım ancak "sıkıştırılmış" sürümde değil) ...
Alois Mahdal

1

Lua, 171078 117896

golfed:

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)

Ungolfed:

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)

0

C ++, 49031

c-string alan ve sonucu standart çıktıya yazan bir C ++ makrosu

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

Çevrimiçi deneyin!


-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;
    }

7
Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! Bu geçerli bir cevaptır, ancak bu zorluk için puanınız programın metninin program boyunca çalıştırılmasının sonucudur. Ayrıca, bu puanı mümkün olduğunca en aza indirmeye çalışmalısınız. Kodunuzu nasıl kısaltacağınızı ve puanınızı nasıl azaltabileceğinizi görmek için bu sayfalardaki ipuçlarına göz atın.
ETHProductions
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.