แสดงการก่อตัวของทีมฟุตบอลในสนาม


13

ฟุตบอลเป็นกีฬาที่ผู้เล่นเตะบอลไม่ใช่พกมัน บางคนสับสนอาจเรียกว่าฟุตบอลนี้


ทีมฟุตบอลมีผู้รักษาประตูหนึ่งคนและผู้เล่น 10 คนในสนาม มีหลายรูปแบบที่ใช้ในฟุตบอลที่กำหนดว่าผู้เล่นแต่ละคนควรจะเป็น (ผู้เล่นแน่นอนย้ายไปรอบ ๆ แต่มันเป็นตำแหน่งฐาน)

การก่อตัวที่พบมากที่สุดคือ 4-4-2 ซึ่งหมายความว่ามี 4 ป้อมปราการกองกลาง 4 คนและผู้โจมตีสองคน การก่อตัวอื่น ๆ ("กองหลังกองกลางผู้บุกรุก" หรือ "ผู้พิทักษ์กองหน้ากองกลางกองหน้าผู้บุกรุก"):

  • 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

ความท้าทายคือการรับอินพุตสองชุดหนึ่งชุดสำหรับแต่ละทีมและส่งออกภาพรวมของผู้เล่นในสนาม

โดยทั่วไป: ข้อมูลส่วนใหญ่เกี่ยวกับเลย์เอาต์ของ ASCII-art นั้นสามารถพบได้ในรูปภาพ (รูปภาพมีความยาวมากกว่า 1,000 คำ) รายละเอียดวิธีการวางผู้เล่น 10 คนบนสนามเท่านั้น:

  • ผู้รักษาและเขตโทษใช้อักขระ ASCII 3 แถว
    • รูปแบบและจำนวนช่องว่างสามารถดูได้ในรูปด้านล่าง
  • ไม่มีแถวว่างระหว่างเขตโทษและป้อมปราการ
  • หากมีตัวเลข 3 ตัวในรูปแบบ (เช่น 4-4-2, 4-3-3 เป็นต้นไม่ใช่ 4-3-2-1):
    • ไม่มีแถวว่างระหว่างฝ่ายและกองกลาง
    • มีแถวว่างหนึ่งแถวระหว่างกองกลางและผู้โจมตี
  • หากมีตัวเลข 4 ตัวในรูปแบบ (เช่น 4-3-2-1, 3-3-3-1 และอื่น ๆ ไม่ใช่ 4-4-2):
    • ไม่มีแถวว่างระหว่างกองหลังและแถวแรกของมิดฟิลด์
    • ไม่มีแถวว่างระหว่างแถวแรกของ midfielders และที่สอง
    • ไม่มีแถวว่างระหว่างแถวที่สองของมิดฟิลด์และผู้โจมตี
  • ไม่มีแถวว่างระหว่างผู้โจมตีและสายกลาง
  • ทีมครึ่งบนจะทำเครื่องหมายเป็นและทีมงานในช่วงครึ่งปีหลังจะมีการทำเครื่องหมายว่าเป็นxo
  • ผู้เล่นแต่ละแถวจะได้รับการแจกจ่ายในสนามแข่งขันตามที่แสดงในรูปด้านล่าง จำนวนช่องว่างสามารถเห็นได้ในรูป

รูปต่อไปนี้ไม่ได้เป็นตัวแทนของรูปแบบที่ถูกต้อง แต่ใช้เพื่อแสดงเค้าโครงและจำนวนช่องว่างที่ต้องการระหว่างผู้เล่นแต่ละคน อินพุตสำหรับสิ่งนี้จะเป็น2 3 4 5และ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  |     |
+-----------------+ 

ตัวอย่างที่ถูกต้อง:

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

กฎ:

  • อินพุตสามารถอยู่ในรูปแบบที่สะดวกแยกจากกันได้ตามต้องการ รูปแบบสามารถเป็นสตริงเดี่ยว ( 5311), ตัวเลขคั่นด้วยเครื่องหมายจุลภาค ( 5,3,1,1) ฯลฯ
    • ข้อมูลที่ป้อนไม่ควรมีข้อมูลอื่นใดนอกเหนือจากสองสูตรนี้
  • ผลลัพธ์ควรมีลักษณะตรงกับตัวเลขตัวอย่างทั้งหมด แต่ช่องว่างต่อท้ายและบรรทัดใหม่นั้นโอเค
  • คุณสามารถสันนิษฐานได้ว่ามีการป้อนข้อมูลที่ถูกต้องเท่านั้น (จะมีการใช้ formations ในรายการเท่านั้น)
  • โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ

นี่คือรหัสกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์ชนะ


1
ฟุตบอลเป็นหนึ่งเดียวกับไม้ใช่มั้ย
Mego

ไม่นั่นคือบอร์ดสุ่ม คุณต้องการหนึ่งที่มีม้า
Geobits

1
ไม่ว่าเป็นวิธีการ คุณต้องการหนึ่งที่มีเป้าหมาย
Morgan Thrapp

4
อะไร! ไม่มีวงกลมกลางสนาม?
Luis Mendo

2
@ LuisMendo แค่คิดว่ามันเป็นวันที่ฝนตกในสโต๊ค! วงกลมกลางสนามมักจะหายาก = P
Stewie Griffin

คำตอบ:


1

JavaScript (ES6), 258 262

ฟังก์ชั่นไม่ระบุชื่อโดยรับพารามิเตอร์ 2 ตัวเป็นอาร์เรย์ตัวเลข

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

ทดสอบ

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 ไบต์

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)

เวอร์ชันที่ไม่น่าทึ่งพร้อมสภาพแวดล้อมการทดสอบที่นี่ !

ฟังก์ชั่นที่รับสองรูปแบบของรูปแบบ [ผู้พิทักษ์กองกลางกองกลางผู้บุกรุก] ในขณะที่หมายเลขหนึ่งของกองกลางเป็นตัวเลือก ทีม X (บนสุด) มาก่อนทีม O (ล่างสุด) วินาที


มีพื้นที่ที่ไร้ประโยชน์ในแลมบ์ดาของคุณlambda a:r(a), x)^^
Erwan

@ Erwan ขอบคุณจับได้ดี!
Denker

ฉันคิดว่ามันเป็นสิ่งที่แย่ที่สุดที่จะให้คำจำกัดความ t=lambda a:r(a) เมื่อคุณใช้มัน 2 ครั้ง
Erwan

ทางออกที่ดีกว่าลบการเกิดขึ้นทั้งหมดlambda a:r(a)แทนที่เพียงr
Erwan

@Erwan ขอบคุณพลาดเช่นกัน!
Denker

1

Perl, 360 332 324 ไบต์

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"

ต้องการ-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

ค่อนข้างอวดดี:

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 เป็นเพียงตัวอย่างผลลัพธ์ของฉันที่ผิด: S
andlrc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.