Код, близкий к задаче: сумма целых чисел


39

Это простая задача: для заданной последовательности целых чисел найти сумму всех целых чисел в ней.

Но с изюминкой. Ваша оценка - это расстояние Левенштейна между вашим кодом и следующей фразой (вызов):

Учитывая набор целых чисел, найдите сумму всех целых чисел в нем.

Вы можете предположить, что на входе нет новых строк или завершающих пробелов.

Пример ввода / вывода:

Input: 1 5 -6 2 4 5
Output: 11
Input: 1 -2 10
Output: 9

Онлайн-калькулятор расстояния Левенштейна можно найти здесь: http://planetcalc.com/1721/


4
Я не могу не думать об этом
JohnE

7
Ничего себе, так много творчества, ребята, xD ... кашель комментируют насильники кашель

1
Как вы думаете, это должно иметь продолжение с другим вызовом, но тот же принцип расстояния Левенштейна? Не уверен, считается ли это достойным продолжения или нет.

1
@NicoA определенно! Возможно, единственная проблема в том, что эта задача была слишком простой.
Maltysen

2
@NicoA Если вы делаете, будьте очень осторожны в определении того, что не разрешено. Например, многие языки позволяют плавать необработанным строкам.
xnor

Ответы:


58

Питон, расстояние 3

#Given a set of integers, find the 
sum#of all integers in it.

Это дает встроенную функцию sum, которая может суммировать набор как sum({3,5,7})==17. Остальные части комментируются. Это расстояние 3 с 3 правками:

  • Добавьте начальный #
  • Добавить новую строку
  • Заменить пробел после sumс#

3
Еще одна полезная особенность замечательного англоязычного синтаксиса
qwr

1
Мой единственный вопрос - как его использовать, поскольку это не полная программа, и (в теории) вам даже не нужен ваш код, потому что он встроенный
Beta Decay

1
@BetaDecay Это работает из-за правил, что функции разрешены по умолчанию, и что функциональные литералы разрешены для функций .
xnor

54

Юлия, расстояние 27 26

Без комментариев!

Given(a)=(Set;of;integer; find; [sum(a),all,integer,in][1])

Это создает вызываемую функцию, Givenкоторая принимает массив и возвращает сумму его элементов. Поскольку многие встроенные объекты Julia имеют соответствующие имена (но не имеют отношения к вычислениям здесь), мы можем просто перечислить несколько разделенных точкой с запятой. Пока они не являются последними в списке, они не будут возвращены. Последняя часть фактически создает массив, содержащий сумму и три функции, и выбирает первый элемент, сумму.


Без комментариев определенно больше в духе задачи. Отличная работа.
Кристофер Вирт

@ChristopherWirt Спасибо! :)
Алекс А.

4
Могу ли я предложить улучшение? Given=(a;set;of=integer; find;th;[sum,of,all,integer, in][])- «Дано» тогда все еще работает так же, но это расстояние составляет 18.
Глен О

22

APL, расстояние 6 3

Сохранено 3 расстояния ...? спасибо Денису!

+/⍝en a set of integers, find the sum of all integers in it.

Это суммирует данный массив ( +/). Остальная часть предложения добавляется в конец с помощью комментария ( ).


1
Вам не нужно {и ⍵}. +/уже действительная функция.
Деннис

@ Денис. Отлично, большое спасибо за предложение!
Алекс А.

10

GolfScript, 5

~{Given a set of integers+ find the sum of all integers in it}*

Это полная программа, которая не использует комментарии (но много noops).

Попробуйте онлайн в Web GolfScript .


9

R, расстояние 37 36 34

Без использования комментариев :)

 as.integer ( sum (scan(,integer( ) )))

Обратите внимание, что в начале есть пробел.


8

Mathematica, расстояние 17

Given a set of integers find the sum of all integers in it*0+Total@Input[]

Он не использует никаких комментариев или запретов, но вместо этого объявляет все слова как переменные, а затем избавляется от них путем умножения на ноль.

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

Ввод {1,2,3}обеспечивает вывод, 6как ожидалось.

К сожалению, Sumфункция Mathematica не выполняет задачу в этом вопросе, поэтому требует большего количества байтов.


Given a set of integers find the sum of all *0+Total@Input[]расстояние 14
Утренняя монахиня

6

Ява - 43 41

Я пытался.

float a_set_of(int[] r){return IntStream.of(r).sum()}//n it.
Given a set of integers, find the sum of all integers in it.

Java: P.


Я думаю, что вы можете изменить свой аргумент в функции от a до r, чтобы сохранить одну дистанцию ​​редактирования.
Element118 26.12.15

@ Element118 Хороший улов. Также изменил тип возвращаемого значения, пока я был на нем, чтобы лучше выстроить имя метода.
Анубиан Нуб

