说明球场上的足球队编队


13

足球是运动员踢球而不携带球的运动。一些困惑的人可能会称其为足球。


一支足球队有一名守门员,场上有10名球员。足球中使用了许多形式,规定了每个球员应该在哪里(球员当然会走动,但这是基本位置)。

最常见的阵型是4-4-2,这意味着有4个后卫,4个中场和2个进攻者。其他阵型是(“后卫,中场,进攻者”或“后卫,中场,中场,进攻者”):

  • 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艺术作品布局的大多数信息可以在图中找到(一张图片说超过1000个单词)。仅详细说明了将10个玩家放置在场上的方法:

  • 守门员和罚球区占用3行ASCII字符
    • 布局和数量可以在下图中找到
  • 禁区与防守方之间没有空白行
  • 如果编队中有3个数字(例如4-4-2、4-3-3等,不是4-3-2-1):
    • 防守者和中场之间没有空档
    • 中场和进攻者之间只有一排空
  • 如果编队中有4个数字(例如4-3-2-1、3-3-3-1等,不是4-4-2):
    • 后卫与中场第一排之间没有空白行
    • 第一排中场和第二排中场之间没有空行
    • 第二排中场和进攻者之间没有空排
  • 攻击者和中心线之间没有空行
  • 上半部分x的团队标记为,下半部分的团队标记为o
  • 如下图所示,每排球员应在球场上分布。在图中可以看到空格的数量。

下图不代表有效的阵型,但用于说明每个玩家之间的布局和所需空间的数量。输入为2 3 4 55 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)等。
    • 输入内容中不应包含这两种形式的任何其他信息
  • 输出应与示例数字完全相同,但行尾和换行符可以。
  • 您可以假设仅给出了有效输入(将仅使用列表中的形式)。
  • 完整的程序或功能

这是代码高尔夫,所以最短的代码以字节为单位。


1
足球是一支棍棒,对吧?
Mego 2016年

不,那是沙狐球。你想要一个小马。
Geobits,2016年

1
不,那是盛装舞步。您想要一个有目标的人。
Morgan Thrapp '16

4
什么!没有中场圈吗?
路易斯·门多

2
@LuisMendo,假设斯托克正在下雨天!中场圈通常很难找到= P
Stewie Griffin

Answers:


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)

Ungolfed版本的测试环境在这里

该函数采用两种格式的列表[后卫,中场,中场,攻击者],而一个中场号码是可选的。X团队(顶部)排名第一,O团队(底部)排名第二。


您的lambda之一中有无用的空间lambda a:r(a), x)^^
Erwan 2016年

@Erwan谢谢,很好!
Denker

我认为定义t=lambda a:r(a) 两次使用是最糟糕的
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.