Różnica nie powinna mieć znaczenia

40

Twoja firma niedawno zatrudniła nową grupę niezwykle oddanych administratorów. Uważają, że samo oglądanie ekranów komputera jest dość ograniczające (to znaczy, częstotliwość odświeżania 60 Hz po prostu NIE wystarcza), więc podłączyli szynę danych procesora do przetwornika DAC i odtwarzali to na głośniku przez serwerownię, aby mogli usłyszeć do 20 kHz. Jeden problem: to sysadmini, a nie inżynierowie elektrycy, a ich konfiguracja głośników ciągle się psuje. Uznali, że jest to spowodowane zbyt gwałtownymi zmianami wartości bajtów w kodzie, które inżynierowie oprogramowania kompilują na komputerze mainframe. Administratorzy sysadminów organizują teraz małą konkurencję, aby dowiedzieć się, kto może zrobić kod, który jest najbardziej łagodny dla ich konfiguracji głośników.

Wyzwanie

Twoim zadaniem jest stworzenie programu lub funkcji w wybranym języku, który ma możliwie najmniejszą różnicę między kolejnymi bajtami (patrz sekcja Obliczanie). Ten program będzie musiał obliczyć swój wynik.

Wkład

Ciąg ASCII stdinlub najbliższy odpowiednik twojego języka, lub jako dane wejściowe funkcji, jeśli tworzysz funkcję. Ponieważ twój program będzie musiał wziąć się za dane wejściowe, aby obliczyć twój wynik, twój program powinien obsługiwać Unicode, jeśli zawiera on Unicode. W przeciwnym razie ASCII jest wystarczający. Można założyć, że dane wejściowe mają co najmniej 2 bajty.

Obliczenie

Każdy znak ciągu zostanie przekonwertowany na jego numeryczny odpowiednik, przy użyciu standardu ASCII. Następnie różnica między wszystkimi postaciami zostanie najpierw podniesiona do kwadratu, a następnie zsumowana . Na przykład ciąg abdotrzyma wynik 1²+2²=5.

Wydajność

Dane wyjściowe będą stanowić tytuł wpisu. Oznacza to, że powinien być poprzedzony przez a #lub dołączony przez nowy wiersz i -(myślnik). Następnie powinna wypisać nazwę języka programowania, po której następuje przecinek, spacja, a następnie liczba całkowita reprezentująca wynik obliczeń. Na przykład

#C++, 98

byłoby prawidłowe wyjście. Dane wyjściowe powinny być podane w stdoutnajbliższym odpowiedniku języka lub jako wartość zwracana do funkcji.

Punktacja

Twój wynik będzie wartością obliczoną przez twój program, z samym programem jako danymi wejściowymi.

Edycja: powinien obsługiwać teraz nowe wiersze, przepraszam za wcześniej, ludzie

Oto skrypt Pyth do weryfikacji obliczenia wyniku.

Sanchises
źródło
1
Czy program będzie musiał interpretować cokolwiek innego niż własny kod? I dla wyjaśnienia, dwa kolejne równe znaki mają wartość 0?
Daniel M.
10
uh .
bopjesvla
1
@bopjesvla Fine. Dowolne łańcuchy, ale możesz założyć, że pasują one do wszechświata. Albo na twoim komputerze.
Sanchises
11
Pierwsza osoba, która stworzy prawidłową odpowiedź w Unary wygrywa!
ETHprodukcje
3
Teraz jest już za późno, ale jedną z opcji zapobiegania odpowiedzi w stylu Unary byłoby zdefiniowanie różnicy między równymi postaciami jako 1. Również uczyniłoby to logikę nieco bardziej interesującą.
Reto Koradi,

Odpowiedzi:

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

Powyższy program generuje rzeczywisty kod źródłowy o długości 1 179 112 bajtów.

Testowanie

Za pomocą interpretera Java można wygenerować i przetestować kod źródłowy w następujący sposób:

$ 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

