Também usei muito o Beecrowd e tinha um script assim. Porém o meu validava a entrada e saída também. Vou deixar aqui para referência.
Minha estrutura:
Eu resolvia os exercícios em c++ e tinha essa estrutura de pastas:
workspace
- resolvidos
- categoria (iniciante, geometria ...)
- 1001.cpp
- 1002.cpp
- in (arquivo com a entrada do beecrowd)
- out (arquivo produzido pelo meu programa)
- expected (arquivo com a saída do beecrowd)
- 1081.cpp (arquivo que estou trabalhando no momento)
- run.sh
run.sh:
g++ $1.cpp -o $1
/usr/bin/time -v ./$1 < in > out
code --diff out expected
O que isso faz?
usarei como exemplo ./run.sh 1081
g++ $1.cpp -o $1
-> compila o arquivo 1081.cpp
produzindo o programa 1081
(sim, sem extensão)
/usr/bin/time -v ./$1 < in > out
-> chama o programa time, que calcula quanto tempo demora para um programa executar e chama o programa 1081
passando para ele a entrada e escrevendo o que ele printar na saída
code --diff out expected
-> compara o arquivo produzido com o esperado
FYC: trabalhando com entrada e saída de arquivos direto no terminal
./$1 < in > out
se digitar somente isso quando o terminal vê o operador '<' ele passa todo o conteúdo do arquivo para dentro do programa. como se você tivesse digitado aquilo.
se o terminal encontrar o operador '>' vai escrever a saída do programa no arquivo substituindo completamente o conteúdo dele. útil nesse caso quando roda várias vezes
se o terminal encontrar o operador '>>' vai escrever a saída do programa no final do arquivo sem apagar o conteúdo existente. Útil para logs