Cree una función o programa que haga que una cuadrícula esté lo más cerca posible de un cuadrado
- Se le dará un número entero N como entrada, números enteros (1,2,3,25, etc.)
- La salida debe ser una cuadrícula rectangular perfecta de N letras lo más cerca posible de un cuadrado
- El cuadrado (aspirante) debe consistir en una de las letras O o X según lo especificado por el usuario
Puntos :
- Codificado solo para O o X: +1
- Un parámetro (0/1, verdadero / falso, algo similar) para rotar la salida (como con 5 u 8): -10
- Diseñe el cuadrado (use O y X en algún tipo de patrón): -5
Un patrón se considera válido si contiene ambos tipos de caracteres (donde el eje x / y> = 3) y el patrón permanece igual cuando se voltea horizontal o verticalmente (se permite el intercambio de Xs con Os)
Ejemplos
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Ejemplos que no están permitidos (no filas o columnas de la misma longitud)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Si es posible, proporcione un ejemplo en línea.
"xo"[i]
lugar de hacerloi
? Eso no parece valer la pena. En general, todas sus recompensas parecen un poco bajas.Respuestas:
CJam, 16 (31-10-5)
Esto toma dos números enteros de entrada, el primero es
0
o1
para dirección y el segundo es el númeroO
oX
en la cuadrícula.Imprime una alternativa
O
yX
.Este es solo el cuerpo de la función, para probar agregue
l~
delante del código como:y dar entrada como
para obtener salida como
o entrada como
para
Pruébalo en línea aquí
Cómo funciona:
Ejemplo de ejecución:
fuente
APL (36-5-10 = 21)
El argumento izquierdo es la rotación, el argumento derecho es el tamaño. También usa un patrón simple (solo alterna 'X' y 'O').
Explicación:
∆←,⍳2/⍵
: Generar todas las posibles parejas de números a partir1
de⍵
y almacenar en∆
.∆←∆[⍋|-/¨∆
...]
: ordena de forma∆
ascendente en la diferencia absoluta de los dos números en cada par, y almacena el resultado nuevamente∆
.⊃∆/⍨⍵=×/¨∆
: para cada par, multiplique los números juntos. Seleccione solo aquellos pares que se multipliquen⍵
y tome el primero que coincida (que es el 'más cuadrado' debido al tipo).⍺⌽
: gira la lista de longitudes (que tiene 2 elementos) por⍺
.'OX'⍴⍨
: crea una matriz de ese tamaño y llénalo con alternanciaO
yX
.fuente
Haskell, 59 caracteres
fuente
CJam,
252221 (31-10)Este es un cuerpo funcional. Si desea un programa completo, agréguelo
riri
al frente. Si desea usarlo como un bloque de código, introdúzcalo{}
. Pruébelo en cjam.aditsu.net .Toma la entrada como dos argumentos enteros: el cambio de si el rectángulo es vertical (cualquier valor distinto de cero) u horizontal (cero), y la cantidad de
O
s que se utilizará.Explicación
fuente
JavaScript (E6) 84 (83 + 1) o 101 (116-10-5)
Patrón + rotación (parámetro f, 0 o 1) - bono 15
Sin patrón, sin rotación - penalización 1
Prueba en la consola FireFox / FireBug
fuente
Python,
7975 (sin bonificaciones)Los bonos parecen complicados, así que aquí hay una función de Python bastante simple:
fuente
f(8)
me dio una columna de 8O
s, que es incorrecta.>
donde debería haber habido un<
. Ya está arreglado. Gracias por la nota!Rubí, 74
Explicación
Integer
.n
(la entrada) es divisible por cada entero de 1 an
.n
).String#*
método (demasiado conciso) para "dibujar" el cuadrado.fuente
APL (Dyalog Unicode) , 30-15 = 15 bytes SBCS
Anónimo infijo lambda. Toma N como argumento derecho y param como argumento izquierdo. Los rectángulos tendrán rayas de X y O o serán a cuadros.
Pruébalo en línea!
{
...}
"dfn";⍺
es argumento izquierdo (param),⍵
es argumento derecho ( N ):⍳⍵
d ndices 1 ... N∘.×⍨
tabla de multiplicar de eso⍵=
máscara donde N es igual a eso⍸
ɩ ndices de valores verdaderos en la máscarac←
almacenar eso enc
(para c andidates)≢
cuenta los candidatos.5×
la mitad multiplicada por eso⌈
techo (redondeado)⊃∘c
elegir ese elemento dec
⍴∘'XO'
use eso para reformar cíclicamente "XO"⍉⍣⍺
transponer si paramfuente
05AB1E (heredado) , puntuación: 7 (22 bytes - 15 bonus)
Pruébelo en línea o verifique algunos casos de prueba más .
N
Primero toma las entradas , luego el booleano (0
/1
) si debe rotar o no.Utiliza la versión heredada de Python de 05AB1E ya que zip con una lista de cadenas se aplana y une implícitamente a los caracteres, a diferencia de la nueva versión de reescritura de Elixir de 05AB1E.
Explicación:
fuente
GolfScript 26 (41-10-5)
Espera que dos parámetros estén en la pila:
0
para normal o1
para transpueston
valorEl patrón es que el tablero está lleno de
X
sy la esquina superior izquierda es unO
. No hace falta decir que este patrón se mantiene al transponer el tablero.Demostración: regular , transpuesta
fuente
Mathematica, 71 caracteres
fuente
Petit Computer BASIC, 72 bytes
fuente
J , 32 bytes - 15 = 17 bytes
Pruébalo en línea!
La rotación está controlada por un indicador 0/1 tomado como argumento izquierdo
fuente
Retina 0.8.2 , 66 bytes + 1 byte de penalización = 67
Pruébalo en línea! Explicación:
Convierta la entrada en una cadena de
X
s.La primera pasada de la captura externa coincide con el inicio de la cadena, mientras que en las pasadas posteriores el valor anterior de la captura interna coincide. La captura interna se incrementa y se compara. El resultado de esto es que la cantidad de cadena consumida por la captura externa es el cuadrado de la captura interna, que por lo tanto no puede exceder la raíz cuadrada de la entrada. Mientras tanto, la repetición posterior asegura que la captura interna sea un factor de la longitud de la cuerda.
Guarde el factor descubierto y calcule el otro divisor sumando el número de repeticiones posteriores.
Reorganizar los factores en un rectángulo.
fuente
Carbón de leña , 33 bytes - 10 - 5 = 18
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Entrada
N
.Tome el rango
0
...N
, conserve solo los números cuyos cuadrados no sean menores queN
y dividaN
, y tome el mínimo de esos números.Utilice el factor descubierto para generar un rectángulo del ancho y la altura apropiados utilizando un patrón de tablero de ajedrez. (Esto debería ser
UOη÷θηXO¶OX
para un ahorro de 1 byte, pero eso es defectuoso en este momento).Si la segunda entrada no es cero, gire la salida. (Si requiere que la segunda entrada sea
0
o2
sea aceptable, esto podría ser⟲N
para un ahorro de 1 byte).fuente