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