Ilustrar formaciones de equipos de fútbol en un campo

13

El fútbol es el deporte donde los jugadores patean la pelota, no la llevan. Algunas personas confundidas podrían llamar a esto fútbol.


Un equipo de fútbol tiene un portero y 10 jugadores en el campo. Hay muchos formaciones utilizadas en el fútbol, ​​que dicta dónde debe estar cada jugador (el jugador, por supuesto, se mueve, pero es la posición base).

La formación más común es 4-4-2, lo que significa que hay 4 defensores, 4 centrocampistas y dos atacantes. Otras formaciones son ("defensores, mediocampistas, atacantes" o "defensores, mediocampistas, mediocampistas, atacantes"):

  • 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

El desafío es tomar dos entradas, una para cada uno de los dos equipos y generar una visión general de los jugadores en el campo.

En general: la mayoría de la información sobre el diseño del arte ASCII se puede encontrar en las figuras (una imagen dice más de 1000 palabras). Solo se explica en detalle la forma de colocar a los 10 jugadores en el campo:

  • El arquero y el área de penalización ocupan 3 filas de caracteres ASCII
    • El diseño y el número de espacios se pueden encontrar en la figura a continuación
  • No hay una fila vacía entre el área de penal y los defensores.
  • Si hay 3 números en la formación (por ejemplo, 4-4-2, 4-3-3, etc. No 4-3-2-1):
    • No hay una fila vacía entre los defensores y los centrocampistas.
    • Hay una fila vacía entre los centrocampistas y los atacantes.
  • Si hay 4 números en la formación (por ejemplo, 4-3-2-1, 3-3-3-1, etc. No 4-4-2):
    • No hay una fila vacía entre el defensor y la primera fila de centrocampistas.
    • No hay una fila vacía entre la primera fila de centrocampistas y la segunda
    • No hay una fila vacía entre la segunda fila de centrocampistas y los atacantes.
  • No hay filas vacías entre los atacantes y la línea central.
  • El equipo en la mitad superior está marcado como x, y el equipo en la segunda mitad está marcado como o.
  • Cada fila de jugadores se distribuirá en el campo como se muestra en las siguientes figuras. El número de espacios se puede ver en la figura.

La siguiente figura no representa una formación válida, pero se utiliza para ilustrar el diseño y la cantidad de espacios requeridos entre cada jugador. La entrada para esto sería 2 3 4 5y 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  |     |
+-----------------+ 

Ejemplos válidos:

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  |     |
+-----------------+

Reglas:

  • La entrada puede estar en cualquier formato conveniente, separado como desee. El formato puede ser una sola cadena ( 5311), dígitos separados por comas (5,3,1,1 ), etc.
    • La entrada no debe contener otra información que las dos formaciones
  • El resultado debe verse exactamente como las figuras de muestra, pero los espacios finales y las nuevas líneas están bien.
  • Puede suponer que solo se proporciona una entrada válida (solo se utilizarán las formaciones en la lista).
  • Programa completo o función

Este es el código de golf, por lo que gana el código más corto en bytes.

Stewie Griffin
fuente
1
El fútbol es el que tiene palos, ¿verdad?
Mego
No, eso es shuffleboard. Quieres el que tiene ponis.
Geobits
1
No, eso es doma. Quieres el que tiene metas.
Morgan Thrapp
44
¡Qué! ¿No hay círculo de campo medio?
Luis Mendo
2
@LuisMendo, ¡asume que es un día lluvioso en Stoke! El círculo de campo medio es a menudo difícil de encontrar = P
Stewie Griffin

Respuestas:

1

JavaScript (ES6), 258262

Función anónima, tomando 2 parámetros como matrices numéricas

(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`
`

Prueba

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
fuente
2

Python 2, 401 377 bytes

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)

¡Versión sin golf con entorno de prueba aquí !

Función que toma dos listas del formato [defensores, mediocampistas, mediocampistas, atacantes] mientras que el número de un mediocampista es opcional. El equipo X (arriba) viene primero, el equipo O (abajo) segundo.

Denker
fuente
hay un espacio inútil en una de tus lambda lambda a:r(a), x)^^
Erwan
@ Erwan Gracias, buena captura!
Denker
Creo que es peor definirlo t=lambda a:r(a) como lo usas 2 veces
Erwan
mejor solución eliminar toda la ocurrencia de lambda a:r(a)reemplazarlo simplementer
Erwan
@Erwan ¡Gracias, también me lo perdí!
Denker
1

Perl, 360 332 324 bytes

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"

Requiere -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

Algo sin 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
fuente
@ edc65 Es solo mi salida de ejemplo que está mal: S
andlrc