Aviso: Este desafio do rei da colina foi concluído. Isso significa que a marca de seleção verde, que foi concedida ao C5H8NNaO4 por sua entrada, The Observer não será movida para nenhuma nova resposta.
Você ainda pode enviar novas entradas, mas pode haver atrasos nos novos torneios, pois eu não estou mais procurando ativamente por novas entradas.
Introdução
Neste desafio, você está jogando um jogo de arcade intitulado The Ultimate Samurai Showdown Versão Especial Edição Especial 2.0 X Alpha Omega Turbo (ou apenas Ultimate Samurai Showdown, abreviado). Seus oponentes? Ninguém menos que os outros membros da Programming Puzzles & Code Golf!
Como você pode esperar de um jogo de arcade PPCG, você não joga Ultimate Samurai Showdown diretamente, mas escreve um programa que jogará o jogo para você. Este programa lutará contra programas enviados por outros usuários em duelos individuais. O programa mais qualificado será coroado o Samurai Supremo do PPCG e receberá o visto verde da lenda.
Descrição do jogo
Esta seção descreve a mecânica por trás do jogo.
Condição da vitória
Uma partida consiste em dois samurais que se enfrentam. Cada samurai começa cada partida com 20 pontos de vida e 1 honra . Um samurai vence se seu oponente estiver morto e ele ainda estiver vivo. Existem dois métodos pelos quais um samurai pode morrer:
- Se os pontos de vida de um samurai forem reduzidos a 0, ele morrerá.
- Se um samurai traz sua própria honra abaixo de 0, ele será derrubado pelos deuses por agir desonrosamente em um duelo.
Ser abatido pelos deuses tem maior prioridade do que ter pontos de vida reduzidos a 0, portanto, em uma situação em que um samurai está com 0 pontos de vida e o outro com -1 de honra, o samurai com 0 pontos de vida vencerá. Em uma situação em que ambos os samurais estão com -1 de honra, ambos são atingidos pelos deuses e o jogo é um empate.
Uma partida consiste em até 500 turnos . Se todos os 500 turnos passarem e a partida não tiver sido decidida (nenhum samurai morreu), os deuses ficam entediados e atacam os dois samurais, resultando em empate.
Ações
Em cada turno, o samurai deve executar exatamente uma das seguintes ações:
W
O samurai deve esperar e não executar nenhuma ação. Isso o faz parecer legal, mas não o ajuda a derrotar seu oponente. Essa também é a ação padrão.
B
O samurai deve se curvar ao seu oponente de maneira honrosa. Isso agrada aos deuses e, assim, o samurai ganhará 1 honra. A honra é vital para o sucesso do seu samurai, porque a honra é essencialmente o "recurso" para este jogo - todos se afastam B
e W
podem diminuir a honra. Além disso, se um samurai ganha 7 de Honra ou mais, ele recebe o uso da Espada dos Deuses . As implicações disso estão descritas abaixo.
No entanto, curvar-se ao seu oponente o deixa aberto se ele decidir acertá-lo com sua espada, portanto, tenha cuidado ao escolher se curvar.
G
O samurai deve entrar em uma posição defensiva e se proteger contra qualquer golpe de espada. Este movimento irá bloquear com sucesso todos os golpes de espada, mesmo aqueles feitos com a Espada dos Deuses .
No entanto, os deuses franzem a testa para um samurai excessivamente defensivo, então esse movimento consumirá 1 Honra se a ação do samurai no turno imediatamente anterior também estivesse protegendo. Não consome Honor de outra forma.
I
O samurai deve tentar golpear seu oponente com um rápido puxão de sua espada da bainha. Se o samurai tiver 7 de Honra ou mais, ele usará a Espada dos Deuses, em vez de sua espada comum. Este movimento consome 1 Honra.
O empate rápido é um ataque rápido que derrota ataques aéreos mais lentos, no entanto, perde contra desvios. Se o ataque se conectar com sucesso, ele causará 1 ou 2 de dano com a Espada dos Deuses .
P
O samurai deve tentar desviar qualquer ataque recebido e então lançar seu próprio ataque. Se o samurai tiver 7 de Honra ou mais, ele usará a Espada dos Deuses, em vez de sua espada comum. Este movimento consome 1 Honra.
O desvio é uma boa manobra contra ataques rápidos, mas será dominado por ataques aéreos mais lentos. Se o ataque se conectar com sucesso, ele causará 1 ou 2 de dano com a Espada dos Deuses .
O
O samurai deve tentar golpear seu oponente com um ataque aéreo mais lento. Se o samurai tiver 7 de Honra ou mais, ele usará a Espada dos Deuses, em vez de sua espada comum. Este movimento consome 1 honra.
O ataque aéreo pode dominar os desvios, mas perderá contra ataques rápidos. Se o ataque se conectar com sucesso, ele causará 1 ou 2 de dano com a Espada dos Deuses .
Espada dos Deuses
Um samurai com honra de 7 anos ou mais ganha a capacidade de usar a Espada dos Deuses . Se sua Honra for reduzida para menos de 7, a capacidade de usar a Espada dos Deuses será revogada. A Espada dos Deuses causa 2 pontos de dano em vez de 1.
A Espada dos Deuses não permite que um ataque derrote um golpe de espada que normalmente não derrotaria. Por exemplo, um desvio da Espada dos Deuses ainda perderá com um ataque aéreo normal, e um empate rápido da Espada dos Deuses não prevalecerá sobre um empate rápido comum. Na verdade, a chamada espada dos deuses não é tão poderosa - talvez seja uma piada cósmica dos deuses ...
Tabela de interação
O Snippet de pilha abaixo contém uma tabela que lista explicitamente todos os resultados possíveis das diferentes combinações de ações que os dois samurais podem executar. Para visualizá-lo, clique em "Mostrar trecho de código" e clique em "Executar trecho de código".
Comunicação do Programa
Para facilitar a execução do torneio, um programa de controle foi escrito para desempenhar o papel dos "deuses" - ele mantém registros de honra e saúde e ataca os samurais de acordo. Esta seção descreve como o seu programa se comunicará com o programa do controlador.
Descrição da entrada
O programa do controlador chamará seu programa a partir da linha de comando da seguinte maneira:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
Onde:
<command>
é o comando necessário para executar seu programa. Por exemplo, se o seu programa estiver em um arquivosuper_sentai.pl
, o comando provavelmente estáperl super_sentai.pl
.<history>
é uma história de movimentos que você fez. Por exemplo,WWBP
significaria que você esperou duas vezes, fez uma reverência e desviou uma vez.<enemy_history>
é uma história de movimentos feitos por seu inimigo. Por exemplo,BBBI
significaria que seu inimigo se curvou três vezes e realizou um empate rápido.<your_health>
é sua saúde atual.<enemy_health>
é a saúde atual do inimigo.<your_honour>
é a sua honra atual.<enemy_honour>
é a honra atual do inimigo.
Pela primeira vez, o history
e enemy_history
estará vazio, portanto, seu programa será chamado apenas com os últimos quatro argumentos como este:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
Por favor, esteja preparado para isso!
Leitores astutos podem perceber que os quatro argumentos que proporcionam a honra e a saúde de ambos os samurais são, em certa medida, supérfluos; como este é um jogo de informações perfeito, a honra e a saúde do samurai podem ser determinadas usando apenas as histórias.
Esses valores são fornecidos para fins de conveniência, para que você não precise analisar os argumentos do histórico. Isso deve ser útil para implementar estratégias simples, como não atacar quando sua Honra for 0.
Descrição da saída
Para escolher uma ação, seu programa deve saída um dos W
, B
, G
, I
, P
, ou O
para a saída padrão, dependendo de qual ação você quer fazer. Se o seu programa não produzir nada dentro de 1000ms, ele será encerrado e seu programa será tratado como se tivesse sido produzido W
.
Se o seu programa exibir mais de uma letra, somente a primeira letra será considerada - portanto, a saída Parry
será a mesma que a saída P
.
Se a saída da primeira letra do seu programa não for uma das opções listadas acima, será o padrão para W
.
Formato da submissão
Envie um programa como resposta a esta postagem. Você pode enviar vários programas. Se você estiver enviando vários programas simples, recomendo enviá-los como uma única resposta; se você estiver enviando vários programas complexos, recomendo enviá-los como respostas separadas. Depois de adicionar seus programas ao torneio, farei um commit no repositório git com sua entrada (link abaixo).
Se eu encontrar problemas que impeçam que seu programa seja adicionado ao torneio, deixarei um comentário em sua inscrição, indicando o problema.
Inclua o seguinte no seu envio:
- O nome legível por humanos do seu programa, para uso em placares. Espaços são permitidos aqui; vírgulas e caracteres Unicode não são.
- O idioma em que seu programa está escrito. Evite escrever em idiomas estranhos e de difícil acesso, como o TinyMUSH.
- Uma breve sinopse do seu programa. Essa pode ser uma descrição de como o programa funciona, ou apenas algum texto específico sobre o seu programa (se você quiser ser todo secreto) ou talvez ambos.
- Os comandos necessários para executar seu programa. Por exemplo, se você estivesse escrevendo seu envio em Java chamado
example.java
, você forneceria instruções de compilação e instruções dejavac example.java
execuçãojava example
. - O código fonte do programa.
Para ajudar no envio, forneço um modelo de envio que pode ser encontrado aqui . O modelo torna as submissões mais agradáveis. Eu recomendo fortemente usá-lo.
Eu também forneço dois exemplos de entradas. Embora as entradas de exemplo participem do round robin, seu principal objetivo é esclarecer os formatos de envio e entrada / saída do torneio, em vez de serem sérios candidatos ao título de Ultimate Samurai.
Estrutura do torneio
Esta seção descreve como o torneio entre os participantes será realizado.
Programa de Controle
O programa de controle está escrito em Python 2 e pode ser encontrado no repositório Ultimate Samurai Showdown Github . Se você deseja executá-lo, instruções sobre como executá-lo estão incluídas no arquivo README.md no link. No entanto, apenas torneios realizados no meu computador serão oficiais para evitar diferenças de hardware que afetem os resultados do torneio.
O programa de controle será executado em um laptop executando o Arch Linux. Ele possui um processador Intel Core i7 e 8 GB de RAM. Esforçarei-me por obter todas as entradas em execução no meu computador, mas agradeceria imensamente se você evitar idiomas que não possam ser acessados livremente (como em nenhum custo monetário).
Sistema de pontuação
O sistema de pontuação é um round robin. Cada programa jogará oito partidas contra todos os outros programas. Uma vitória concede ao programa 1 ponto, uma perda sem pontos e um empate 0,5 pontos. O programa com a maior pontuação vence o jogo. Se houver empate, disputarei os dois melhores programas para determinar o vencedor.
O número de vezes que cada programa será reproduzido pode diminuir de 8 se houver um número extremamente grande de participantes. Vou adicionar uma nota aqui se isso ocorrer.
Estarei executando o round robin muitas vezes à medida que novos envios forem publicados, mas é apenas o round robin mais recente que contará.
Desqualificações
É possível que seu programa seja desqualificado do torneio. A desqualificação pode ocorrer se:
- Seu programa não compila ou executa;
- Seu programa é uma duplicata estratégica de outro programa (ou seja, implementa exatamente a mesma estratégia que outro programa);
- Seu programa tenta sabotar outros programas modificando o código do controlador, o código de outro programa, etc;
- Seu programa tenta explorar um bug no código do controlador. Em vez de explorar os bugs, você deve abrir um problema no repositório git, fazer um comentário aqui ou enviar um ping para mim no chat.
Resultados passados
Resultados detalhados de todos os torneios são disponibilizados na página wiki .
O torneio mais recente foi concluído em 17/07/2015 - 07:20. Aqui está um resumo dos resultados:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0
fonte
Respostas:
O Monge (Java)
O monge valoriza a honra e louva as bênçãos dos deuses. Sendo treinado em paciência, ele calmamente envia suas orações para o céu até que se sinta favorecido por Deus.
Curtindo a vida, ele tenta protegê-la. Quando ele está perdendo saúde acima de uma certa taxa, ele se defende da melhor maneira possível.
Esperando pelo apoio de seus deuses, ele envia aleatoriamente ejaculações [1] para o céu, caso contrário ele luta da melhor maneira possível.
Se seu oponente estiver exausto da batalha, ele o derruba usando sua honra restante para lhe conceder uma morte rápida e indolor.
Compilar / Executar
O Ninja (Java)
O Ninja é rápido e ataca ainda mais rápido. Ele ataca imediatamente após uma saudação formal amigável, confundindo ainda mais seu inimigo curvando-se antes e depois de cada ataque.
Ao ser abençoado, o ninja mantém esse comportamento, esperando que seu oponente faça seu primeiro movimento. Usando esta oportunidade, ele desencadeia uma série de explosões, abençoadas pela Deusa ninja até que ele esteja muito cansado da batalha. Usando sua honra restante, ele se esconde sob as folhas embaixo, protegendo-se do próximo ataque. Ele pula e ataca seu inimigo por trás, sendo escondido o mais rápido possível.
Se ele recebe uma ferida fatal, faz de tudo para levar a vida de seu oponente com ele - é claro, mantendo um mínimo de honra.
Kakashi, o imitador Ninja (Java)
Kakashi copia os movimentos de seus oponentes escolhendo aleatoriamente entre os dois últimos movimentos que o oponente fez. Se o oponente espera, ele se curva - Ele também mantém sua honra.
Eu gostaria que Kakashi fosse abençoado com o sharingan. Pensei em ler o cast.txt. Simule todas as rodadas de sua história contra todos os oponentes presentes. Tente descobrir contra qual oponente ele está lutando, comparando a história dos inimigos simulados com a história real dos inimigos. Em seguida, use essas informações para prever o próximo movimento que o oponente faria e escolha o melhor contra-movimento de uma lista predefinida. Mas acho que isso pode demorar um pouco, pois tenho Internet super lenta no momento e quase nenhuma habilidade em Java
O observador (node.js)
O Observador se inclina antes de tentar prever o próximo lance do oponente dos últimos 5 lances, escolhendo a melhor contrapartida para o lance previsto.
Edit: Obrigado ao @apsillers por compartilhar o boilerplate do node.js.!
Edit: Eu tinha uma grande falha no observador, na verdade eu não sei o que pensei ontem à noite. Parece que ele apenas olhou para os dois últimos movimentos do inimigo. Ele foi surpreendentemente bem assim.
Sua memória agora é consultada para a parte mais longa (final) da história dos inimigos que ele já viu. Isso contém uma matriz com todos os movimentos que seguiram o histórico dos movimentos. Um é selecionado aleatoriamente. Portanto, se um movimento for seguido com mais frequência, é mais provável que ele seja escolhido. Mais ou menos como cadeias de markov.
O Observador, agora também guarda.
[1]: TIL: a ejaculação tem um significado religioso
fonte
Meiyo Senshi (Java)
Vindo da área de Haijima, pouco se sabe sobre o Meiyo. Normalmente eles não participam de jogos esportivos, mas enviaram um guerreiro a este para avaliar seus rivais.
Eles são um grupo honrado, no entanto, então você pode ter certeza de que ele fará sua presença conhecida pelos deuses em pouco tempo. Depois de ver o suficiente de seu inimigo para denunciar, ele usará as bênçãos recebidas para derrubar seu oponente.
Para compilar a execução, é a maneira Java padrão:
fonte
Porta-Spork (Rubi)
Spork Holder se curva no primeiro turno e depois age aleatoriamente. É uma das duas entradas de exemplo.
Comando:
ruby spork-holder.rb
O Garçom (festança)
O garçom espera apenas a cada turno. É uma das duas entradas de exemplo.
Comando:
echo W
Não há código fonte necessário.
fonte
Covarde (Node.js)
BXBXBX
/BBB
padrões de curvar (ou bater em você) quando você está se curvando.GXGXGX
padrões estão curvados quando você está protegendo.Se você deseja escrever um envio para o Node.js. , sinta-se à vontade para usar meu código padrão; tudo, incluindo uma
decide
função, é totalmente geral e gratuito.fonte
Whack-a-mole (T)
Ataca quando é provável que o inimigo se curve, mais os guardas.
Corra usando
Rscript Whack-a-mole.R
.fonte
Guerreiro do elefante (Java)
O Elephant Warrior é de uma época mais antiga e natural. Ele viu muito e se lembra de tudo. Ele recebe favor dos deuses enquanto examina seu oponente e, depois que ele os leva ao coração, ele os separa.
Compilar:
javac ElephantWarrior.java
Comando:
java ElephantWarrior
fonte
args
.Princesa Guerreira (Julia)
Este é o primeiro desafio do King of the Hill em que participei. Vamos ver como isso acontece.
A princesa guerreira prioriza o ataque e a honra e recorre à autopreservação quando necessário. Ela é bastante ansiosa e nunca espera. Em um esforço para permanecer ágil, ela também não usa um ataque aéreo.
Salve como
warrior-princess.jl
e execute na linha de comando da seguinte maneira:Se você não possui Julia, pode fazer o download aqui . Para evitar problemas, é recomendada a versão estável mais recente (ou seja, não a versão de desenvolvimento).
fonte
Gárgula (Java)
Tenta usar o ataque defensivo sem consumir honra.
Como é uma entrada java:
fonte
Espadachim (C / Java)
O espadachim se curva no primeiro turno e sempre que está com pouca honra. Ele então verifica se o oponente não havia se curvado, defendido ou esperado no turno anterior. Se o oponente não o fez, existe uma grande probabilidade de que ele faça um deles no turno atual e o espadachim atinja aleatoriamente o oponente. Se isso não for verdade, ele defende se não defendeu o turno anterior. Se ele tivesse, ele se curvou para ganhar honra.
Versão C:
Instale o GCC (compilador) e salve o código em um arquivo chamado " Swordsman.c " para compilar:
O executável chamado " Swordsman " será criado. Executar usando
Versão Java:
Instale o javac (compilador) e salve o código em um arquivo chamado " Swordsman.java " para compilar:
Arquivo de classe chamado " Swordsman.class " será criado. Executar usando
Atacante (Java)
O atacante não se importa com nada, exceto que ele quer o seu oponente morto. Ele golpeia aleatoriamente um dos movimentos de ataque e, se tiver pouca honra, faz uma reverência.
Instale o javac (compilador) e salve o código em um arquivo chamado " Attacker.java " para compilar:
O arquivo de classe chamado " Attacker.class " será criado. Executar usando
Preditor (C / Java)
Predictor prevê os movimentos dos inimigos. No primeiro turno, ele usa um movimento aleatório. Curva se sua honra é baixa, ataca se a honra do inimigo é baixa ou se curvou no turno anterior. Se o preditor não tiver guardado o turno anterior, proteja o turno atual. Senão, faz o mesmo movimento que o inimigo fez no turno anterior, desde que não seja
'W'
nesse caso, o Predictor faz uma reverência.Versão C:
Instale o GCC (compilador) e salve o código em um arquivo chamado comando " Predictor.c " para compilar:
O executável chamado " Predictor " será criado. Executar usando
Versão Java:
Instale o javac (compilador) e salve o código em um arquivo chamado " Predicator.java " para compilar:
O arquivo de classe chamado " Predicator.class " será criado. Executar usando
Não tenho certeza da eficácia desses bots, pois não tenho o interpretador python2 para testá-lo.
fonte
ArrayIndexOutOfBoundsException
no primeiro turno, fazendo com que espere no primeiro turno. Além disso, está funcionando.segmentation fault (core dumped)
rodada após 24Mestre Yi (Python)
O mestre assassino ganha muito favor no início do jogo, construindo-o até ser invencível. Tenta atacar quando menos espera.
Para executar: Salvar como
MasterYi.py
fonte
Cópia-san (C)
Copia todos os movimentos do seu oponente. Tenho certeza que ele está garantido a perder. Compilar:
gcc copy-san.c
fonte
Hebi (Java)
Hebi segue o Caminho da Serpente.
A serpente não precisa da bênção dos deuses.
A serpente desliza seus ataques; como ondas na praia, o que aparece retrocede como veio.
A cobra nunca espera.
O Snake não tem senso de aptidão, caso contrário, teria sido escrito em Python.
Instruções de execução:
Corpo do código:
fonte
O honorável (Java)
Os valores honoráveis honram acima de tudo. Ou seja, sua honra acima de todos os outros. Se o samurai inimigo tem maior ou igual honra, ele se curva. Ninguém será mais honrado que ele. Caso contrário, ele faz um movimento aleatório. Ele nunca guarda duas vezes seguidas - isso seria desonroso!
compilar:
Fonte:
fonte
Samurai Abençoado (Pitão)
Este samurai tenta manter o favor dos deuses o maior tempo possível. Ele corre para pegar a espada sagrada, depois alterna entre Guardar e Atacar com um dos ataques, reabastecendo honra quando necessário. Se parece que ele ou seu oponente podem cair em breve, ele corre para matar. Ele cairá facilmente em um oponente que pode rastrear seu padrão, mas sua estratégia de sempre atacar com dois danos deve ser bastante eficaz.
Para executar:
Salvar como BlessedSamurai.py
fonte
last
para oself.last
que parece corrigir o problema.Hermurai (C ++)
Admira seu oponente e é um pouco paranóico. Quer saber se ele pode fazer o que outros samurais podem, porque ele ainda não consegue acreditar que é um samurai. Seu sonho sem fim se tornou realidade antes que ele percebesse. O que poderia custar sua cabeça ...
Iniqy (C ++)
Golpeia o mais forte possível. Entra no modo de ataque imparável quando ele está em perigo.
Ambos são escritos em C ++. Compilar:
Para executar no Linux:
./iniqy
Para executar no Windows:
iniqy.exe
fonte
O Exterminador do Futuro (ruby)
O Terminator não presta atenção à sua própria saúde. O Terminator não tem noção de honra. O Terminator é enviado do futuro e simplesmente determinado a finalizar seu oponente. Faz isso observando os movimentos de seus oponentes e nada mais. Ele mostra os movimentos e calcula a resposta apropriada de maneira tão complexa que nenhuma tecnologia atual pode prever as ações do Terminator. De fato, para quem vive em 2015, o Terminator pode parecer um tanto aleatório ...
fonte
Agente 38 [1] (C)
Como um produto de uma extensa manipulação genética, agente 38 tem o físico e acuidade mental de um super [2] -samurai, e é definitivamente superior a toda a sua impotente [carece de fontes?] Falho [carece de fontes?] Concorrentes.
[1] Número totalmente irrelevante. [2] Garantido como verdadeiro 1% do tempo.
YAGMCSE
Os métodos de Monte Carlo parecem exibir um jogo decente, então aqui está mais uma entrada genérica de simulação de Monte Carlo!
Diferentemente da maioria das outras entradas deste concurso, essa entrada usa um grande número de simulações de jogos aleatórios e, portanto, requer o uso do sinalizador -O3 para obter o desempenho ideal.
Compile o programa com o comando: gcc monte.c -o monte -O3 -std = c99
fonte
GBWWWWW...
ouBWWWW
Após minha tentativa fracassada de entrar no Target Dummy, apresento a você meu próximo bot ...
ScroogeBot - Python 2
Esse bot vai se curvar se ele tiver uma honra. Caso contrário, ele jogará uma moeda.
Se cair na cabeça, ele realizará um ataque aleatório. Se cair nas caudas, ele irá se curvar ou guardar.
Comando:
python scroogebot.py
fonte
Yoshimitsu (JS)
Tentar não ser vigiado verificando os dois últimos movimentos, obterá bravura com maior honra. com base nos apsillers modelo feitos
fonte
O Louco (C)
O Louco implora uma estratégia bastante errática, nunca repetindo o mesmo movimento duas vezes, a menos que seja forçado a passar por falta de honra. Seus movimentos são amplamente baseados na aleatoriedade, dificultando a previsão de suas ações. Seu bem-estar é a última coisa em sua mente, pois seus pensamentos se concentram apenas no derramamento de sangue e na vitória final
O Profeta (C)
O Profeta usa o conhecimento dos 2 movimentos anteriores de seu oponente para prever seu próximo movimento e fornecer um contra-ataque rápido e mortal. Além disso, ele faz astrologia e outras coisas.
Compilação
Ambos os programas são escritos em C e podem ser compilados com
gcc
:Corrida
* nix
janelas
fonte