Desafios para Hackathon E5R.
Para cada desafio, você deve tornar a síntaxe na classe Hackathon
implementando a
classe HackathonChallenge
.
A regra básica é: A classe Hackathon
não deve ser alterada
Além da regra básica, cada desafio impõe suas próprias regras que também devem ser obedecidas.
class HackathonChallenge
{
/* TODO... */
}
Regras:
- Só faça funcionar!
class Hackathon : HackathonChallenge
{
public Hackathon()
{
Feature("Somar")
("Calcula a soma entre números inteiros,")
("produzindo resultados matematicamente coerentes.")
;
}
}
Regras:
- Os únicos operadores matemáticos permitidos são
+
e-
.
class Hackathon : HackathonChallenge
{
public Hackathon()
{
// 2 + 2 = 4
Assert(
Soma(2, 2) == 4
);
// 4 - 2 = 2
Assert(
Subtrai(4, 2) == 2
);
// 5 * 2 = 10
Assert(
Multiplica(5, 2) == 10
);
// 12 / 3 = 4
Assert(
Divide(12, 3) == 4
);
bool errouDivisao = false;
// 10 / 0 = !{erro de divisão por zero}
try { Divide(10, 0); }
catch (DivideByZeroException) { errouDivisao = true; }
Assert(errouDivisao);
}
}
Imagine uma lista de itens qualquer:
IList<object>;
Uma função que receba uma lista, um número de página atual, um número de registros por página, um limite máximo para exibição de páginas, deve:
- Calcular o número de páginas possíveis dentro da lista fornecida;
- Retornar uma lista de páginas onde a página atual esteja o maix próximo possível do centro da lista;
- Não exceder o limite máximo de páginas a exibir;
Expectativa
maximoPaginaExibicao = 5
totalPaginas = 10
paginaAtual = 5
1 2 3 4 5
+---------------+
1, 2, | 3, 4, 5, 6, 7 |, 8, 9, 10
|
*
maximoPaginaExibicao = 5
totalPaginas = 10
paginaAtual = 2
1 2 3 4 5
+---------------+
| 1, 2, 3, 4, 5 |, 6, 7, 8, 9, 10
|
*
maximoPaginaExibicao = 5
totalPaginas = 10
paginaAtual = 10
1 2 3 4 5
+----------------+
1, 2, 3, 4, 5 , | 6, 7, 8, 9, 10 |
|
*
Construa um executor de jobs tipo CRON
- Pense em um agendador de próximos passos
- Pense em um executor independente
- Pense em um sistema de log independente
- Pense em executar em containers
Construa um executável que seja capaz de ler um repositório git de um commit em diante e montar um Markdown de notas de lançamento.
- Pense em Conventional Commits
- Pense em agrupamento de commits por tipo de contribuição
- Pense em links
- Pense em mais detalhes
- Pense em alertas de breaking changes