Created
June 22, 2019 07:25
-
-
Save Kokan/86edd189279266fe33eb5daf43a0be18 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Rangsorolás Mázli Ellenõrzõ, 2008-08-26 +++ eltemods +++ | |
A program egy parancssori mázli számító, amivel ellenõrizheti az ETR-ben kiszámolt | |
mázli értékeket. | |
Fordítás Linux alatt (pl. caesar.elte.hu gépen): g++ -o rme rme.cc | |
Fordítás Visual C++-szal: cl.exe rme.cc /EHsc | |
*/ | |
#include <string> | |
#include <sstream> | |
#include <iostream> | |
using namespace std; | |
int eltemods_mazli2( const string& eha, const string& ciklus, int kurzusszervezo_azonosito ) | |
{ | |
const int p = 2147483647; | |
long long r; | |
// kurzusszervezo_azonosito | |
r = kurzusszervezo_azonosito; | |
int icikl = ((ciklus[ 8 ]-'0')%5)*2+ciklus[ 10 ]-'1'; | |
r = (r*10+icikl)%p; | |
// eha | |
int eha_len; | |
if( eha.find( ".ELTE" ) != eha.npos ) | |
eha_len = eha.find( ".ELTE" ); | |
else | |
eha_len = eha.length(); | |
for( int i = 0; i < eha_len; ++i ) | |
r = (r*26+eha[ i ]-'A')%p; | |
// LFSR elmélet: http://www-math.cudenver.edu/~wcherowi/courses/m5410/m5410fsr.html | |
// primitív polinom LFSR-hez: | |
// http://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr/misc.txt | |
// 31 stages, 16 taps, line #15 | |
// [31, 29, 27, 25, 23, 21, 18, 16, 15, 13, 11, 9, 8, 7, 5, 2] | |
const int C = 1431492050; | |
// LFSR regiszterek inicializálása | |
int s = r; // 31 darab LFSR regiszter az alsó 31 biten | |
// output generálása | |
for( int i = 0; i < 31*3; ++i ) | |
{ | |
int s0 = 0; | |
int Cands = C & s; | |
while( Cands ) | |
{ | |
s0 = (s0+(Cands & 1)) & 1; | |
Cands >>= 1; | |
} | |
s = ((s & 0x3fffffff) << 1) | s0; | |
} | |
return s; | |
} | |
int main( int argc, char* argv[] ) | |
{ | |
int rv = 0; | |
if( argc != 4 ) | |
{ | |
cerr << "Rangsorolás Mázli Ellenõrzõ 2008-08-26 +++ eltemods +++" << endl << endl << | |
"Használat: rme EHA ciklus kurzusszervezõ_azonosító" << endl << | |
"Pl.: rme PRPKAAI.ELTE 2008-2009-1 462978" << endl; | |
rv = 10; | |
} | |
string eha; | |
if( !rv ) | |
{ | |
eha = argv[ 1 ]; | |
for( int i = 0; i < eha.length(); ++i ) | |
if( eha[ i ] >= 'a' && eha[ i ] <= 'z' ) | |
eha[ i ] += 'A'-'a'; | |
if( eha.rfind( ".ELTE" ) == string::npos || eha.rfind( ".ELTE" )+5 != eha.length() ) | |
{ | |
cerr << "Az EHA (" << argv[ 1 ] << ") \".ELTE\"-re végzõdjön!" << endl; | |
rv = 20; | |
} | |
} | |
string ciklus; | |
if( !rv ) | |
{ | |
ciklus = argv[ 2 ]; | |
if( ciklus.length() != 11 || ciklus[ 4 ] != '-' || ciklus[ 9 ] != '-' || | |
ciklus[ 10 ] != '1' && ciklus[ 10 ] != '2' ) | |
{ | |
cerr << "A ciklus (" << argv[ 2 ] <<") helyes formája 2008-2009-1 alakú!" << endl; | |
rv = 30; | |
} | |
else if( ciklus < "2008-2009-1" ) | |
{ | |
cerr << "A program csak a 2008-2009-1 ciklusban bevezetett mázli formát támogatja!" << endl; | |
rv = 31; | |
} | |
} | |
int kurzusszervezo_azonosito; | |
if( !rv ) | |
{ | |
istringstream iss( argv[ 3 ] ); | |
if( !( iss >> kurzusszervezo_azonosito )) | |
{ | |
cerr << "A kurzusszervezõ azonosító (" << argv[ 3 ] << ") nem szám!" << endl; | |
rv = 40; | |
} | |
else if( kurzusszervezo_azonosito < 447404 ) | |
{ | |
cerr << "2008-2009-1 ciklustól a kurzusszervezõk azonosítója legalább 447404!" << endl; | |
rv = 41; | |
} | |
} | |
if( !rv ) | |
{ | |
cout << | |
"EHA: " << eha << endl << | |
"Ciklus: " << ciklus << endl << | |
"Kurzusszervezõ azonosító: " << kurzusszervezo_azonosito << endl; | |
int mazli = eltemods_mazli2( eha, ciklus, kurzusszervezo_azonosito ); | |
cout << "Mázli: " << mazli << endl; | |
} | |
return rv; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment