Illustrer des formations d'équipe de football sur un terrain

13

Le football est le sport où les joueurs donnent un coup de pied dans le ballon et non le portent. Certaines personnes confuses pourraient appeler ce football.


Une équipe de football a un gardien de but et 10 joueurs sur le terrain. Il existe de nombreuses formations utilisées dans le football, qui dictent où chaque joueur doit être (le joueur se déplace bien sûr, mais c'est la position de base).

La formation la plus courante est 4-4-2, ce qui signifie qu'il y a 4 défenseurs, 4 milieux de terrain et 2 attaquants. D'autres formations sont ("défenseurs, milieux de terrain, attaquants" ou "défenseurs, milieux de terrain, milieux de terrain, attaquants"):

  • 4-4-2
  • 4-3-3
  • 5-3-2
  • 3-4-3
  • 3-5-2
  • 4-5-1
  • 5-4-1
  • 4-4-1-1
  • 4-3-1-2
  • 4-1-2-3
  • 4-1-3-2
  • 4-3-2-1
  • 3-4-1-2
  • 3-3-3-1

Le défi consiste à prendre deux entrées, une pour chacune des deux équipes et à produire un aperçu des joueurs sur le terrain.

En général: la plupart des informations sur la disposition de l'art ASCII se trouvent dans les figures (une image dit plus de 1000 mots). Seule la manière de placer les 10 joueurs sur le terrain est expliquée en détail:

  • Le gardien et la zone de pénalité occupent 3 rangées de caractères ASCII
    • La disposition et le nombre d'espaces peuvent être trouvés dans la figure ci-dessous
  • Il n'y a pas de ligne vide entre la surface de réparation et les défenseurs
  • S'il y a 3 numéros dans la formation (par exemple 4-4-2, 4-3-3 etc. Pas 4-3-2-1):
    • Il n'y a pas de ligne vide entre les défenseurs et les milieux de terrain
    • Il y a une rangée vide entre les milieux de terrain et les attaquants
  • S'il y a 4 numéros dans la formation (par exemple 4-3-2-1, 3-3-3-1 etc. pas 4-4-2):
    • Il n'y a pas de rangée vide entre le défenseur et la première rangée de milieux de terrain
    • Il n'y a pas de ligne vide entre la première rangée de milieux de terrain et la deuxième
    • Il n'y a pas de ligne vide entre la deuxième rangée de milieux de terrain et les attaquants
  • Il n'y a pas de lignes vides entre les attaquants et la ligne médiane
  • L'équipe de la moitié supérieure est marquée comme xet l'équipe de la seconde moitié est marquée comme o.
  • Chaque rangée de joueurs sera répartie sur le terrain comme indiqué dans les figures ci-dessous. Le nombre d'espaces est visible sur la figure.

La figure suivante ne représente pas une formation valide, mais est utilisée pour illustrer la disposition et le nombre d'espaces requis entre chaque joueur. L'entrée pour cela serait 2 3 4 5et 5 4 2:

+-----------------+
|     |  x  |     |
|     +-----+     |
|     x     x     |
|    x   x   x    |
|  x   x   x   x  |
|  x  x  x  x  x  |
+-----------------+
|     o     o     |
|                 |
|  o   o   o   o  |
|  o  o  o  o  o  |
|     +-----+     |
|     |  o  |     |
+-----------------+ 

Exemples valides:

Input:
4 4 2, 5 3 1 1


+-----------------+
|     |  x  |     |
|     +-----+     |
|  x   x   x   x  |
|  x   x   x   x  |
|                 |
|     x     x     |
+-----------------+
|        o        |
|        o        |
|    o   o   o    |
|  o  o  o  o  o  |
|     +-----+     |
|     |  o  |     |
+-----------------+

Input:
3 5 2, 4 4 1 1


+-----------------+
|     |  x  |     |
|     +-----+     |
|    x   x   x    |
|  x  x  x  x  x  |
|                 |
|     x     x     |
+-----------------+
|        o        |
|        o        |
|  o   o   o   o  |
|  o   o   o   o  |
|     +-----+     |
|     |  o  |     |
+-----------------+

Règles:

  • L'entrée peut être dans n'importe quel format pratique, séparée comme vous le souhaitez. Le format peut être une chaîne unique ( 5311), des chiffres séparés par des virgules ( 5,3,1,1), etc.
    • L'entrée ne doit contenir aucune autre information que les deux formations
  • La sortie doit ressembler exactement aux exemples de chiffres, mais les espaces de fin et les retours à la ligne sont OK.
  • Vous pouvez supposer que seule une entrée valide est donnée (seules les formations de la liste seront utilisées).
  • Programme ou fonction complète

C'est le code golf, donc le code le plus court en octets gagne.

Stewie Griffin
la source
1
Le football est celui avec les bâtons, non?
Mego
Non, c'est du jeu de palets. Vous voulez celui avec des poneys.
Geobits
1
Non, c'est du dressage. Vous voulez celui qui a des objectifs.
Morgan Thrapp
4
Quoi! Pas de cercle intermédiaire?
Luis Mendo
2
@LuisMendo, supposez juste que c'est un jour de pluie à Stoke! Le cercle du milieu de terrain est souvent difficile à trouver = P
Stewie Griffin

Réponses:

1

JavaScript (ES6), 258 262

Fonction anonyme, prenant 2 paramètres sous forme de tableaux numériques

(a,b,H=f=>(f[3]||f.push(0,f.pop()),[z='+-----------------+',...[6,7,...f].map(x=>`|${'98,8o8,5o5o5,4o3o3o4,2o3o3o3o2,2o2o2o2o2o2,5|2o2|5,5+-----+5'.replace(/\d/g,x=>' '.repeat(x)).split`,`[x]}|`),'']))=>H(a).join`
`.replace(/o/g,'x')+z+H(b).reverse().join`
`

Tester

F=(a,b,
   H=f=>(
    f[3]||f.push(0,f.pop()),
    [z='+-----------------+',...[6,7,...f].map(x=>`|${'98,8o8,5o5o5,4o3o3o4,2o3o3o3o2,2o2o2o2o2o2,5|2o2|5,5+-----+5'.replace(/\d/g,x=>' '.repeat(x)).split`,`[x]}|`),'']
   )
)=>
  H(a).join`\n`.replace(/o/g,'x')+z+H(b).reverse().join`\n`

  
function test() {
  var f1=F1.value.match(/\d+/g),f2=F2.value.match(/\d+/g)
  O.textContent=F(f1,f2)
}

test()
x <input id=F1 value='4,4,2' oninput='test()'><br>
o <input id=F2 value='4,3,1,2' oninput='test()'><br>
<pre id=O>

edc65
la source
2

Python 2, 401 377 octets

def g(x,o):
 r=lambda r:["|"+"  x"*5+"  |","|        x        |","|     x     x     |","|    x   x   x    |","|  x   x   x   x  |"][r%5];d="+"+"-"*17+"+";h=[d,"|     |  x  |     |","|     +-----+     |"]+map(r,x);b=map(lambda r:r.replace("x","o"),[s for s in h[:3]]+map(r,o))[::-1];e="|"+" "*17+"|"
 if len(x)-4:h.insert(5,e)
 if len(o)-4:b.insert(1,e)
 print"\n".join(h+[d]+b)

Version non golfée avec environnement de test ici !

Fonction qui prend deux listes du format [défenseurs, milieux de terrain, milieux de terrain, attaquants] tandis que le numéro d'un milieu de terrain est facultatif. L'équipe X (en haut) arrive en premier, l'équipe O (en bas) en deuxième.

Denker
la source
il y a un espace inutile dans l'un de vos lambda lambda a:r(a), x)^^
Erwan
@Erwan Merci, bonne prise!
Denker
je pense qu'il est pire de définir t=lambda a:r(a) comme vous l'utilisez 2 fois
Erwan
meilleure solution supprimer toute occurrence de le lambda a:r(a)remplacer par juster
Erwan
@Erwan Merci, vous avez manqué ça aussi!
Denker
1

Perl, 360 332 324 octets

sub f{$q="";($_,$p)=@_;@x=/\S+/g;splice@x,2,0,0if@x<4;for(@x) {$s=(17-$_)/($_+1);$s=$=+1if($s!=($==$s));$x=$"x$=;@a=();push@a,$p for 1..$_;$q.=$_==0?"|$u$u$u  |\n":"|$x".join($"x$s,@a)."$x|\n"}$q}($k,$j)=<>;$u=$"x5;$^="-"x17;$i="|$u+-----+$u|";say"x$^x\n|$u|  x  |$u|\n$i\n".f($k,x)."+$^+".(reverse f$j,o)."\n$i\n|$u|  o  |$u|\nx$^x"

