From 8a48929b0ee2c7b87604fb9fe82ca1903fdc4431 Mon Sep 17 00:00:00 2001 From: "exercism-solutions-syncer[bot]" <211797793+exercism-solutions-syncer[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:41:54 +0000 Subject: [PATCH] [Sync Iteration] cpp/clock/1 --- solutions/cpp/clock/1/clock.cpp | 54 +++++++++++++++++++++++++++++++++ solutions/cpp/clock/1/clock.h | 32 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 solutions/cpp/clock/1/clock.cpp create mode 100644 solutions/cpp/clock/1/clock.h diff --git a/solutions/cpp/clock/1/clock.cpp b/solutions/cpp/clock/1/clock.cpp new file mode 100644 index 0000000..fdac5ec --- /dev/null +++ b/solutions/cpp/clock/1/clock.cpp @@ -0,0 +1,54 @@ +#include "clock.h" +#include +#include + +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); + } + +} \ No newline at end of file diff --git a/solutions/cpp/clock/1/clock.h b/solutions/cpp/clock/1/clock.h new file mode 100644 index 0000000..80e06c7 --- /dev/null +++ b/solutions/cpp/clock/1/clock.h @@ -0,0 +1,32 @@ +#pragma once +#include + +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; + }; + +} \ No newline at end of file