Illustrare le formazioni delle squadre di calcio su un campo


13

Il calcio è lo sport in cui i giocatori calciano la palla, non la portano. Alcuni individui confusi potrebbero chiamare questo calcio.


Una squadra di calcio ha un portiere e 10 giocatori in campo. Ci sono molte formazioni usate nel calcio, che determinano dove dovrebbe essere ogni giocatore (il giocatore ovviamente si muove, ma è la posizione di base).

La formazione più comune è 4-4-2, il che significa che ci sono 4 difensori, 4 centrocampisti e due attaccanti. Altre formazioni sono ("difensori, centrocampisti, attaccanti" o "difensori, centrocampisti, centrocampisti, attaccanti"):

  • 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

La sfida è prendere due input, uno per ciascuna delle due squadre e fornire una panoramica dei giocatori sul campo.

In generale: la maggior parte delle informazioni sul layout dell'arte ASCII si trovano nelle figure (un'immagine dice più di 1000 parole). Solo il modo di posizionare i 10 giocatori sul campo è spiegato in dettaglio:

  • Il portiere e l'area di rigore occupano 3 file di caratteri ASCII
    • Layout e numero di spazi sono riportati nella figura seguente
  • Non c'è riga vuota tra l'area di rigore e i difensori
  • Se ci sono 3 numeri nella formazione (es. 4-4-2, 4-3-3 ecc. Non 4-3-2-1):
    • Non c'è fila vuota tra i difensori e i centrocampisti
    • C'è una riga vuota tra i centrocampisti e gli attaccanti
  • Se ci sono 4 numeri nella formazione (es. 4-3-2-1, 3-3-3-1 ecc. Non 4-4-2):
    • Non esiste una riga vuota tra il difensore e la prima fila di centrocampisti
    • Non esiste una riga vuota tra la prima fila di centrocampisti e la seconda
    • Non esiste una riga vuota tra la seconda fila di centrocampisti e gli attaccanti
  • Non ci sono file vuote tra gli attaccanti e la linea centrale
  • La squadra nella metà superiore è contrassegnata come x, e la squadra nella seconda metà è contrassegnata come o.
  • Ogni fila di giocatori deve essere distribuita sul campo come mostrato nelle figure seguenti. Il numero di spazi è visibile nella figura.

La figura seguente non rappresenta una formazione valida, ma viene utilizzata per illustrare il layout e il numero di spazi richiesti tra ciascun giocatore. L'input per questo sarebbe 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  |     |
+-----------------+ 

Esempi validi:

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

Regole:

  • L'input può essere in qualsiasi formato conveniente, separato nel modo desiderato. Il formato può essere una singola stringa ( 5311), cifre separate da virgola (5,3,1,1 ), ecc.
    • L'input non deve contenere altre informazioni oltre alle due formazioni
  • L'output dovrebbe apparire esattamente come le figure del campione, ma gli spazi finali e le nuove righe sono OK.
  • Puoi presumere che sia stato dato solo un input valido (verranno utilizzate solo le formazioni nell'elenco).
  • Programma o funzione completi

Questo è il codice golf, quindi vince il codice più breve in byte.


1
Il calcio è quello con i bastoncini, giusto?
Mego

No, questo è shuffleboard. Vuoi quello con i pony.
Geobits,

1
No, questo è dressage. Vuoi quello con obiettivi.
Morgan Thrapp,

4
Che cosa! Nessun cerchio di campo medio?
Luis Mendo,

2
@LuisMendo, supponiamo solo che sia una giornata piovosa a Stoke! Il cerchio di campo medio è spesso difficile da trovare = P
Stewie Griffin

Risposte:


1

JavaScript (ES6), 258 262

Funzione anonima, prendendo 2 parametri come array numerici

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

Test

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>


2

Python 2, 401 377 byte

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)

Versione non golfata con ambiente di test qui !

Funzione che accetta due elenchi del formato [difensori, centrocampisti, centrocampisti, attaccanti] mentre il numero di un centrocampista è facoltativo. La squadra X (in alto) viene prima, la squadra O (in basso) seconda.


c'è uno spazio inutile in una delle tue lambda lambda a:r(a), x)^^
Erwan,

@Erwan Grazie, ottima cattura!
Denker,

penso che sia peggio definire t=lambda a:r(a) come lo usi 2 volte
Erwan,

soluzione migliore rimuovi tutte le occorrenze di lambda a:r(a)sostituiscila con solor
Erwan,

@Erwan Grazie, mi mancava anche quello!
Denker,

1

Perl, 360 332 324 byte

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"

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

Abbastanza ungolfed:

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"

@ edc65 È solo il mio esempio di output che è sbagliato: S
andlrc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.