Combien de carrés y a-t-il?

12

Ce défi est inspiré d'une image qui se promène souvent sur Facebook et qui ressemble à ceci . Sauf que notre carré de base ressemblera davantage à ceci:

┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘

Le carré est composé de n x m1x1 carré, vous devez compter le nombre de sous-carrés (1x1, 2x2, 3x3, 4x4, 5x5, etc.) pouvant tenir dans ce carré. Des carrés peuvent manquer certaines lignes de la grille (comme dans l'exemple ci-dessus) ou être complets comme dans l'exemple ci-dessous. Ce qui signifie qu'une ventilation mathématique n'est pas possible (pour autant que je sache).

Contributions:

  • Le nombre de lignes ( n) d'entrée pour construire le carré;
  • Un carré composé des caractères suivants: à |travers les nlignes d'entrée.

Production:

  • La quantité de carrés de n'importe quelle taille pouvant tenir dans le carré d'entrée (nous voulons seulement un seul numéro ici, pas un nombre pour chaque taille).

Critère gagnant:

La plus petite réponse (nombre d'octets) l'emporte.

Cas de test:

Dans:

5
┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘

Sortie: 30


Dans:

3
┌─┬─┐
├─┼─┤
└─┴─┘

Sortie: 5


Dans:

5
┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘

Sortie: 7


Dans:

4
┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘

Sortie: 32


Dans:

2
┌─┐
└─┘

Sortie: 1


Dans:

4
┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘

Sortie: 22

Simon Landry
la source
3
Je n'ai pas compté les plus gros, mais le troisième n'a-t-il pas 11 cases?
Value Ink
@ KevinLau-notKenny Vous avez raison, j'ai fait une erreur.
Simon Landry
Je pense que c'est trop simple, il est compté via une forme combinatoire, préférez-vous plutôt considérer le format d'image de facebook?
Abr001am
1
Pour référence, le boîtier rectangulaire est A271916 , ce qui donne m*(m+1)*(3*n-m+1)/6un mpar nrectangle n >= m(dimensions compensées par une depuis l'entrée parle de points plutôt que les places elles - mêmes)
SP3000
1
@SimonLandry je ne voulais pas dire la combinatoire au sens pur, je pense que sp3000 vient de souligner que déjà, la première version de votre puzzle (avant modification) était ouverte pour une percée mathématique simple
Abr001am

Réponses:

2

JavaScript (ES6), 292 octets 306 325

Modifier J'ai fait le compte d'octets totalement faux, corrigé maintenant thx http://bytesizematters.com/ correct pour la dernière fois j'espère que thx Cᴏɴᴏʀ O'Bʀɪᴇɴ voir https://goo.gl/LSHC1U (et 1 octet de moins en utilisant un littéral saut de ligne au lieu de '\ n')

(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n|=i<s&(!(r(t+y)&r(t+y+s*o)&1)|!(r(x+u)&r(x+u+s*2)&2))|i>0&(!(r(t+y)&r(t+y+s*o)&4)|!(r(x+u)&r(x+u+s*2)&8))})(-~z.search`
`)|q

Plus long que prévu (probablement quelques octets de plus peuvent être rasés)

Tous les carrés possibles sont vérifiés et comptés.

La rfonction mappe chaque caractère sur un bitmap ayant

  • 1: ligne horizontale au centre à droite
  • 2: ligne verticale du centre vers le bas
  • 4: centre de la ligne horizontale à gauche
  • 8: ligne verticale du centre vers le haut

Un carré de n'importe quelle taille doit avoir

  • 4 dans toutes les cellules sauf la première dans la rangée du haut et du bas
  • 1 dans toutes les cellules sauf la dernière dans la rangée du haut et du bas
  • 8 dans toutes les cellules sauf la première dans la colonne la plus à gauche et la plus à droite
  • 2 dans toutes les cellules sauf la dernière dans la colonne de gauche et de droite

Tester

f=(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);k=(p,d,m)=>r(p)&r(p+s*d)&m;for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n=n|i<s&(!k(t+y,o,1)|!k(x+u,2,2))|i>0&(!k(t+y,o,4)|!k(x+u,2,8));})(-~z.search`
`)|q

console.log=(...x)=>O.textContent+=x+'\n'

// Less golfed

Uf=(h,z)=>{
  o=-~z.search`\n`;
  w=o/2;
  r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);
  k=(p,d,m)=>r(p)&r(p+s*d)&m;
  for(q=s=0;++s<w&s<h;)
    for(y=0;y<(h-s)*o;y+=o)
      for(x=0;x<(w-s)*2;q+=!n,x+=2)
        for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)
          n|=i<s&(!k(t+y,o,1)|!k(x+u,2,2))
          |i>0&(!k(t+y,o,4)|!k(x+u,2,8));
  return q
}

;[[5,`┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘`,20]
,[5,`┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,30]
,[3,`┌─┬─┐
├─┼─┤
└─┴─┘`,5]
,[5,`┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘`,7]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘`,32]
,[2,`┌─┐
└─┘`,1]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘`,22],
,[6,`┌─┬─────┐
├─┼─┬─┐ 
 ├─┼─┼─┤
 └─┼─┼─┤
   └─┼─┤
└─────┴─┘`,12],  
,[6,`┌─┬─┬─┬─┐
├─┴─┼─┼─┤
   └─┼─┤
├─┬─┬─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,23]]  
.forEach(t=>{
  var r=t[0],a=t[1],k=t[2],x=f(r,a)
  console.log(x==k?'OK '+x:'KO '+x+' Expected '+k,'\n'+a)
})
<pre id=O></pre>

edc65
la source
Je compte 307 octets .
Conor O'Brien
@Conor Ok merci pour le lien
edc65