fork download
  1. #include <iostream>
  2. #include <chrono>
  3. #include <thread>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8. using namespace std::chrono;
  9.  
  10. class Kara {
  11. public:
  12. int czasKary;
  13. string powod;
  14.  
  15. Kara(int czas, const string& powod) : czasKary(czas), powod(powod) {}
  16. };
  17.  
  18. class Zawodnik {
  19. private:
  20. string imie;
  21. string nazwisko;
  22. steady_clock::time_point start;
  23. steady_clock::time_point stop;
  24. bool czyStop = false;
  25. vector<Kara> kary;
  26. bool zdyskwalifikowany = false;
  27.  
  28. public:
  29. Zawodnik(const string& imie_, const string& nazwisko_)
  30. : imie(imie_), nazwisko(nazwisko_) {}
  31.  
  32. void startStoper() {
  33. start = steady_clock::now();
  34. czyStop = false;
  35. cout << "Stoper dla " << imie << " " << nazwisko << " uruchomiony.\n";
  36. }
  37.  
  38. void stopStoper() {
  39. stop = steady_clock::now();
  40. czyStop = true;
  41. cout << "Stoper dla " << imie << " " << nazwisko << " zatrzymany.\n";
  42. }
  43.  
  44. void dodajKare(int sekundy, const string& powod) {
  45. kary.emplace_back(sekundy, powod);
  46. }
  47.  
  48. void dyskwalifikuj() {
  49. zdyskwalifikowany = true;
  50. }
  51.  
  52. int czasBazowy() const {
  53. return duration_cast<seconds>(stop - start).count();
  54. }
  55.  
  56. int lacznyCzas() const {
  57. if (zdyskwalifikowany) return -1;
  58. int sumaKar = 0;
  59. for (const auto& kara : kary) {
  60. sumaKar += kara.czasKary;
  61. }
  62. return czasBazowy() + sumaKar;
  63. }
  64.  
  65. void pokazWynik() const {
  66. cout << "\nZawodnik: " << imie << " " << nazwisko << endl;
  67. if (zdyskwalifikowany) {
  68. cout << "Status: DYSKWALIFIKACJA" << endl;
  69. } else {
  70. cout << "Czas podstawowy: " << czasBazowy() << " s" << endl;
  71. if (kary.empty()) {
  72. cout << "Brak kar.\n";
  73. } else {
  74. cout << "Kary:\n";
  75. for (const auto& kara : kary) {
  76. cout << " +" << kara.czasKary << " s - " << kara.powod << endl;
  77. }
  78. }
  79. cout << "Łączny czas: " << lacznyCzas() << " s" << endl;
  80. }
  81. cout << "---------------------------" << endl;
  82. }
  83.  
  84. bool jestZdyskwalifikowany() const {
  85. return zdyskwalifikowany;
  86. }
  87.  
  88. string getImieNazwisko() const {
  89. return imie + " " + nazwisko;
  90. }
  91. };
  92.  
  93. int main() {
  94. Zawodnik zawodnik1("Jan", "Kowalski");
  95. Zawodnik zawodnik2("Anna", "Nowak");
  96.  
  97. // Start obu stoperów
  98. zawodnik1.startStoper();
  99. this_thread::sleep_for(seconds(3)); // symulacja upływu czasu
  100. zawodnik2.startStoper();
  101.  
  102. this_thread::sleep_for(seconds(4)); // zawodnik1 kończy
  103. zawodnik1.stopStoper();
  104.  
  105. this_thread::sleep_for(seconds(2)); // zawodnik2 kończy
  106. zawodnik2.stopStoper();
  107.  
  108. // Dodanie kar
  109. zawodnik1.dodajKare(5, "Falstart");
  110. zawodnik2.dodajKare(10, "Nieprawidłowy manewr");
  111.  
  112. // Możliwość dyskwalifikacji (opcjonalna)
  113. // zawodnik2.dyskwalifikuj();
  114.  
  115. // Pokazanie wyników
  116. zawodnik1.pokazWynik();
  117. zawodnik2.pokazWynik();
  118.  
  119. // Porównanie wyników
  120. if (zawodnik1.jestZdyskwalifikowany() && zawodnik2.jestZdyskwalifikowany()) {
  121. cout << "Obaj zawodnicy zostali zdyskwalifikowani." << endl;
  122. } else if (zawodnik1.jestZdyskwalifikowany()) {
  123. cout << zawodnik2.getImieNazwisko() << " wygrywa (drugi zawodnik zdyskwalifikowany)." << endl;
  124. } else if (zawodnik2.jestZdyskwalifikowany()) {
  125. cout << zawodnik1.getImieNazwisko() << " wygrywa (drugi zawodnik zdyskwalifikowany)." << endl;
  126. } else {
  127. if (zawodnik1.lacznyCzas() < zawodnik2.lacznyCzas()) {
  128. cout << zawodnik1.getImieNazwisko() << " wygrywa!" << endl;
  129. } else if (zawodnik1.lacznyCzas() > zawodnik2.lacznyCzas()) {
  130. cout << zawodnik2.getImieNazwisko() << " wygrywa!" << endl;
  131. } else {
  132. cout << "Remis!" << endl;
  133. }
  134. }
  135.  
  136. return 0;
  137. }
  138.  
Success #stdin #stdout 0.01s 5272KB
stdin
/*  Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in 	*/
/*	einer Textdatei. 													*/
/*  Die Werte müssen auf einer separaten Zeile gespeichert sein			*/
/* 																		*/
/*	Erstellt: 17.5.2010													*/
/*  Autor: Thomas Scheffler												*/

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 32

unsigned Hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
    ++dist; 
    val &= val - 1;
  }
 
  return dist;
}



int main (void)
{
	char hex;
	int i;
	int a[ARRAY_SIZE];
	int b[ARRAY_SIZE];
	int hamDist = 0;
	FILE* fp;
	
	//Arrays mit 0 initialisieren
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
  		a[i] = 0;
  		b[i] = 0;
	}

	
	fp = fopen("hex.txt","r");
	if (fp == NULL) 
	{
		printf("Die Datei hex.txt wurde nicht gefunden!");
		exit(EXIT_FAILURE);
	}

	i=0;
	printf("1.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
        a[i]=strtol(&hex,0,16);
		i++;
    }
	i=0;
	printf("2.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
    	b[i]=strtol(&hex,0,16);
        i++;
    }
	fclose(fp);

	printf("Hamming-Abweichung pro Nibble:\n");
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
		printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
		hamDist += Hamdist(a[i],b[i]);
	}
	printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}

stdout
Stoper dla Jan Kowalski uruchomiony.
Stoper dla Anna Nowak uruchomiony.
Stoper dla Jan Kowalski zatrzymany.
Stoper dla Anna Nowak zatrzymany.

Zawodnik: Jan Kowalski
Czas podstawowy: 7 s
Kary:
  +5 s - Falstart
Łączny czas: 12 s
---------------------------

Zawodnik: Anna Nowak
Czas podstawowy: 6 s
Kary:
  +10 s - Nieprawidłowy manewr
Łączny czas: 16 s
---------------------------
Jan Kowalski wygrywa!