Fußballmannschaftsformationen auf einem Spielfeld veranschaulichen

13

Fußball ist der Sport, bei dem die Spieler den Ball treten und nicht tragen. Einige verwirrte Personen könnten diesen Fußball nennen.


Eine Fußballmannschaft hat einen Torhüter und 10 Spieler auf dem Spielfeld. Im Fußball gibt es viele Formationen , die bestimmen, wo jeder Spieler sein soll (der Spieler bewegt sich natürlich, aber es ist die Grundposition).

Die häufigste Formation ist 4-4-2, dh es gibt 4 Verteidiger, 4 Mittelfeldspieler und zwei Angreifer. Andere Formationen sind ("Verteidiger, Mittelfeldspieler, Angreifer" oder "Verteidiger, Mittelfeldspieler, Mittelfeldspieler, Angreifer"):

  • 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

Die Herausforderung besteht darin, zwei Eingaben für jedes der beiden Teams vorzunehmen und eine Übersicht über die Spieler auf dem Spielfeld auszugeben.

Allgemein: Die meisten Informationen zum Layout der ASCII-Kunst finden Sie in den Abbildungen (ein Bild sagt mehr als 1000 Worte). Nur der Weg, um die 10 Spieler auf dem Spielfeld zu platzieren, wird im Detail erklärt:

  • Der Torwart und der Strafraum belegen 3 Zeilen mit ASCII-Zeichen
    • Anordnung und Anzahl der Plätze sind in der folgenden Abbildung dargestellt
  • Zwischen dem Strafraum und den Verteidigern gibt es keine leere Reihe
  • Wenn die Formation 3 Zahlen enthält (zB 4-4-2, 4-3-3 usw. Nicht 4-3-2-1):
    • Es gibt keine leere Reihe zwischen den Verteidigern und den Mittelfeldspielern
    • Es gibt eine leere Reihe zwischen den Mittelfeldspielern und den Angreifern
  • Wenn die Formation 4 Zahlen enthält (z. B. 4-3-2-1, 3-3-3-1 usw., nicht 4-4-2):
    • Es gibt keine leere Reihe zwischen dem Verteidiger und der ersten Reihe der Mittelfeldspieler
    • Zwischen der ersten und der zweiten Reihe der Mittelfeldspieler befindet sich keine leere Reihe
    • Es gibt keine leere Reihe zwischen der zweiten Reihe der Mittelfeldspieler und den Angreifern
  • Es gibt keine leeren Reihen zwischen den Angreifern und der Mittellinie
  • Die Mannschaft in der oberen Hälfte ist markiert als xund die Mannschaft in der zweiten Hälfte ist markiert als o.
  • Jede Reihe von Spielern wird wie in den Abbildungen unten gezeigt auf dem Spielfeld verteilt. Die Anzahl der Leerzeichen ist in der Abbildung zu sehen.

Die folgende Abbildung stellt keine gültige Formation dar, sondern dient zur Veranschaulichung des Layouts und der Anzahl der erforderlichen Abstände zwischen den Spielern. Der Input dafür wäre 2 3 4 5und 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  |     |
+-----------------+ 

Gültige Beispiele:

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

Regeln:

  • Die Eingabe kann in jedem beliebigen Format erfolgen, jedoch nach Belieben getrennt. Das Format kann eine einzelne Zeichenfolge ( 5311), durch Kommas getrennte Ziffern ( 5,3,1,1) usw. sein.
    • Die Eingabe sollte keine anderen Informationen als die beiden Formationen enthalten
  • Die Ausgabe sollte genau so aussehen wie die Beispielzahlen, aber nachgestellte Leerzeichen und Zeilenumbrüche sind in Ordnung.
  • Sie können davon ausgehen, dass nur gültige Eingaben vorliegen (nur Formationen in der Liste werden verwendet).
  • Volles Programm oder Funktion

Das ist Code Golf, also gewinnt der kürzeste Code in Bytes.

Stewie Griffin
quelle
1
Fußball ist derjenige mit den Stöcken, oder?
Mego
Nein, das ist Shuffleboard. Du willst den mit den Ponys.
Geobits
1
Nein, das ist Dressur. Sie wollen den mit den Zielen.
Morgan Thrapp
4
Was! Kein Mittelfeldkreis?
Luis Mendo
2
@ LuisMendo, nimm einfach an, es ist ein regnerischer Tag in Stoke! Der Mittelfeldkreis ist oft schwer zu finden = P
Stewie Griffin

Antworten:

1

JavaScript (ES6), 258 262

Anonyme Funktion, die 2 Parameter als numerische Arrays verwendet

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

Prüfung

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

Ungolfed-Version mit Testumgebung hier !

Funktion, die zwei Listen des Formats [Verteidiger, Mittelfeldspieler, Mittelfeldspieler, Angreifer] annimmt, während die eine Mittelfeldspielernummer optional ist. Team X (oben) steht an erster Stelle, Team O (unten) an zweiter Stelle.

Denker
quelle
in einem lambda ist ein nutzloser platz lambda a:r(a), x)^^
erwan
@ Erwan Danke, guter Fang!
Denker
Ich denke, es ist am schlimmsten zu definieren, t=lambda a:r(a) wie Sie es 2-mal verwenden
Erwan
Bessere Lösung entfernen Sie alle Vorkommen von lambda a:r(a)ersetzen Sie es durch nurr
Erwan
@Erwan Danke, habe das auch verpasst!
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"

Benötigt -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

Etwas 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"
undlrc
quelle
@ edc65 Es ist nur meine Beispielausgabe, die falsch ist: S
andlrc