Foto minha esboçando esse desafio com minhas habilidades avançadas de desenho.
fundo
As guerras de Stickman aconteceram há muito tempo, quando as espécies dominantes da Terra eram feitas de nada além de gravetos. Os historiadores lamentam o fato de que não havia pintores ou câmeras naquela época, poderíamos usar algumas fotos dessa guerra nos livros de história de hoje. É aí que seus poderes de codificação se tornam úteis. Os stickmen são muito fáceis de desenhar e os historiadores conseguiram encontrar alguns dados sobre quantos stickmen travaram as guerras¹. Agora cabe a você recriar uma imagem do momento antes do início da guerra!
Aqui estão os corajosos stickmen envolvidos na guerra:
O / | / | \ / | | / \ Espadachim OA / | \ | | | / \ | Lanceiro . . ' * 'O * '\ | /. . | * './ \ *. Mago O / | \ | / \ Aldeão O / | \ / \ Infant
Entrada
Receba via stdin ou equivalente uma representação de cada stickman que apareceu em cada lado do campo de batalha. Por exemplo, se dois espadachins lutaram no lado direito e dois lanceiros no lado esquerdo, sua entrada pode ser {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
ou a "WW", "SS"
.
Resultado
Uma representação de todos os bravos homens de pau em um campo de batalha, de acordo com as regras abaixo. Ele pode ser mostrado no stdout ou salvo em um arquivo, o que quer que seja do seu interesse.
Regras
- No lado esquerdo, estarão todos os stickmen do primeiro array / string / objeto que seu programa recebeu.
- Esses stickmen devem se parecer exatamente com os mostrados anteriormente nesta questão.
- A ordem do exército do lado esquerdo deve ser
Infants Villagers Mages Swordsmen Spearmen
. - O exército do lado direito se comportará da mesma forma, mas com os personagens e a ordem espelhados.
- Cada stickman será separado por 1 espaço.
- Cada aula será separada por 3 espaços.
- Os exércitos serão separados por 8 espaços.
- Como stickmen não voa, você deve desenhar o solo usando hífen-menos
-
. - O chão deve terminar na mesma coluna que termina o último stickman do exército certo.
Exemplo
Vamos supor que meu programa espere duas matrizes com comprimento 5 e cada valor na matriz represente, em ordem Infants Villagers Mages Swordsmen Spearmen
,.
Entrada: [1,1,2,3,1] [0,0,1,1,1]
. . . . ' * . ' * . * '. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. '\ | /. | / | \ / | / | \ / | / | \ / / | \ | | / | \ \ / | \ | . \ | / ' / | \ | . | * | * | | | | | | | | | | | * . / \ / \ './ \ *. './ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Considerações finais
Observe que as brechas padrão se aplicam e que o mago é completamente assimétrico apenas porque.
O resultado da resposta mais votada será a "imagem de capa" desse desafio. A resposta mais curta até o final do mês (31/08/2014) será selecionada como vencedora.
Isso é código-golfe , então o código mais curto, em bytes, vence.
ItationCitação necessária
fonte
IVMMWWWS SWM
estaria dentro do limite de "qualquer coisa que o ajude"?Respostas:
JavaScript (E6) 336
344 356 369 424 478 522 570Editar 6 A última edição foi com erros. Correção de bug e encurtado. É tudo o que espero.
Editar 5 Finalmente encontrei uma maneira de me livrar da multiplicação por 23 - me incomodou desde o início. Mais uma alteração na entrada (@William grita quando é demais). Agora, a função espera um parâmetro de matriz, contendo 2 sub-matrizes. Sem essa mudança, é 349 - ainda uma melhoria
Editar 4 Raspou mais alguns bytes e uma pequena alteração no formato de entrada. Com o novo formato de entrada, uma classe ausente é representada como um elemento vazio da matriz. Então, ao
D([1,,2,3,1],[,3,1,1,2])
invés deD([1,0,2,3,1],[0,3,1,1,2])
. Eu acho que ainda obedece as regras.Editar 3 Golfeou mais. Nenhuma alteração no algoritmo, mas abusando de muitas funções array.map e locais para evitar loops.
Editar compressão de 2 cordas, do jeito certo ...
Editar Compactação de string adicionada, muito trabalho e pouco ganho. Agora, os stickmen de espelho são gerados a partir de um modelo, não armazenados.
Fez algumas tentativas, primeiro a correr.
Para ser jogado golfe.NB Kolmogorow-business ainda não foi abordado.Teste no console do FireFox.
Altere 'return' comAdd 'alert (...)' para ter uma declaração de saída (embora não seja útil)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Resultado
Código de golfe
Código (editar 2)
Código não destruído (1ª versão)
fonte
Python
362353Editar: remover um loop for e usar a instrução exec salvou 9 bytes
Entrada:
Resultado:
fonte
C,
418414Exemplo de entrada:
Exemplo de saída:
Código de golfe (quebras de linha são apenas para facilitar a leitura; deve ser uma longa linha de código):
A largura máxima do campo de batalha é 999 (eu poderia salvar 2 caracteres limitando-o a 99). Usei uma estrutura de controle de 1 byte por caractere de saída (sem espaço), desenhando as figuras de baixo para cima.
Existem 5 compensações na estrutura de controle.
Alguns outros bits obscuros:
f%27%5
traduz os caracteresVWSMI
em números0, 1, 2, 3, 4
t*3%12%5+4
calcula a largura do stickman do tipot
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
responsável pela assimetria esquerda / direitaargc=3
para gerar sinalizadores de direção de desenho1
e-1
Código não destruído:
fonte
*a
para uma vírgula? Isso elimina um aviso e tem o mesmo número de bytes.f=*a
como condição de parada; compilador pode reclamar, mas eu quero dizer isso. Não consigo removê-lo porque deve haver dois pontos e vírgulas nafor
sintaxe -loop.Haskell, 556
Formato de entrada
Ordem: [Infante, Aldeão, Mago, Espadachim, Lanceiro], [Lanceiro, Espadachim, Mago, Aldeão, Infante]
Saída de amostra
Código
Ungolfed
fonte
Haskell (
736733720 Bytes)Ligue com ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . O -1 marca o delimitador para as duas matrizes. Espero que esteja tudo bem.
Bem, meu primeiro desafio de golfe com código e a primeira vez que usei o haskell para uma aplicação real depois que a aprendi neste semestre na minha universidade. Provavelmente nem mesmo perto de ser a melhor ou mais curta solução, mas eu me diverti criando e foi um bom exercício :) A crítica e o feedback são muito apreciados.
Golfed fora disso:
fonte
Haskell, 450
Desafio legal! Talvez eu consiga jogar um pouco mais. Basicamente, estou armazenando as colunas das figuras de maneira que possa anexá-las uma à outra com facilidade e depois virar toda a matriz de
String
s usando Haskelltranspose
.O formato de entrada é
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Aqui está o exemplo do OP:
E aqui está minha descrição favorita do infanticídio ritual infame durante a segunda era!
fonte
Python (
612,522,460, 440)Cada "linha" é recortada com o preenchimento à direita, e isso é adicionado novamente na reconstrução.
Eu pré-invertai os stickmen na minha codificação interna porque me salvou ter que revertê-los individualmente ao renderizá-los no código.
Exemplo de execução:
Código:
fonte
Python (476)
Um solucionador diferente do meu anterior; mais, mas mais funcional.
Código:
fonte