Buscaminas es un juego de rompecabezas donde las minas se esconden alrededor de un tablero de fichas indescriptibles con el objetivo de identificar la ubicación de todas las minas. Al hacer clic en una mina se pierde el juego, pero al hacer clic en cualquier otra ficha se mostrará un número del 0 al 8, lo que significa cuántas minas la rodean directamente.
Dado un número, debe mostrar una combinación aleatoria * posible de fichas vacías y minas que lo rodean. Esto debería ser en forma de una matriz de 3x3. El mosaico central debe ser el número de minas tomadas como entrada.
* Debe tener una probabilidad distinta de cero para que ocurran todas las combinaciones.
Ejemplos
_ = blank square
X = mine
0
___
_0_
___
1
_X_
_1_
___
1
___
_1_
X__
___
_1_
__X
4
_X_
X4X
_X_
4
X_X
_4_
X_X
4
___
X4X
X_X
8
XXX
X8X
XXX
Entrada
- El número de minas que rodean el mosaico central (0-8)
Salida
- Cualquier forma razonable de salida que muestre la matriz 3x3 de mosaicos
Otras reglas
- Cada combinación no tiene que tener la misma posibilidad de suceder. Simplemente debe haber una probabilidad distinta de cero de que ocurra cada combinación al ejecutar su programa.
- Se pueden elegir 2 caracteres para la mina y el mosaico vacío.
- Este es el código de golf, el programa con menos bytes gana.
code-golf
random
minesweeper
aoemica
fuente
fuente
1
y0
?Respuestas:
Jalea , 9 bytes
Pruébalo en línea!
vacío =
1
mío =
0
Tenga en cuenta que
1
y0
son enteros.Otra nota: esto es algo similar a la respuesta de 10 bytes de Jonathan Allan, pero en realidad no está influenciada por ella de ninguna manera, y el mecanismo, si prestas mucha atención, en realidad es más diferente que a primera vista.
fuente
APL (Dyalog Unicode) ,
2815 bytes-13 bytes gracias a ngn!
Explicación:
{...}
Una función directa (D-Fn),⍵
es su argumento correcto.8?8
tratar 8 números aleatorios de la lista 1..8:⍵≥
¿Es el argumento mayor o igual a cada uno de ellos ?:⍵,
anteponer el argumento a la lista booleana:5⌽
gire la lista 5 posiciones hacia la izquierda, de modo que el argumento esté en el centro:3 3⍴
remodelar la lista a una matriz 3x3:Pruébalo en línea!
J , 15 bytes
También muchos bytes gracias a ngn!
Pruébalo en línea!
fuente
(8↑1⍴⍨⍵)[8?8]
->⍵>8?8
(asumiendo⎕io←0
)3 3⍴1↓,⍵,2 4⍴
->3 3⍴5⌽⍵,
JavaScript (ES6), 67 bytes
Versión más corta sugerida por @tsh
Las ranuras vacías son
0
, las minas son1
.Pruébalo en línea!
Versión original de prueba y error, 78 bytes
Las ranuras vacías son
_
, las minas son7
.Pruébalo en línea!
Comentado
fuente
Jalea ,
1310 bytesLa lista de listas devuelta tiene el número entero visualizado en el centro rodeado de 0 y 1 que representan minas y espacios en blanco, respectivamente.
Pruébalo en línea! (pie de página bonito imprime la matriz)
¿Cómo?
fuente
ŒH
también funciona en lugar des4
.Pyth,
1614 bytesGuardado 2 bytes gracias a isaacg.
Utiliza espacios para lugares seguros y cotizaciones para minas.
Pruébalo aquí
Explicación
fuente
.[d8
en lugar de>8+*8d
Oracle 18 SQL, 230 bytes
No es un lenguaje de golf pero ...
El valor de entrada está en una tabla
n
con columnan
:Pruébelo en línea: inicie sesión en https://livesql.oracle.com y péguelo en una hoja de trabajo.
Salida:
Para obtener todas las combinaciones posibles (183 Bytes):
Salida:
fuente
Japt, 13 bytes
Intentalo
Explicación
fuente
QBasic 1.1 ,
206186 bytes-20 gracias a DLosc (truco de golf recientemente publicado).
Vacío =
0
mío =
1
Tenga en cuenta que
0
y1
son enteros, pero estoy usando STDOUT de todos modos, así que ...La salida aparece así:
Donde AH son 0/1 yx es la entrada.
fuente
Carbón de leña , 19 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Usos
0
para una mina,1
para un espacio vacío. Explicación:Peek
devuelve una serie de cadenas, queSum
simplemente se concatenan, por lo que primero tenemos que convertir a entero. (Sum(Sum(PeekAll()))
también funciona)Sum
devuelveNone
para una matriz vacía (primer bucle), por lo que la única comparación segura esNot(Equals(...))
.Random
siempre regresa0
, aunque su documentación dice lo contrario.Solución alternativa, era de 19 bytes, ahora 17 bytes después de una corrección de errores de carbón:
Pruébalo en línea! El enlace es a la versión detallada del código. Usos
0
para una mina,1
para un espacio vacío. Explicación:Imprime la entrada original.
Imprima a la
9
izquierda. Esto mueve el cursor hacia atrás sobre la entrada original y también fuerza al menos una iteración del ciclo while (de lo contrario, una entrada de8
no haría nada).Repita mientras la diferencia entre la suma de todos los dígitos en el lienzo y 8 no es cero:
Reemplace cada uno de los caracteres circundantes al azar con
0
o1
.fuente
R ,
67 63 6259 bytesPruébalo en línea!
Usos
1
y0
. Construye unn* 1 +(8-n)* 0
vector, lo baraja, agregan
, construye la matriz más grande que se muestra a continuación (dondea...i
están los elementos del vector original) y extrae la submatriz adecuada que se muestra en mayúsculas:fuente
matrix((c(sample(rep(1:0,c(n<-scan(),8-n))),n))[c(1:4,9:5)],3)
Python 2 , 93 bytes
Pruébalo en línea!
0
por vacío1
por una mina; yn
para uno mismo.fuente
iter
es inteligente!Adjunto , 51 bytes
Pruébalo en línea!
Explicación
Similar a la respuesta J / APL de Galen , la técnica básica es generar una matriz de 1s y 0s con el número correcto de minas, insertando la entrada al agregarla al final, girando la matriz de manera que la entrada quede en el centro, luego remodelando en una matriz de 3x3.
Parte 1: generar la matriz binaria
Hay muchas formas de hacerlo, pero principalmente me encontré con dos tipos: fuerza bruta y selección.
El método primario de fuerza bruta se ve así:
Esto genera matrices aleatorias de 8 dígitos binarios (
Random[8&2]
) mientras que sus sumas no son iguales a la entrada{Sum@_/=_2}&_
. Esto es un poco detallado, ya que las siguientes partes destacadas del código están ahí "solo para que funcione":Y descarté la idea.
La selección es más interesante. El concepto principal es utilizar el
BaseBelow[b, n]
builtin, que genera una lista de todos losb
enteros base de anchon
(como matrices de dígitos), desde0
hastab^n-1
. Por ejemplo,BaseBelow[3, 2]
genera todos los enteros ternarios de ancho 2:Usamos específicamente
BaseBelow[2, 8]
para todos los enteros binarios de ancho 8. Estos representan todos los campos minados posibles de todas las longitudes. Este es el primer paso.El segundo paso es seleccionar todas esas matrices con solo
N
1s, dondeN
está la entrada. Mi primera idea fue traducir esta declaración en inglés directamente en Attache:Sin embargo, esto no solo resultó ser 1 byte más largo que el enfoque mencionado anteriormente, sino que también es muy repetitivo, ¡y ni siquiera es aleatorio todavía! Claro, probablemente podría ahorrar 1 byte reorganizando cómo
BaseBelow
se llama, pero simplemente no vale la pena usar el enfoque.Así que decidí matar dos pájaros de un tiro y usar un
Shuffle
enfoque basado. Lo siguiente da todos los campos minados válidos de longitudN
en orden aleatorio:Entonces, todo lo que hay que hacer es seleccionar el primero. Pero puedo hacerlo mejor, ¿seguramente sería mejor simplemente
Sample
la matriz filtrada? Este enfoque resulta ser algo como esto:Tuve que revertir el
BaseBelow&8!2
golf porque\
la precedencia es demasiado alta. De lo contrario satisfecho, procedí a cortar un byte de eso:(Descubrí otra forma de llamar sucintamente una función diádica aquí:
x&f@y
es una expresión de alta precedencia que se evalúa comof[x, y]
).Sin embargo, a pesar de esto, recordé que, desde el principio, un alias para
2&BaseBelow
existido:BinBelow
. Entonces usé eso:Esto genera el campo minado deseado. Estoy convencido de que esto es casi óptimo.
Parte 2: formando la matriz
Como se dijo anteriormente, la técnica de formación que utilicé es similar a la respuesta J / APL, por lo que no entraré en demasiados detalles. Supongamos que
MINEFIELD
es el resultado de la última sección. La función se convierte en:MINEFIELD'_
concatena el campo minado con la entrada original_
, dándonos algo como esto:Luego,
Rotate[MINEFIELD'_,4]
rota esta lista4
veces a la izquierda, colocando el centro:El último paso es usar
[3,3]&
para remodelar la lista en una matriz 3x3:fuente
Java 10,
165157141 bytesLas fichas vacías son
_
(cualquier personaje con un valor unicode superior a 58 está bien) y las minas sí0
.Pruébalo en línea.
Explicación:
fuente
PowerShell , 77 bytes
Pruébalo en línea!
fuente
PHP ,
135134123117122121 bytesRecorrer str para imprimir ahorra 1 byte
str_split e implosionar para insertar el número central ahorra 11 bytes
Ya no es necesario asignar la cadena a $ s, ahorrando 6 bytesSí, sí. De lo contrario, la cadena se baraja después de cada eco ...
Eliminar espacios en blanco después del eco ahorra 1 byte
Reemplazar "\ n" con un salto de línea actual ahorra 1 byte
Pruébalo en línea!
fuente
Alice , 24 bytes
Pruébalo en línea!
Las ranuras vacías son
9
, y las minas son0
.También hice un programa de 27 bytes con
1
minas y0
espacios vacíos:Pruébalo en línea!
fuente
PowerShell ,
9186 bytes-5 bytes gracias a mazzy
Pruébalo en línea!
Baraja una cadena generada que va de
________
aXXXXXXXX
(reemplazando desde la izquierda). Luego lo corta varias veces, insertando$n
en el medio, para construir la cadena de salida. Esta última parte probablemente se puede optimizar en gran medida porque cada índice cuesta un mínimo de 5 bytes.fuente
Rubí , 59 bytes
Devuelve una lista de cadenas (una para cada línea).
Pruébalo en línea!
fuente
C (gcc) , 81 bytes
Pruébalo en línea!
fuente
Perl 5
-pa
,105101bytesPruébalo en línea!
fuente
05AB1E , 12 bytes
Usos
0
para minas, espacios para cuadrados en blanco. Produce una lista de líneas, que está bastante impresa en los TIO a continuación uniéndose con el delimitador de nueva línea (»
).Pruébelo en línea o verifique algunos casos de prueba más a la vez .
Explicación:
Alternativa de 12 bytes :
Usos
1
para minas,0
para cuadrados en blanco. Emite una matriz de dígitos, que está bastante impresa en los TIO a continuación uniendo cada fila, y luego estas filas con un delimitador de nueva línea (J»
).Pruébelo en línea o verifique algunos casos de prueba más a la vez .
Explicación:
fuente