Полгода назад компания Nival прислало мне желание меня лицезреть и тест который нужно сделать.На что я плюнул на эту затею, не потому что я что то плохое имею к Nival
а просто знаю что в gamedev платят через чур мало :)
Но тест вот лежал, и решил его сделать на Qt
Смысл задания сводиться к тому, что бы загрузить любой документ и найти максимальную
последовательность , то есть 0,1,2,33,55,66,33 тут максимум 6 и так далее по всему файлу.
Ну и последняя фича, нужно все это сделать в потоке.
reliase:
#ifndef CALCULATE_H
а просто знаю что в gamedev платят через чур мало :)
Но тест вот лежал, и решил его сделать на Qt
Смысл задания сводиться к тому, что бы загрузить любой документ и найти максимальную
последовательность , то есть 0,1,2,33,55,66,33 тут максимум 6 и так далее по всему файлу.
Ну и последняя фича, нужно все это сделать в потоке.
reliase:
#ifndef CALCULATE_H
#define CALCULATE_H
#include <QThread>
#include <QByteArray>
#include <QFile>
#include <QMutex>
namespace test
{
class Calculate : public QThread
{
Q_OBJECT
public:
Calculate(QString _filename , int _iCountThread) : QThread(0) ,m_iCountThread(_iCountThread) {
QFile file(_filename);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug("error not found file");
}else // file found
{
m_currentlyElements = file.readAll();
qDebug("%d size block %d filename %s ",m_iCountThread,m_currentlyElements.size(),_filename.toStdString().c_str());
}
m_tmpElements.clear();
}
protected:
void run()
{
int iCount = 0;
while(reCalculate(iCount++))
{}
}
virtual ~Calculate() {}
private:
int m_iCountThread;
QByteArray m_maxElements , m_currentlyElements , m_tmpElements;
QMutex m_mutex;
bool reCalculate(int m_iCount)
{
m_mutex.lock();
// делаем перебор и заполняем темлайтный массив
if (m_iCount + 1 < m_currentlyElements.size()) // max size + 1
{
if (m_currentlyElements.at(m_iCount) <= m_currentlyElements.at(m_iCount + 1) )
{
m_tmpElements += m_currentlyElements.at(m_iCount);
}else
{
if (m_maxElements.size() < m_tmpElements.size())
{
m_maxElements = m_tmpElements;
}
m_tmpElements.clear();
}
}else
{
int count = 0;
while(count != m_maxElements.size())
{
qDebug("valuse %d (%d)",m_maxElements.at(count),m_iCountThread);
count++;
}
qDebug("destroy %d thread",m_iCountThread);
m_mutex.unlock();
return false;// finish search
}
if (m_maxElements.size() < m_tmpElements.size())
m_maxElements = m_tmpElements;
m_mutex.unlock();
return true;// loop more
}
};
}
#endif // CALCULATE_H
test::Calculate *val = new test::Calculate("filename");
val->start();
сразу извиняюсь за форматирование он тут суров.
Комментариев нет:
Отправить комментарий