DEV Community

Andrey_vdl
Andrey_vdl

Posted on

Projetos para experimentar linguagens

No momento que estou escrevendo isso ainda sou um estudante da 42, e como uma escola que te ensina a programar, a 42 tem uma variedade de projetos, grande parte deles pode ser utilizado para experimentar as capacidades de uma linguagem de programação, por motivos óbvios eu não vou descrever o projeto inteiro, só o esperado, de resto:

"Por Thor, por Odin, use seu cérebro." -PDF 2013-2024

FT_Philosophers 🍴

Esse é bem simples, simplesmente resolva o problema do jantar dos filósofos, seu programa deve receber argumentos na chamada do programa:

  • Número de filósofos;
  • Tempo de vida em milissegundos;
  • Duração de um jantar em milissegundos;
  • Duração do sono deles em milissegundos;
  • Opcionalmente o número de jantares de cada um;

O programa deve ter uma thread para cada filósofo e deve trabalhar com mutex (ou qualquer coisa similar na sua linguagem).
Outra opção é fazer o projeto com forks e semáforos.

FT_Minitalk 👂🗨️

Fazer uma simples comunicação entre 2 programas, um cliente que recebe um PID e uma string e deve enviar o texto dessa string para o servidor via sinais (SIGUSR1 e SIGUSR2 de preferência), e o servidor vai exibir seu PID, receber uma string por bits e imprimir essa string.

FT_Pushswap 🔄️⤴️⤵️

Um programa baseado na Torre de Hanói, onde você deve ordenar uma sequência numérica usando 2 stacks, como você só tem 2 "torres" ao invés de 3, você tem mais liberdade com os movimentos para a stack A e B, desde empurrar um número do topo da stack A para o topo da B e vice-versa, rotacionar eles 1 posição para baixo, rotacionar eles 1 posição para cima, até trocar os 2 números do topo da stack A ou B. A regra de números grandes não poderem ficar em cima de números pequenos é descartada por motivos óbvios.

FT_Minishell 🔥

Simplesmente recrie o bash... Não ele inteiro, mas sim:

  • executar comandos baseados no PATH, caminho relativo e absoluto;
  • expandir variáveis de ambiente;
  • refazer as builtins env, export, cd, echo, pwd, unset e exit;
  • lidar com Ctrl+D, Ctrl+\ e Ctrl+C;
  • redirecionamentos e heredoc;
  • Histórico de comandos;

Para facilitar um pouco, você pode usar uma biblioteca de readline, aspas abertas podem ser um erro, a única opção de builtin que precisa ser feito é o -n do echo e o heredoc não precisa ser parte do histórico... De resto, boa sorte (você vai precisar).

FT_Solong 🕹️

Um simples jogo 2D onde o jogador deve coletar itens e depois ir até a saída. O programa deve ler o mapa a partir de um arquivo onde caracteres representam:

  • 1 parede;
  • 0 espaço vazio;
  • c coletável;
  • e saída;
  • p posição inicial do personagem;

FT_Fdf 🪢

A simples renderização de um modelo de arame, o programa deve ler de um arquivo a configuração de cada ponto e vértice desse modelo, onde a posição horizontal e vertical no arquivo é igual à posição x e y e o valor de cada posição representa a altura no eixo z.

FT_Fractol ❄️

A renderização de fractais sendo só obrigatório o conjunto Mandelbrot e o conjunto Julia.

FT_Cub3d 🎮

Similar ao solong, porém a renderização é feita com raycasting, não há coletáveis nem saída e a posição inicial agora é representada por N, S, W ou E.

FT_Minirt 🩻

Renderização de objetos com luz e sombra com raytracing, os objetos são apenas uma esfera, um plano e um cilindro.
Um arquivo possui informações sobre cada objeto da cena, a posição da câmera, a rotação de cada objeto, a origem da luz, a força da luz ambiente e a direção da câmera.

FT_Irc 💬🗨️

Criação de um servidor que recebe e responde requisições do protocolo IRC.

FT_Webserv 🛜

Criação de um servidor que recebe e responde requisições do protocolo HTTP.

IN CONCLUSION

Existe mais um projeto que pode ser interessante, mas vou optar por ocultá-lo.
Escolhi os projetos anteriores por explorarem conceitos como threads, processos, bibliotecas gráficas, parsing e sockets, creio que esses são conceitos que toda linguagem deve permitir e logo te fazem explorar todas as capacidades de uma linguagem... Ou a falta delas.

Top comments (0)