Introdução
Todo mundo conhece o jogo da velha, mas neste desafio, vamos apresentar uma pequena reviravolta. Nós vamos apenas usar cruzes . A primeira pessoa que coloca três cruzamentos consecutivos perde. Um fato interessante é que a quantidade máxima de cruzamentos antes que alguém perca é igual a 6 :
X X -
X - X
- X X
Isso significa que, para uma placa 3 x 3, o valor máximo é 6 . Portanto, para N = 3, precisamos gerar 6.
Outro exemplo, para N = 4, ou uma placa 4 x 4:
X X - X
X X - X
- - - -
X X - X
Esta é uma solução ideal, você pode ver que a quantidade máxima de cruzamentos é igual a 9 . Uma solução ideal para uma placa 12 x 12 é:
X - X - X - X X - X X -
X X - X X - - - X X - X
- X - X - X X - - - X X
X - - - X X - X X - X -
- X X - - - X - - - - X
X X - X X - X - X X - -
- - X X - X - X X - X X
X - - - - X - - - X X -
- X - X X - X X - - - X
X X - - - X X - X - X -
X - X X - - - X X - X X
- X X - X X - X - X - X
Isso resulta em 74 .
A tarefa
A tarefa é simples, dado um número inteiro maior que 0, gera a quantidade máxima de cruzamentos que podem ser colocados sem três X's adjacentes em uma linha ao longo de uma linha, coluna ou na diagonal.
Casos de teste
N Output
1 1
2 4
3 6
4 9
5 16
6 20
7 26
8 36
9 42
Mais informações podem ser encontradas em https://oeis.org/A181018 .
Regras
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
- Você pode fornecer uma função ou um programa.
Respostas:
Pitão,
575149 bytesComo a solução CJam da @ PeterTaylor, essa é a força bruta, portanto é executada em O (n 2 2 n 2 ). O intérprete online não termina em um minuto para n = 4.
Experimente aqui para N <4.
Experimente a função diagonal .
fonte
CJam (
5856 bytes)Isso é incrivelmente lento e usa muita memória, mas isso é código-golfe para você.
Dissecação
fonte
O(n a^n)
ondea ~= 5.518
.C,
460456410407362351318 bytesEsta é uma resposta muito ruim. É uma abordagem de força bruta incrivelmente lenta.
Estou tentando jogar um pouco mais, combinando osfor
loops.Casos de teste
Ungolfed
Edit: Declare variáveis int como parâmetros não utilizados; remova a coordenada y, apenas use o índice; mova a variável para a lista de parâmetros em vez de global, corrija os parâmetros desnecessários passados para
s()
; combine para loops, remova parênteses desnecessários; substitua&&
por*
,||
por+
; macro-ify a verificação de 3 em linhafonte
#define d(x,y)b[x]*b[x+y]*b[x+y+y]
; alterando o começo des
as(i,m){for(m=n-2;
e substituindo todas as instâncias den-2
; e alterandob[x]++
parab[x++]++
e substituindox==n*n-1
porx==n*n
,x+1
comx
ex
comx-1
.C 263
264 283 309Editar Alguns bytes salvos thP @ Peter Taylor - menos do que eu esperava. Então, 2 bytes usados para alocar um pouco mais de memória, agora posso tentar um tamanho maior, mas está consumindo muito tempo.
Nota Ao adicionar a explicação, descobri que estou desperdiçando bytes mantendo a grade na matriz R - para que você possa ver a solução encontrada ... ela não é solicitada para esse desafio !!
Eu removi-o na versão golfed
Um programa C de golfe que pode realmente encontrar a resposta para n = 1..10 em tempo razoável.
Meu teste:
Menos jogado e tentando explicar
fonte
buildRows
método; talvez até 20 sefor(scanf("%d",&n);(v=2*V[i++])<1<<n;v%8<6&&V[++j]=v+1)v&&V[++j]=v;
for válido. (Eu não tenho acesso a um compilador C no momento).999
significa que você deseja ignorar essa parte. Embora talvez você deve torná-la realmente não codificado, de modo que, em princípio, você pode resolver entradas maiores do que 11 ou 12.Ruby, 263 bytes
Essa também é uma solução de força bruta e enfrenta os mesmos problemas que a resposta C de Cole Cameron, mas é ainda mais lenta, pois é rubi e não C. Mas ei, é mais curta.
Casos de teste
Ungolfed
fonte
Haskell, 143 bytes
De certa forma, isso não é feito, mas eu me diverti, então aqui vai:
Aqui está o código:
fonte