Warunki dla czterech liczb

0

Witam, jak najefektywniej sprawdzić czy tablica czterech int-ów ma takie same wartości, dwie pary takich samych, czy żadne z wcześniej wymienionych przypadków (patrzę czy obiekt jest kwadratem, prostokątem czy innym czworokątem)? Robiłem to trochę na piechotę, dużą ilością if-ów, i domyślam się, że są lepsze sposoby.

0

Najłatwiej zrobić sobie mapę długość​ ⟶ ilość wystąpień. A najefektywniej? Nie jestem pewien, może trzymać posortowane i sprawdzać czy adjacent_find z odwróconym predykatem nie znajdzie dokładnie jednej part, pośrodku tablicy? Wymagałoby to benchmarku.

1

Taki pseudo-algorytm (do sprawdzenia):

string sprawdz(int arr[]) {
	int a = 0; 
	int sum = 0;
	
	for(int i = 0; i < 4; i++) {
	  int x = arr[i];	
	  a ^= x;
	  sum += x;
	}
	
	if (a == 0) {
		if (sum == arr[0]*4) {
			return "Kwadrat";
		} else if (arr[0] == arr[2]) {
			return "Prostokąt";
		} 
	}	
		
	return "Nie-wiadomo-co";
}

https://ideone.com/ZdusQ5

1 użytkowników online, w tym zalogowanych: 0, gości: 1