Encontro

Encontro

Médio

Introdução

Todo mês, seu parceiro se encontra com o melhor amigo dele. Os dois têm agendas muito cheias, o que torna difícil encontrar uma data que funcione! Como você também tem uma agenda cheia, seu parceiro sempre confirma com você as possíveis datas do encontro:

  • "Posso me encontrar na primeira sexta-feira do mês que vem?"
  • "E na terceira quarta-feira?"
  • "Talvez no último domingo?"

Na ligação deste mês, seu parceiro te fez esta pergunta:

  • "Eu gostaria de me encontrar na quinta-feira "teenth"; tudo bem?"

Sem entender, você pergunta o que é um dia "teenth". Seu parceiro explica que um dia "teenth", um conceito que ele inventou, refere-se aos dias do mês que terminam em '-teenth':

  • 13th (thirteenth)
  • 14th (fourteenth)
  • 15th (fifteenth)
  • 16th (sixteenth)
  • 17th (seventeenth)
  • 18th (eighteenth)
  • 19th (nineteenth)

Como também há sete dias da semana, é garantido que cada dia da semana tenha exatamente um dia "teenth" por mês.

Agora que você entende o conceito de dia "teenth", confere seu calendário. Você não tem nada planejado para a quinta-feira "teenth", então confirma a data com seu parceiro alegremente.

Instruções

Sua tarefa é encontrar a data exata de um encontro, dado um mês, um ano, um dia da semana e uma semana.

Há seis valores de semana a considerar: first, second, third, fourth, last, teenth.

Por exemplo, pode ser que você precise encontrar a data do encontro na primeira segunda-feira de janeiro de 2018 (1º de janeiro de 2018).

Da mesma forma, pode ser que você precise encontrar:

  • a terceira terça-feira de agosto de 2019 (20 de agosto de 2019)
  • a quarta-feira teenth de maio de 2020 (13 de maio de 2020)
  • o quarto domingo de julho de 2021 (25 de julho de 2021)
  • a última quinta-feira de novembro de 2022 (24 de novembro de 2022)
  • o sábado teenth de agosto de 1953 (15 de agosto de 1953)

Teenth

A semana teenth se refere aos sete dias de um mês que terminam em '-teenth' (13th, 14th, 15th, 16th, 17th, 18th e 19th).

Se pedirem para encontrar o sábado teenth de agosto de 1953, consultamos o calendário:

    August 1953
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Com isso, vemos que o sábado teenth é 15 de agosto de 1953.

Trabalhando com datas em Prolog

O suporte nativo do Prolog para datas é bastante rudimentar. Uma forma bem mais agradável de trabalhar com datas é usar o [pacote date_time][date_time-package].

Instalando o pacote date_time

Se a versão do Swipl que você instalou 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 arquivo da sua solução para usar o pacote date_time:

:- use_module(library(date_time)).
Note

Dica: o [código-fonte do pacote date_time][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] é bem documentado e pode ser de grande ajuda!


Fonte

Jeremy Hinegardner mencionou um encontro em Boulder que acontece na Wednesteenth de todo mês
Editar via GitHub O link abre em uma nova janela ou aba
Prolog Exercism

Tudo pronto para começar Encontro?

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