Introducción
Un tablero de damas normal contiene 8 x 8 = 64 cuadrados:
Puedes ver que en total, hay 12 piezas blancas . Blanco y negro siempre tienen la misma cantidad de piezas. Si hay más piezas en el tablero, las piezas serían vecinas, lo que no está permitido para este desafío. Para aclarar las cosas, aquí hay algunos ejemplos:
La tabla más pequeña posible para este desafío es 3 x 3 :
Puedes ver que la cantidad máxima de piezas es igual a 2 . Entonces, cuando se le da N = 3 , necesita dar salida a 2 . Si la entrada es N = 4 , obtenemos lo siguiente:
Puede ver que la cantidad máxima también es 2. Entonces, para N = 4 , la salida debe ser 2 . Para N = 5 , la salida debe ser igual a 5 :
Ejemplos
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
Reglas
- Su envío debe ser un programa o función, etc. que tome un número entero y genere o devuelva el número de piezas en el tablero
- Puede suponer con seguridad que la entrada es un entero no negativo> 2
- Este es el código de golf , por lo que gana el programa con la menor cantidad de bytes.
- Tenga en cuenta que el cuadrado en la parte inferior izquierda del tablero siempre está oscuro. Las piezas solo se colocan en cuadrados oscuros
- Tienes que ocupar una fila completa con piezas
code-golf
game
grid
board-game
Adnan
fuente
fuente
Respuestas:
Par , 8 bytes
Se usa un byte por carácter.
Explicación
fuente
Hexagonía , 19 bytes.
Pruébalo en línea.
Explicación
Este sigue siendo el mismo cálculo que he usado en mis respuestas de CJam y Labyrinth, pero debido al modelo de memoria ... especial ... de Hexagony, es un poco más complicado exprimir el cálculo en 19 bytes (para que quepa dentro de un longitud lateral 3 hexágono).
Al igual que mi respuesta Labyrinth, esto termina con un error de división por 0.
Aquí está el código desplegado:
Como dije, el código es completamente lineal. Puede juntar la ruta ejecutada en orden gris-púrpura-verde-rojo-azul. El camino en realidad continúa un poco más hasta que llega
:
a la izquierda. Al eliminar el/
(que solo redirige el flujo de control), todo el programa desenrollado linealmente es:Entonces la pregunta es cómo funciona. La memoria de Hexagony es el gráfico lineal de una cuadrícula hexadecimal, donde cada borde de la cuadrícula contiene un valor entero (inicialmente cero). El puntero de memoria (MP) siempre está en un borde y apunta en una dirección determinada a lo largo de ese borde. Las operaciones aritméticas se aplican generalmente a los dos bordes puntiagudos en y almacenados en el borde de la MP está encendido.
Para este programa, usaremos los tres bordes etiquetados A , B , C , con el MP comenzando como se muestra aquí:
Así es como funciona esto:
fuente
{
, la IP salta a la2
esquina izquierda. Después)
de la esquina derecha, la IP salta a la'
esquina inferior izquierda. Luego, la IP atraviesa las líneas 2 y 4 de una forma cíclica extraña.LabVIEW,
2820 Primitivas de LabVIEWfuente
CJam, 10 bytes
Pruébalo aquí.
Explicación
fuente
Laberinto , 11 bytes
Woohoo, solo un byte detrás de CJam .
Pruébalo en línea.
Es esencialmente lo mismo:
Sin embargo, en este punto el programa aún no termina. En cambio, el puntero de instrucciones ha llegado a un callejón sin salida y se da vuelta. Pero ahora
/
intenta calcular0/0
cuál termina con un error .fuente
En serio , 8 bytes
En serio tiene a la mano
½
(flotante dividido por 2) yK
(techo), por lo que no necesitamos agregar uno antes de la división.Pruébalo aquí con una explicación.
fuente
Python 2,
2221 bytesPrimero me separo en dos casos, N impar e incluso N.
Con N impar podemos llenar (N - 1) / 2 filas, que contienen en promedio N / 2 piezas. Como la primera fila siempre tiene más piezas, debemos limitar este resultado. Entonces, cuando N es impar, tenemos piezas ceil ((N-1) / 2 * N / 2).
Incluso con N podemos llenar N / 2 - 1, o piso ((N - 1) / 2) filas, cada fila contiene N / 2 piezas.
Podemos combinar estas dos expresiones por ceil (floor ((N-1) / 2) * N / 2). Desde ceil (x / 2) = floor ((x + 1) / 2) podemos utilizar el suelo de división:
((N - 1) // 2 * N + 1) // 2
.fuente
JavaScript,
3735 bytesExplicación
Utiliza una técnica similar al resto de las respuestas. Este es el algoritmo no golfista:
fuente
dc, 12
Prueba de salida:
fuente
Pyth, 9 bytes
Mismo algoritmo que mi respuesta de Python 2.
fuente
Japt ,
1614 bytesPruébalo en línea!
Cómo funciona
Bastante simple:
Desearía que hubiera alguna forma de tener en cuenta que las dos mitades del código son tan similares. Sugerencias bienvenidas!
Versión anterior (16 bytes):
fuente
Java,
23015552Golfizado:
Sin golf:
Salida del programa:
fuente
throws Exception
es permisibleScanner
clase como entrada. Eso te ahorraría un montón de bytes, creo. (ElBufferedReader
/InputStreamReader
combo puede ser mejor en uso general, pero este es el código de golf, yScanner
funciona bien para una entrada simple).Código máquina Zilog ez80, 9 bytes
En hexadecimal:
En asamblea:
La entrada está en el registro
h
y la salida está enl
.El Zilog ez80 es un procesador de 8 bits con un acumulador de 8 bits y registros de 24 bits. A diferencia del z80, tiene un
mlt
instrucción (multiplicación de 8 bits) que, en modo de 16 bits, multiplica los bytes alto y bajo de un par de registros, aquíhl
, y se almacena de nuevo enhl
.Esto solo funciona para valores para los cuales el doble del resultado cabe en 8 bits; es decir, n≤23.
fuente
TI-BASIC, 13 bytes
La multiplicación implícita de TI-BASIC ayuda, pero no tiene división entera.
⁻int(⁻X
es una forma más corta de techo (x).fuente
vba, 46
Llame con? F (x), o = f (A1) en una fórmula
fuente
Pyth,
171413 bytes-3 bytes gracias a Ypnypn ! Reorganizó los números del operador * para guardar 1 byte.
Explicación:
Cuando n es par, podemos ocupar n / 2-1 filas con n / 2 piezas, haciendo un total de n * (n / 2-1) / 2 piezas. Esta expresión es equivalente a (n * (n / 2-1) +1) / 2
Cuando n es impar, podemos encontrar cómo se vería el doble del número de piezas, el doble del número de piezas abarcará n-1 filas, y si quito una pieza, podemos dividir las n-1 filas en (n- 1) / 2 grupos de 2 filas de modo que cada grupo tenga n piezas, por lo que la expresión para este caso es (n * (n / 2) +1) / 2
Ahora que ambas expresiones son bastante similares, podemos escribir el código.
Mi primera vez usando un lenguaje de golf.
fuente
Javascript, 33 bytes
Si se permite una función ES6, entonces 18 bytes:
fuente
MATLAB,
3725 bytesCreo que esto debería funcionar, lo hace para todos los casos de prueba.
También funciona en Octave . Puedes probar en línea aquí .
Para el código anterior, agregué el programa a ese espacio de trabajo en un archivo llamado
checkerboard.m
. Puede ejecutarlo simplemente ingresandocheckerboard
en el indicador, luego, cuando se inicia, ingrese el tamaño requerido en el indicador. El resultado será impreso.Para el nuevo código, simplemente ingrese el código publicado aquí en la solicitud, luego llame a la función anónima como
ans(n)
.fuente
Retina , 18 bytes
Entrada y salida es en unario .
Pruébalo en línea!
La última versión de Retina (más nueva que este desafío) podría manejar E / S decimal para cuatro bytes adicionales:
Pruébalo en línea!
Con entrada unaria y salida decimal, podemos hacer 16 bytes, pero eso parece un poco exagerado:
Explicación
Sigue siendo el mismo enfoque que cualquier otra persona, pero usa el reemplazo de expresiones regulares en una representación unaria del número.
Esto computa
n*((n-1)/2)
. Hacemos esto haciendo coincidir dos caracteres a la vez (división por dos) y reemplazándolos con la cadena completa (multiplicación porn
). La disminución den
se realiza omitiendo el resto de la cadena, si solo quedan uno o dos caracteres.Esta es la división entera por 2, redondeada. Simplemente reemplazamos dos caracteres con uno (división por 2), pero permitimos que la última coincidencia consista en un solo personaje (redondeo).
fuente
Python 3, 39 bytes
Esto está un poco hinchado, pero no estoy seguro de poder jugar mucho más que esto. Un enlace para probar.
fuente
Prolog,
3938 bytesCódigo:
Explicación:
Ejemplo:
Pruébalo en línea aquí
Editar: Guardado 1 byte reemplazando ceil / 2 con + 1 // 2
fuente
Paperas, 17 bytes
Gracias a Emigna por la simple explicación del algoritmo. Esto explota la "deficiencia" matemática de Mumps de que las operaciones se ejecutan estrictamente de izquierda a derecha (no PEMDAS), por lo que no se requieren paréntesis. :-)
Sin embargo, la salida parece un poco extraña, ya que Cache's Ensemble (el entorno de paperas al que tengo acceso) no emite automáticamente retornos de carro incluso cuando se presiona en la entrada. Si lo desea más bonito, agregue 4 caracteres para los retornos de carro anteriores / posteriores:
¡Gracias!
fuente
Bash, 32 bytes
fuente
Pyke, 8 bytes, sin competencia
dup, dec, mitad, mult, inc, mitad
Pruébalo aquí!
fuente
Lote, 30 bytes.
38 bytes si se requiere entrada en stdin:
fuente