introduction
Tout le monde connaît le jeu tic-tac-toe, mais dans ce défi, nous allons introduire un petit twist. Nous n'utiliserons que des croix . La première personne qui place trois croix d'affilée perd. Un fait intéressant est que le nombre maximum de croix avant que quelqu'un ne perde, est égal à 6 :
X X -
X - X
- X X
Cela signifie que pour une carte 3 x 3, le montant maximum est de 6 . Donc, pour N = 3, nous devons produire 6.
Un autre exemple, pour N = 4, ou une carte 4 x 4:
X X - X
X X - X
- - - -
X X - X
C'est une solution optimale, vous pouvez voir que le nombre maximum de croix est égal à 9 . Une solution optimale pour une carte 12 x 12 est:
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
Il en résulte 74 .
La tâche
La tâche est simple, étant donné un entier supérieur à 0, affichez le nombre maximum de croix qui peuvent être placées sans trois X adjacents sur une ligne le long d'une ligne, d'une colonne ou en diagonale.
Cas de test
N Output
1 1
2 4
3 6
4 9
5 16
6 20
7 26
8 36
9 42
Plus d'informations peuvent être trouvées sur https://oeis.org/A181018 .
Règles
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
- Vous pouvez fournir une fonction ou un programme.
Réponses:
Pyth,
575149 octetsComme la solution CJam de @ PeterTaylor, il s'agit d'une force brute, donc elle s'exécute en temps O (n 2 2 n 2 ). L'interprète en ligne ne termine pas dans une minute pour n = 4.
Essayez-le ici pour N <4.
Essayez la fonction diagonales .
la source
CJam (
5856 octets)C'est incroyablement lent et utilise beaucoup de mémoire, mais c'est du code-golf pour vous.
Dissection
la source
O(n a^n)
oùa ~= 5.518
.C
460456410407362351318 octetsC'est une très mauvaise réponse. C'est incroyablement approche de force brute lente.
J'essaie de jouer un peu plus au golf en combinant lesfor
boucles.Cas de test
Ungolfed
Edit: Déclarez les variables int comme paramètres inutilisés; supprimer la coordonnée y, utilisez simplement l'index; déplacer la variable vers la liste des paramètres plutôt que global, corriger les paramètres inutiles passés à
s()
; combiner pour les boucles, supprimer les parenthèses inutiles; remplacer&&
par*
,||
par+
; macro-ify la vérification 3 en lignela source
#define d(x,y)b[x]*b[x+y]*b[x+y+y]
; en changeant le début des
las(i,m){for(m=n-2;
et de remplacer toutes les instances den-2
; et en changeantb[x]++
àb[x++]++
et en remplaçantx==n*n-1
avecx==n*n
,x+1
avecx
etx
avecx-1
.C 263
264 283 309Modifier Quelques octets ont sauvé thx @Peter Taylor - moins que ce que j'espérais. Ensuite, 2 octets étaient utilisés pour allouer un peu plus de mémoire, maintenant je peux essayer une plus grande taille, mais cela prend beaucoup de temps.
Remarque En ajoutant l'explication, j'ai découvert que je gaspille des octets en gardant la grille dans le tableau R - pour que vous puissiez voir la solution trouvée ... ce n'est pas demandé pour ce défi !!
Je l'ai supprimé dans la version golf
Un programme de golf C qui peut réellement trouver la réponse pour n = 1..10 dans un délai raisonnable.
Mon test:
Moins de golf et essayant d'expliquer
la source
buildRows
méthode; peut-être jusqu'à 20 sifor(scanf("%d",&n);(v=2*V[i++])<1<<n;v%8<6&&V[++j]=v+1)v&&V[++j]=v;
est valide. (Je n'ai pas accès à un compilateur C pour le moment).999
signifie que vous voudriez ignorer cette partie. Bien que vous deviez peut-être vraiment ne pas le coder en dur, de sorte qu'en principe, vous pouvez attaquer des entrées plus grandes que 11 ou 12.Rubis, 263 octets
C'est également une solution de force brute et fait face aux mêmes problèmes que la réponse C de Cole Cameron, mais est encore plus lente car c'est du rubis et non du C. Mais bon, c'est plus court.
Cas de test
Ungolfed
la source
Haskell, 143 octets
À certains égards, cela ne se fait pas, mais je me suis amusé alors voici:
Voici le code:
la source