Ilustrasi formasi tim sepak bola di lapangan

13

Sepak bola adalah olahraga di mana pemain menendang bola, bukan membawanya. Beberapa orang yang bingung mungkin menyebut ini sepakbola.


Sebuah tim sepakbola memiliki satu kiper, dan 10 pemain keluar di lapangan. Ada banyak formasi yang digunakan dalam sepak bola, yang menentukan di mana setiap pemain seharusnya (pemain tentu saja bergerak, tapi itu posisi dasar).

Formasi yang paling umum adalah 4-4-2, yang berarti ada 4 pemain bertahan, 4 gelandang tengah dan dua penyerang. Formasi lain adalah ("pembela, gelandang, penyerang" atau "pembela, gelandang, gelandang, penyerang"):

  • 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

Tantangannya adalah untuk mengambil dua input, satu untuk masing-masing dari dua tim dan menampilkan gambaran umum para pemain di lapangan.

Secara umum: Sebagian besar informasi tentang tata letak ASCII-art dapat ditemukan dalam gambar (gambar mengatakan lebih dari 1000 kata). Hanya cara untuk menempatkan 10 pemain di lapangan dijelaskan secara rinci:

  • Penjaga dan area penalti membutuhkan 3 baris karakter ASCII
    • Tata letak dan jumlah spasi dapat ditemukan pada gambar di bawah ini
  • Tidak ada baris kosong antara area penalti dan pembela
  • Jika ada 3 angka dalam formasi (mis. 4-4-2, 4-3-3 dll. Tidak 4-3-2-1):
    • Tidak ada baris kosong antara bek dan gelandang
    • Ada satu baris kosong antara gelandang dan penyerang
  • Jika ada 4 angka dalam formasi (mis. 4-3-2-1, 3-3-3-1 dll. Tidak 4-4-2):
    • Tidak ada baris kosong antara bek dan baris pertama dari gelandang
    • Tidak ada baris kosong antara baris pertama dari gelandang tengah dan yang kedua
    • Tidak ada baris kosong antara baris kedua gelandang dan penyerang
  • Tidak ada baris kosong antara penyerang dan garis tengah
  • Tim di babak atas ditandai sebagai x, dan tim di babak kedua ditandai sebagai o.
  • Setiap baris pemain harus didistribusikan di lapangan seperti yang ditunjukkan pada gambar di bawah ini. Jumlah spasi dapat dilihat pada gambar.

Gambar berikut tidak mewakili formasi yang valid, tetapi digunakan untuk menggambarkan tata letak dan jumlah ruang yang dibutuhkan antara masing-masing pemain. Input untuk ini adalah 2 3 4 5dan 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  |     |
+-----------------+ 

Contoh yang valid:

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

Aturan:

  • Input dapat pada format apa pun yang mudah, dipisahkan sesuai keinginan Anda. Format dapat berupa string tunggal ( 5311), digit yang dipisahkan koma ( 5,3,1,1), dll.
    • Masukan tidak boleh mengandung informasi lain selain dua formasi
  • Outputnya harus persis seperti angka sampel, tetapi spasi tambahan dan baris baru OK.
  • Anda dapat mengasumsikan hanya input yang valid yang diberikan (hanya formasi dalam daftar yang akan digunakan).
  • Program atau fungsi penuh

Ini adalah kode golf, jadi kode terpendek dalam byte menang.

Stewie Griffin
sumber
1
Sepak bola dengan tongkat, kan?
Mego
Tidak, itu shuffleboard. Anda ingin yang punya kuda poni.
Geobits
1
Tidak, itu dandanan. Anda ingin yang memiliki tujuan.
Morgan Thrapp
4
Apa! Tidak ada lingkaran bidang tengah?
Luis Mendo
2
@LuisMendo, anggap saja ini hari hujan di Stoke! Lingkaran bidang tengah sering sulit ditemukan = P
Stewie Griffin

Jawaban:

1

JavaScript (ES6), 258 262

Fungsi anonim, mengambil 2 parameter sebagai array numerik

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

Uji

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

Versi tidak dikoleksi dengan lingkungan pengujian di sini !

Fungsi yang mengambil dua daftar format [pembela, gelandang, gelandang, penyerang] sedangkan nomor satu gelandang adalah opsional. Tim X (atas) datang pertama, tim O (bawah) kedua.

Denker
sumber
ada ruang yang tidak berguna di salah satu lambda Anda lambda a:r(a), x)^^
Erwan
@ Erwan Terima kasih, tangkapan yang bagus!
Denker
saya pikir itu yang terburuk untuk didefinisikan t=lambda a:r(a) saat Anda menggunakannya 2 kali
Erwan
solusi yang lebih baik menghapus semua kemunculan lambda a:r(a)menggantinya dengan hanyar
Erwan
@Erwan Terima kasih, merindukan itu juga!
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"

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

Agak tidak terserang:

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
sumber
@ edc65 Ini hanya contoh keluaran saya yang salah: S
andlrc