Alternatywna wersja

Kosztem 36 punktów - dla końcowego wyniku 265 - możemy skrócić kod źródłowy o 99,92%:

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

Możesz wypróbować tę wersję online w interpretatorze CJam .

Pomysł

Chcemy wykonać kod

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

utrzymywanie wyniku na jak najniższym poziomie. Aby to osiągnąć, zbudujemy ten ciąg znaków po znaku (z kilkoma przerwami przed i po) i oceniamy wynik.

Na szczęście, '(dosłowny znak dosłowny), ((zmniejszenie) i )(przyrost) są kolejnymi znakami ASCII, więc popychanie dowolnych znaków jest stosunkowo niedrogie.

  • Znaki ASCII po 'mogą być wypychane jako '()…)(, gdzie liczba )zależy od punktu kodowego.

    Na przykład +można nacisnąć jako '())))(. Odległość pomiędzy 'a (i (a )oznacza 1. wzdłużny )(znoszą się nawzajem; ich jedyną funkcją jest utorowanie drogi kolejnym '(odpowiadającym następnemu znakowi) kolejnym znakom.

    Postacie popchnięte w ten sposób podniosą wynik o 4 punkty.

  • Znaki ASCII wcześniej 'mogą być wypychane jako ''(…(, gdzie liczba (zależy od punktu kodowego.

    Na przykład #można nacisnąć jako ''((((. Odległość między 'i (wynosi 1.

    Postacie popchnięte w ten sposób podniosą wynik o 2 punkty.

  • ''(…(faktycznie działa dla wszystkich znaków ASCII, ponieważ znak ma szerokość 16 bitów i jest zawijany. Na przykład +można ''nacisnąć, a następnie 65 532 (s.

    Ta technika jest używana w 1,2-megabajtowej wersji kodu.

  • Postać 'może zostać popchnięta jako '', pozostawiając wynik niezmieniony.

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.
Dennis
źródło
6
........... wat
DLosc
Wygląda na to, że ten język został stworzony do tego właśnie wyzwania. Miły!
Domino
3
Cholerny. Pomyślałem, że w końcu podjąłem wyzwanie, które postawiłoby CJam w niekorzystnej sytuacji, ponieważ często jest to kombinacja „wczesnych” symboli i „późnych” liter. Ale nieeee, pojawiasz się i niszczysz go ponownie ... Pozdrawiam!
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`(""++)

Użycie (uwaga: "należy uciec):

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

"#Haskell, 71742"

Przygotowuję pusty ciąg ""do ciągu wejściowego, aby pomóc tłumaczowi Haskell w określeniu typów. Bez tego wnioskowanie typu nie powiedzie się, kod jest zbyt polimorficzny. Reszta to zwykły biznes: zamapuj każdą postać na ascii, zrób listę różnic sąsiadów, kwadrat, sumę i przedrostek języka.

nimi
źródło
6

> <>, 30227

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

Gah, tytuł podwoił mój wynik; słowami mojego własnego programu, n & oooooo! Później zajmę trochę czasu, aby to poprawić. Wiem również, że ten wynik może być wyłączony, ponieważ tak naprawdę nie mogę wprowadzić nowego wiersza w tłumaczu online i nie jestem pewien, czy istnieje sposób na wypełnienie stosu wejściowego na oficjalnym.

W żadnym wypadku nie jest całkowicie zoptymalizowany, ale w pełni wykorzystuje względną bliskość (przynajmniej pod względem znaków ASCII) poleceń w> <>. Nie mogłem łatwo przesłać nowego wiersza jako danych wejściowych, więc użyłem sprawdzania wyniku Pyth, ale pasuje on do wielu losowych przypadków testowych, z których korzystałem, więc powinno być dobrze.

Oto jeden z wynikiem 30353 (który powinien być poprawny, ponieważ jest to jedna linia):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;
kapusta
źródło
Fajne, konkurencyjne wejście w> <>!
Sanchises
5

Jawa, 66465 +65.506 62434

Zaskakująco krótki. Akceptuje tablicę char zamiast łańcucha.

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

Użyłem programu do wygenerowania najlepszych nazw zmiennych.

Numer jeden
źródło
Jak wykorzystasz to w programie? (Nie jestem jeszcze w pełni zaznajomiony z funkcjami java 8)
aditsu
@aditsu ideone.com/0yy6id
TheNumberOne
Och, więc musisz zdefiniować docelowy interfejs funkcjonalny ... nie do końca obiekt pierwszej klasy.
aditsu
@aditsu Możesz także użyć funkcji <char [], String>, jeśli chcesz.
TheNumberOne
Och, rozumiem ... ((Function<char[],String>) ABCD->{…}).apply(…)dzięki. Te lambdas wydają się być dość niekompletne bez kontekstu typu.
aditsu
4

K5, 25478

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

Całkiem proste rozwiązanie. Jest to funkcja, która pobiera dane wejściowe za pomocą ciągu znaków.

kirbyfan64sos
źródło
1
@ TimmyD Naprawiono !!
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

Edytuj - zapisano niektóre punkty, pozbywając się $Azmiennej i zamiast tego odliczając wstecz ciąg, a także przez konwersję niektórych słów kluczowych na CAPS

Edytuj2 - zapisano kilka punktów, używając $($HOST.NAME)zamiastPowerShell

Edit3 - zapisano kilka punktów, zamieniając nazwy zmiennych i zmieniając sposób generowania danych wyjściowych.

Używa zmiennych o nazwach liczbowych, ponieważ są one „bliżej”, $więc nasza kara jest mniejsza.

Interesujące jest nie stosowanie regularnych technik gry w golfa. Na przykład |%{$wynosi 22534, a |foreach{$tylko 8718.

Prawdopodobnie jest to prawie optymalne bez zmiany technik.

AdmBorkBork
źródło
1
To było dokładnie to, co miałem nadzieję. Twoje zdrowie!
Sanchises
4

MATLAB, +19.214 39748 39444 +38.785 37593

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

Podziękowania dla Luisa Mendo za dalsze zmniejszenie różnicy liczą się dalej!

Dzięki NumberOne za zmniejszenie liczby szumów poprzez zmianę nazwy zmiennej wejściowej!

Jak to działa

  1. Deklaruje anonimową funkcję przechowywaną w anszmiennej domyślnej w MATLAB
  2. Funkcja pobiera zapisany ciąg znaków A9876543210i wypisuje sumę kwadratowych sąsiadujących różnic ciągu.
  3. diffznajduje pary sąsiadujące różnice w tablicy i tworzy tablicę length(A9876543210)-1. Za pomocą difftablicy ciągów rzutuje się to na doubletablicę, w której generowane są kody ASCII każdego znaku, a różnice między kolejnymi parami dają inną tablicę.
  4. Aby znaleźć sumę kwadratów różnic, wystarczy wziąć iloczyn skalarny tej tablicy różnic z siebie transponowanymi. Robienie diff(A9876543210)'faktycznie wytwarzało więcej hałasu niż z A9876543210.'(dzięki Luis Mendo!)
  5. Wynik zostanie wydrukowany na ekranie.
rayryeng - Przywróć Monikę
źródło
W PPCG zwykle jest dozwolone zezwalanie na funkcje bez nazw. Możesz więc usunąćA=
Luis Mendo
Jest też norm(diff(B))^2krótszy
Luis Mendo
@LuisMendo - Próbowałem tego. Drukuje notację naukową i nie szanuje %d.
rayryeng - Przywróć Monikę
Dlaczego używasz Bjako nazwy zmiennej? A=@(A)...jest prawidłowy MATLAB, ponieważ Ama zasięg.
Sanchises
3
A -> A9876543210
TheNumberOne
4

QBasic, 38140

YAY FOR 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

(Testowane z QB64 .)

Jest to pełny program, który wprowadza ciąg znaków i wysyła odpowiedź. Jedynym ograniczeniem jest to, że program nie może pobierać danych wielowierszowych ( LINE INPUTmoże obsłużyć wszystko, o ile jest to pojedyncza linia).

Odbarwione:

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

Dogodnie przekazanie ciągu wieloznakowego w celu ASCuzyskania wartości ASCII pierwszego znaku. Również dogodnie zmienne numeryczne są automatycznie inicjowane do zera.

DLosc
źródło
Nigdy wcześniej nie kodowałem w QBasic, więc wybacz mi, jeśli się mylę, ale czy byłoby możliwe zastąpienie zmiennych dużymi literami, aby zaoszczędzić dodatkowe punkty?
ASCIIThenANSI
@DLosc Ah, OK. Czytałem odszyfrowaną wersję jako rzeczywisty program. : |
ASCIIThenANSI
3

Python 2, 91026

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

Definiuje anonimową funkcję, która pobiera ciąg znaków i zwraca wynik. Wypróbuj online .

Większość z nich jest dość prostą implementacją funkcjonalną: zip Az, A[1:]aby uzyskać listę par liter, a następnie odjąć ich ords, kwadrat i sumę za pomocą wyrażenia generatora.

Zauważmy, że obie zmienne wewnątrz generatora wypowiedzi są zawsze tylko następnie następujących znaków: ), ,, i przestrzeń. Wszystkie trzy mają bardzo niskie wartości ASCII, więc powinniśmy zakończyć każdą zmienną znakiem o możliwie najniższej wartości ASCII. Najniższym znakiem, który może zakończyć zmienną w Pythonie, jest 0. Co więcej, każda szansa na podzielenie jednego dużego skoku na dwa mniejsze skoki obniży wynik: A0kosztuje 289, ale A90wynosi tylko 145 i A9876543210jest marna 73.

(To podejście nie pomogło zmiennej lambda A, prawdopodobnie dlatego, że następuje po niej [jedno wystąpienie).

DLosc
źródło
3

JSFuck, 144420642

Zbuduj z:

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

Wklej to do małego pola wprowadzania JSFuck.com , aby skompilować je do JSFuck. Wynikiem jest skrypt o długości 112701 znaków, więc nie mogę go tutaj umieścić. Ostatnie dwa znaki tego skryptu to nawiasy, wstaw dane między nimi.

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

Program potrzebuje prawie 20 sekund na ocenę komputera.


Wyjaśnienie

Mam więcej czasu, aby nad tym popracować, więc usiadłem i spróbowałem zoptymalizować nazwy zmiennych. Oto nazwy zmiennych, których warto używać, w kolejności ich wyniku.

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

Oto JavaScript, który przetłumaczyłem na JSFuck:

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

Przyjrzałem się bliżej tłumaczowi JSFuck.com i zorientowałem się, jak działa jego funkcja oceny. Po zaznaczeniu opcji „Źródło ewaluacyjne” kod stanie się samoczynnie wykonującą się funkcją JSFuck. Aby uzyskać dane wejściowe, musimy jednak uzyskać dostęp do argumentów [0] z funkcji. To prowadzi nasz ostateczny kod JS do ...

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

(Jeśli zastanawiasz się, dlaczego moja poprzednia wersja miała niższy wynik niż ten wynik, to dlatego, że był to program JSFuck, który zwrócił ciąg, który musiał zostać oceniony jako JS. To dlatego też nie zostawiłem go w poście)

Domino
źródło
Twój absjest niepotrzebny. Myślę, że to może zrobić różnicę ... :)
Sanchises
6
Uznałem wynik za mylący. Powinieneś usunąć spacje. Zwłaszcza, że ​​wyjście twojego programu powinno być JSFuck, 102280181.
mbomb007
@ święta, rzeczywiście zapomniałem najpierw postawić kwadrat dwa, i dlatego powstał Math.abs. Naprawię.
Domino
@ mbomb007 Aha, ok, też to naprawię.
Domino
3

CJam, 23663 19389 11547

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

Wypróbuj online

Zaczyna się wydawać, że można to popychać prawie bez końca, strategicznie dodając więcej postaci. Ale myślę, że zaczynam osiągać punkt malejących zwrotów, więc na razie przestanę. Na przykład tam, gdzie mam ULC;;;, mógłbym użyć całego alfabetu do tyłu, a następnie 26 ;, ale zyski stają się coraz mniejsze.

Zdecydowanie największa luka mi pozostało to między mi ,w początkowym łańcucha. Nie znalazłem nic rozsądnego, żeby się tego pozbyć. Jestem pewien, że istnieją sposoby. Ale jeśli przekroczę granicę, może zacząć wyglądać jak rozwiązanie Dennisa ...

Reto Koradi
źródło
3

JAVASCRIPT, 33911

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

Jest to zdecydowanie jedna z najgłupszych optymalizacji, jakie kiedykolwiek przeprowadziłem w golfa kodowym ...

Podpowiada Neilowi ​​za sugestię „komentarz spam” = P

Mwr247
źródło
Myślę, że możesz zaoszczędzić 5180, po prostu wstawiając /**/w odpowiednie miejsca.
Neil
3

JAVASCRIPT, 31520

To rozwiązanie było znacznie bardziej absurdalne, bardzo różniło się od mojego drugiego, więc czułem, że zasługuje na własną odpowiedź.

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

To 7306 znaków, z których większość to rzeczywisty program zakodowany w tym ciągu 0/1, a reszta po prostu go dekoduje. Działa poprzez uzyskanie indeksu każdego „1” minus indeks poprzedniego „1”, aby uzyskać niezbędną wartość znaku. Następnie ewaluuje otrzymany ciąg znaków do faktycznej funkcji, która jest zasadniczo standardowym programem golfowym służącym do rozwiązania problemu (który sam w sobie ma tylko około 105 znaków).

Mwr247
źródło
2

R, 68911 57183 53816 52224

Pobiera ciąg ze STDIN i konwertuje go na liczbę całkowitą za pomocą raw. Różni, kwadratuje i sumuje wynikowy wektor. Wynik jest zwracany jako ciąg. Dzięki @nimi za wskazówkę dotyczącą nazwy zmiennej.

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))
MickyT
źródło
@nimi Dziękuję za to, że 2 utknąłem, starając się krótko: :)
MickyT
2

Mathematica, 33552

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

Ten kod przekształca się w funkcję bez nazwy, która oblicza „szum” ciągu wejściowego. Wykorzystuje fakt, że reprezentacja danych binarnych w ASCII jest zasadniczo „bezszumowa”. Dane binarne, które widzisz, to ciąg

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

która sama byłaby prawidłową odpowiedzią, zdobywając 37848 punktów.

Wszystko inne

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

po prostu dekoduje ciąg binarny i interpretuje go jako kod Mathematica. Zauważ, że pusty komentarz Mathematiki (**)jest bardzo „cichy” i faktycznie usuwa hałas z "s.

murphy
źródło
2

Java8: 117170 100508 99062 98890

Za pomocą wyrażenia lambada i wbudowanego przypisania zmiennej można nieco skrócić ten kod.

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
źródło
A -> A9876543210; B -> 0123456 USD; C -> A; D -> AA; E -> 0123456789 $
TheNumberOne
2

Java, 129300 128400 +110.930 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;}

To wyzwanie skłoniło mnie do głębszego zastanowienia się nad postaciami i optymalizacją postaci, niż znalezieniem najkrótszego rozwiązania. Będę pracował nad obniżeniem liczby.

Jest to funkcja lambda, Bktóra jest łańcuchem reprezentującym funkcję. Nie zapomnij uciec od cudzysłowu ( "), przekazując to jako ciąg.

TNT
źródło
2

Pyth, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Jedyną sztuczką używaną tutaj jest kodowanie base-256 #Pyth,, które kosztuje znacznie mniej niż sam ciąg.

++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
źródło
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

Aby tego użyć, musimy uciec z cudzysłowów i „escape” białych znaków (które są znaczące w MUMPS!) W następujący sposób:

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

Zauważ, że „M” to alternatywna nazwa dla „MUMPS” - wśród praktyków nie ma zgody co do tego, która z nich jest poprawna. Oczywiście wybrałem tutaj krótszą opcję.

senshin
źródło
Nie powinieneś inicjalizować AAAA?
SSH
Również z powodu braku priorytetów operatora, możesz po prostu S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - powinno dać niższą wynik ...
SSH
@SSH Zakładam czystą tablicę symboli przed wywołaniem funkcji (więc nie muszę się NEWzapychać). Więc kiedy zaczynam robić arytmetykę na AAAA(teraz AAA9876543210), jest ona zmuszana 0(może to tylko szczegół implementacji Caché? Nie mam instalacji GT.M do przetestowania). Dobre wezwanie do priorytetów operatora; Zawsze trudno mi myśleć w kategoriach operacji od lewej do prawej. (Zapomniałem również, że M ma operatora potęgowania - nie jest to coś, co często pojawia się, gdy piszesz aplikacje CRUD.)
senshin
Miły! Ponadto, ze względu na wykonanie od lewej do prawej, nawiasy klamrowe nie są potrzebne przed ** 2
SSH
@SSH Dzięki, nie wiem, jak się tam dostali. Wersja, którą faktycznie zmierzyłem, nie ma jej, więc wynik jest nadal taki sam.
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}"

Czyta w pliku za pomocą wiersza polecenia, takiego jak ruby diff.rb /path/to/file. Jest miejsce do poprawy, nad czym teraz pracuję.

Ziemniak Ziemniaczany Kanapka
źródło
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
źródło
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

Spróbuję jeszcze bardziej to ograniczyć.

Okazuje się, że nawiasy klamrowe ( {i }ASCII 123 i 125) oraz podkreślenie ( _, ASCII 95) są bardzo drogie, ponieważ wszystkie inne znaki są w zakresie 30-70, dlatego sformatowałem iftak, jak to zrobiłem, i dlaczego używam $AAAAAzamiast ukochanej Perla $_.

Niestety, wszystkie zmienne z symbolami są tylko do odczytu, więc nie mogę skorzystać z kombinacji takich jak $#i $$.

ASCIIThenANSI
źródło
1

F #, 136718 130303

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

Gdzie jest \npo ;.

pswg
źródło
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";}

szkoda, że ​​nie mogę uzyskać takiego samego wyniku jak Pyth Checker (178386) ...

Alois Mahdal
źródło
1. „Shell” nie jest językiem programowania. To wygląda jak Bash. 2. Możesz po prostu czytać ze STDIN. Nie trzeba czytać samego kodu źródłowego.
Dennis
@Dennis Dzięki, zredagowano ... Chociaż nie mogę uzyskać tego samego wyniku, może nadal występuje błąd (przynajmniej raz dostałem ten sam wynik, ale nie w wersji „skompresowanej”) ...
Alois Mahdal
1

Lua, 171078 117896

Gra w golfa:

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)

Nie golfowany:

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
źródło
0

C ++, 49031

makro C ++, które pobiera ciąg c i zapisuje wynik na standardowym wyjściu

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

Wypróbuj online!

Xibu
źródło
-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
źródło
7
Witamy w Programowaniu Puzzle i Code Golf! To poprawna odpowiedź, ale twój wynik w tym wyzwaniu powinien wynikać z uruchomienia przez program tekstu programu. Powinieneś także spróbować zminimalizować ten wynik w jak największym stopniu. Spróbuj przejrzeć wskazówki na tych stronach, aby dowiedzieć się, jak skrócić kod i obniżyć wynik.
ETHprodukcje