Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions solutions/cpp/clock/1/clock.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include "clock.h"
#include <iomanip>
#include <sstream>

using namespace std;

namespace date_independent {

// Absorbe sobregiros positivos y negativos
int clock::normalize_minutes(int minutes) {
int total_day_minutes = 24 * 60;
return ((minutes % total_day_minutes) + total_day_minutes) % total_day_minutes;
}

// Constructor privado
clock::clock(int total_minutes): m_total_minutes(total_minutes) {}

// Método de creación seguro
clock clock::at(int hours, int minutes) {
int total = (hours * 60) + minutes;
return clock(normalize_minutes(total));
}

// Sumar minutos es simplemente crear un nuevo reloj con la aritmética acumulada
clock clock::plus(int minutes_to_add) const {
return clock(normalize_minutes(m_total_minutes + minutes_to_add));
}

// Restar minutos reutiliza la misma lógica
clock clock::minus(int minutes_to_sub) const {
return clock(normalize_minutes(m_total_minutes - minutes_to_sub));
}

// Formatear texto usando streams de C++
clock::operator string() const {
int hours = m_total_minutes / 60;
int minutes = m_total_minutes % 60;

ostringstream ss;
ss << setfill('0') << setw(2) << hours << ":"
<< setfill('0') << setw(2) << minutes;
return ss.str();
}

// Comparación directa de un solo entero
bool clock::operator == (const clock& other) const {
return m_total_minutes == other.m_total_minutes;
}

bool clock::operator != (const clock& other) const {
return !(*this == other);
}

}
32 changes: 32 additions & 0 deletions solutions/cpp/clock/1/clock.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#pragma once
#include <string>

namespace date_independent {

class clock {
private:
int m_total_minutes;

// Función auxiliar para normalizar al rango de un día
static int normalize_minutes(int minutes);

// Constructor privado que recibe minutos
explicit clock(int total_minutes);

public:
// Función de fábrica para crear un reloj desde horas y minutos
static clock at(int hours, int minutes);

// Métodos de añadir y restar
clock plus(int minutes_to_add) const;
clock minus(int minutes_to_sub) const;

// Operador de conversión a string (Formato "HH:MM")
operator std::string() const;

// Sobrecarga del operador de igualdad para comparar dos relojes
bool operator == (const clock& other) const;
bool operator != (const clock& other) const;
};

}