From 5a641b91ec396686441b49654abecfa437a05c71 Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Tue, 24 Sep 2013 00:28:00 +0400 Subject: [PATCH] Nokia Interview Test + exception constructor --- NokiaInterviewTest.cpp | 239 +++++++++++++++++++++ cf5-opt.vim | 18 ++ exception_constructor.cpp | 54 +++++ memory_test_vahagnk-e6530.xlsx | Bin 0 -> 33068 bytes pod_constructor_optimization_for_array.cpp | 37 ++++ tbb_test/main.cpp | 132 ------------ tbb_test/tbb_test.bat | 37 ---- tbb_test/tbb_test.sln | 20 -- tbb_test/tbb_test.vcxproj | 159 -------------- tbb_test/tbb_test.vcxproj.filters | 22 -- 10 files changed, 348 insertions(+), 370 deletions(-) create mode 100644 NokiaInterviewTest.cpp create mode 100644 exception_constructor.cpp create mode 100644 memory_test_vahagnk-e6530.xlsx create mode 100644 pod_constructor_optimization_for_array.cpp delete mode 100644 tbb_test/main.cpp delete mode 100644 tbb_test/tbb_test.bat delete mode 100644 tbb_test/tbb_test.sln delete mode 100644 tbb_test/tbb_test.vcxproj delete mode 100644 tbb_test/tbb_test.vcxproj.filters diff --git a/NokiaInterviewTest.cpp b/NokiaInterviewTest.cpp new file mode 100644 index 0000000..6ffa2cb --- /dev/null +++ b/NokiaInterviewTest.cpp @@ -0,0 +1,239 @@ +/* Check cf5-opt.vim defs. +VIM: let g:lcppflags="-std=c++11 -O2 -pthread" +VIM: let g:wcppflags="/O2 /EHsc /DWIN32" +VIM: let g:argv="" +*/ +#include +#include +#include +#include +#include + +int testinput[] = { +1,0,0,0,1,0,0,0,0 +}; + +// find bug. +int solution3(std::vector& A) { + int n = A.size(); + int i = n - 1; + int result = -1; + int k = 0; + int maximal = 0; + while (i > 0) + { + if (A[i] == 1) + { + k = k + 1; + if (k >= maximal) + { + maximal = k; + result = i; + } + } + else + { + k = 0; + } + i = i - 1; + } + if (A[i] == 1 && k + 1 > maximal) // <- bug is here. there should be k+1 >= maximal + result = 0; + return result; +} + +const char * a1 = "abc"; +const char * a2 = "Abc"; + +int solution4(const std::string & s1, const std::string & s2) +{ + std::string::const_iterator s1it = s1.begin(); + std::string::const_iterator s1et = s1.end(); + std::string::const_iterator s2it = s2.begin(); + std::string::const_iterator s2et = s2.end(); + for ( ; s1it!=s1et && s2it!=s2et; ++s1it, ++s2it ) + { + char c1 = toupper(*s1it); + char c2 = toupper(*s2it); + if ( c1 < c2 ) + return -1; + else if ( c2 < c1 ) + return 1; + } + + if ( s1it==s1et && s2it==s2et ) + return 0; + else if ( s1it==s1et ) + return -1; + else + return 1; +} + +int solution2(int blx1, int bly1, int trx1, int try1, int blx2, int bly2, int trx2, int try2) +{ + if ( blx1 > trx1 ) + std::swap( blx1, trx1 ); + if ( bly1 > try1 ) + std::swap( bly1, try1 ); + if ( blx2 > trx2 ) + std::swap( blx2, trx2 ); + if ( bly2 > try2 ) + std::swap( bly2, try2 ); + + if ( trx1 < blx2 + || trx2 < blx1 + || try1 < bly2 + || try2 < bly1 ) + return 0; + + long long x[4] = { blx1,trx1,blx2,trx2 }; + std::sort( &x[0], &x[4]); + + long long y[4] = { bly1,try1,bly2,try2 }; + std::sort( &y[0], &y[4]); + + unsigned long long a = (unsigned long long)(x[2]-x[1])*(unsigned long long)(y[2]-y[1]); + return ( a <= 2147483647 ) ? (int)a : -1; +} + +int solution1( std::vector & a ) +{ + typedef std::vector v_t; + + std::sort(a.begin(),a.end()); + + long long s = 0; + + v_t::const_iterator it=a.begin(); + v_t::const_iterator et=a.end(); + v_t::const_iterator jt; + for ( jt = it; it != et && *it == *jt; ++it ); + long long ic = it - jt; + s += ic*(ic-1)/2; + + for ( ; it != et; ) + { + for ( jt = it; it != et && *it == *jt; ++it ); + long long pc = ic; + ic = it - jt; + s += ic*(ic-1)/2; + s += ic*pc; + } + + const long long lim = 100000000; + return ( s <= lim ) ? s : -1; +} + +// you can also use includes, for example: +int solution_demo1( std::vector & a ) +{ + if ( !a.size() ) + return -1; + + typedef std::vector::const_iterator iterator; + typedef std::vector ub_t; + + int s = 0; + ub_t ub; + for ( iterator it=a.begin(), ib=a.begin(), ie=a.end(); + it!=ie; ++it ) + { + int c = it-ib; + long long l = c-*it; + long long r = c+*it; + + ub_t::iterator jt = std::lower_bound( ub.begin(), ub.end(), l); + s += ub.end()-jt; + if ( s > 10000000 ) + return -1; + + jt = std::upper_bound( ub.begin(), ub.end(), r); + ub.insert(jt, r); + } + return s; +} + +// you can also use includes, for example: +int solution_demo2( const std::vector & a ) +{ + typedef std::vector::const_iterator iterator; + // + // There is no solution if array 'a' has no elements. However, + // per task condition 'a' is non-empty. So, I don't consider that + // case. + // + std::vector m( a.size(), false ); + // + // This is the index. + // + int cvrp = 0; + // + // Iterate over array and find the index that inserts + // element into m. That will be wanted index. + // + for ( iterator it=a.begin(), ib=a.begin(), ie=a.end(); + it!=ie; ++it ) + { + if ( !m[*it] ) + { + m[*it]=true; + cvrp = it - ib; + } + } + // + // Make it index. + // + return cvrp; +} + +int main ( void ) +{try{ + + +// std::cout << solution( 0,0,2,2, 1,1,3,3 ) << std::endl; +// std::cout << solution( -2147483648,-2147483648,2147483647,2147483647, -2147483640,-2147483640,2147483640,2147483640 ) << std::endl; + + +// std::cout << solution( std::string(a1), std::string(a2) ) << std::endl; + +#if 1 + int cnt = sizeof(testinput)/sizeof(testinput[0]); + std::vector a; + //std::cout << solution( a ) << std::endl; + + a.reserve(cnt); + for ( int i = 0; i < cnt; ++i ) + a.push_back(testinput[i]); + std::cout << solution3( a ) << std::endl; + +/* + { + std::vector b(100000,1); + std::cout << solution( b ) << std::endl; + } + { + std::vector b(10000,1); + std::cout << solution( b ) << std::endl; + } + { + std::vector b(1000,1); + std::cout << solution( b ) << std::endl; + } +*/ +#endif + + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} + diff --git a/cf5-opt.vim b/cf5-opt.vim index 0c9d02c..0e2dbd1 100644 --- a/cf5-opt.vim +++ b/cf5-opt.vim @@ -55,6 +55,24 @@ function! s:SetUpLibrariesWindows() let g:Ltbb=" /LIBPATH:\"".g:tbblib."\" tbb.lib" let g:tbbmalloc=" tbbmalloc.lib" let g:tbbmproxy=" tbbmalloc_proxy.lib" + " + " Win SDK + " + let g:wsdkdir="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A" + let g:wsdkinc=g:wsdkdir."\\Include" + let g:wsdklib=g:wsdkdir."\\Lib\\x64" + let g:wsdkbin=g:wsdkdir."\\Bin" + let g:Iwsdk=" /I\"".g:wsdkinc."\"" + let g:Lwsdk=" /LIBPATH:\"".g:wsdklib."\"" + " + " OpenGL + " + let g:wsdkdir="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A" + let g:glinc=g:wsdkinc + let g:gllib=g:wsdklib + let g:glbin="" + let g:Igl=" /I\"".g:glinc."\"" + let g:Lgl=" /LIBPATH:\"".g:gllib."\" OpenGL32.Lib GLU32.lib" endfunction function! SetUpLibraries() diff --git a/exception_constructor.cpp b/exception_constructor.cpp new file mode 100644 index 0000000..ac037ee --- /dev/null +++ b/exception_constructor.cpp @@ -0,0 +1,54 @@ +/* Check cf5-opt.vim defs. +VIM: let g:lcppflags="-std=c++11 -O2 -pthread" +VIM: let g:wcppflags="/O2 /EHsc /DWIN32" +VIM-: let g:cf5output=0 +*/ +#include +#include +#include + +struct A +{ + A() + { + std::cout << "A::A()" << std::endl; + } + ~A() + { + std::cout << "A::~A()" << std::endl; + } +}; + +struct B : public A +{ + B() + { + std::cout << "B::B()" << std::endl; + } + ~B() + { + throw std::runtime_error("test"); + std::cout << "B::~B()" << std::endl; + } +}; + +int main ( void ) +{try{ + + B o; + + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} + diff --git a/memory_test_vahagnk-e6530.xlsx b/memory_test_vahagnk-e6530.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4fe1589707072411a6d091f743d70863923a2d8d GIT binary patch literal 33068 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 +#include + +struct A +{ + int a; + int b; + + A() + { + std::cout << "A::A()" << std::endl; + } +}; + + +int main ( void ) +{try{ + + A a[4]; + + + + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} + diff --git a/tbb_test/main.cpp b/tbb_test/main.cpp deleted file mode 100644 index 290c50f..0000000 --- a/tbb_test/main.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include -#include - -#include -#include - -static const size_t N = 23; - -class SubStringFinder -{ - const std::string str; - size_t *max_array; - size_t *pos_array; - -public: - void operator() ( const tbb::blocked_range& r ) const - { - std::cout << "gs:" << r.grainsize() << " b:" << r.begin() << " e:" << r.end() << std::endl; - std::cout.flush(); - for ( size_t i = r.begin(); i != r.end(); ++i ) - { - size_t max_size = 0, max_pos = 0; - for (size_t j = 0; j < str.size(); ++j) - if (j != i) - { - size_t limit = str.size()-std::max(i,j); - for (size_t k = 0; k < limit; ++k) - { - if (str[i + k] != str[j + k]) - break; - if (k > max_size) - { - max_size = k; - max_pos = j; - } - } - } - max_array[i] = max_size; - pos_array[i] = max_pos; - } - } - - SubStringFinder(std::string &s, size_t *m, size_t *p) - : str(s), max_array(m), pos_array(p) - { } -}; - -int test() -{ - std::string str[N] = { std::string("a"), std::string("b") }; - - for (size_t i = 2; i < N; ++i) - str[i] = str[i-1]+str[i-2]; - std::string &to_scan = str[N-1]; - size_t num_elem = to_scan.size(); - - size_t *max = new size_t[num_elem]; - size_t *pos = new size_t[num_elem]; - - tbb::parallel_for( tbb::blocked_range(0, num_elem ), - SubStringFinder( to_scan, max, pos ) ); - - for (size_t i = 0; i < num_elem; ++i) - std::cout << " " << max[i] << "(" << pos[i] << ")" << std::endl; - delete[] pos; - delete[] max; - return 0; -} - -class copy_tracker -{ - int v; -public: - copy_tracker() - : v(0) - { - std::cout << "copy_tracker::copy_tracker()" << std::endl; - } - - copy_tracker( copy_tracker& c ) - : v( c.v ) - { - std::cout << "copy_tracker::copy_tracker( copy_tracker& c )" << std::endl; - } - - void echo() - { - std::cout << v << std::endl; - } -}; - -copy_tracker copy_tracker_by_value() -{ - return copy_tracker(); -} - -copy_tracker copy_tracker_by_value2() -{ - return copy_tracker_by_value(); -} - -void test_copy_tracker() -{ - volatile copy_tracker o = copy_tracker_by_value2(); - -} - -int test_flowgraph() -{ - return 0; -} - -int main ( void ) -{try{ - - test(); - - test_copy_tracker(); - return 0; -} -catch ( const std::exception& e ) -{ - std::cerr << std::endl - << "std::exception(\"" << e.what() << "\")." << std::endl; -} -catch ( ... ) -{ - std::cerr << std::endl - << "unknown exception." << std::endl; -}} \ No newline at end of file diff --git a/tbb_test/tbb_test.bat b/tbb_test/tbb_test.bat deleted file mode 100644 index 691ac9f..0000000 --- a/tbb_test/tbb_test.bat +++ /dev/null @@ -1,37 +0,0 @@ -cd "%~dp0" - -call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64 - -set SRCDIR=%CD%\src - -set BOOST=C:\Users\Vahagnk\src\boost_1_53_0 -set BOOST_INCLUDE=%BOOST% -set BOOST_LIB64=%BOOST%\stage\win64_vc12\lib - -set GTEST=C:\Users\Vahagnk\src\gtest-1.6.0 -set GTEST_INCLUDE=%GTEST%\include -set GTEST_LIB64=%GTEST%\build_x64_vc12 - -set ZLIB=C:\Users\Vahagnk\src\zlib-1.2.7 -set ZLIB_INCLUDE=%ZLIB% -set ZLIB_LIB64=%ZLIB%\build_x64_vc12 - -set LIBPNG=C:\Users\Vahagnk\src\libpng-1.5.10 -set LIBPNG_INCLUDE=%LIBPNG% -set LIBPNG_LIB64=%LIBPNG%\build_x64_vc10 - -set TBB=C:\Users\Vahagnk\src\tbb41_20121003oss -set TBB_INCLUDE=%TBB%\include -set TBB_LIB64=%TBB%\lib\intel64\vc11 -set TBB_BIN64=%TBB%\bin\intel64\vc11 - -set SRCDIR="%~dp0\src" - -set CL=/I%BOOST_INLCUDE% /I%TBB_INLCUDE% /I%GTEST_INCLUDE% /I%LIBPNG_INCLUDE% /I%ZLIB_INCLUDE% /I%QT_INCLUDE% /I%SRCDIR% /D_CRT_SECURE_NO_WARNINGS /DTEST_VERSION=\"vahagn_experimental\" -set LINK=/INCREMENTAL:NO - -set PATH=%TBB_BIN64%;%PATH% - -start devenv.exe %~n0.sln - - diff --git a/tbb_test/tbb_test.sln b/tbb_test/tbb_test.sln deleted file mode 100644 index 165382f..0000000 --- a/tbb_test/tbb_test.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbb_test", "tbb_test.vcxproj", "{5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E}.Debug|x64.ActiveCfg = Debug|x64 - {5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E}.Debug|x64.Build.0 = Debug|x64 - {5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E}.Release|x64.ActiveCfg = Release|x64 - {5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/tbb_test/tbb_test.vcxproj b/tbb_test/tbb_test.vcxproj deleted file mode 100644 index 0e080f8..0000000 --- a/tbb_test/tbb_test.vcxproj +++ /dev/null @@ -1,159 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {5771BE40-BCC1-4DBB-9E0B-9B0FEF85927E} - Win32Proj - tbb_test - - - - Application - true - Unicode - v110 - - - Application - true - Unicode - v110 - - - Application - false - true - Unicode - v110 - - - Application - false - true - Unicode - v110 - - - - - - - - - - - - - - - - - - - false - - - false - - - false - - - false - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(TBB_INCLUDE) - - - Console - true - $(TBB_LIB64) - tbb_debug.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(TBB_INCLUDE) - - - Console - true - $(TBB_LIB64) - tbb_debug.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(TBB_INCLUDE) - - - Console - true - true - true - $(TBB_LIB64) - tbb.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(TBB_INCLUDE) - - - Console - true - true - true - $(TBB_LIB64) - tbb.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - - - - - - - - \ No newline at end of file diff --git a/tbb_test/tbb_test.vcxproj.filters b/tbb_test/tbb_test.vcxproj.filters deleted file mode 100644 index 8755a3a..0000000 --- a/tbb_test/tbb_test.vcxproj.filters +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - \ No newline at end of file