Різниця не має значення


40

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

Виклик

Ваша місія полягає у створенні програми або функції мовою за вибором, яка має якомога меншу різницю між послідовними байтами (див. Розділ Розрахунок). Ця програма матиме завдання обчислити власний бал.

Вхідні дані

Рядок ASCII stdinабо найближчий еквівалент вашої мови, або як функція, якщо ви створюєте функцію. Оскільки вашій програмі доведеться вважати себе вхідним для обчислення вашого рахунку, програма повинна підтримувати Unicode, якщо вона містить будь-який Unicode. В іншому випадку ASCII є достатнім. Вхід може вважатись щонайменше 2 байти.

Розрахунок

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

Вихідні дані

Результатом буде назва вашого запису. Це означає, що воно повинно бути заздалегідь #додане новим рядком та знаком -(тире). Потім він повинен виводити назву вашої мови програмування, після чого кома, пробіл, а потім ціле число, що представляє результат обчислення. Наприклад

#C++, 98

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

Оцінка балів

Ваш бал буде обчисленим значенням вашої програми, а сама програма буде вхідною.

Редагувати: Чи слід обробляти нові рядки зараз, вибачте раніше, люди

Ось сценарій Pyth для перевірки підрахунку балів.


1
Чи доведеться програмі інтерпретувати що-небудь, крім власного коду? І лише для уточнення, два послідовні рівні символи мають значення 0?
Даніель М.


1
@bopjesvla Чудовий. Довільні рядки, але ви можете припустити, що вони можуть вміститися у Всесвіті. Або на вашому комп’ютері, з цього питання.
Санчіз

11
Перша особа, яка створила справжню відповідь у виграші Unary !
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#:+

зберігаючи бал якомога нижчим. Щоб досягти цього, ми збираємося створити цей символ рядка за символом (з кількома відсутніми до і після) та оцінити результат.

На щастя, '(push символи буквально), ((декремент) та )(приріст) є послідовними символами ASCII, тому натискання довільних символів порівняно недороге.

  • Символи ASCII після 'можна висунути як '()…)(, де кількість )залежить від кодової точки.

    Наприклад, +можна натиснути як '())))(. Відстань між 'і (, та (і )дорівнює 1. Записи )(відміняють один одного; їх єдина функція - прокласти шлях для наступного '(що відповідає наступному символу) послідовними символами.

    Персонажі, висунуті таким чином, піднять бал на 4 бали.

  • Символи ASCII раніше 'можуть бути висунуті як ''(…(, де кількість (залежить від кодової точки.

    Наприклад, #можна натиснути як ''((((. Відстань між 'та (дорівнює 1.

    Персонажі, натиснуті таким чином, піднять бал на 2 бали.

  • ''(…(насправді працює для всіх символів ASCII, оскільки символ шириною 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
........... wat
DLosc

Це майже схоже на те, що ця мова була побудована для цього точного виклику. Приємно!
Доміно

3
Блін. Я думав, що нарешті зробив виклик, який поставить CJam у невигідний стан, оскільки це часто поєднання "ранніх" символів та "пізніх" букв. Але nooooo, ти знову проявляєш і розориш ... Ура!
Санчіз

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

Дивно короткий. Приймає масив char замість рядка.

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

MATLAB, +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. Щоб знайти суму квадратних різниць, ви просто візьмете крапковий добуток цього масиву різниць із перенесеним самим собою. Doing diff(A9876543210)'фактично зробив більше шуму , ніж з A9876543210.'(спасибі Luis Mendo!)
  5. Результат друкується на екрані.

У PPCG звичайно допускати неназвані функції. Тож можна знятиA=
Луїс Мендо

Також norm(diff(B))^2коротше
Луїс Мендо

@LuisMendo - Спробував це. Він друкує наукові позначення і не поважає %d.
rayryeng

Чому ви використовуєте Bяк ім’я змінної? A=@(A)...є дійсним MATLAB, оскільки Aйого обсяг.
Санчіз

3
A -> A9876543210
TheNumberOne

4

QBasic, 38140

ТАК ДЛЯ ШУТИ СИНТАКСУ

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може обробляти що завгодно, якщо це один рядок).

Деобфузований:

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 Ага, гаразд. Я читав розпущену версію як фактичну програму. : |
ASCIIThenANSI

3

Пітон 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, 23663 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

Математика, 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;}

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

Перл, 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 замість улюбленого Перла $_.

На жаль, всі змінні з символами в них доступні лише для читання, тому я не можу скористатися комбінаціями, як $#і $$.


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 checker (178386) ...


1. "Оболонка" не є мовою програмування. Це схоже на Баша. 2. Ви можете просто читати з STDIN. Не потрібно читати сам вихідний код.
Денніс

@Dennis Спасибі, відредаговано ... Хоча я не можу отримати той самий результат, можливо, все-таки є помилка (принаймні раз я отримав такий же результат, але не у "стисненій" версії) ...
Alois Mahdal

1

Луа, 171078 117896

Гольф:

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)

Безголовки:

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

print(AAAAA)

0

C ++, 49031

макрос C ++, який бере 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
Ласкаво просимо до головоломки програмування та коду для гольфу! Це правильна відповідь, але ваш результат за цей виклик повинен бути результатом того, що текст вашої програми проходить через програму. Ви також повинні намагатися максимально зменшити цей бал. Спробуйте переглянути поради на цих сторінках, щоб побачити, як можна скоротити код і знизити бал.
ETHproductions
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.