Der Unterschied sollte keinen Unterschied machen

40

Ihr Unternehmen hat kürzlich eine neue Gruppe äußerst engagierter Systemadministratoren eingestellt. Sie haben das Gefühl, dass nur das Betrachten von Computerbildschirmen sehr einschränkend ist (ich meine, eine Bildwiederholfrequenz von 60 Hz ist einfach NICHT genug). Deshalb haben sie den CPU-Datenbus an einen DAC angeschlossen und spielen diesen über einen Lautsprecher durch den Serverraum, damit sie ihn hören können bis 20kHz. Ein Problem: Sie sind Sysadmins, keine Elektroingenieure, und ihre Lautsprecherkonfiguration bricht immer wieder zusammen. Sie stellten fest, dass dies auf zu plötzliche Änderungen der Byte-Werte im Code zurückzuführen ist, den die Software-Ingenieure auf dem Mainframe kompilieren. Die Sysadmins veranstalten jetzt einen kleinen Wettbewerb, um herauszufinden, wer den Code erstellen kann, der für ihre Lautsprecherkonfiguration am schonendsten ist.

Herausforderung

Ihre Aufgabe ist es, ein Programm oder eine Funktion in einer Sprache Ihrer Wahl zu erstellen , die zwischen aufeinanderfolgenden Bytes so wenig wie möglich Unterschiede aufweist (siehe Abschnitt Berechnung). Dieses Programm hat die Aufgabe, seine eigene Punktzahl zu berechnen.

Eingang

Eine ASCII-Zeichenfolge in stdinoder die nächstgelegene Entsprechung Ihrer Sprache oder als Funktionseingabe, wenn Sie eine Funktion erstellen. Da sich Ihr Programm zur Berechnung Ihrer Punktzahl selbst als Eingabe verwenden muss, sollte Ihr Programm Unicode unterstützen, wenn es Unicode enthält. Ansonsten ist ASCII ausreichend. Es kann davon ausgegangen werden, dass die Eingabe mindestens 2 Byte lang ist.

Berechnung

Jedes Zeichen der Zeichenfolge wird nach dem ASCII-Standard in sein numerisches Äquivalent konvertiert. Dann wird der Unterschied zwischen allen Zeichen zuerst quadriert und dann summiert . Beispielsweise abderhält die Zeichenfolge eine Punktzahl von 1²+2²=5.

Ausgabe

Ausgabe ist der Titel Ihres Eintrags. Dies bedeutet, dass ein vorangestelltes #Zeichen oder ein angefügtes Zeichen und ein -(Bindestrich) eingefügt werden sollten . Anschließend sollte der Name Ihrer Programmiersprache ausgegeben werden, gefolgt von einem Komma, einem Leerzeichen und einer Ganzzahl, die das Ergebnis der Berechnung darstellt. Beispielsweise

#C++, 98

wäre eine gültige Ausgabe. Die Ausgabe sollte in stdoutoder in der Sprache erfolgen, die Ihrer Funktion am nächsten kommt, oder als Rückgabewert für Ihre Funktion.

Wertung

Ihre Punktzahl ist der von Ihrem Programm berechnete Wert, wobei das Programm selbst als Eingabe dient.

Bearbeiten: Sollte jetzt mit Zeilenumbrüchen umgehen, sorry für früher, Leute

Hier ist ein Pyth-Skript zur Überprüfung der Punktzahlberechnung.

Sanchises
quelle
1
Muss das Programm etwas anderes als seinen eigenen Code interpretieren? Und nur um zu verdeutlichen, sind zwei aufeinanderfolgende gleiche Zeichen ein Wert von 0?
Daniel M.
10
uh .
Bopjesvla
1
@bopjesvla Gut. Beliebige Zeichenfolgen, aber Sie können davon ausgehen, dass sie in das Universum passen. Oder auf Ihrem Computer.
Sanchises
11
Die erste Person, die in Unary eine gültige Antwort erstellt, gewinnt!
ETHproductions
3
Zu spät, aber eine Möglichkeit, unäre Antworten zu verhindern, wäre gewesen, den Unterschied zwischen gleichen Zeichen als 1 zu definieren. Wäre die Logik auch etwas interessanter gewesen.
Reto Koradi

Antworten:

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

Das obige Programm generiert den eigentlichen Quellcode, der 1.179.112 Byte lang ist.