2
не могли бы вы использовать "int a_" как начало фрагмента? (один пробел перед int и 2 после него до a_
masterX244

6

RProgN , расстояние 2.

Given aset of integers, ;find the sum of all integers in it.

В RProgN a, set, find и sum - все команды. Все остальное по умолчанию игнорируется в синтаксисе. a помещает алфавит в стек, что приведет к сбою sum. Set никогда не имеет достаточно аргументов, поэтому всегда терпит неудачу, ошибочно. Find либо имеет неправильное количество аргументов, либо пытается сравнить алфавит со стеком ввода, что не работает.

a и set могут быть оба «исправлены», удалив пробел между ними, aset не является функцией, поэтому он игнорируется. Поиск просто имеет дополнительный символ, вставленный в начале, что также не распознается и игнорируется. Остается только сумма, которая удобно суммирует содержимое стека ввода.

Наконец, RProgN может что-то выиграть!

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


4

CJam, 7 6 5

{:+}e# a set of integers, find the sum of all integers in it.

Это анонимная функция, которая извлекает массив из стека и оставляет взамен целое число.

Спасибо @AboveFire за сокращение расстояния на 1.

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


4

Matlab, расстояние 29 28

Given_a_set_of_integers=@(findthe)sum(all(1)*findthe)

Без использования каких-либо комментариев :-)

Код находится в форме анонимной функции. Я предполагаю, что вход представляет собой вектор (1D-массив) чисел.

Пример:

>> Given_a_set_of_integers=@(findthe)sum(all(1)*findthe)
Given_a_set_of_integers = 
    @(findthe)sum(all(1)*findthe)

>> Given_a_set_of_integers([1 5 -6 2 4 5])
ans =
    11

3

О , 5

M] + o "Учитывая набор целых чисел, найдите сумму всех целых чисел в нем.

Числа должны быть в шестнадцатеричном и обратном отрицательном обозначении:

  • -6 => 6_
  • -4 => 4_
  • -10 => А_

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


1
Уу ссылка работает!
Maltysen

Хорошая демка! Разве это не называется излишним IDE?
kirbyfan64sos

@ kirbyfan64sos В общем, но я хочу добавить больше функций, таких как подсветка синтаксиса и еще много чего. Пока это просто переводчик.
этап

Я думаю, что ссылка на страницу O esolangs была бы более полезной.
mbomb007

@ mbomb007 Но это ужасно устарело; половина вещей там не работает, и это только немного документированного языка.
этап

3

К 60 5

+/ / Given a set of integers, find the sum of all integers in it.

Я предполагаю, что символы НЕ подходят к расстоянию Леве, независимо от расстояния ...

Хахаха. Изначально у меня не было расстояния LeveXXX, поэтому я получил 60. Затем, благодаря полезным комментариям, он упал до 5.


Это не значит, что вы используете символы, расстояние Левенштейна - это # ​​добавлений, удалений, замен. Таким образом, у вас есть 60 удаление из исходной строки.
Maltysen

Это не символы, просто ваш код настолько короток, что длина фразы - длина вашего кода = 60.

2
Вы знаете, что вы можете просто прокрутить вверх, чтобы получить правильное написание "Левенштейн", верно? ;)
Алекс А.

@AlexA. Так смешнее. :)
kirbyfan64sos

2
Я не виню его. Я должен был проверить орфографию около 10 раз, прежде чем просто скопировать его.

3

F #, расстояние 21

let ``Given a set of integers, find the sum of all integers in it`` x = Seq.sum x

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

Использование:

[1;2;3] |> ``Given a set of integers, find the sum of all integers in it`` |> printfn "%i"

6


3

Пип, расстояние 3

Вступление в клуб тривиальных ответов «без комментариев-но-много-без-операций» ...

Given a set of integers, find the sum of all integers in $+g

GitHub хранилище для Pip

Код практически документирует сам себя; возможно s/in/using/для более точного описания. Целые числа, заданные в качестве аргументов командной строки, считываются в список g, который здесь складывается при сложении, а результат автоматически печатается. Большинство всего остального - просто переменные, которые не имеют значения.

Сначала я был немного удивлен тем, что это s, fработало без жалоб, поскольку fссылка на основную функцию и определение диапазона блока кода не имеют смысла. Но затем я понял: ,оператор диапазона, когда ему передается аргумент функции, просто создает другую функцию (как это делают многие операторы в Pip). Так что я думаю s, fоценивает {Given a set of integers, find the sum of all integers in " ",$+g}. (Который затем все равно сбрасывается.)

И последнее замечание: этот код работает с текущей версией Pip, в которой я еще ничего не назначил G. Если в какой-то будущей версии я сделаю Gбинарный или троичный оператор, тогда будет необходима версия с расстоянием 4. Использование givenвместо Givenбудет работать хорошо.


3

Haskell, расстояние 11

Без комментариев!

const sum"Given a set of integers, find the sum of all integers in it."

Использование:

> const sum"Given a set of integers, find the sum of all integers in it." $ [1..10]
55

3

