Разница не должна иметь значения


40

Ваша компания недавно наняла новую группу чрезвычайно преданных сисадминов. Они считают, что просто смотреть на компьютерные экраны довольно ограниченно (я имею в виду, частота обновления 60 Гц просто НЕ достаточна), поэтому они подключили шину данных ЦП к ЦАП и воспроизводят ее на динамике через серверную комнату, чтобы они могли слышать до 20 кГц. Одна проблема: это системные администраторы, а не инженеры-электрики, и их настройки динамиков постоянно ломаются. Они полагали, что это вызвано слишком резкими изменениями значений байтов в коде, который программисты компилируют на мэйнфрейме. Теперь системные администраторы проводят небольшую конкуренцию, чтобы выяснить, кто может создавать код, наиболее удобный для настройки их динамиков.

Вызов

Ваша миссия состоит в том, чтобы создать программу или функцию на выбранном языке, который имеет как можно меньше различий между последовательными байтами (см. Раздел «Расчет»). Эта программа будет иметь задачу расчета собственного балла.

вход

Строка ASCII stdinили ближайший эквивалент вашего языка, или как ввод функции, если вы создаете функцию. Поскольку ваша программа должна сама принимать данные для подсчета очков, ваша программа должна поддерживать Unicode, если она содержит Unicode. В противном случае ASCII достаточно. Предполагается, что входные данные имеют длину не менее 2 байтов.

расчет

Каждый символ строки будет преобразован в его числовой эквивалент, используя стандарт ASCII. Затем разница между всеми персонажами будет сначала возведена в квадрат, а затем суммирована . Например, строка abdполучит оценку 1²+2²=5.

Выход

Результатом будет заголовок вашей записи. Это означает, что к нему следует добавить #или добавить новую строку и -(тире). Затем он должен вывести имя вашего языка программирования, затем запятую, пробел, а затем целое число, представляющее результат вычисления. Например

#C++, 98

будет действительным выводом. Вывод должен быть дан stdoutлибо на вашем языке, ближайшем к нему, либо в качестве возвращаемого значения для вашей функции.

счет

Ваша оценка будет рассчитанным значением вашей программы, с самой программой в качестве входных данных.

Изменить: должны обрабатывать переводы строки, извините за раньше, ребята

Вот скрипт Pyth для проверки подсчета очков.


1
Придется ли программе интерпретировать что-либо, кроме собственного кода? И просто чтобы уточнить, два последовательных одинаковых символа имеют значение 0?
Даниэль М.


1
@bopjesvla Отлично. Произвольные строки, но вы можете предположить, что они вписываются во вселенную. Или на вашем компьютере, если на то пошло.
Санчиз

11
Первый человек, который создаст правильный ответ в Унарных победах!
ETHproductions

3
Слишком поздно, но одним из вариантов предотвращения ответов в унарном стиле было бы определение разницы между равными символами как 1. Также это сделало бы логику немного более интересной.
Рето Коради

Ответы:


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

Вышеуказанная программа генерирует фактический исходный код длиной 1 179 112 байт.

тестирование

Используя интерпретатор Java , исходный код может быть сгенерирован и протестирован следующим образом:

$ 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

Альтернативная версия

При стоимости 36 баллов - для итоговой оценки 265 - мы можем сократить исходный код на 99,92%:

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

Вы можете попробовать эту версию онлайн в интерпретаторе CJam .

идея

Мы хотим выполнить код

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

сохраняя счет как можно ниже. Чтобы достичь этого, мы собираемся строить эту строку символ за символом (с несколькими операциями без и до и после) и оценивать результат.

