В New Modern Times , когда Чарли Чаплин сталкивается с компьютером, он работает в сортировочном дворе в качестве проверяющего, чтобы определить, правильно ли рабочие сортируют предметы. Предметы, о которых идет речь, представляют собой пакеты из мрамора. Пакеты с нечетным количеством шариков укладываются в красную корзину, а пакеты с четным количеством шариков укладываются в синюю корзину.
Предполагается, что Чарли Чаплин пробьет программу , которая проверит наличие каких-либо аномалий в процедуре сортировки. Мак Суэйн, его непосредственный босс, делится алгоритмом, который ему нужен для кодирования.
Алгоритм
L = List of Marble packets that's already sorted
L_ODD = List of packets with Odd Number of Marbles
L_EVEN = List of packets with Even Number of Marbles
Check_Digit = √(ΣL_ODD² + ΣL_EVEN²)
Его работа состоит в том, чтобы определить Check_Digit и сопоставить его с тем значением, которое рассчитывает его Босс.
Чарли Чаплин во время обеденного перерыва смог подкрасться к ящику Мака Суэйна и определить, что в его ящике есть одна карточка с ударами по первым 46 32 столбцам (что означает, что Мэк смог написать программу, содержащую только 46 32 символа).
Чарли Чаплину теперь понадобится помощь всех ниндзя кода, чтобы написать программу с как можно меньшим количеством строк. Он также объявляет бонус в 50 баллов, если кто-то может придумать программу, которая короче, чем его Босс.
Резюме
Учитывая список / массив / вектор положительных чисел (нечетных и четных), вам нужно написать функцию, которая будет принимать array(int [])/vector<int>/list
и вычислять корень суммы квадратов сумм нечетных и четных чисел в списке.
Размер программы - это размер тела функции, т.е. без учета размера сигнатуры функции.
пример
List = [20, 9, 4, 5, 5, 5, 15, 17, 20, 9]
Odd = [9, 5, 5, 5, 15, 17, 9]
Even = [20, 4, 20]
Check_Digit = √(ΣOdd² + ΣEven²) = 78.49203781276162
Обратите внимание , что фактический вывод может варьироваться в зависимости от точности реализации с плавающей запятой.
Гол
Оценка рассчитывается как Оценка рассчитывается как Σ(Characters in your Program) - 46
. Σ(Characters in your Program) - 32
. Помимо регулярного голосования со стороны сообщества, самый низкий отрицательный балл получит дополнительный бонус в 50 баллов.
редактировать
- Смещение, которое использовалось для расчета балла, было изменено с 46 на 32. Обратите внимание, что это не повлияет на соответствие критериям списка лидеров / награды или сделает недействительным любое решение.
решение суда
После ужасного поединка между ниндзя мистер Чаплин получил несколько замечательных ответов. К сожалению, немногие из ответов пытались использовать неоправданное преимущество правила и были не очень полезны. Он действительно хотел честного поединка, и ответы, где логика была закодирована в сигнатурах функций, в конечном итоге означали, что сигнатура функции является неотъемлемой частью решения. Наконец, Ninja FireFly стал явным победителем и наградил его бонусом, которого он вполне заслуживает. Таблица лидеров (обновляется каждый день)
╒══════╤═════════════════╤══════════════╤═════════╤════════╤═══════╕
├ Rank │ Ninja │ Dialect │ Punches │ Scores │ Votes ┤
╞══════╪═════════════════╪══════════════╪═════════╪════════╪═══════╡
│ 0 │ FireFly │ J │ 17 │ -15 │ 6 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 1 │ tmartin │ Kona │ 22 │ -10 │ 2 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 2 │ Sven Hohenstein │ R │ 24 │ -8 │ 7 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 3 │ Ben Reich │ GolfScript │ 30 │ -2 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 4 │ mollmerx │ k │ 31 │ -1 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 5 │ David Carraher │ Mathematica │ 31 │ -1 │ 3 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 6 │ tmartin │ Q │ 34 │ 2 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 7 │ daniero │ dc │ 35 │ 3 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 8 │ psion5mx │ Python │ 38 │ 6 │ 2 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 9 │ O-I │ Ruby │ 39 │ 7 │ 5 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 10 │ gggg │ Julia │ 40 │ 8 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 11 │ FakeRainBrigand │ LiveScript │ 50 │ 18 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 12 │ Sylwester │ Perl5 │ 50 │ 18 │ 2 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 13 │ daniero │ Ruby │ 55 │ 23 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 14 │ vasuakeel │ Coffeescript │ 57 │ 25 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 15 │ dirkk │ XQuery │ 63 │ 31 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 16 │ crazedgremlin │ Haskell │ 64 │ 32 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 17 │ Uri Agassi │ Ruby │ 66 │ 34 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 18 │ Sumedh │ JAVA │ 67 │ 35 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 19 │ Danny │ Javascript │ 67 │ 35 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 20 │ deroby │ c# │ 69 │ 37 │ 1 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 21 │ Adam Speight │ VB │ 70 │ 38 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 22 │ Andrakis │ Erlang │ 82 │ 50 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 23 │ Sp0T │ PHP │ 85 │ 53 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 24 │ brendanb │ Clojure │ 87 │ 55 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 25 │ Merin Nakarmi │ C# │ 174 │ 142 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 26 │ Boopathi │ JAVA │ 517 │ 485 │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 27 │ Noyo │ ES6 │ ? │ ? │ 2 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 28 │ shiona │ Haskell │ ? │ ? │ 0 │
├──────┼─────────────────┼──────────────┼─────────┼────────┼───────┤
│ 29 │ Vivek │ int │ ? │ ? │ 0 │
└──────┴─────────────────┴──────────────┴─────────┴────────┴───────┘
Ответы:
J,
1817 символов - 32 = ⁻15(Как «тело функции»; должно быть заключено в скобки или связано с именем.)
объяснение
Я попытался по-разному взглянуть на то, что делает каждая пьеса, как Тобия в ответах APL.
+/&.:*:
может быть заменено|@j./
использованием трюка со сложной величиной OI для сохранения еще двух символов.пример
источник
ES6,
(48 - 32) = 16(1 - 32) = -31Оригинальная версия:
Полное определение функции - 53 символа, только тело - 48.
Обновленная версия, в полной мере использующая определение проблемы и перенесшая практически все из тела в подпись:
Новое определение функции теперь составляет всего 63 «пробивки», но функция BODY теперь просто ОДНА ЧЕРТАЯ СИМВОЛ. Плюс это больше не портит глобальное пространство имен! : D
Использование:
источник
R, (24 - 32) = −8
Тело функции состоит из 24 символов.
Использование:
источник
sqrt(sum(by(x,x%%2,sum)^2))
Я только не оптимизировал sqrt .... блин :-) +1 :-) PS: интересно, как этоby
выглядит на первый взгляд из-за дерьмового формата вывода, но когда вы запускаетеsum
его, он исправлен ;-)by
возвращает одномерный массив. Не следует судить о функции по результатуprint.by
функции.by
не возвращает массив (кстати, что вы подразумеваете под «массивом»? В R. нет ни одного, вы, вероятно, имели в виду вектор), ни вектор.by
возвращает объект классаby
.?array
. Кроме того,is.array(by(1,1,I))
возвращаетсяTRUE
.Ruby 2.1+ - (всего 39 символов - 7 без тела - 32 смещения = 0)
Немного другой подход. Я создаю комплексное число,
a+b*i
такое, чтоa
иb
являются суммами четных и нечетных чиселlist
, соответственно. Тогда я просто беру абсолютное значение.Мое предыдущее решение, которое на 5 символов длиннее, но работает на 1.9.3+:
В заключение отметим, что если бы были разрешены Rails + Ruby 2.1+, мы можем использовать
Array#sum
тело до 25 символов:источник
Python 2.7: 45, нет: 40, нет: 38 - 32 = 6
Здесь нет ничего нового, просто комбинация трюка с комплексными числами, который я видел в недавнем вызове Пифагора, лямбда для компактности и минимизация синтаксиса / круглых скобок:
Обновление - сохранено несколько символов. Спасибо @DSM за хитрость поднятия сложного компонента до 0/1.
Хорошо, чтение вопроса и распознавание правила подсчета «тела функции» экономит еще 2 символа:
Тестирование iPython:
источник
abs
комплексных чиселAPL (27 - 46 = -19)
например:
источник
Mathematica 31-32 = -1
GatherBy[#,OddQ]
создает четные пакеты, списки нечетных пакетов.Внутреннее
Tr
находит итоги, которые оба возводятся в квадрат, а затем суммируются (по внешнему видуTr
).N
преобразует из иррационального числа (квадратный корень из целого числа) в десятичное приближение.пример
Если
f[n_]:=
не включен в число, дополнительный символ может быть сохранен.пример
источник
Кона, 22 - 32 = -10
источник
Perl5: (50 - 32 = 18)
источник
say
вместоprint
и<>
вместо@ARGV
(при предоставлении аргументов в STDIN вместо командной строки)say
требуетuse
? переключение с массива аргументов на<>
потребует дополнительногоsplit/ /,
.3 (35 - 32)
Использование массивов, как предложено @Tomas. Это сохраняет некоторые символы, потому что я могу вычислить четность каждого числа и использовать его в качестве индекса, вместо того, чтобы настраивать четность с помощью метода ветвления и помещать правильные значения в правильные регистры. Также оказывается, что массивы будут давать вам 0, даже если массив / индекс не использовались, поэтому вам не нужно ничего инициализировать.
Предполагается, что числа уже находятся в стеке, и оставляет результат как единственное значение, оставшееся после его завершения.
Тестовое задание:
DC 16 (48 - 32)
Первая версия, использующая регистры o и e для хранения нечетных и четных чисел.
источник
sose
;-) возможно, вы могли бы получить более короткий результат, используя команды dc array ?Питон, 9 (55 - 46)
Использование лямбда-функции экономит несколько байтов на новых строках, вкладках и
return
.Пример:
источник
Рубин (66 - 32 = 34)
тестовое задание:
источник
Math.hypot *a.partition(&:odd?).map{|x|eval x*?+}
сбривает несколько символовРубин, 55 - 46 = 9
Тестовое задание:
источник
h
:f=->a{h=[0,0];a.map{|v|h[v%2]+=v};e,o=h;(e*e+o*o)**0.5}
Q, 34 - 32 = 2
,
источник
Юлия, 40-46 = -6
Реализация
Выход
источник
Coffeescript, (57 - 32 = 25)
Implementaion
источник
+=
и изменить0.5
на.5
GolfScript 30
Я не думаю, что у GolfScript есть много шансов на это!
источник
с #: 69-32 = 37
Полный код:
PS: просто для удовольствия, это тоже работает, к сожалению, это не меняет количество необходимых символов:
источник
Пролог (73 - 32 = 41)
Здесь мы считаем все после ': -' как тело функции.
Вызов функции так:
источник
Матлаб (44 - 46 = -2)
Тело функции составляет 44 символа:
Общая функция следующим образом:
Тесты функции:
источник
Python 2.7 - 64-46 = 18
Это может быть короче, используя немного
zip
магии, но сейчас:Для завершения выясняется, что вы можете делать магию молнии, но это стоит вам больше (на несколько символов), поэтому вышеприведенное стоит, если кто-то не может улучшить ни один из этих:
источник
abs(sum(1j**(i%2)*i for i in x))
.!s%2
? Это, по крайней мере, постепенное изменение, которое вы можете принятьC # 174
Удобочитаемый
источник
Clojure = 87 - 46 = 41
Хотя вряд ли идиоматичный.
источник
Haskell, 64C - 46 = 18
Не слишком сложно для чтения. Пример выполнения:
источник
int e=0,o=0;for(int i :n){if(i%2==0)e+=i;else o+=i;}System.out.println(Math.sqrt(e*e+o*o));
Актуальный метод в коде Java
источник
PHP 85-32 = 53
$a=$b=0;foreach($x as $q){if(($q%2)==0)$a=$a+$q;else$b=$b+$q;}echo sqrt($a*$a+$b*$b);
Это лучшее, что я приду, будучи новичком. Я уверен, что должны быть и более короткие версии.
РЕДАКТИРОВАТЬ:
Сокращенная версия кода может быть:
В этой версии только 64 символа (на 21 меньше, чем в исходном ответе).
Сказано так, 64-32 = 32
источник
foreach($l as$m)$m%2?$o+=$m:$e+=$m;echo sqrt($o*$o+$e*$e);
VB.net (81c - 11c = 70) - 32 = 38
Через либеральное использование термина Написать функцию
источник
XQuery, (63 - 32 = 31)
Реализация
Выход
BaseX использовался в качестве процессора XQuery.
источник
Erlang: 82C - 32 = 50
Эрланг не подходит для этого. В большинстве случаев ярлыки становятся больше символов (кортежей и т. Д.)
Единственные реальные вещи на заметку:
{lists,sum}
является ссылкой на функциюlists:sum
и может быть вызвана--
( вычитания из списка ) списка нечетных чисел из полного списка.Можете позвонить используя:
Выход:
78.49203781276162
источник
Haskell
57 - 32 = 25
Прямая оптимизация крейзгремлинов:
Оптимизации:
read$show
корочеfromIntegral
- 3 символаs=sum\n
и дваs
имеет общую длину 8 символов, дваsum
- всего 6 символов. - 2 символаЯ также попытался добавить больше материала для оператора, но это оказалось так же долго:
источник