Buscaminas es un juego de lógica que se encuentra en la mayoría de los sistemas operativos. El objetivo del juego es determinar dónde están las minas en una cuadrícula, dados los números que indican el número de minas alrededor de ese lugar.
Dado un tamaño de cuadrícula y un conjunto de minas, genera la cuadrícula Buscaminas para ese conjunto de minas.
Entrada: Dos números enteros que indican el tamaño de la cuadrícula y un número indefinido de números enteros que indican las posiciones de la mina. Las posiciones se darán como (posición de columna, posición de fila), y los índices comenzarán en la fila 1.
Salida: la cuadrícula Buscaminas. Si no hay minas alrededor de un bloque, imprima un x
. Para cada nueva fila, imprima una nueva línea. Imprima todas las minas como un asterisco *
. No deje espacios en blanco entre los valores de la fila al imprimir.
Casos de prueba:
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
El código más corto gana.
fuente
5 5 1
, nunca se aprobará?Respuestas:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Demos en línea:
Caso de prueba 1: enlace
Caso de prueba 2: enlace
fuente
!!{a}{b}if
usa un personaje más de lo necesario.'*'
puede reemplazarse42
porque lo está colocando en una matriz y luego encadenando la matriz. De manera similar, puede usar códigos ASCII para los otros caracteres de salida y guardar un carácteror
para manejar el caso especial.!!{a}{b}if
fue realmente estúpido. :) Es curioso los errores de alto nivel que puedes cometer mientras te concentras en los detalles. No puedo entender lo que querías decir con usaror
.,,
tener un número. Desea convertirlo a la cadena correspondiente (o código ASCII) a menos que sea 0, en cuyo caso desea x. Los códigos ASCII para dígitos son secuenciales y se ejecutan desde 48.x
es ASCII 120, que es 72 + 48. Entonces puede hacer72or 48+
y guardar un personaje sobre el enfoque basado en cadenas..48 120if+
, pero tuor
truco es dos caracteres más cortos.J,
1241161121018786858483827976757268 caracteresEncontré lo que estaba buscando, una forma de deshacerme de los espacios (
1":
), y finalmente soy competitivo. Ahora solo necesito resolver el problema del conjunto vacío de minas.Toma entrada del teclado.
Editar
La nueva versión utiliza un efecto secundario de
1":
: los números mayores que 9 se reemplazan por*
.fuente
0
, nox
; 2. Falla si el conjunto de minas está vacío (por ejemplo:10 10
- debería imprimir un tablero vacío de 10x10, pero regresa|length error
)x
solo representaba un espacio. No me di cuenta de que había cambiado. Hmm, nunca pensé que el conjunto de minas estaría vacío ... tendré que trabajar en eso.Mathematica - 247 caracteres
Ejemplos:
Salida:
ChessboardDistance
calcula qué tan lejos está cada celda de una mina, donde 1 corresponde a "al lado de una mina". ElCount
de 1 produce el número de la celda. Luego las minas (*) se insertan en la matriz.fuente
Mathematica ,
140139137Escribiendo eso en una forma más legible:
fuente
ListCorrelate[BoxMatrix@1, %, 2, 0]
funciona su magia.ListCorrelate
superpone efectivamente el kernel (BoxMatrix@1
) en cada posición de la cuadrícula, se multiplica y da la suma. (envíeme un ping en mma chat si desea una ilustración): su comentario me recuerda que tambiénListConvolve
debería funcionar aquí, ya que es una especie de imagen especularListCorrelate
y mi núcleo es simétrico. Eso me salvará un personaje. :-)2
en##2
. Lo arreglaré ahora. PD: ¿Cómo llegaste a notar esto después de tanto tiempo?VBA - 298 caracteres
Omitir errores con
On Error Resume Next
algunos personajes me salvó, pero esto todavía no es tan bueno como algunas de las otras respuestas. : - /fuente
Python,
192182180 caracteresPodría guardar algunos si la entrada estuviera separada por comas. Entonces la primera línea sería
d=input()
y la longitud 171 caracteres.Tener las coordenadas de la mina basadas en 0 en lugar de 1 también ayudaría. Me costó 8 caracteres superar.
Versión sin golf:
fuente
Scala, 280 caracteres
fuente
C ++ - 454 caracteres
Esto es peor que mi respuesta de VBA, lo que probablemente significa que no sé lo que estoy haciendo en C ++. Sin embargo, estoy tratando de construir sobre lo que sé de C ++, así que aquí está. Si alguien tiene alguna sugerencia para mejorar, ¡agradecería escucharla!
fuente
return 0
. Y que pueda#include<cstdio>
,#include<cstdlib>
. ¡Incluso puede eliminar estos dos incluye! Además,using name.....
es demasiado largo, puedes usarlostd::cin, std::cout, std::string
en su lugar.std::
llamadas que lo hubieran hecho más valioso (creo que uno másstring
lo habría hecho ) Gracias por la información sobre las#include
líneas también. No soy un experto en C ++. ;-)C # (691 caracteres)
Versión sin golf:
fuente
K, 175
.
fuente
ECMAScript 2019 (Javascript moderno) - 116 bytes
versión sin golf
Esta solución no se adhiere estrictamente al formato de entrada / salida, pero demuestra un algoritmo sucinto.
ejemplo: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
fuente
brainfuck ,
1001896 bytesPruébalo en línea! o prueba la versión anterior con entrada entera
Un día de programación y tres días de corrección de errores ^^
Esto usa algunas partes de mi código de Game Of Life. En lugar de contar las células vivas, esto cuenta las bombas. Dado que la entrada como puntos de código está permitida por las reglas generales, esto los usa en lugar de enteros "legibles".
fuente
Este es el comienzo de una solución Brainfuck. Debería ser bastante legible con sangría y comentarios de pila (
@
indica el puntero de la pila):Sin embargo, está lejos de estar completo y estoy empezando a dudar si mi enfoque es óptimo. Hasta ahora solo considera los dos primeros caracteres de entrada e imprime una tabla de Xs. Por ejemplo, "43" te daría:
Me encantaría ver si alguien más tiene lo que se necesita y es capaz de resolver este problema en Brainfuck.
fuente