Cubix , Расстояние 9

@ivOn a ;et I+ i?tegers, fu;d <he sum of all integers in it.

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

Это оборачивает на куб

      @ i v
      O n a
      ; e t
I + i ? t e g e r s , f
u ; d < h e s u m o f a
l l i n t e g e r s i n
      i t .
      . . .
      . . .

Оперативный код

  • I+i Введите целое число, добавьте в TOS, затем введите символ
  • ?Проверьте значение символа. Перенаправить влево для -1 (конец ввода) или вправо для чего-либо еще (0 не может быть введено)
    • ;O@ pop TOS, вывод суммы и выход
    • <;u перенаправить, всплыть TOS и разворот на начало


1

PHP4.1, расстояние 25

Этот довольно длинный и очень поздно в бегах.

Но в любом случае, вот оно:

<?=$n_a_set_of_integers_fi=array_sum($f_all_integers_in_i);

Чтобы это работало, вам просто нужно передать массив через POST / GET / COOKIE / session, используя ключ f_all_integers_in_i.


2
Без комментариев троллинг ууу!
Анубиан Нуб


0

С ++ 17, дистанция 44 29

Variadic Generic Lambda FTW

[](auto...t){return(t+...);}//the sum of all integers in it.

Предыдущее решение

template<class...t>int s(t...l){return(...+l);}//gers in it.



0

Ли , оценка 4

&+#Given a set of integers, find the sum of all integers in it.

Обратите внимание на завершающий символ новой строки.

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

Код довольно понятен. &+является оператором суммирования Ли, а #является комментарием. К сожалению, я должен включить завершающий перевод строки из-за того, что завершение программы строкой комментария «закомментирует» неявный вывод Ли, который на самом деле является ошибкой в ​​интерпретаторе, который я называю функцией.


0

дк, 14

?[+z1 <f]d  sf xp#egers, find the sum of all integers in it.

Комментарии:

?                   # read numbers
 [                  # start macro
  +                 # add up last two things on stack
   z1 <f            # if stack size is more than 1, execute macro at register 'f'
        ]           # end macro
         d          # dupe it
            sf      # saving one copy to register 'f'
               x    # and executing another
                p   # printing result

TIO

он жалуется на то, что стек пуст, если вы введете 1 число, но все еще работает, а удаление 0 сохраняет 2 разности.


0

Excel VBA, Расстояние: 11

Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона [a:a]объекта ActiveSheet и выводит их в непосредственное окно VBE

?[Sum(a:a)] 'f integers, find the sum of all integers in it.

0

Брейк-Флак , 20

(([]){[{}]{}([])}{})ers, find the sum of all integers in it.

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

объяснение

Поскольку в исходном тексте нет скобок, это сводится к проблеме в Brain-Flak. Но это все еще не делает этот ответ тривиальным, поскольку ответы в Brain-Flak редко бывают.

Первая интуиция, вероятно, будет следующим кодом

({{}})

Что работает ... если только в стеке нет нуля, в этом случае он просто суммирует до нуля. Чтобы обойти эту проблему, мы должны использовать высоту стека, чтобы убедиться, что стек не пуст. Это можно настроить так

([])    #{ Push stack height }
(       #{ Start Push }
{       #{ Loop until zero }
 <{}>   #{ Silently Pop the last height }
 {}     #{ Grab a value from the stack }
 <([])> #{ Silently push the stack height again }
}       #{ End loop }
{}      #{ Remove last stack height }
)       #{ Push the result }

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

([])({[{}]{}([])}{})

Мы заканчиваем nкаждый раз. Итак, вот фокус, у нас уже есть место n, мы просто перемещаем его в толчок, чтобы уравновесить ситуацию.

(([]){[{}]{}([])}{})

1
Просто хотел бы поздравить вас с вашим 2^8ответом в ppcg
Тейлор Скотт


0

Желе , расстояние: 2

Given a set of integers, find the sum of all integers in it.
S

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

Jelly оценивает только основную ссылку (последнюю строку), а явные команды запускают другие ссылки (другие строки).

Последняя строка имеет S, который суммирует входные данные.

Первая строка не выполняется, потому что в основной ссылке нет ссылки на нее.


0

Щелчок! 4.2.2.9 (+ Инструменты), синтаксис scratchblocks3, расстояние 35

Это функция. integers, find the sum of all inteэто вход.

for each(et)of(integers, find the sum of all inte
change[s v]by(et
end
report(s

Как это принять вход? Вход должен быть вставлен в код? Обычно мы не допускаем такого рода вводные данные, а скорее требуем, чтобы входные данные либо были взяты из STDIN, либо, если ваше представление является функцией, чтобы оно передавалось в качестве аргумента.
Пшеничный волшебник

Нет, это функция. integers, find the sum of all inteэто аргумент, он просто не отличается от обычных переменных в синтаксисе scratchblocks3, поэтому я пояснил
Silas Reel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.