Найкоротша програма для сортування списку чисел у непарних і парних категоріях


13

У Новий Новий час , коли Чарлі Чаплін стикається з комп’ютером, він працює в сортувальному дворі, як валідатор, щоб визначити, чи правильно сортують працівники предмети. Елементи, про які йдеться, - це пакети з мармуру. Пакети з непарною кількістю мармуру укладаються в червоний кошик, а пакети з парною кількістю мармуру укладаються в блакитний кошик.

Чарлі Чаплін повинен пробити програму, яка була б підтверджена, якщо є якась аномалія в процедурі сортування. Мак Суейн, його безпосередній бос, ділиться алгоритмом, який йому потрібно кодувати.

Алгоритм

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 балів.

Редагувати

  1. Зсув, який було використано для підрахунку Оцінки, було змінено з 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   │
└──────┴─────────────────┴──────────────┴─────────┴────────┴───────┘

8
Чому за найнижчий бал потрібен бонус, вони вже виграли?
gggg

6
Більше того, зсув 46 не змінює нічого щодо порядку.
Говард

@gggg Я думаю, що вони означають, що вони дадуть найнижчу відповідь на оцінку +50 банатів.

1
@gggg: Я фактично розпочну баунті, як тільки мені дозволять. Так це я мав на увазі під бонусом.
Абхіджіт

1
Ой, щури. Тут я подумав, якими правилами слід скористатися, і ця розумність тут буде винагороджена. ;] Все-таки веселе запитання та хороша робота, всі!
Нойо

Відповіді:


7

J, 18 17 символів - 32 = ⁻15

[:+/&.:*:2&|+//.]

(Як "функціональний орган"; він має бути скоплений в скобках або прив'язаний до імені.)

Пояснення

Я спробував зробити вибуховий погляд на те, що робить кожен твір, як Тобія робить у відповідях APL.

               +//. ]    NB. sum up partitions
           2&|           NB.   given by equality on (x mod 2)
        *:               NB. square,
   +/                    NB. sum,
     &.:                 NB. then revert the squaring (square-root)
                         NB. (f&.:g in general acts like g⁻¹(f(g(x))))
[:                       NB. (syntax to indicate composition of +/&.:*: and (2&| +//. ]))

+/&.:*:можна було б замінити, |@j./використовуючи складний фокус величини OI, щоб зберегти ще два символи.

Приклад

   f =: [:+/&.:*:2&|+//.]
   f 20 9 4 5 5 5 15 17 20 9
78.492

9

ES6, (48 - 32) = 16 (1 - 32) = -31

Оригінальна версія:

f=l=>(e=o=0)+l.map(x=>x%2?e+=x:o+=x)&&Math.hypot(e,o)

Повне визначення функції - 53 символи, лише тіло - 48.

Оновлена ​​версія, використовуючи в повній мірі визначення проблеми та переміщуючи майже все з корпусу та підпису:

f=(l,e=0,o=0,g=x=>x%2?e+=x:o+=x,c=l.map(g)&&Math.hypot(e,o))=>c

Нове визначення функції тепер становить 63 "удари", але функція BODY тепер лише ОДИН ДОВАРИЙ ХАРАКТЕР DAMN. Плюс це більше не псує глобальний простір імен! : D

Використання:

>>> f([20, 9, 4, 5, 5, 5, 15, 17, 20, 9])
78.49203781276161

... і зараз я відчуваю себе якось брудно. :]
Нойо

+1, я видалив своє рішення ES6, оскільки ваше набагато краще :)
Флорент

Ха-ха, дякую. Ми побачимо, чи будуть змінені правила, як тільки ОП це побачить ..;]
Нойо

1
Ну, схоже, що правила насправді неявно були змінені, навіть після того, як була прийнята відповідь та присвоєно щедрості. Що ж, добре! Я все ще вважаю це рішенням з найнижчою оцінкою за правилами виклику. :]
Нойо

1
Насправді нагадує мені те змагання з кодом c, де люди виконували б усілякі хитрість у препроцесорі, роблячи, здавалося б, «просту» функцію, повертаючи дуже складні речі. Чистий результат був поза курсом, що компіляція займала години та години (і години), а фактичне виконання поверне пі до 100 к чисел (або щось подібне) за частку секунди, оскільки результат був досить важко закодований у двійкові файли. У будь-якому випадку, хоча я думаю, що ми обидва знаємо, що ви обманювали, я б сказав "добре зіграний сер" = P
deroby

7

R, (24 - 32) = −8

f=function(x)
    sum(by(x,x%%2,sum)^2)^.5  

Орган функції складається з 24 символів.

Використання:

f(c(20, 9, 4, 5, 5, 5, 15, 17, 20, 9))
[1] 78.49204

Ergh !!! У вас точно таке ж рішення, як я щойно розробив !! sqrt(sum(by(x,x%%2,sum)^2))Я тільки не оптимізував sqrt .... чорт :-) +1 :-) PS: цікаво, як byздається, спочатку виходить через нерозумний формат виводу, але коли ви sumпереходите на нього, це виправлено ;-)
Томаш

