> For the complete documentation index, see [llms.txt](https://xtecna.gitbook.io/solucoes-da-beecrowd/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xtecna.gitbook.io/solucoes-da-beecrowd/ad-hoc/1103-alarme-despertador.md).

# 1103 - Alarme Despertador

## Descrição

{% embed url="<https://www.urionlinejudge.com.br/judge/pt/problems/view/1103>" %}

## Solução

O [sistema de datas Era Unix](https://pt.wikipedia.org/wiki/Era_Unix) é um sistema que mapeia cada data existente deste 1 de janeiro de 1970 a um número inteiro equivalente ao número de segundos passados desde aquela época até a data desejada. Com este sistema de datas,  podemos comparar de forma muito mais fácil datas e também calcular quanto tempo se passou de uma data até outra, bastando converter ambas as datas para o formato Era Unix e obter a resposta em um número inteiro.

Aqui neste exercício vamos seguir essa mesma lógica, convertendo os dois horários para o número de minutos desde meia-noite até o horário passado e subtraindo ambos os horários para conseguirmos o número de minutos que se passou do horário inicial até o horário final. Na tabela abaixo há alguns exemplos da conversão e da subtração em ação.

| Horário Inicial | Horário Final | Inicial Convertido | Final Convertido | Subtração    |
| --------------- | ------------- | ------------------ | ---------------- | ------------ |
| 01:05           | 03:05         | 65 minutos         | 185 minutos      | 120 minutos  |
| 00:34           | 23:59         | 34 minutos         | 1439 minutos     | 1405 minutos |
| 21:10           | 21:33         | 1270 minutos       | 1293 minutos     | 23 minutos   |

Se você for reparar, esses exemplos são os mesmos do problema, com a diferença que alguns dos horários foram invertidos para facilitar a compreensão. Podemos reparar que em algum desses casos o horário inicial parece ser mais tarde que o horário final, mas na verdade, o horário final corresponde ao horário do dia seguinte e, por isso, convém adicionar 24 horas ao horário final quando virmos que o horário final é menor que o inicial, numericamente falando.

A conversão para minutos transcorridos desde a meia-noite de qualquer horário pode ser feita multiplicando o número de horas por 60 (cada hora significa que passou 60 minutos) e somando com os minutos em si.

{% tabs %}
{% tab title="C99" %}

```c
#include <stdio.h>

int converte(int horas, int minutos){
    return 60 * horas + minutos;
}

int main(){
    int H1, M1, H2, M2, resposta;

    while(scanf("%d %d %d %d", &H1, &M1, &H2, &M2)){
        if(!H1 && !M1 && !H2 && !M2)    break;

        if(H2 < H1 || (H2 == H1 && M2 < M1))    H2 += 24;
        resposta = converte(H2, M2) - converte(H1, M1);

        printf("%d\n", resposta);
    }

    return 0;
}
```

{% endtab %}

{% tab title="C++17" %}

```cpp
#include <iostream>

using namespace std;

int converte(int horas, int minutos){
    return 60 * horas + minutos;
}

int main(){
    int H1, M1, H2, M2, resposta;

    while(cin >> H1 >> M1 >> H2 >> M2){
        if(!H1 && !M1 && !H2 && !M2)    break;

        if(H2 < H1 || (H2 == H1 && M2 < M1))    H2 += 24;
        resposta = converte(H2, M2) - converte(H1, M1);

        cout << resposta << endl;
    }

    return 0;
}
```

{% endtab %}

{% tab title="JavaScript 12.18" %}

```javascript
var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var lines = input.split('\n');

const converte = (horas, minutos) => {
  return 60 * horas + minutos;
};

while(lines.length){
  let [H1, M1, H2, M2] = lines.shift().trim().split(" ").map((x) => parseInt(x));

  if(!H1 && !M1 && !H2 && !M2)  break;

  if (H2 < H1 || (H2 == H1 && M2 < M1)) H2 += 24;
  let resposta = converte(H2, M2) - converte(H1, M1);

  console.log(resposta);
}
```

{% endtab %}

{% tab title="Python 3.9" %}

```python
def converte(horas, minutos):
    return 60 * horas + minutos

while True:
    try:
        [H1, M1, H2, M2] = [int(x) for x in input().strip().split(' ')]

        if(H1 == 0 and M1 == 0 and H2 == 0 and M2 == 0):
            break

        if(H2 < H1 or (H2 == H1 and M2 < M1)):
            H2 += 24
        resposta = converte(H2, M2) - converte(H1, M1)

        print(resposta)
    except EOFError:
        break
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xtecna.gitbook.io/solucoes-da-beecrowd/ad-hoc/1103-alarme-despertador.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
