Crie uma função ou programa que torne a grade o mais próximo possível de um quadrado
- Você receberá um número inteiro N como entrada, números inteiros (1,2,3,25, etc)
- A saída deve ser uma grade retangular perfeita de N letras o mais próximo possível de um quadrado
- O quadrado (pretendido) deve consistir em uma das letras O ou X, conforme especificado pelo usuário
Pontos :
- Codificado para apenas O ou X: +1
- Um parâmetro (0/1, verdadeiro / falso, algo semelhante) para girar a saída (como em 5 ou 8): -10
- Projete o quadrado (use O e X em algum tipo de padrão): -5
Um padrão é considerado válido se contiver os dois tipos de caracteres (onde o eixo x / y> = 3) e o padrão permanecerá o mesmo quando invertido horizontal ou verticalmente (é permitido trocar Xs por Os)
Exemplos
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Exemplos que não são permitidos (sem o mesmo comprimento de linha ou coluna)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Se possível, forneça um exemplo online.
"xo"[i]
vez dei
? Isso não parece valer a pena. Em geral, todas as suas recompensas parecem um pouco baixas.Respostas:
CJam, 16 (31-10-5)
Isso leva dois inteiros são introduzidos, primeiro ser um
0
ou1
para a direção e segundo sendo um deles o número deO
ouX
na grade.Imprime uma alternativa
O
eX
.Este é apenas o corpo da função, para experimentá-lo, adicione
l~
na frente do código, como:e dar entrada como
para obter saída como
ou entrada como
para
Experimente online aqui
Como funciona:
Exemplo de execução:
fonte
APL (36 - 5 - 10 = 21)
O argumento da esquerda é rotação, o argumento da direita é o tamanho. Ele também usa um padrão simples (apenas alterna 'X' e 'O').
Explicação:
∆←,⍳2/⍵
: Gerar todos os possíveis pares de números a partir1
de⍵
e armazenar em∆
.∆←∆[⍋|-/¨∆
...]
: classifica∆
em ascensão na diferença absoluta dos dois números em cada par e armazena o resultado novamente∆
.⊃∆/⍨⍵=×/¨∆
: para cada par, multiplique os números juntos. Selecione apenas os pares que se multiplicam⍵
e pegue o primeiro que corresponder (que é o "mais quadrado" por causa da classificação).⍺⌽
: gire a lista de comprimentos (que possui 2 elementos) por⍺
.'OX'⍴⍨
: crie uma matriz desse tamanho e preencha com alternandoO
eX
.fonte
Haskell, 59 caracteres
fonte
CJam,
252221 (31 - 10)Este é um corpo funcional. Se você deseja um programa completo, adicione
riri
à frente. Se você quiser usá-lo como um bloco de código, coloque-o dentro{}
. Teste-o em cjam.aditsu.net .Ele recebe a entrada como dois argumentos inteiros: a opção para saber se o retângulo é vertical (qualquer valor diferente de zero) ou horizontal (zero) e o número de
O
s a serem usados.Explicação
fonte
JavaScript (E6) 84 (83 + 1) ou 101 (116-10-5)
Padrão + rotação (parâmetro f, 0 ou 1) - bônus 15
Sem padrão, sem rotação - penalidade 1
Teste no console do FireFox / FireBug
fonte
Python,
7975 (sem bônus)Os bônus parecem complicados, então aqui está uma função Python bastante simples:
fonte
f(8)
me deu uma coluna de 8O
s, que está incorreta.>
onde deveria ter havido<
. Está consertado agora. Obrigado pela observação!Ruby, 74
Explicação
Integer
.n
(a entrada) é divisível por todo número inteiro de 1 an
.n
).String#*
método (excessivamente conciso) para "desenhar" o quadrado.fonte
APL (Dyalog Unicode) , 30 - 15 = 15 bytes SBCS
Infix anônimo lambda. Toma N como argumento da direita e param como argumento da esquerda. Os retângulos terão faixas de X e O ou serão quadriculados.
Experimente online!
{
...}
"dfn";⍺
é argumento à esquerda (param),⍵
é argumento à direita ( N ):⍳⍵
índices 1… N∘.×⍨
tabuada de multiplicação desse⍵=
mascarar onde N é igual a⍸
índices de valores verdadeiros na máscarac←
armazenar isso emc
(para c andidates)≢
registro dos candidatos.5×
metade multiplicada por isso⌈
teto (arredondado para cima)⊃∘c
escolha esse elementoc
⍴∘'XO'
use isso para remodelar ciclicamente "XO"⍉⍣⍺
transpor se paramfonte
05AB1E (legado) , pontuação: 7 (22 bytes - 15 bônus)
Experimente online ou verifique mais alguns casos de teste .
Toma as entradas
N
primeiro, depois o booleano (0
/1
), se deve girar ou não.Usa a versão herdada do Python do 05AB1E, já que o zip com uma lista de cadeias achata implicitamente e junta os caracteres, ao contrário da versão mais recente do Elixir, reescrita do 05AB1E.
Explicação:
fonte
GolfScript 26 (41-10-5)
Espera que dois parâmetros estejam na pilha:
0
para normal ou1
para transposton
valorO padrão é que o quadro esteja cheio de
X
seo canto superior esquerdo seja umO
. Escusado será dizer que esse padrão é mantido ao transpor a placa.Demonstração: regular , transposta
fonte
Mathematica, 71 caracteres
fonte
Petit Computer BASIC, 72 bytes
fonte
J , 32 bytes - 15 = 17 bytes
Experimente online!
A rotação é controlada por um sinalizador 0/1 tomado como argumento à esquerda
fonte
Retina 0.8.2 , 66 bytes + penalidade de 1 byte = 67
Experimente online! Explicação:
Converta a entrada em uma sequência de
X
s.A primeira passagem da captura externa corresponde ao início da sequência, enquanto nas passagens subsequentes o valor anterior da captura interna é correspondido. A captura interna é então incrementada e correspondida. O resultado disso é que a quantidade de cadeia consumida pela captura externa é o quadrado da captura interna, que, portanto, não pode exceder a raiz quadrada da entrada. Enquanto isso, a repetição subsequente garante que a captura interna seja um fator do comprimento da corda.
Salve o fator descoberto e calcule o outro divisor adicionando o número de repetições subsequentes.
Reorganize os fatores em um retângulo.
fonte
Carvão , 33 bytes - 10-5 = 18
Experimente online! Link é a versão detalhada do código. Explicação:
Entrada
N
.Pegue o intervalo
0
..N
, mantenha apenas os números cujos quadrados não sejam menores queN
e dividaN
e use o mínimo desses números.Use o fator descoberto para gerar um retângulo da largura e altura apropriadas usando um padrão de tabuleiro de damas. (Isso deve ser
UOη÷θηXO¶OX
para uma economia de 1 byte, mas é um buggy no momento.)Se a segunda entrada for diferente de zero, gire a saída. (Se exigir que a segunda entrada seja
0
ou2
seja aceitável, isso pode ser⟲N
uma economia de 1 byte.)fonte