@Tomas У цьому прикладі byповертає одновимірний масив. Не слід судити про функцію за результатом print.byфункції.
Свен Гогенштейн

Ні, byне повертає масив (btw, що ви маєте на увазі під "масивом"? У Р. їх немає. Ви, мабуть, мали на увазі вектор), ні вектор. byповертає об’єкт класу by.
Томаш

@Tomas Там є масиви Р. поглянути на ?array. Крім того, is.array(by(1,1,I))повертається TRUE.
Свен Гогенштейн

6

Ruby 2.1+ - (всього 39 символів - 7, без тіла - 32 зміщення = 0)

Трохи інший підхід. Створити комплексне число a+b*iтаке , що aі bє суми парних і непарних чисел list, відповідно. Тоді я просто беру абсолютне значення.

f=->l{l.reduce{|s,x|s+x*1i**(x%2)}.abs}

Моє попереднє рішення, яке на 5 символів довше, але працює на версії 1.9.3+:

f=->l{l.reduce{|s,x|s+x*?i.to_c**(x%2)}.abs}

Нарешті, якщо Rails + Ruby 2.1+ було дозволено, ми можемо використовувати Array#sumтіло лише до 25 символів:

l.sum{|x|x+1i**(x%2)}.abs

Дуже розумно, мені це подобається! Це врятувало б мені декілька знаків і в J.
FireFly

Дякую, @FireFly. З вами приємно. Треба навчитися J колись. Ура!
OI

Вам потрібно лише порахувати тіло функції, я б сказав 37 символів.
steenslag

Дякую за пораду @steenslag. Оновлено. Я також поголив додаткові 5 символів, використовуючи нову складну буквальну стенограму. Однак працює лише в Ruby 2.1 і вище.
OI

5

Пітон 2,7: 45, най: 40, най: 38 - 32 = 6

Тут немає нічого нового, лише поєднання складного трюкового числення, яке я побачив у недавньому виклику Піфагора, лямбда на компактність та мінімізацію синтаксису / дужок:

lambda x:abs(sum(a*(1-a%2+a%2*1j)for a in x))

Оновлення - збережено кілька символів. Завдяки @DSM за хитрість підняття складного компонента до 0/1.

lambda x:abs(sum(a*1j**(a%2)for a in x))

Гаразд, читання запитання та розпізнавання правила підрахунку "тіла функції" заощаджує ще 2 символи:

def f(x):
    return abs(sum(a*1j**(a%2)for a in x))

Тестування iPython:

In [650]: x = [20, 9, 4, 5, 5, 5, 15, 17, 20, 9]

In [651]: print (lambda l:abs(sum(a*(1-a%2+a%2*1j)for a in l)))(x)
78.4920378128

...

In [31]: def f(x):
   ....:     return abs(sum(a*1j**(a%2)for a in x))
   ....:

In [32]: f(x)
Out[32]: 78.49203781276162

приємно! це як проблема була побудована саме для absскладних чисел
jozxyqk

4

APL (27 - 46 = -19)

{.5*⍨+/2*⍨+⌿⍵×[1]z,⍪~z←2|⍵}

наприклад:

      {.5*⍨+/2*⍨+⌿⍵×[1]z,⍪~z←2|⍵} 20 9 4 5 5 5 15 17 20 9
78.49203781

4

Математика 31-32 = -1

