2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 Перевёртыш строки на JavaScript
Сообщение14.07.2018, 10:15 
Аватара пользователя


01/12/11
7115
Ярдена Шуламит, шуламила и будет шуламить!
Обязательно ли использовать вспомогательный массив для переворачивания строки?
Задание такое:
Обучающий сайт писал(а):
Reverse the provided string.

You may need to turn the string into an array before you can reverse it.

Your result must be a string.

Только вот у меня получилось безо всяких массивов:

Используется синтаксис Javascript
//Процедура, переворачивающая строку.
function reverseString(str) {
  var rts = ""; // rts - это str наоборот :)
    for (let i = str.length - 1; i >= 0; i--) {
        rts += str[i];
    }
  return rts;
}

console.log(reverseString("hello")); // Ну и проверочка, вроде, даёт то, что нужно...
 


И что любопытно, тест у них на сайте я прохожу с этой процедурой, хотя делаю не совсем то, о чём там просят.
Пожалуйста, помогите рабозраться.
Заранее благодарю!

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


21/05/16
1964
Аделаида
Ktina в сообщении #1326640 писал(а):
Только вот у меня получилось безо всяких массивов:

А при вызове str[i] вы не называете строку массивом?

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение14.07.2018, 13:23 
Супермодератор
Аватара пользователя


09/05/12
15095
Кронштадт
Ktina в сообщении #1326640 писал(а):
Обязательно ли использовать вспомогательный массив для переворачивания строки?
Не обязательно, но Вы его используете. Смысл задания в том, чтобы обойтись только str без rts.

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


01/12/11
7115
Ярдена Шуламит, шуламила и будет шуламить!
kotenok gav
Pphantom

Ну тогда вот так:

Используется синтаксис Javascript
function reverseString(str) {
  if (str === "") {
    return "";
  }  
 
     else {
       return reverseString(str.substr(1))+str.charAt(0);
     }
}

console.log(reverseString("Yardena"));
 

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


05/09/12
2443
Шик. А теперь хвостовой рекурсией (хотя по ES6 она и не оптимизируется браузерами, но по слухам Мозилла или какой-нибудь Сафари оптимизирует ее в порядке инициативы)

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


01/12/11
7115
Ярдена Шуламит, шуламила и будет шуламить!
_Ivana в сообщении #1326698 писал(а):
А теперь хвостовой рекурсией ...

Что за зверь? С чем едят?

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


09/05/12
15095
Кронштадт
Ktina в сообщении #1326691 писал(а):
Ну тогда вот так:
Фактически это заметание мусора под ковер. Такой рекурсивный вариант приведет к созданию многочисленных экземпляров частей строки в промежуточных состояниях, т.е. памяти будет израсходовано больше, чем в первом варианте решения (причем ее объем будет квадратично зависеть от размера строки, что совсем плохо).

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


05/09/12
2443
Ktina в сообщении #1326701 писал(а):
Что за зверь? С чем едят?

С книжками, а в наш информационный век еще и под гугловым соусом.

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


01/12/11
7115
Ярдена Шуламит, шуламила и будет шуламить!
_Ivana в сообщении #1326704 писал(а):
Ktina в сообщении #1326701 писал(а):
Что за зверь? С чем едят?

С книжками, а в наш информационный век еще и под гугловым соусом.

А зверушка-то оказалась вкусняшкой:

Используется синтаксис Javascript
function reverseString(str) {
    function proc(str, tail) {
        return str === '' ? tail : proc(str.substring(1), str[0] + tail);
    }
    return proc(str, '');
}

console.log(reverseString("Yardena"));
 

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


05/09/12
2443
Ну вот уже и тернарники пошли, динамика положительная, скоро может и до стрелочных функций дойдем, а там, глядишь, и ступим на дорогу в прекрасный мир ФП :D Но и замечания Pphantom хорошо бы съесть, про мутабельность/иммутабельность строк и структур данных вообще и модель памяти.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение14.07.2018, 16:55 
Супермодератор
Аватара пользователя


09/05/12
15095
Кронштадт
_Ivana в сообщении #1326708 писал(а):
Ну вот уже и тернарники пошли, динамика положительная, скоро может и до стрелочных функций дойдем, а там, глядишь, и ступим на дорогу в прекрасный мир ФП
Это, конечно, красивая перспектива, но умение решать тупые задачи тупыми же, но эффективными методами в реальном программировании зачастую важнее. :mrgreen:

 Профиль  
                  
 
 Перевёртыш строки на JavaScript
Сообщение14.07.2018, 16:58 
Аватара пользователя


01/12/11
7115
Ярдена Шуламит, шуламила и будет шуламить!
Pphantom в сообщении #1326717 писал(а):
...умение решать тупые задачи тупыми же, но эффективными методами в реальном программировании зачастую важнее. :mrgreen:

Прошу прощения за оффтоп, а что ещё важно в реальном программировании? А то так и буду учебные задачки для девятилетних девочек здесь постить, а хотелось бы хоть когда-нибудь от учебных перейти к "боевым".

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение14.07.2018, 17:24 
Заслуженный участник


06/07/11
4783
кран.набрать.грамота
Ktina в сообщении #1326719 писал(а):
а что ещё важно в реальном программировании?
Результат :mrgreen:
Остальное - уже детали и нюансы.

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


16/07/14
2261
Москва
Опыт, сын ошибок трудных.

Вообще "реальное" программирование сильно отличается от учебного, олимпиадного, исследовательского и от себя самого (в разных местах оно сильно разное).
Чтобы научиться решать реальные задачи, нужно практиковаться решать реальные задачи. И тут вопрос в том, чем именно вы хотите заниматься.

Но в целом ИМХО сначала полезно разобраться с основами (например, что значит "сделать без дополнительной памяти"), а потом уже думать о реальных задачах.

 Профиль  
                  
 
 Re: Перевёртыш строки на JavaScript
Сообщение14.07.2018, 17:28 
Заслуженный участник


06/07/11
4783
кран.набрать.грамота
Ах да, среди прочих нюансов есть один действительно важный нюанс.
Нужно уметь понимать, в чем именно заключается результат. Казалось бы, такая очевидная вещь, но нет. Регулярно возникают баталии на тему "результат достигнут или еще нет".
Самое печальное, что заказчик работы (в широком смысле) и сам может толком не знать, чего он хочет. А вот программисту не знать этого нельзя.

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

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



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

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


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

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