Campo Minado é um jogo de lógica encontrado na maioria dos sistemas operacionais. O objetivo do jogo é determinar onde as minas estão em uma grade, dados os números que indicam o número de minas em torno desse ponto.
Dado um tamanho de grade e um conjunto de minas, gere a grade do Campo Minado para esse conjunto de minas.
Entrada: Dois números inteiros indicando o tamanho da grade e um número indefinido de números inteiros indicando as posições da mina. As posições serão dadas como (posição da coluna, posição da linha) e os índices começarão na linha 1.
Saída: A grade do Campo Minado. Se não houver minas ao redor de um bloco, imprima um x
. Para cada nova linha, imprima uma nova linha. Por favor, envie todas as minas como um asterisco *
. Não deixe nenhum espaço em branco entre os valores na linha ao imprimir.
Casos de teste:
Entrada "5 5 1 3 3 5 2 4":
xxxxx
11xxx
*21xx
2*21x
12*1x
Entrada "3 4 3 1 1 4 2 3 3 2":
x2*
13*
2*2
*21
O menor código vence.
fonte
5 5 1
, nunca será passado?Respostas:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Demos online:
Caso de teste 1: link
Caso de teste 2: link
fonte
!!{a}{b}if
usa um caractere mais que o necessário.'*'
pode ser substituído por42
porque você está colocando em uma matriz e, em seguida, stringizando a matriz. Da mesma forma, você pode usar códigos ASCII para os outros caracteres de saída e salvar um caractereor
para lidar com o caso especial.!!{a}{b}if
foi realmente estúpido. :) É engraçado que erros de alto nível você pode fazer enquanto se concentra nos detalhes. Não consigo entender o que você quis dizer com usaror
.,,
ter um número. Você deseja convertê-lo na string correspondente (ou código ASCII), a menos que seja 0, caso em que você deseja x. Os códigos ASCII para dígitos são seqüenciais e são executados a partir de 48.x
é ASCII 120, que é 72 + 48. Assim, você pode fazer72or 48+
e salvar um caractere sobre a abordagem baseada em strings..48 120if+
, mas seuor
truque é dois caracteres mais curto.J,
1241161121018786858483827976757268 caracteresEncontrei o que estava procurando - uma maneira de me livrar dos espaços (
1":
) - e, finalmente, sou competitivo. Agora só preciso descobrir o problema do conjunto vazio de minas.Recebe entrada do teclado.
Editar
A nova versão utiliza um efeito colateral de
1":
- números maiores que 9 são substituídos por*
.fonte
0
, nãox
; 2. falha se o conjunto de minas está vazio (ex:10 10
- deve imprimir uma 10x10 tabuleiro vazio, mas retorna|length error
)x
representava apenas um espaço. Não percebi que havia mudado. Hmm, nunca pensei que o conjunto de minas estaria vazio ... Vou ter que trabalhar nisso.Mathematica - 247 caracteres
Exemplos:
Resultado:
ChessboardDistance
calcula a que distância cada célula está de uma mina, onde 1 corresponde a "próximo a uma mina". O númeroCount
1 produz o número da célula. As minas (*) são inseridas na matriz.fonte
Mathematica ,
140139137Escrevendo isso de uma forma mais legível:
fonte
ListCorrelate[BoxMatrix@1, %, 2, 0]
é a sua mágica.ListCorrelate
efetivamente sobrepõe o kernel (BoxMatrix@1
) em cada posição na grade, multiplica e dá a soma. (envie um ping para mim no chat do mma, se você quiser uma ilustração) - Seu comentário me lembra que tambémListConvolve
deve funcionar aqui, pois é uma espécie de imagem espelhadaListCorrelate
e meu kernel é simétrico. Isso vai me salvar de um personagem. :-)2
no##2
. Eu vou consertar agora. ps: Como você percebeu isso depois de tanto tempo?VBA - 298 caracteres
Ignorar os erros
On Error Resume Next
salvou-me alguns caracteres, mas isso ainda não é tão bom quanto algumas das outras respostas. : - /fonte
Python,
192182180 caracteresEu poderia salvar alguns se a entrada fosse separada por vírgula. Então a primeira linha seria
d=input()
e o comprimento 171 caracteres.Ter as coordenadas da mina com base em 0 e não em 1 também ajudaria. Custou-me 8 caracteres para superar.
Versão não destruída:
fonte
Scala, 280 caracteres
fonte
C ++ - 454 caracteres
Isso é pior do que minha resposta VBA, o que provavelmente significa que eu não sei o que estou fazendo em C ++. No entanto, estou tentando aproveitar o que sei sobre C ++, então aqui está. Se alguém tiver alguma sugestão de melhoria, ficaria grato em ouvi-las!
fonte
return 0
. E você pode#include<cstdio>
,#include<cstdlib>
. Você pode até excluir essas duas inclusões! Além do mais,using name.....
é muito longo, você pode usarstd::cin, std::cout, std::string
.std::
ligações que fariam valer a pena (acho que mais umastring
teria feito) ) Obrigado pela informação sobre as#include
linhas também. Não sou especialista em C ++. ;-)C # (691 caracteres)
Versão sem golfe:
fonte
K, 175
.
fonte
ECMAScript 2019 (Javascript Moderno) - 116 bytes
versão ungolfed
Esta solução não segue rigorosamente o formato de entrada / saída, mas demonstra um algoritmo sucinto.
exemplo: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
fonte
cérebro ,
1001896 bytesExperimente online! ou tente a versão antiga com entrada inteira
Um dia de programação e três dias de correção de bugs ^^
Isso usa algumas partes do meu código do Game Of Life. Em vez de contar células vivas, isso conta bombas. Como a entrada como pontos de código é permitida pelas regras gerais, isso as utiliza em vez de números inteiros "legíveis".
fonte
Este é o começo de uma solução Brainfuck. Deve ser bem legível com comentários de indentação e pilha (
@
indica o ponteiro da pilha):No entanto, está longe de estar completo e estou começando a duvidar se minha abordagem é ótima. Até o momento, ele considera apenas os dois primeiros caracteres de entrada e imprime uma tabela de Xs. Por exemplo, "43" daria a você:
Eu adoraria ver se alguém tem o que é preciso e é capaz de resolver esse problema no Brainfuck.
fonte