Trilhas
/
Prolog
Prolog
/
Exercícios
/
Gigassegundo
Gigassegundo

Gigassegundo

Fácil

Introdução

A forma como medimos o tempo é meio bagunçada. Temos 60 segundos em um minuto e 60 minutos em uma hora. Isso vem da antiga Babilônia, onde o 60 era a base do sistema numérico deles. Temos 24 horas em um dia, 7 dias em uma semana, e quantos dias em um mês? Bem, a quantidade de dias em um mês depende não só de qual mês é, mas também do tipo de calendário usado no país em que você vive.

E se, em vez disso, usássemos apenas segundos para expressar intervalos de tempo? Aí podemos usar os prefixos do sistema métrico para escrever grandes quantidades de segundos em valores mais fáceis de compreender.

  • Uma receita pode explicar que você precisa deixar os brownies assarem no forno por dois quilosegundos (ou seja, dois mil segundos).
  • Talvez você e sua família viajassem para algum lugar exótico por dois megasegundos (ou seja, dois milhões de segundos).
  • E se você e seu cônjuge estivessem casados há um bilhão de segundos, vocês comemorariam um gigasegundo de casados.
Note

Se algum dia colonizarmos Marte ou algum outro planeta, medir o tempo vai ficar ainda mais bagunçado. Quando alguém diz "ano", está falando de um ano na Terra ou de um ano em Marte?

A ideia deste exercício veio do romance de ficção científica "A Deepness in the Sky", do autor Vernor Vinge. Nele, o autor usa o sistema métrico como base para medir o tempo.

Instruções

Sua tarefa é determinar a data e a hora um gigassegundo depois de uma certa data.

Um gigassegundo é um bilhão de segundos. Ou seja, um 1 seguido de nove zeros.

Se você nasceu em 24 de janeiro de 2015 às 22:00 (10:00:00pm), você completaria um gigassegundo de vida em 2 de outubro de 2046 às 23:46:40 (11:46:40pm).

Trabalhando com datas no Prolog

O suporte nativo do Prolog para datas é bastante rudimentar. Embora você consiga resolver este exercício só com o que o Prolog já traz, uma forma bem mais agradável de trabalhar com datas é usar o pacote date_time.

Instalando o pacote date_time

Se a versão do Swipl que você tem instalada estiver razoavelmente atualizada, você pode instalar o pacote rodando:

swipl pack install date_time

Se isso não funcionar, você pode rodar:

swipl -g 'pack_install(date_time)'
Note

Se você estiver usando o editor online, não precisa instalar nada manualmente.

Usando o pacote date_time

Adicione o seguinte código no topo do seu arquivo de solução para usar o pacote date_time:

:- use_module(library(date_time)).
Note

Dica: o código-fonte do pacote date_time é bem documentado e pode ajudar bastante!

Editar via GitHub O link abre em uma nova janela ou aba
Prolog Exercism

Tudo pronto para começar Gigassegundo?

Crie sua conta no Exercism para aprender e dominar Prolog com 109 exercícios e mentoria humana de verdade, tudo de graça.