2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Перевёртыш строки на JavaScript
Сообщение19.07.2018, 08:54 


29/12/13
306
Забыл, сейчас посмотрел справку. В javascript у массива есть метод reverse. Поэтому можно и так:

Используется синтаксис Javascript
console.log("1234567890abcd".split("").reverse().join('')) ;
 


По мне как в начале темы написано. То вопрос именно про это. Но если именно про рекурсию. То есть во многих движках поддержка оптимизации для хвостовой рекурсии и такие вызовы ничем по выполнению, отличаться от цикла не должны. А так при рекурсивных вызовах, нужно использовать bind. Или вызывать рекурсивно, через setTimeout. Это неоднозначный вопрос. Как лучше организовать рекурсивные вызовы на javascript. Все зависит от движка, который будет исполнять код.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 12:32 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ktina
Я напомню вам задачи, предложенные ещё в 2013 году, 5 с половиной лет назад. «Программирование для неудачников»

Прежде всего:
    Munin в сообщении #689871 писал(а):
    Дана строка из $n$ символов, каждый символ - либо открывающая скобка "(", либо закрывающая скобка ")". Надо проверить парность скобок: на каждую открывающую найдётся соответствующая ей закрывающая, стоящая после неё.

Аналогичные возрастающей сложности:

Ещё несколько:

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 13:15 


05/09/12
2587
На чердаке случайно завалялись и пылятся пара забавных кодов для задачи о парных скобках, и по иронии судьбы, как раз на Javascript :-)
Используется синтаксис Javascript
const validBraces = (s) => {
  const z = s.replace('()','').replace('[]','').replace('{}','');
  return z==s ? z=='' : validBraces(z);
}

Используется синтаксис Javascript
const validBraces = (s) => {
  var it = s[Symbol.iterator]();

  const f = (i, a) => {
    const b = it.next().value;
    return !b ? i==0
           : '([{'.includes(b) ? f(i+1, b) && f(i, a)
           : ['()','[]','{}'].includes(a+b);    
  }
  return f (0, ' ');
}

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 14:34 


29/12/13
306
Я ещё раз извиняюсь. Я не посмотрел другие темы поднятые топикстером, думал это про рекурсии на javascript. А это про то как заработать решая школьно-олимпиадные задачи. Это многое проясняет.

Ktina в сообщении #1326728 писал(а):
В ближайшей перспективе - заработать первые деньги программиста!