√Tr[(Tr/@GatherBy[#,OddQ])²]//N &

GatherBy[#,OddQ] створює списки парних, непарних пакетів.

Внутрішня Trзнаходить сумарні показники, обидва з яких складаються у квадрат, а потім підсумовуються (зовнішніми Tr).

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

Приклад

√Tr[(Tr/@GatherBy[#,OddQ])²]//N &[{9, 5, 5, 5, 15, 17, 9, 20, 4, 20}]

78.492


Якщо f[n_]:=в число не включено, додатковий символ може бути збережений.

    f[n_]:=
    √Tr[(Tr/@GatherBy[n,OddQ])²]//N 

Приклад

f[{9, 5, 5, 5, 15, 17, 9, 20, 4, 20}]

78.492



3

Perl5: (50 - 32 = 18)

map{$0[$_&1]+=$_}@ARGV;print sqrt$0[0]**2+$0[1]**2

+1, можливо, ви можете зберегти кілька символів, використовуючи sayзамість printі <>замість @ARGV(подаючи аргументи на STDIN замість командного рядка)
Томаш

@Tomas Не використовував би sayпотребувати use? для переходу з масиву аргументів на <>потрібний додатковий split/ /,.
Сільвестр

1) Ні, скажімо, функцію сказати не можна ввімкнути з командного рядка . 2) Я думаю, що розділення не знадобиться, якщо ви вкажете ці цифри кожен на рядок.
Томаш

3

постійний струм 3 (35 - 32)

Використання масивів, як запропонував @Tomas. Це зберігає деякі символи, тому що я можу обчислити паритет кожного числа і використовувати його як індекс, замість того, щоб налаштувати паритет як метод розгалуження та поставити потрібні значення в потрібні регістри. Також виявляється, що масиви дадуть вам 0, навіть якщо масив / індекс не використовувався, тому вам нічого не потрібно ініціалізувати.

[d2%dsP;S+lP:Sz0<L]dsLx0;S2^1;S2^+v

Припускає, що числа вже є в стеку, і результат залишає як єдине значення, яке залишається після його завершення.

Тест:

$ dc  
20 9 4 5 5 5 15 17 20 9  
[d2%dsP;S+lP:Sz0<L]dsLx0;S2^1;S2^+v 
p
78

постійний струм 16 (48 - 32)

Перша версія, що використовує регістри o і e для зберігання непарних і парних чисел.

0dsose[dd2%rd1+2%*lo+so*le+sez0<x]dsxxle2^lo2^+v

1
+1 для використання постійного струму. Ха-ха sose;-) можливо, ви можете отримати коротший результат за допомогою команд масиву dc ?
Томаш

1
@Tomas дякую купу! Я спершу відкинув ідею використовувати масиви з якоїсь дурної причини, але після вашої пропозиції я спробував ще раз, і вони виявилися дуже корисними! Для тимчасового зберігання паритету довелося використовувати реєстр, але в цілому я думаю, що це набагато більш елегантне рішення.
daniero

Запрошуємо вас, я знав, що це допоможе :-)
Томаш

2

Пітона, 9 (55 - 46)

lambda x:sum([sum([i*(d-i%2) for i in x])**2for d in(0,1)])**0.5

Використання лямбда-функції зберігає деякі байти на нових рядках, вкладках та return.

Приклад:

x = [20, 9, 4, 5, 5, 5, 15, 17, 20, 9]
print (lambda x:sum([sum([i*(d-i%2) for i in x])**2for d in(0,1)])**0.5)(x)
78.4920378128

2

Рубін (66 - 32 = 34)

f=->a{o,e=a.partition(&:odd?).map{|x|x.reduce(:+)**2};(e+o)**0.5}

тест:

f.([20, 9, 4, 5, 5, 5, 15, 17, 20, 9])
=> 78.49203781276162 

1
Math.hypot *a.partition(&:odd?).map{|x|eval x*?+}голить декілька знаків
steenslag

2

Рубі, 55 - 46 = 9

f=->a{h=[0,0];a.map{|v|h[v%2]+=v};e,o=h;(e*e+o*o)**0.5}

Тест:

f[[20, 9, 4, 5, 5, 5, 15, 17, 20, 9]] => 78.49203781276162`

1
Ви можете використовувати масив для h: f=->a{h=[0,0];a.map{|v|h[v%2]+=v};e,o=h;(e*e+o*o)**0.5}
Ніл Слейтер

@NeilSlater до! Дякую :)
daniero

2

Q, 34 - 32 = 2

{sqrt sum{x*x}(+/')(.)x(=)x mod 2}

.

q){sqrt sum{x*x}(+/')(.)x(=)x mod 2} 20 9 4 5 5 5 15 17 20 9
78.492037812761623

2

Юлія, 40-46 = -6

Впровадження

function f(l)
    a=sum(l);b=sum(l[l%2 .==1]);hypot(a-b,b)
end

Вихідні дані

julia> f([20, 9, 4, 5, 5, 5, 15, 17, 20, 9])
78.49203781276161

2

Coffeescript, (57 - 32 = 25)

Впровадження

f=(a)->r=[0,0];r[e%2]+=e for e in a;[e,o]=r;(e*e+o*o)**.5

Я не знаю coffeescript, але мені цікаво, чи можна вилучити пробіл після +=та змінити 0.5на.5
user12205

2

GolfScript 30

.{2%},]{{+}*}/.@\-]{2?}/+2-1??

Я не думаю, що GolfScript має багато шансів у цьому!


2

c #: 69-32 = 37

double t=l.Sum(),o=l.Sum(x=>x*(x%2)),e=t-o;return Math.Sqrt(o*o+e*e);

Повний код:

class Program
{
    static void Main(string[] args)
    {
        int[] list = { 20, 9, 4, 5, 5, 5, 15, 17, 20, 9 };
        Console.WriteLine(F(list));
        Console.ReadKey();
    }

    static double F(int[] l)
    {
        double t = l.Sum(),  // total sum of all elements
               o = l.Sum(x => x * (x % 2)),  // total of odd elements, if even %2 will return zero
               e = t - o; // even = total - odd
        return Math.Sqrt(o * o + e * e);
    }        
}

PS: Для задоволення це також працює, на жаль, це не змінює необхідну кількість символів:

double t=l.Sum(),o=l.Sum(x=>x*(x%2));return Math.Sqrt(t*t-2*o*(t-o));

2

Пролог (73 - 32 = 41)

Тут ми рахуємо все після ': -' як орган функції.

f([],0,0,0).
f([H|T],O,E,X):-(1 is H mod 2,f(T,S,E,_),O is H+S,!;f(T,O,S,_),E is H+S),sqrt(O*O+E*E,X).

Функція виклику так:

f([20, 9, 4, 5, 5, 5, 15, 17, 20, 9],_,_,X).

1

Матлаб (44 - 46 = -2)

Основна функція - 44 символи:

C=mod(A,2)>0;O=(sum(A(C))^2+sum(A(~C))^2)^.5

Загальна функція:

function O = Q(A)
C=mod(A,2)>0;O=(sum(A(C))^2+sum(A(~C))^2)^.5
end

Тести функції:

>> A = [20 9 4 5 5 5 15 17 20 9];
>> Q(A)

O =

   78.4920


ans =

   78.4920

>> B = [8 3 24 1 9 8 4 5 52];
>> Q(B)

O =

   97.6729


ans =

   97.6729

1

Пітон 2,7 - 64-46 = 18

Це може бути коротше, використовуючи якусь zipмагію, але поки що:

(sum(s for s in x if s%2)**2+sum(s for s in x if s%2==0)**2)**.5

На завершення виявляється, що ви можете зайнятись мапією на блискавці, але це коштує вам дорожче (на кілька символів), тому вищевикладене стоїть, якщо хтось не може вдосконалити будь-який із них:

sum(map(lambda i:sum(i)**2,zip(*[[(0,i),(i,0)][i%2]for i in x])))**.5

1
Вам не потрібні [квадратні дужки] всередині суми ().
daniero

1
Я думаю, ви могли б це значно покращити, працюючи в складній площині, наприклад abs(sum(1j**(i%2)*i for i in x)).
DSM

@DSM Це божевільно! Я ніколи про це не думав. Я не можу редагувати це в занадто сильному зміні, але, будь ласка, зробіть і дайте відповідь, щоб я міг його схвалити!

@DSM: Я мав подібну версію в думці, але у вас витончена
Abhijit

Чи приймає Python !s%2? Це хоча б поступова зміна, яку ви можете прийняти
Не те, щоб Чарльз

1

C # 174

using System;class P{static void Main(){double[] L={20,9,4,5,5,5,15,17,20,9};double O=0,E=0;foreach(int i in L){if(i%2==0)E+=i;else O+=i;}Console.Write(Math.Sqrt(E*E+O*O));}}

Читабельна

using System;
class P
{
  static void Main()
  {
      double[] L = { 20, 9, 4, 5, 5, 5, 15, 17, 20, 9 };
      double O = 0, E = 0;
      foreach (int i in L)
      {
        if (i % 2 == 0)
            E += i;
        else
            O += i;
      }
      Console.Write(Math.Sqrt(E * E + O * O));
   }
}

Вихід Чарлі


Ви взагалі цього не займалися гольфом. Ми намагаємось знайти рішення, яке підходить до пункту картки начальника!
Рікінг

Чому ні? Поясніть будь ласка.
Merin Nakarmi

2
Ваш код повністю відведений з пробілами по всьому. Код гольфу - це те, щоб отримати найнижчу кількість символів. Це питання позначено код-гольф .
Рікінг

Спасибі Рікінг. Я це відредагував. Зараз у мене менше персонажів. :)
Мерін Накармі

Я думаю, що список повинен бути наданий як вхідний, а не жорсткий.
Тімві

1

Clojure = 87 - 46 = 41

(defn cd [v]
  (let [a apply ** #(* % %)]
    (Math/sqrt(a + (map #(** (a + (% 1)))(group-by even? v))))))

Навряд чи ідіоматичний, хоча.


1

Хаскелл, 64С - 46 = 18

c x=sqrt$fromIntegral$s(f odd x)^2+s(f even x)^2
f=filter
s=sum

Чи не надто складно читати. Приклад виконання:

*Main> c [1..10]
39.05124837953327

1

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

public static void checkDigit(int[] n)
{
    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));
}

Тестовий клас

public class Sint
{
    public static void main(String[] args)
    {
        if(args == null || args.length == 0)
            args = "20 9 4 5 5 5 15 17 20 9".split(" ");
        int[] n = null;
        try
        {
            n = new int[args.length];
            for(int i=0; i<args.length; i++)
                n[i] = Integer.parseInt(args[i]);
            System.out.print("int array is: ");
            for(int dd : n) System.out.print(dd+", ");
            System.out.print("\n");
            checkDigit(n);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void checkDigit(int[] n)
    {
        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));
    }
}

1

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

Це найкраще, що я придумав би як новачок. Я впевнений, що повинні бути і кілька коротших версій.

Редагувати:

Скорочена версія коду може бути:

foreach($x as$q)($q%2)?$a=$a+$q:$b=$b+$q;echo sqrt($a*$a+$b*$b);

Ця версія має лише 64 (21 менше, ніж оригінальна відповідь).

Сказав так, 64-32 = 32


Зробив це самостійно, отримав 58 баз:foreach($l as$m)$m%2?$o+=$m:$e+=$m;echo sqrt($o*$o+$e*$e);
Йода

1

VB.net (81c - 11c = 70) - 32 = 38

Через ліберальне використання терміна Написати функцію

Function(n)Math.Sqrt(n.Sum(Function(x)x Mod 2=0)^2+n.Sum(Function(x)x Mod 2=1)^2)

1

XQuery, (63 - 32 = 31)

Впровадження

declare default function namespace 'http://www.w3.org/2005/xpath-functions/math';
declare function local:f($s) {
  sqrt(pow(fn:sum($s[. mod 2=0]),2)+pow(fn:sum($s[. mod 2=1]),2))
};

Вихідні дані

local:f((20, 9, 4, 5, 5, 5, 15, 17, 20, 9))

BaseX використовувався як процесор XQuery.


1

Ерланг: 82С - 32 = 50

fun(L)->F={lists,sum},O=[X||X<-L,X rem 2>0],E=F(L--O),math:sqrt(F(O)*F(O)+E*E)end.

Ерланг для цього не великий. Більшість ярликів у кінцевому рахунку більше символів (кортежі тощо)

Єдині реальні речі:

  • {lists,sum}є посиланням на функцію lists:sumі може бути викликано
  • Четні числа обчислюються відніманням --( віднімання списку ) списку непарних чисел з повного списку

Можна телефонувати за допомогою:

fun(L)->F={lists,sum},O=[X||X<-L,X rem 2>0],E=F(L--O),math:sqrt(F(O)*F(O)+E*E)end([20,9,4,5,5,5,15,17,20,9]).

Вихід: 78.49203781276162


1

Хаскелл

57 - 32 = 25

Пряма оптимізація crazedgremlins відповідає:

c x=sqrt$read$show$sum(odd%x)^2+sum(even%x)^2
(%)=filter

Оптимізація:

  • read$showкоротше fromIntegral- 3 символи
  • s=sum\nі два sмає загальну довжину 8 символів, два sum- всього 6 символів. - 2 символи
  • перетворення фільтра в оператор не усуває необхідності пробілу - 2 знаки

Я також спробував додати більше речей для оператора, але це було так само довго:

c x=sqrt$read$show$odd%x+even%x
(%)=(((^2).sum).).filter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.