Futbol takımı oluşumları bir sahada göstermek


13

Futbol oyuncuların topu tekmelediği değil taşıdığı spordur. Bazı şaşkın kişiler bu futbola diyebilir.


Bir futbol takımının bir kalecisi ve sahada 10 oyuncusu vardır. Futbolda kullanılan, her oyuncunun nerede olması gerektiğini belirten birçok oluşum vardır (oyuncu elbette hareket eder, ancak temel konumdur).

En yaygın formasyon 4-4-2'dir, bu da 4 defans oyuncusu, 4 orta saha oyuncusu ve iki saldırgan olduğu anlamına gelir. Diğer oluşumlar ("savunmacılar, orta saha oyuncuları, saldırganlar" veya "savunucular, orta saha oyuncuları, orta saha oyuncuları, saldırganlar"):

  • 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

Zorluk, iki takımın her biri için bir tane olmak ve sahadaki oyunculara genel bir bakış sağlamak için iki girdi almaktır.

Genel olarak: ASCII sanatının düzeni hakkında çoğu bilgi şekillerde bulunabilir (bir resim 1000'den fazla kelime söylüyor). Sadece 10 oyuncuyu sahaya yerleştirmenin yolu ayrıntılı olarak açıklanmaktadır:

  • Kaleci ve penaltı bölgesi 3 sıra ASCII karakteri kaplıyor
    • Yerleşim düzeni ve alan sayısı aşağıdaki şekilde bulunabilir
  • Ceza alanı ve savunucular arasında boş bir sıra yok
  • Formasyonda 3 sayı varsa (örneğin 4-4-2, 4-3-3 vb. 4-3-2-1 değil):
    • Savunmacılar ve orta saha oyuncuları arasında boş bir sıra yok
    • Orta saha oyuncuları ve saldırganlar arasında boş bir sıra var
  • Formasyonda 4 sayı varsa (örneğin 4-3-2-1, 3-3-3-1 vb. 4-4-2 değil):
    • Defans oyuncusu ile orta saha oyuncularının ilk sırası arasında boş bir sıra yok
    • Orta sahaların ilk sırası ile ikinci sıra arasında boş bir sıra yok
    • Orta saha oyuncularının ikinci sırası ile saldırganlar arasında boş bir sıra yok
  • Saldırganlar ve orta çizgi arasında boş satır yok
  • Üst yarıdaki xtakım olarak, ikinci yarıdaki takım olarak işaretlenir o.
  • Her oyuncu sırası aşağıdaki şekillerde gösterildiği gibi sahaya dağıtılacaktır. Boşlukların sayısı şekilde görülebilir.

Aşağıdaki şekil geçerli bir formasyonu temsil etmez, ancak her oyuncu arasındaki düzen ve gerekli alan sayısını göstermek için kullanılır. Bunun için girdi 2 3 4 5ve 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  |     |
+-----------------+ 

Geçerli örnekler:

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

Kurallar:

  • Giriş, istediğiniz gibi ayrılmış uygun herhangi bir biçimde olabilir. Biçim tek bir dize ( 5311), virgülle ayrılmış basamaklar ( 5,3,1,1) vb. Olabilir .
    • Girdi iki formasyondan başka bilgi içermemelidir
  • Çıktı tam olarak örnek şekiller gibi görünmelidir, ancak sondaki boşluklar ve satırsonları sorun yaratmaz.
  • Yalnızca geçerli girdinin verildiğini varsayabilirsiniz (yalnızca listedeki oluşumlar kullanılır).
  • Tam program veya işlev

Bu kod golf, yani bayt en kısa kod kazanmak.


1
Futbol sopalarla olan, değil mi?
Mego

Hayır, bu shuffleboard. Midilli olanı istiyorsun.
Geobits

1
Hayır, bu terbiyesi. Hedefleri olanı istiyorsun.
Morgan Thrapp

4
Ne! Orta alan çemberi yok mu?
Luis Mendo

2
@LuisMendo, Stoke'de yağmurlu bir gün olduğunu varsayalım! Orta saha çemberini bulmak genellikle zordur = P
Stewie Griffin

Yanıtlar:


1

JavaScript (ES6), 258 262

Anonim işlev, sayısal parametreler olarak 2 parametre alma

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

Ölçek

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 bayt

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)

Burada test ortamı ile unngolfed versiyonu !

Bir orta saha numarası isteğe bağlı iken [savunucular, orta saha oyuncuları, orta saha oyuncuları, saldırganlar] biçiminde iki liste alan işlev. X takımı (üstte) önce gelir, O takımı (altta) ikinci olur.


lambdalarınızdan birinde işe yaramaz bir alan var lambda a:r(a), x)^^
Erwan

@Erwan Teşekkürler, iyi yakala!
Denker

t=lambda a:r(a) 2 kez kullandığınızı tanımlamak daha kötü olduğunu düşünüyorum
Erwan

daha iyi çözüm lambda a:r(a)yerine sadece tüm oluşumunu kaldırmakr
Erwan

@Erwan Teşekkürler, bunu da özledim!
Denker

1

Perl, 360 332 324 bayt

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"

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

Biraz soluksuz:

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 Yanlış olan benim örnek
çıktım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.