Занимаясь, тем чем вы сейчас занимаетесь, перевертывая строки или считая скобки. Вы вряд ли сможете заработать первые деньги программиста. В лучшем случае сможете в очень отдаленной перспективе зарабатывать как репетитор. Это если научитесь хорошо решать и объяснять школьные и олимпиадные задачи по информатике. Программирование это не только о том как писать алгоритм Евклида на глиняной дощечке. Зарабатывать совсем же отдельный навык, зачастую никак несвязанный с профессионализмом. Если хотите заработать с "разработки сайтов" .Установите какую-нибудь cms, Jooml`у или wordpress, хорошо изучите документацию, научитесь их настраивать, править плагины, шаблоны и т.д. Сделайте себе сайт и ещё пару сайтов для портфолио, предлагайте свои услуги где только можно. И будете зарабатывать, если повезет. А может и нет. Вот видео, как мальчик к успеху пришел.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 17:20 
Аватара пользователя


01/12/11

8634
Seman в сообщении #1327869 писал(а):
Вот видео, как мальчик к успеху пришел.

(Классический случай)

Мальчик произносит "облЕгчить", "трёхста" и "начать заработать", но зарабатывает больше меня. Особенно режет уши "трёхста". В Израиле есть русскоязычное радио, косноязычные ведущие которого частенько выдают подобные перлы. "Трёхста", "семиста", "двух тысячи восемнадцатого года", "двенадцать суден" (имеются в виду военные корабли), "поскандалил забрать ребёнка", "последствия лИтого свинца" (имелась в виду военная операция "Литой Свинец"). Но особенно тронуло: "Кнессет работает по-большому три дня в неделю" (имелось в виду, что Кнессет, по большому счёту, работает три дня в неделю).

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 17:43 


05/09/12
2587
Про кучу камней даже без мемоизации (хотя ее тривиально добавить) прошли тесты:
Используется синтаксис C++
int N, S, a[20];

int f (int s, int i) { return s<0 ? S : i>=N ? s : min(f(s-2*a[i], i+1), f(s, i+1)); }

int main() { cin>>N; for(int i=0; i<N; i++) {cin>>a[i]; S+=a[i];} cout<<f(S, 0); }

ЗЫ список языков на этом всеми забытом сайте древен и ограничен, поэтому ортодоксальный Си

ЗЗЫ мальчик, полагаю, показан как пример, что
Seman в сообщении #1327869 писал(а):
Зарабатывать совсем же отдельный навык
, никак не коррелирующий ни с какими другими.

-- 20.07.2018, 18:07 --

Про Ханойские башни можно просто и тупо (за что там 100 баллов непонятно совсем)
Используется синтаксис C++
char a,b;

int f (char x, char y, char z, int i) { return i<=0 ? 0 : (x==a && y==b) + f(x,z,y,i-1) + f(z,y,x,i-1); }

int main() { int n; cin>>n; cin>>a>>b; cout << f('A', 'B', 'C', n); }

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 21:37 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ktina
Я так понял, меня вы тщательно игнорируете?

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 22:06 
Аватара пользователя


01/12/11

8634
Munin в сообщении #1327954 писал(а):
Ktina
Я так понял, меня вы тщательно игнорируете?

Упаси, природа-мать!
Просто чувствую, что не потяну пока.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 23:09 
Заслуженный участник
Аватара пользователя


30/01/06
72407
А вы не чувствуйте, а берите и делайте. Это самые элементарные упражнения по программированию.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение20.07.2018, 23:43 


05/09/12
2587
Инверсии - читерство с tree, работает только в GNU С++
Используется синтаксис C++
#include <iostream>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;

int main() {
    tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s;
    int x, r=0, n=0; cin>>x;
    while (cin>>x) {
        r += n++ - s.order_of_key(x);
        s.insert(x);
    }
    cout<<r;          
}

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 02:13 


05/09/12
2587
Корни многочлена - добрые три четверти кода на удаление кратных корней и сортировку результата, нормальных языков в системе проверки нет, пришлось на Запорожце вектора заводить
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
vector<int> a;
vector<pair<int,int>> r;

vector<int> fc (int n) {
    vector<int> v; v.push_back(1);
    if (n==1) return v;
    v.push_back(n);    
    for (int d=2; d*d <= n; d++) if (n%d==0) { v.push_back(d); v.push_back(n/d); }
    return v;
}
void t(int p, int q) {
    int g=__gcd(abs(p), q); p/=g; q/=g;
    if (find(r.begin(), r.end(), make_pair(p,q)) != r.end()) return;
    double y=0; for (int i=0; i<a.size(); i++) y = y*p/q+a[i];
    if (abs(y)<1E-15) r.push_back(make_pair(p,q));
}
int main() {
    int x; cin>>x; while(cin>>x) a.push_back(x);
    if    (a[a.size()-1]==0) r.push_back(make_pair(0,1));
    while (a[a.size()-1]==0) a.pop_back();

    vector<int> an=fc(abs(a[0])), a0=fc(abs(a[a.size()-1]));
    for (int i=0; i<a0.size(); i++) for (int j=0; j<an.size(); j++) { t(a0[i], an[j]); t(-a0[i], an[j]); }
    sort(r.begin(), r.end(), [](pair<int,int> a, pair<int,int> b) {return 1.0*a.first/a.second < 1.0*b.first/b.second;});
    for (int i=0; i<r.size(); i++) cout<<r[i].first<<" "<<r[i].second<<'\n';
    if (r.size()==0) cout<<"NO SOLUTION";
}
 

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 12:06 
Заслуженный участник
Аватара пользователя


06/10/08
6422
_Ivana в сообщении #1327998 писал(а):
Код:
    double y=0; for (int i=0; i<a.size(); i++) y = y*p/q+a[i];
    if (abs(y)<1E-15) r.push_back(make_pair(p,q));
Ох. Таких вещей без знания теории делать нельзя.
Многочлен $907 x^{10} + 335 x^9 + 774 x^8 + 464 x^7 + 256 x^6 + 671 x^5 + 804 x^4 - 305 x^3 + x^2 - 907 x + 3$ в точке $x = 3/907$ имеет значение порядка $10^{-26}$: Wolfram Alpha

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 12:25 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Xaositect
Тем не менее, тесты на сайте решение _Ivana прошло:
    http://atpp.vstu.edu.ru/cgi-bin/statistica.pl?id_prb=6
    Код:
    Последние решения этой задачи:
    Номер   Дата   Автор   Компилятор   Результат   Тест   Время работы (сек)   Исп-но памяти (KB)
    472386   21.07.2018 2:12:20   Ivana   GNU C++ 4.8.1   Верно       0   280

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 13:12 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Тем не менее, результат в этом случае неверный, хотя под ограничения он подходит. Значит, тесты слишком добрые.
В этой задаче теоретически нужна точность $10^{-27}$, так что double вряд ли подойдет из-за проблем с сокращениями.
Правильный подход - считать $q^n f(p/q)$ в 64-битных целых.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 13:23 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Xaositect в сообщении #1328041 писал(а):
Правильный подход - считать $q^n f(p/q)$ в 64-битных целых.

А хватит цифр?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group