Requiert -E| -M5.010:

$ echo $'4 4 2\n4 4 1 1' | perl -M5.010 football.pl
x-----------------x
|     |  x  |     |
|     +-----+     |
|  x   x   x   x  |
|  x   x   x   x  |
|                 |
|     x     x     |
+-----------------+
|        o        |
|        o        |
|  o   o   o   o  |
|  o   o   o   o  |
|     +-----+     |
|     |  o  |     |
x-----------------x

Assez peu golfé:

sub f{
    $q="";
    ($_,$p)=@_;
    @x=/\S+/g;
    splice@x,2,0,0if@x<4;
    for(@x) {
        $s=(17-$_)/($_+1);
        $s=$=+1if($s!=($==$s));
        $x=" "x$=;
        @a=();
        push@a,$p for 1..$_;
        $q.=$_==0?"|$u$u$u  |\n":"|$x".join(" "x$s,@a)."$x|\n"
    }
    $q
}

($k,$j)=<>;
$u=" "x5;
$^="-"x17;
$i="|$u+-----+$u|";
say"x$^x\n|$u|  x  |$u|\n$i\n".f($k,x)."+$^+".(reverse f$j,o)."\n$i\n|$u|  o  |$u|\nx$^x"
andlrc
la source
@ edc65 C'est juste mon exemple de sortie qui est faux: S
andlrc