Testen

Mit dem Java-Interpreter kann der Quellcode folgendermaßen generiert und getestet werden:

$ 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

Alternative Version

Bei 36 Punkten - für eine Endnote von 265 - können wir den Quellcode um 99,92% kürzer machen:

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

Sie können diese Version online im CJam-Interpreter testen .

Idee

Wir wollen den Code ausführen

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

Halten Sie die Punktzahl so niedrig wie möglich. Um dies zu erreichen, werden wir diese Zeichenfolge Zeichen für Zeichen erstellen (mit ein paar No-Ops davor und danach) und das Ergebnis auswerten.

Glücklicherweise sind '(Push-Zeichen-Literal), ((Dekrement) und )(Inkrement) aufeinanderfolgende ASCII-Zeichen, sodass das Pushen beliebiger Zeichen relativ kostengünstig ist.

  • ASCII-Zeichen nach 'können als gedrückt werden '()…)(, wobei die Anzahl von )dem Codepunkt abhängt.

    Beispielsweise +kann so geschoben werden '())))(. Der Abstand zwischen 'und (, und (und )ist 1. Die folgenden )(heben sich gegenseitig auf; Ihre einzige Funktion besteht darin, den Weg für das Folgende '(entsprechend dem nächsten Zeichen) mit aufeinanderfolgenden Zeichen zu ebnen .

    Charaktere, die auf diese Weise gedrückt werden, erhöhen die Punktzahl um 4 Punkte.

  • ASCII-Zeichen davor 'können als gedrückt werden ''(…(, wobei die Anzahl von (vom Codepunkt abhängt.

    Beispielsweise #kann so geschoben werden ''((((. Der Abstand zwischen 'und (beträgt 1.

    Charaktere, die auf diese Weise gedrückt werden, erhöhen die Punktzahl um 2 Punkte.

  • ''(…(Funktioniert eigentlich für alle ASCII-Zeichen, da Character 16 Bit breit ist und umbrochen wird. Zum Beispiel +kann gedrückt werden als '', gefolgt von 65.532 (s.

    Diese Technik wird in der 1,2-Megabyte-Version des Codes verwendet.

  • Der Charakter 'kann so verschoben werden '', dass die Punktzahl nicht beeinflusst wird.

Code

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
quelle
6
........... wat
DLosc
Es sieht fast so aus, als ob diese Sprache genau für diese Herausforderung entwickelt wurde. Nett!
Domino
3
Verdammt. Ich dachte, ich hätte endlich eine Herausforderung gemeistert, die CJam benachteiligen würde, da es oft eine Mischung aus "frühen" Symbolen und "späten" Buchstaben ist. Aber nein, du tauchst auf und machst es wieder kaputt ... Prost!
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`(""++)

Verwendung (Hinweis: "muss maskiert werden):

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

"#Haskell, 71742"

Ich stelle der ""Eingabezeichenfolge die leere Zeichenfolge voran , um dem Haskell-Interpreter beim Ermitteln der Typen zu helfen. Ohne fehlgeschlagene Typinferenz ist der Code zu polymorph. Der Rest ist wie gewohnt: Ordnen Sie jedes Zeichen ASCII zu, erstellen Sie eine Liste mit Nachbardifferenzen, Quadrat, Summe und vorangestelltem Sprachnamen.

nimi
quelle
6

> <>, 30227

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

Gah, der Titel hat meine Punktzahl verdoppelt; in den Worten meines eigenen Programms, n & oooooo! Ich nehme mir später etwas Zeit, um das zu verbessern. Ich weiß auch, dass dieses Ergebnis möglicherweise falsch ist, da ich im Online-Interpreter keine Zeilenumbrüche eingeben kann und ich nicht sicher bin, ob es eine Möglichkeit gibt, einen Eingabestapel für den offiziellen zu füllen.

Auf keinen Fall vollständig optimiert, sondern die relative Nähe (zumindest in Bezug auf ASCII-Zeichen) der Befehle in> <> voll ausgenutzt. Ich konnte den Zeilenvorschub nicht einfach als Eingabe senden, also habe ich den Pyth-Score-Checker verwendet, aber er passt zu einer Reihe von zufälligen Testfällen, die ich verwendet habe, daher sollte dies in Ordnung sein.

Hier ist eine mit einer Punktzahl von 30353 (was korrekt sein sollte, da es sich um eine Zeile handelt):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;
cole
quelle
Schön, ein wettbewerbsfähiger Einstieg in> <>!
Sanchises
5

Java, 66465 65506 62434

Überraschend kurz. Akzeptiert ein Zeichen-Array anstelle einer Zeichenfolge.

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

Ich habe ein Programm verwendet, um die besten Variablennamen zu generieren.

Die Nummer eins
quelle
Wie würden Sie dies in einem Programm verwenden? (Ich bin noch nicht ganz vertraut mit Java 8-Funktionen)
aditsu
@aditsu ideone.com/0yy6id
TheNumberOne
Oh, also müssen Sie eine Zielfunktionsschnittstelle dafür definieren ... nicht gerade ein erstklassiges Objekt.
Aditsu
@aditsu Sie können auch die Funktion <char [], String> verwenden, wenn Sie möchten.
TheNumberOne
Oh ich verstehe ... ((Function<char[],String>) ABCD->{…}).apply(…), danke. Diese Lambdas scheinen ohne den Typenkontext ziemlich unvollständig zu sein.
Aditsu
4

K5, 25478

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

Ziemlich einfache Lösung. Dies ist eine Funktion, deren Eingabe über einen String erfolgt.

kirbyfan64sos
quelle
1
@TimmyD behoben !!
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

Bearbeiten - speicherte einige Punkte, indem die $AVariable entfernt wurde und stattdessen rückwärts durch die Zeichenfolge gezählt wurde. Außerdem wurden einige Schlüsselwörter in CAPS konvertiert

Edit2 - speicherte einige weitere Punkte mit $($HOST.NAME)anstelle vonPowerShell

Edit3 - speicherte weitere Punkte durch Tauschen von Variablennamen und änderte die Art und Weise, wie die Ausgabe generiert wird.

Verwendet Variablen, die mit Zahlen benannt sind, da sie "näher" sind, $sodass unsere Strafe geringer ist.

Es ist interessant, keine regulären Golftechniken anzuwenden. Zum Beispiel |%{$ist 22534, während |foreach{$nur 8718 ist.

Dies ist wahrscheinlich nahezu optimal, ohne die Techniken zu ändern.

AdmBorkBork
quelle
1
Das war genau das, was ich hatte gehofft , für. Prost!
Sanchises,
4

MATLAB, 19214 39748 39444 38785 37593

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

Vielen Dank an Luis Mendo für die weitere Reduzierung der Differenz!

Vielen Dank an NumberOne für die Reduzierung des Rauschens durch Ändern des Namens der Eingangsvariablen!

Wie das geht

  1. Deklariert eine anonyme Funktion, die in der Standardvariablen ansin MATLAB gespeichert ist
  2. Die Funktion nimmt einen gespeicherten String auf A9876543210und gibt die Summe der quadrierten Nachbardifferenzen des Strings aus.
  3. difffindet paarweise benachbarte Unterschiede in einem Array und erzeugt ein Array von length(A9876543210)-1. Durch die Verwendung diffeines String-Arrays wird dieses in ein doubleArray umgewandelt, in dem die ASCII-Codes der einzelnen Zeichen generiert werden und die Unterschiede der aufeinanderfolgenden Paare zu einem anderen Array führen.
  4. Um die Summe der quadrierten Differenzen zu ermitteln, nehmen Sie einfach das Skalarprodukt dieses Differenzarrays mit sich selbst transponiert. Tatsächlich verursachte diff(A9876543210)'das mehr Lärm als mit A9876543210.'(danke Luis Mendo!)
  5. Das Ergebnis wird auf dem Bildschirm ausgedruckt.
rayryeng - Setzen Sie Monica wieder ein
quelle
In PPCG ist es üblich, unbenannte Funktionen zuzulassen. So können Sie entfernenA=
Luis Mendo
Auch norm(diff(B))^2ist kürzer
Luis Mendo
@ LuisMendo - Versuchte das. Es druckt die wissenschaftliche Notation aus und respektiert die %d.
Rayryeng - Wiedereinsetzung von Monica
Warum verwenden Sie Bals Variablennamen? A=@(A)...ist gültiges MATLAB, da AGültigkeitsbereich.
Sanchises
3
A -> A9876543210
TheNumberOne
4

QBasic, 38140

YAY für SHOUTY SYNTAX

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

(Getestet mit QB64 .)

Dies ist ein vollständiges Programm, das die Zeichenfolge eingibt und die Antwort ausgibt. Die einzige Einschränkung besteht darin, dass das Programm keine mehrzeiligen Eingaben akzeptiert ( LINE INPUTkann alles verarbeiten, solange es sich um eine einzelne Zeile handelt).

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

Wenn Sie eine Zeichenfolge mit mehreren Zeichen übergeben, erhalten Sie ASCden ASCII-Wert des ersten Zeichens. Auch numerische Variablen werden bequemerweise automatisch auf Null initialisiert.

DLosc
quelle
Ich habe noch nie zuvor in QBasic programmiert. Verzeihen Sie mir, wenn ich falsch liege. Wäre es jedoch möglich, die Variablen durch Großbuchstaben zu ersetzen, um zusätzliche Punkte zu sparen?
ASCIIThenANSI
@ DLosc Ah, OK. Ich habe gerade die deobfuscated Version als aktuelles Programm gelesen. : |
ASCIIThenANSI
3

Python 2, 91026

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

Definiert eine anonyme Funktion, die eine Zeichenfolge verwendet und die Punktzahl zurückgibt. Probieren Sie es online aus .

Das meiste davon ist eine ziemlich einfache funktionale Implementierung: zip Amit A[1:], um eine Liste von Buchstabenpaaren zu erhalten, dann subtrahieren Sie deren ords, Quadrat und Summe mit einem Generatorausdruck.

Beachten Sie, dass die beiden Variablen innerhalb des Generators Ausdruck werden immer nur durch die folgenden Zeichen folgen: ), ,und Raum. Alle drei haben sehr niedrige ASCII-Werte. Daher müssen wir jede Variable mit einem möglichst niedrigen ASCII-Wert beenden. Das niedrigste Zeichen, mit dem eine Variable in Python beendet werden kann, ist 0. Darüber hinaus A0verringert jede Gelegenheit, die wir haben, um einen großen Sprung in zwei kleinere Sprünge aufzuteilen, die Punktzahl: kostet 289, ist aber A90nur 145 und A9876543210ist dürftig 73.

(Dieser Ansatz hat der Lambda-Variablen nicht geholfen A, wahrscheinlich, weil er [bei einem Vorkommen gefolgt ist .)

DLosc
quelle
3

JSFuck, 144420642

Bauen Sie es aus:

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

Fügen Sie dies in das kleine Eingabefeld von JSFuck.com ein, um es in JSFuck zu kompilieren. Das Ergebnis ist ein 112701 Zeichen langes Skript, daher kann ich es hier nicht einfügen. Die letzten beiden Zeichen dieses Skripts sind Klammern, setzen Sie die Eingabe dazwischen.

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

Es dauert fast 20 Sekunden, bis sich das Programm auf meinem Computer ausgewertet hat.


Erläuterung

Ich hatte mehr Zeit, um daran zu arbeiten, also setzte ich mich und versuchte, die Variablennamen zu optimieren. Hier sind die Variablennamen, die es wert sind, in der Reihenfolge ihrer Punktzahl verwendet zu werden.

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

Hier ist das JavaScript, das ich in JSFuck übersetzt habe:

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

Ich habe mir den Übersetzer von JSFuck.com genauer angesehen und herausgefunden, wie seine Bewertungsfunktion funktioniert. Wenn "Eval source" aktiviert ist, wird der Code zu einer selbstausführenden JSFuck-Funktion. Um die Eingabe zu erhalten, müssen wir jedoch innerhalb der Funktion auf Argumente [0] zugreifen. Dies bringt unseren endgültigen JS-Code auf ...

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

(Wenn Sie sich fragen, warum meine vorherige Version eine niedrigere Punktzahl als diese hatte, dann weil es ein JSFuck-Programm war, das eine Zeichenfolge zurückgab, die als JS ausgewertet werden musste. Aus diesem Grund habe ich sie auch nicht in der Veröffentlichung belassen.)

Domino
quelle
Du absbist unnötig. Ich denke, das könnte den Unterschied ausmachen ... :)
Sanchises
6
Ich fand die Partitur verwirrend. Sie sollten die Leerzeichen entfernen. Zumal die Ausgabe deines Programms sein soll JSFuck, 102280181.
mbomb007
@sanchises in der Tat hatte ich eigentlich vergessen, zuerst das Quadrat zwei zu setzen, weshalb es ein Math.abs gab. Wird reparieren.
Domino,
@ mbomb007 Oh, ok, dann wird das auch behoben.
Domino,
3

CJam, 23663, 19389, 11547

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

Probieren Sie es online aus

Es fängt an, sich so anzufühlen, als könnte dies durch strategisches Hinzufügen weiterer Charaktere fast endlos vorangetrieben werden. Aber ich denke, dass ich anfange, einen Punkt zu erreichen, an dem die Renditen abnehmen, also höre ich vorerst auf. Wo ich zum Beispiel habe ULC;;;, könnte ich das ganze Alphabet rückwärts gefolgt von 26 verwenden ;, aber die Gewinne werden immer kleiner.

Bei weitem die größte Lücke, die ich gelassen habe, ist zwischen dem mund dem ,in der Anfangssaite. Ich habe nichts Vernünftiges gefunden, um es loszuwerden. Ich bin sicher, es gibt Wege. Aber wenn ich es bis ans Limit treibe, sieht es vielleicht nach Dennis 'Lösung aus ...

Reto Koradi
quelle
3

JAVASCRIPT, 33911

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

Dies ist bei weitem eine der albernsten Optimierungen, die ich jemals in einem Code Golf gemacht habe ...

Fordern Sie Neil für den "Kommentar-Spam" -Vorschlag auf = P

Mwr247
quelle
Ich denke, Sie können 5180 einfach retten, indem Sie /**/an geeigneten Stellen einfügen .
Neil
3

JAVASCRIPT, 31520

Diese Lösung war sehr viel lächerlicher als meine andere, und deshalb hatte ich das Gefühl, sie hätte ihre eigene Antwort verdient.

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

Das sind 7306 Zeichen, von denen das meiste das eigentliche Programm ist, das in diese 0/1-Zeichenfolge codiert ist, und der Rest nur, um sie zu decodieren. Es funktioniert, indem der Index jeder '1' minus dem Index der vorherigen '1' abgerufen wird, um den erforderlichen Zeichenwert zu erhalten. Anschließend wird die resultierende Zeichenfolge in die eigentliche Funktion umgewandelt, bei der es sich im Wesentlichen um ein Standardgolfprogramm zur Lösung des Problems handelt (das selbst nur etwa 105 Zeichen umfasst).

Mwr247
quelle
2

R, 68911 57183 53816 52224

Nimmt einen String aus STDIN und konvertiert ihn über RAW in eine Ganzzahl. Diffs, quadriert und summiert den resultierenden Vektor. Das Ergebnis wird als String zurückgegeben. Vielen Dank an @nimi für den Variablennamen-Tipp.

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))
MickyT
quelle
@ Nimi Danke für das, war 2 fest es versucht, es kurz zu halten :)
MickyT
2

Mathematica, 33552

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

Dieser Code wird zu einer unbenannten Funktion ausgewertet, die das "Rauschen" einer Eingabezeichenfolge berechnet. Dabei wird ausgenutzt, dass die ASCII-Darstellung von Binärdaten im Wesentlichen "rauschfrei" ist. Die angezeigten Binärdaten sind die Zeichenfolge

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

Das wäre eine gültige Antwort für sich gewesen und hätte 37848 Punkte gebracht.

Alles andere

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

dekodiert einfach die Binärzeichenfolge und interpretiert sie als Mathematica-Code. Beachten Sie, dass der leere Kommentar von Mathematica (**)sehr "rauscharm" ist und tatsächlich Rauschen aus dem "s entfernt.

Murphy
quelle
2

Java8: 117170 100508 99062 98890

Mit Hilfe des Lambada-Ausdrucks und der Inline-Zuweisung von Variablen kann dieser Code ein wenig verkürzt werden.

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

Diese Herausforderung brachte mich dazu, tiefer über die zu verwendenden und zu optimierenden Charaktere nachzudenken, als die kürzeste Lösung zu finden. Ich werde weiter daran arbeiten, die Zahl zu senken.

Dies ist eine Lambda-Funktion, wobei Bes sich um die Zeichenfolge handelt, die die Funktion darstellt. Vergessen Sie nicht, die Anführungszeichen ( ") zu umgehen, wenn Sie dies als Zeichenfolge übergeben.

TNT
quelle
2

Pyth, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Der einzige Trick, der hier verwendet wird, ist die Base-256-Codierung #Pyth,, die weitaus weniger kostet als der String selbst.

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

Um dies zu verwenden, müssen wir Anführungszeichen und Leerzeichen (die in MUMPS! Von Bedeutung sind) wie folgt maskieren:

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

Beachten Sie, dass "M" ein alternativer Name für "MUMPS" ist - es gibt Meinungsverschiedenheiten unter den Praktizierenden darüber, welcher richtig ist. Natürlich habe ich hier die kürzere Variante gewählt.

Senshin
quelle
Sollten Sie AAAA nicht initialisieren?
SSH
Auch wegen fehlender Operatorprioritäten kann man nur S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - einen niedrigeren Wert angeben Ergebnis ...
SSH
@SSH Ich gehe von einer sauberen Symboltabelle aus, bevor ich die Funktion aufrufe NEW. Wenn ich AAAA(jetzt AAA9876543210) mit dem Rechnen beginne , wird dies erzwungen 0(vielleicht ist das nur ein Detail der Caché-Implementierung? Ich habe keine GT.M-Installation zum Testen). Guter Anruf auf der Betreiberprioritätensache; Es fällt mir immer schwer, rein von links nach rechts zu denken. (Ich habe auch vergessen, dass M einen Potenzierungsoperator hat - es kommt nicht oft vor, wenn Sie CRUD-Anwendungen schreiben.)
Senshin
Nett! Wegen der Ausführung von links nach rechts benötigen Sie keine Klammern vor ** 2
SSH
@SSH Danke, keine Ahnung, wie die da reingekommen sind. Die Version, die ich tatsächlich gemessen habe, hat sie nicht, daher ist die Punktzahl immer noch dieselbe.
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}"

Es liest eine Datei über die Befehlszeile ein, z ruby diff.rb /path/to/file. Es gibt Raum für Verbesserungen, und daran arbeite ich gerade.

PotatoOmeletteSandwich
quelle
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
quelle
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

Ich werde versuchen, das noch etwas zu reduzieren.

Es stellt sich heraus , dass die geschweiften Klammern ( {und }, ASCII 123 und 125) und der Unterstrich ( _ASCII 95) sehr teuer sind , da alle anderen Charaktere rund um den Bereich von 30-70 sind, weshalb ich die formatiert if, wie ich es tat, und warum ich $AAAAAanstelle von Perls Geliebtem benutze $_.

Leider sind alle Variablen mit Symbolen schreibgeschützt, sodass ich Kombinationen wie $#und nicht nutzen kann $$.

ASCIIThenANSI
quelle
1

F #, 136718 130303

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

Wo gibt es ein \nnach dem ;.

pswg
quelle
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";}

Schade, ich kann nicht das gleiche Ergebnis wie der Pyth-Checker (178386) erhalten ...

Alois Mahdal
quelle
1. "Shell" ist keine Programmiersprache. Das sieht aus wie Bash. 2. Sie können einfach von STDIN lesen. Es ist nicht erforderlich, den Quellcode selbst zu lesen.
Dennis
@Dennis Danke, bearbeitet ... Obwohl ich nicht das gleiche Ergebnis erzielen kann, gibt es vielleicht immer noch einen Fehler (mindestens einmal habe ich das gleiche Ergebnis
erzielt,
1

Lua, 171078, 117896

Golf gespielt:

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)
Nikolai97
quelle
0

C ++, 49031

Ein C ++ - Makro, das eine C-Zeichenfolge verwendet und das Ergebnis in die Standardausgabe schreibt

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

Probieren Sie es online!

xibu
quelle
-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
quelle
7
Willkommen bei Programming Puzzles & Code Golf! Dies ist eine gültige Antwort, aber Ihre Punktzahl für diese Herausforderung sollte das Ergebnis des Textes Ihres Programms sein, der durch das Programm geführt wird. Sie sollten auch versuchen, diese Punktzahl so gering wie möglich zu halten. Sehen Sie sich die Tipps auf diesen Seiten an, um herauszufinden, wie Sie Ihren Code verkürzen und Ihre Punktzahl senken können.
ETHproductions