К счастью, '(буквенный символ вставки), ((уменьшение) и )(приращение) являются последовательными символами ASCII, поэтому добавление произвольных символов является относительно недорогим.

  • Символы ASCII после 'могут быть переданы как '()…)(, где число )зависит от кодовой точки.

    Например, +можно нажать как '())))(. Расстояние между 'и (, и (и )составляет 1. Трейлинг )(отменяет друг друга; их единственная функция - проложить путь для следующего '(соответствующего следующему символу) последовательными символами.

    Персонажи, толкаемые таким образом, повысят счет на 4 балла.

  • ASCII-символы перед 'могут быть переданы как ''(…(, где число (зависит от кодовой точки.

    Например, #можно нажать как ''((((. Расстояние между 'и (1.

    Персонажи, толкаемые таким образом, повысят счет на 2 балла.

  • ''(…(на самом деле работает для всех символов ASCII, так как Character имеет ширину 16 бит и обтекание. Например, +можно нажать как '', а затем 65 532 (с.

    Этот метод используется в 1,2-мегабайтной версии кода.

  • Персонаж 'может быть выдвинут как '', оставляя счет неизменным.

Код

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
........... Ват
DLosc

Похоже, этот язык был создан именно для этой задачи. Ницца!
Домино

3
Черт. Я подумал, что наконец-то бросил вызов, который поставил CJam в невыгодное положение, поскольку это часто смесь «ранних» символов и «поздних» букв. Но оооооооооооочень ты это делаешь и снова разрушаешь ... Ура!
Санчиз

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`(""++)

Использование (примечание: "должно быть экранировано):

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

"#Haskell, 71742"

Я добавляю пустую строку ""к входной строке, чтобы помочь интерпретатору Haskell выяснить типы. Без этого вывод типа завершается неудачно, код слишком полиморфен. В остальном все как обычно: сопоставьте каждый символ с ascii, составьте список различий между соседями, квадрат, сумму и название языка препинта.


6

> <>, 30227

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

Гах, название удвоило мой счет; в словах моей собственной программы n & oooooo! Я возьму некоторое время спустя, чтобы сделать это лучше. Я также знаю, что эта оценка может быть отключена, поскольку я не могу ввести новые строки в онлайн-переводчике, и я не уверен, что есть способ заполнить входной стек официальным.

Ни в коем случае не полностью оптимизирован, но в полной мере использует некоторые преимущества относительной близости (по крайней мере, с точки зрения символов ASCII) команд в> <>. Я не мог легко представить новую строку в качестве входных данных, поэтому я использовал проверку оценки Pyth, но она подходит для нескольких случайных тестовых случаев, которые я использовал, поэтому с этим все должно быть в порядке.

Вот один с результатом 30353 (который должен быть правильным, так как это одна строка):

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

Здорово, конкурсная запись в> <>!
Санчиз

5

Ява, 66465 65506 62434

Удивительно коротко. Принимает массив символов вместо строки.

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

Я использовал программу для генерации лучших имен переменных.


Как бы вы использовали это в программе? (Я пока не совсем знаком с функциями Java 8)
aditsu


О, так что вы должны определить целевой функциональный интерфейс для него ... не совсем первоклассный объект.
aditsu

@aditsu Вы также можете использовать функцию <char [], String>, если хотите.
TheNumberOne

О, я вижу ... ((Function<char[],String>) ABCD->{…}).apply(…), спасибо. Эти лямбды кажутся довольно неполными без контекста типа.
aditsu

4

К5, 25478

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

Довольно простое решение. Это функция, которая получает свой ввод через строку.


1
@TimmyD Исправлено !!
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

Редактировать - сохранить некоторые точки, избавившись от $Aпеременной и вместо этого посчитав обратно через строку, а также преобразовав некоторые ключевые слова в CAPS

Edit2 - сохранил еще несколько точек, используя $($HOST.NAME)вместоPowerShell

Edit3 - сохранил еще несколько точек, поменяв имена переменных и изменив, как генерируется вывод.

Использует переменные, названные числами, так как они «ближе», $поэтому наш штраф меньше.

Интересно не использовать обычные техники игры в гольф. Например, |%{$22534, а |foreach{$только 8718.

Это, вероятно, близко к оптимальному без изменения методов.


1
Это было именно то , на что я надеялся. Ура!
Санчиз

4

МАТЛАБ , 19214 39748 39444 38785 37593

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

Спасибо Луису Мендо за дальнейшее уменьшение разницы!

Спасибо NumberOne за уменьшение количества шумов путем изменения имени входной переменной!

Как это работает

  1. Объявляет анонимную функцию, которая хранится в ansпеременной по умолчанию в MATLAB
  2. Функция принимает строку, хранящуюся в ней, A9876543210и выводит сумму квадратов соседних разностей строки.
  3. diffнаходит попарно соседние различия в массиве и создает массив length(A9876543210)-1. Используя diffстроковый массив, он преобразуется в doubleмассив, где генерируются коды ASCII каждого символа, а различия последовательных пар приводят к другому массиву.
  4. Чтобы найти сумму квадратов разностей, вы просто берете точечное произведение этого массива разностей с самим транспонированным. Выполнение на diff(A9876543210)'самом деле производило больше шума, чем с A9876543210.'(спасибо Луис Мендо!)
  5. Результат выводится на экран.

В PPCG обычно разрешены безымянные функции. Таким образом, вы можете удалитьA=
Луис Мендо

Кроме того, norm(diff(B))^2короче
Луис Мендо

@ LuisMendo - попробовал это. Он печатает научную нотацию и не уважает %d.
rayryeng - Восстановить Монику

Почему вы используете Bв качестве имени переменной? A=@(A)...действует MATLAB, так Aкак область видимости.
Sanchises

3
A -> A9876543210
TheNumberOne

4

QBasic, 38140

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

Это полная программа, которая вводит строку и выводит ответ. Единственным ограничением здесь является то, что программа не может принимать многострочный ввод ( LINE INPUTможет обрабатывать что угодно, если это только одна строка).

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

Удобно, передавая многосимвольную строку, чтобы получить ASCзначение ASCII первого символа. Также удобно, чтобы числовые переменные автоматически инициализировались в ноль.


Я никогда раньше не кодировал в QBasic, так что извините, если я ошибаюсь, но можно ли заменить переменные заглавными буквами, чтобы сохранить некоторые дополнительные точки?
ASCIIThenANSI

@DLosc Ах, хорошо. Я читал deobfuscated версию как фактическую программу. : |
ASCIIThenANSI

3

Python 2, 91026

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

Определяет анонимную функцию, которая принимает строку и возвращает счет. Попробуйте онлайн .

Большинство это довольно просто функциональная реализация: застежка - молния Aс , A[1:]чтобы получить список пар букв, а затем вычесть их ordс, квадрат и просуммировать с выражением генератора.

Заметим , что две переменные внутри выражения генератора только когда - либо следуют следующие символы: ), ,и пространство. Все три из них имеют очень низкие значения ASCII, поэтому мы должны заканчивать каждую переменную как можно более низким значением ASCII. Самый низкий символ, который может заканчиваться переменной в Python - это 0. Кроме того, каждая возможность, которую мы должны разделить один большой прыжок на два меньших прыжка, приведет к снижению балла: A0стоит 289, но A90составляет всего 145 и A9876543210ничтожно 73.

(Этот подход не помог лямбда-переменной A, возможно потому, что за ней следуют [в одном случае.)


3

JSFuck, 144420642

Постройте это из:

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

Вставьте это в JSFuck.com небольшого поле ввода «s , чтобы собрать его JSFuck. В результате получается скрипт длиной 112701 символ, поэтому я не могу его здесь разместить. Последние два символа этого скрипта являются круглыми скобками, поместите ввод между ними.

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

Программа занимает около 20 секунд на моем компьютере, чтобы оценить себя.


объяснение

У меня было больше времени для работы над этим, поэтому я сел и попытался оптимизировать имена переменных. Вот имена переменных, которые стоит использовать, в порядке их оценки.

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

Вот JavaScript, который я перевел на JSFuck:

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

Я внимательно посмотрел на переводчик JSFuck.com и выяснил, как работает его функция оценки. С проверкой «Eval source» код станет самовыполняющейся функцией JSFuck. Однако для получения ввода нам нужно получить доступ к аргументам [0] из функции. Это приводит наш окончательный код JS к ...

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

(Если вам интересно, почему моя предыдущая версия имела более низкий балл, чем этот, это потому, что это была программа JSFuck, которая возвратила строку, которую нужно было оценить как JS. Именно поэтому я не оставила ее в посте)


Твои absне нужны. Я думаю, что это может иметь значение ... :)
Sanchises

6
Я счел счет запутанным. Вы должны удалить пробелы. Тем более, что вывод вашей программы должен быть JSFuck, 102280181.
mbomb007

На самом деле, @sanchises, я на самом деле забыл сначала поставить квадрат два, поэтому появился Math.abs. Починю.
Домино

@ mbomb007 О, хорошо, тогда тоже исправлю.
Домино

3

CJam, 23 663 +19389 11547

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

Попробуйте онлайн

Начинает казаться, что это можно продвигать практически бесконечно, добавляя больше персонажей. Но я думаю, что я начинаю достигать точки убывающей отдачи здесь, поэтому я остановлюсь пока. Например, там, где у меня есть ULC;;;, я мог бы использовать весь алфавит в обратном порядке, а затем 26 ;, но прирост становится все меньше и меньше.

Безусловно, самый большой разрыв, который у меня остался, находится между mи ,в начальной строке. Я не нашел ничего разумного, чтобы избавиться от этого. Я уверен, что есть способы. Но если я доведу его до предела, он может начать выглядеть как решение Денниса ...


3

JAVASCRIPT, 33911

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

Это, безусловно, одна из самых глупых оптимизаций, которые я когда-либо делал в кодовом гольфе ...

Рекомендует Нейлу предложение «спам в комментариях» = P


Я думаю, что вы можете сохранить 5180, просто вставив /**/в соответствующие места.
Нил

3

JAVASCRIPT, 31520

Это решение было значительно более нелепым, сильно отличающимся от моего другого, и поэтому я чувствовал, что заслуживает своего собственного ответа.

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

Это 7306 символов, большая часть из которых является реальной программой, закодированной в эту строку 0/1, а остальные просто для ее декодирования. Он работает, получая индекс каждого '1' минус индекс предыдущего '1', чтобы получить необходимое значение символа. Затем он возвращает полученную строку в реальную функцию, которая, по сути, является стандартной программой для игры в гольф для решения проблемы (которая составляет всего около 105 символов).


2

R 68911 57183 53816 52224

Берет строку из STDIN и преобразует ее в целое число через raw. Различает, возводит в квадрат и суммирует полученный вектор. Результат возвращается в виде строки. Спасибо @nimi за подсказку имени переменной.

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

@nimi Спасибо за это, 2 застряли, пытаясь сделать его коротким :)
MickyT

2

Mathematica, 33552

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

Этот код оценивает безымянную функцию, которая вычисляет «шум» входной строки. Он использует тот факт, что представление двоичных данных в ASCII по существу "бесшумно". Двоичные данные, которые вы видите, являются строкой

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

который был бы правильным ответом сам по себе, набрав 37848.

Все остальное

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

просто декодирует двоичную строку и интерпретирует ее как код Mathematica. Обратите внимание, что пустой комментарий Mathematica (**)очень "малошумный" и фактически удаляет шум из "s.


2

Java8: 117170 100508 99062 98890

С помощью лямбад-выражения и встроенного присваивания переменной можно немного сократить этот код.

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

Ява, 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;}

Эта задача на самом деле заставила меня задуматься о персонажах и их оптимизации больше, чем о поиске кратчайшего решения. Я буду продолжать работать, чтобы снизить номер.

Это лямбда-функция со Bстрокой, представляющей функцию. Не забывайте избегать кавычек ( "), передавая это как строку.


2

Пиф, 16391

++C38828542027820dsm^-ChdCed2,Vztz

Единственное замечание, используемое здесь, - это кодировка base-256 #Pyth,, которая стоит намного дешевле, чем сама строка.

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

М, 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

Чтобы использовать это, мы должны экранировать кавычки и «экранировать» пробельные символы (которые важны в 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» - это альтернативное название «MUMPS» - среди практикующих существуют разногласия по поводу того, какой из них является правильным. Естественно, я выбрал более короткий вариант здесь.


Разве вы не должны инициализировать AAAA?
SSH

Также из-за отсутствия приоритетов оператора вы можете просто S AAA = $ A ($ E (A, AA-1)) - $ A ($ E (A, AA)) ** 2 + AAA - должно дать меньшее оценка ...
SSH

@SSH Я предполагаю чистую таблицу символов перед вызовом функции (так что мне не нужно ничего NEWзаполнять). Поэтому, когда я начинаю делать арифметику с AAAA(сейчас AAA9876543210), меня заставляют 0(может быть, это просто детали реализации Caché? У меня нет установки GT.M для тестирования). Хороший призыв к приоритетам оператора вещь; Мне всегда трудно мыслить в терминах чисто слева направо операций. (Я также забыл, что у M есть оператор возведения в степень - это не часто встречается, когда вы пишете CRUD-приложения.)
senshin

Ницца! Кроме того, из-за выполнения слева направо, вам не нужны скобки до ** 2
SSH

@SSH Спасибо, не знаю, как они попали туда. У версии, которую я на самом деле измерял, ее нет, поэтому оценка остается прежней.
Сеншин

1

Руби, 118402

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

Он читает в файл через командную строку, например ruby diff.rb /path/to/file. Есть место для улучшения, и я сейчас над этим работаю.


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

Я постараюсь сократить это еще немного.

Оказывается, что фигурные скобки ( {и }ASCII 123 и 125) и знак подчеркивания ( _, ASCII 95) очень дороги, поскольку все остальные символы находятся в диапазоне 30–70, поэтому я отформатировал ifих так, как сделал, и почему я использую $AAAAAвместо любимого Perl $_.

К сожалению, все переменные с символами в них доступны только для чтения, поэтому я не могу использовать такие комбинации, как $#и $$.


1

F #, 136718 130303

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

Где есть \nпосле ;.


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

Жаль, что я не могу получить тот же результат, что и проверка Pyth (178386) ...


1. «Оболочка» не является языком программирования. Это похоже на Bash. 2. Вы можете просто читать из STDIN. Не нужно читать сам исходный код.
Деннис

@Dennis Спасибо, отредактировано ... Хотя я не могу получить тот же результат, может быть, все еще есть ошибка (по крайней мере, однажды я получил тот же результат, но не в «сжатой» версии) ...
Алоис Махдал

1

Луа, 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

С ++, 49031

макрос C ++, который принимает строку c и записывает результат в стандартный вывод

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

Попробуйте онлайн!


-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
Добро пожаловать в Программирование Пазлов и Code Golf! Это правильный ответ, но ваш счет за этот вызов должен быть результатом того, что текст вашей программы проходит через программу. Вам также следует постараться максимально сократить этот балл. Попробуйте просмотреть советы на этих страницах, чтобы увидеть, как можно сократить код и снизить оценку.
ETHproductions
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.