Ilustrar formações de times de futebol em um campo

13

Futebol é o esporte em que os jogadores chutam a bola, não a carregam. Alguns indivíduos confusos podem chamar isso de futebol.


Um time de futebol tem um goleiro e 10 jogadores em campo. Existem muitas formações usadas no futebol, que determinam onde cada jogador deve estar (o jogador, é claro, se move, mas é a posição base).

A formação mais comum é o 4-4-2, o que significa que existem 4 defensores, 4 médios e dois atacantes. Outras formações são ("defensores, médios, atacantes" ou "defensores, médios, médios, 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

O desafio é pegar duas entradas, uma para cada uma das duas equipes e apresentar uma visão geral dos jogadores em campo.

Em geral: A maioria das informações sobre o layout da arte ASCII pode ser encontrada nas figuras (uma imagem diz mais que 1000 palavras). Apenas a maneira de colocar os 10 jogadores em campo é explicada em detalhes:

  • O goleiro e a área de grande penalidade ocupam 3 linhas de caracteres ASCII
    • O layout e o número de espaços podem ser encontrados na figura abaixo
  • Não há linha em branco entre a área de grande penalidade e os defensores
  • Se houver três números na formação (por exemplo, 4-4-2, 4-3-3 etc. Não 4-3-2-1):
    • Não há fila em branco entre os zagueiros e os meio-campistas
    • Há uma linha vazia entre os médios e os atacantes
  • Se houver 4 números na formação (por exemplo, 4-3-2-1, 3-3-3-1, etc. Não 4-4-2):
    • Não há linha vazia entre o zagueiro e a primeira linha de médios
    • Não existe linha vazia entre a primeira linha dos médios e a segunda
    • Não há fila vazia entre a segunda fila de médios e os atacantes
  • Não há linhas vazias entre os atacantes e a linha central
  • A equipe na metade superior está marcada como xe a equipe na segunda metade está marcada comoo .
  • Cada fila de jogadores deve ser distribuída em campo, conforme mostrado nas figuras abaixo. O número de espaços pode ser visto na figura.

A figura a seguir não representa uma formação válida, mas é usada para ilustrar o layout e o número de espaços necessários entre cada jogador. A entrada para isso seria 2 3 4 5e 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  |     |
+-----------------+ 

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

Regras:

  • A entrada pode estar em qualquer formato conveniente, separado como você desejar. O formato pode ser uma única string ( 5311), dígitos separados por vírgula (5,3,1,1 ), etc.
    • A entrada não deve conter nenhuma outra informação além das duas formações
  • A saída deve parecer exatamente como as figuras da amostra, mas espaços à direita e novas linhas estão OK.
  • Você pode assumir que apenas uma entrada válida é fornecida (somente as formações na lista serão usadas).
  • Programa ou função completa

Este é o código golf, então o código mais curto em bytes vence.

Stewie Griffin
fonte
1
O futebol é aquele com as varas, certo?
Mego
Não, isso é shuffleboard. Você quer aquele com pôneis.
Geobits
1
Não, isso é adestramento. Você quer aquele com objetivos.
Morgan Thrapp
4
O que! Nenhum círculo do meio campo?
Luis Mendo
2
@LuisMendo, suponha que seja um dia chuvoso em Stoke! O círculo-campo do meio é muitas vezes difícil encontrar = P
Stewie Griffin

Respostas:

1

JavaScript (ES6), 258262

Função anônima, tendo 2 parâmetros como matrizes 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`
`

Teste

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
fonte
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)

Versão ungolfed com ambiente de teste aqui !

Função que recebe duas listas do formato [defensores, meio-campistas, meio-campistas, atacantes] enquanto o número de um meio-campista é opcional. A equipe X (em cima) vem em primeiro lugar, a equipe O (em baixo) em segundo.

Denker
fonte
há um espaço inútil em um de seus lambda lambda a:r(a), x)^^
Erwan
@ Erwan Obrigado, boa captura!
Denker
Eu acho que é pior para definir t=lambda a:r(a) como usá-lo 2 vezes
Erwan
solução melhor remover todas ocorrência de lambda a:r(a)substituí-lo por apenasr
Erwan
@ Erwan Obrigado, perdi isso também!
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"

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

Um pouco não-destruído:

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
fonte
@ edc65 É apenas o meu exemplo de saída que está errado: S
andlrc