А сейчас возможно? + для конкатенации строк, но — / * для строк нету. Покажите мне тот обобщённый код на JS, который сможет воспользоваться этим с пользой.
Сумма в массиве и в массиве строк? Но это 1 частный случай, и ради него создавать проблемы в куче других мест глупо.
Причём тут JIT? Проблема в динамической типизации а не в JIT. Если типы в JS станут выводиться статически, то JS станет TS. А TS, если очень постараться может и до с++ дотянуть(когда-нибудь). WebAssembly как раз к этому и идёт.
Сейчас же function f(a,b){return a+b;} в JS не оптимизируешь.
Программа на С++ будет работать быстрее чем на JS примерно в 5-10 раз. Я не думаю, что то как тул написан повлияет на производительность так-же сильно.
JS всегда будет проигрывать компилируемым языкам, так как для выполнения a+b процессору всегда придётся выполнять проверку типов. В языке с статической типизацией просто будет сложение.
2 3 5 взаимно простые числа, значит каждое число имеет однозначное разложение на множители в виде 2^i*3^j*5^k.
2^i*3^j*5^k <=> (i,j,k)
10 <=> (1,0,1)
15 <=> (0,1,1)
Значит разные наборы ijk создадут разные числа и наоборот.
Я просто переводил код с JS на C#, дабы показать что наличие статических типов не меняет сути решения(а заодно показал, что в символ превратить цифру в языке со статической типизацией проще).
Это типичная олимпиадная задача с подвохом(ещё и не одним), тут не надо супер крутых структур данных. Тут главное понять, какую именно идею подсунул автор. Я хаскель не понимаю, так что сказать что там происходит не могу, но на JS такое можно решить так:
var a = "5:11 2:41 1:31 3:8 1:6 2:31".Split(' ').Select(x => new int[]{ int.Parse(x.Split(':')[0]) , int.Parse(x.Split(':')[1]) });
var h = a.Sum(e => e[0]);
var m = a.Sum(e => e[1]);
h += m / 60;
m %= 60;
Console.WriteLine(h + ":" + m);
И никакой magic.
3 задача C#:
Console.WriteLine(
(new []{97,67,101,123,114,99,84,84,101,104,95,116,48,121,125,116,53,52,115})
.Select(e => (char)e)
.ToArray()
);
Ага, а потом оказывается что в программе полно дыр для SQL injection. В С++ со строгими типами мне не удаётся представить, как надо извратиться, чтобы такую дыру создать.
Предупреждение C4244: преобразование «float» в «int», возможна потеря данных
Warnings as errors и такое не проканает.
Я так и не заметил. Наверное надо было пытаться победить, а не вмазать в стену как можно больше тупых аи.
Сумма в массиве и в массиве строк? Но это 1 частный случай, и ради него создавать проблемы в куче других мест глупо.
Майкрософт исправил это, однако С++ с GC что-то не пользуется популярностью.
Сейчас же function f(a,b){return a+b;} в JS не оптимизируешь.
Всё так-же меньше секунды. Сколько ест не скажу, в браузере запускал.
2^i*3^j*5^k <=> (i,j,k)
10 <=> (1,0,1)
15 <=> (0,1,1)
Значит разные наборы ijk создадут разные числа и наоборот.
Работает менее секунды, однако не факт, что решено правильно. Ответ получился 8153726976.
И никакой magic.
3 задача C#:
А библиотеку обернуть: