Перейти к содержимому

Фотография

Задачка от Yandex для приема к ним на работу Преподавателем ПрограммированияПрограммирование С++, Конкурс


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

Предыстория: Пару недель назад для интереса решил глянуть что такое Yandex Лицей. Cперва попытался подать туда заявление на учебу, но оказалась что они их принимают только с августа. Тогда  я для  интереса решил посмотреть что будет если подать заявку на  то чтобы устроится к ним Преподавателем Программирования :)  которых они тоже набирают и у них там для этого дела проходит конкурс в котором надо за 2 часа решить 4 задачки.  За первую и вторую задачку Яндекс мои  решения засчитал, а на Последней я  застрял потому что Яндекс ни в какую не хотел принимать Моего решения.

 

См. код:

#include <iostream>
#include <locale>


using namespace std;


wstring clearstr (wstring str){
   wchar_t tire = 8212;
   wchar_t ie_gl = 1025;
   wchar_t ie_ml = 1105;
   wchar_t e_ml = 1077;

   int  n = str.size();
   for (int i=0; i<n; i++){
   if( str[i] == ',' ||
       str[i] == '.' ||
       str[i] == tire ||
       str[i] == '-' ||
       str[i] == ':' ||
       str[i] == ';' ||
       str[i] == '?' ||
       str[i] == '!' ||
       str[i] == '\"' ||
       str[i] == '(' ||
       str[i] == ')')
   str[i] = ' ';
 if(   str[i] ==  ie_gl ||
       str[i] ==  ie_ml)
   str[i] = e_ml;

 }
  return str;
}

int check (wstring w) {

 bool poli;       // признак палиндрома
 wchar_t *s = (wchar_t*)w.c_str(); // начало строки
 wchar_t *pb = s;
 wchar_t *pe = pb + wcslen(s) - 1; // конец строки
 do {
       while (*pb == ' ') pb++;
       while (*pe == ' ') pe--;
       poli = towlower(*pb) == towlower(*pe); // преобразование заглавных букв в малые
     }
   while (poli && ++pb <= --pe);
   wcout << (poli ? L"yes" : L"no") << endl;
   return 0;
 
}


int main() {

    setlocale(LC_ALL, "");

 int n;
 wcin >> n;
// t800
// wcout << "n = " << n << endl;
// t800
 wstring null;
 getline(wcin, null);
 for (int i=1;i<=n;i++) {
 wstring w(L"\n");
 getline(wcin, w);
 // t800
 //wcout << "w = " << w << endl;
 w = clearstr(w);
 //wcout<< "w clear = " <<  w << endl;
 check(w);
  }
return 0;
}

yandex_4_3.png

 

 

Хотя у меня на компе все мои тесты Мое Решение проходило

 

 

Условие Задачи

 

yandex4_1.png



					
					

Сообщение отредактировал T-800 Danya: 31.07.2018, 18:05:15

  • 0

#2
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

Важное Объявление:

 

Тому кто первым найдет ошибку в моем Решении и исправит ее так чтобы код прошел Проверку в Yandex Лицей.

 

На его Qiwi кошелек будет переведена премия   в 5$

 

Примечание: По всем вопросам касающимся выплаты Премии победителю  данного Конкурса обращаться на t800@kvkozyrev.org

 

С уважением Богдан


Сообщение отредактировал T-800 Danya: 31.07.2018, 18:03:50

  • 0

#3
asr

asr
  • Модератор
  • 24 325 сообщений

Важное Объявление:
 
Тому кто первым найдет ошибку в моем Решении и исправит ее так чтобы код прошел Проверку в Yandex Лицей.
 
На его Qiwi кошелек будет переведена премия   в 5$
 
Примечание: По всем вопросам касающимся выплаты Премии победителю  данного Конкурса обращаться на t800@kvkozyrev.org
 
С уважением Богдан

Какой-то не оптимальный код.
Не силен в С++
А разве там нету?

StrTmp1 = StrTmp1+str[i];
StrTmp2 = str[i]+StrTmp2;
  • 0

#4
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

 

Важное Объявление:
 
Тому кто первым найдет ошибку в моем Решении и исправит ее так чтобы код прошел Проверку в Yandex Лицей.
 
На его Qiwi кошелек будет переведена премия   в 5$
 
Примечание: По всем вопросам касающимся выплаты Премии победителю  данного Конкурса обращаться на t800@kvkozyrev.org
 
С уважением Богдан

Какой-то не оптимальный код.
Не силен в С++
А разве там нету?

StrTmp1 = StrTmp1+str[i];
StrTmp2 = str[i]+StrTmp2;

 

 

В С++  много чего есть...

 

Вообще-то данный код как думалось так и  писался,   т.е. что я думал то и писал  на ходу  Изобретая Велосипед 

 

Скрытый текст

 

При том что Yandeх  на все эти 4 тестовые  задачки вообще-то дает 2 часа времени ;)

 

ЗЫ И кстати,  мне тут вдруг стало  ОЧЕНЬ интересно - это в какое такое место моего кода Вы хотите воткнуть этот  Ваш :)

StrTmp1 = StrTmp1+str[i];
StrTmp2 = str[i]+StrTmp2;

Часом не в функцию clearstr() ? acute.gif


Сообщение отредактировал T-800 Danya: 31.07.2018, 20:36:27

  • 0

#5
asr

asr
  • Модератор
  • 24 325 сообщений

ЗЫ И кстати,  мне тут вдруг стало  ОЧЕНЬ интересно - это в какое такое место моего кода Вы хотите воткнуть этот  Ваш :)

StrTmp1 = StrTmp1+str[i];
StrTmp2 = str[i]+StrTmp2;
Часом не в функцию clearstr() ? acute.gif


Ну да. Одним циклом получаем строку и обратную строку очищенные от лишних символов.
Далее их просто сравнить приведя или к верхнему или нижнему регистру.
  • 0

#6
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

 

ЗЫ И кстати,  мне тут вдруг стало  ОЧЕНЬ интересно - это в какое такое место моего кода Вы хотите воткнуть этот  Ваш :)

StrTmp1 = StrTmp1+str[i];
StrTmp2 = str[i]+StrTmp2;
Часом не в функцию clearstr() ? acute.gif

 


Ну да. Одним циклом получаем строку и обратную строку очищенные от лишних символов.
Далее их просто сравнить приведя или к верхнему или нижнему регистру.

 

 

Э..э...э ... Ну в принципе можно было конечно и не выносить очистку в отдельную функцию -   просто с отладкой проблемы тогда вылазят - Потому что сравнение wchar_t  это не  сравнение string тем более что у меня компилятор в VM стоял gcc++ 4.6 и как-то по простому преобразовать wchar_t в string там никак не получается gamer3.gif

 

Т.е. Мое Решение -  это такой собранный  Велосипед из того под рукой было и на чем можно было сделать. matrix.gif

 

А так-то конечно если делать на С++ 11 (которая поддерживает UTF-8)  и подключить STL то да Задачка легко  решается без всяких Велосипедов. beach.gif

 

Но призовой Вопрос как бы в ДРУГОМ почему Мой Велосипед ВСЕ тесты от Yandex НЕ проходит. throw.gif

 

И на чем же все таки  Yandex мое Решение РЕЖЕТ dwarf3.gif - И этот вопрос действительно Интересный  doomguy_spiteful.gif


Сообщение отредактировал T-800 Danya: 31.07.2018, 22:10:59

  • 0

#7
asr

asr
  • Модератор
  • 24 325 сообщений

Но призовой Вопрос как бы в ДРУГОМ почему Мой Велосипед ВСЕ тесты от Yandex НЕ проходит.
И на чем же все таки  Yandex мое Решение РЕЖЕТ И этот вопрос действительно Интересный


Если немного подумаете, поймете тут никто не ответит почему яндекс режет. Это может ответить только яндекс.
Можно делать только предположения.
Ваше решение дает правильный результат.
Отсюда предположение, программа решает правильно и ошибки нет.
А раз ошибки нет, отсюда другое предположение, не нравится логика решения.
  • 0

#8
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

Если немного подумаете, поймете тут никто не ответит почему яндекс режет. Это может ответить только яндекс.

Можно делать только предположения.

Ваше решение дает правильный результат.
Отсюда предположение, программа решает правильно и ошибки нет.
А раз ошибки нет, отсюда другое предположение, не нравится логика решения.

 

 

Ну там в Yandex Лицей ведь не человек Решение проверяет,   А программа которая банально проводит серию тестов (всего их там для данной Задачки три)

На втором тесте  Решение Режется.  Первый тест проходит.  На первом тесте проверяются данные из Условия, что проверяет второй и третий тест неизвестно,

 

Т.е. эта моя  Задачка - это  Задачка на Отладку и поиск Ошибки  (с точки зрения Yandex) в данном решении  (и Именно в Данном Велосипеде)

 

Отлаживать и проверять можно прямо в Системе Yandeх Контекст, надо просто залогиниться в этот Тест для тех кто Хочет Стать Преподавателем Программирования в Yandex  потому что задачки там для Всех Одни и те же. 

 

см.  https://yandexlyceum...ers#requirement

       https://contest.yand...est/7309/enter/


Сообщение отредактировал T-800 Danya: 01.08.2018, 10:25:58

  • 0

#9
Friday

Friday
  • Свой человек
  • 765 сообщений

Навскидку - нет проверки на переменную n (1<=n<=100000) - это уже не соответствие ТЗ

 

И лучше не перечислять убираемые символы? Наоборот разрешать только буквы? Ведь могут быть _ итд?

 

е/ё - это эти символы?

   wchar_t ie_gl = 1025;
   wchar_t ie_ml = 1105;

 


  • 0

#10
T-800 Danya

T-800 Danya
  • Свой человек
  • 653 сообщений

 

Навскидку - нет проверки на переменную n (1<=n<=100000) - это уже не соответствие ТЗ

 

Вполне возможно :)

 

 

И лучше не перечислять убираемые символы? Наоборот разрешать только буквы? Ведь могут быть _ итд?

 

 

Тоже хорошая Идея! :)

 

  

е/ё - это эти символы?

wchar_t ie_gl = 1025;
wchar_t ie_ml = 1105;

 

Это символы  Ё и ё 

 

ЗЫ Кстати, прошу обратить Внимание что если если Вы найдете Ошибку и скормите Откорректированное Решение в  Yandex Лицей  чтобы оно успешно прошло все три теста - то помимо того что Вы получите от меня 5$ на Ваш Qiwi Кошелек у вас еще есть все Шансы занять Лидирующие Позиции в тестировании на  Должность Преподавателя Программирования в Yandex , потому что первые 3 задачки решаются минут за 30-40.


Сообщение отредактировал T-800 Danya: 01.08.2018, 11:39:12

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.