피치에 축구 팀 형성을 설명


13

축구는 선수가 공을 차는 것이 아니라 공을 차는 스포츠입니다. 일부 혼란스러운 사람들은이 축구를 부를 수도 있습니다.


풋볼 팀은 골키퍼 1 명과 경기장에 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

아니요, 셔플 보드입니다. 당신은 조랑말을 가진 사람을 원합니다.
Geobits

1
아뇨. 목표가있는 것을 원합니다.
Morgan Thrapp

4
뭐! 미들 필드 서클이 없습니까?
Luis Mendo

2
@LuisMendo, 스토크에서 비오는 날이라고 가정하십시오! 미들 필드 서클은 종종 찾기 어렵습니다 = P
Stewie Griffin

답변:


1

자바 스크립트 (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

파이썬 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 a:r(a), x)^^
Erwan

@ Erwan 감사합니다, 잘 잡아!
Denker

t=lambda a:r(a) 2 번 사용할 때 정의하는 것이 최악이라고 생각합니다.
Erwan

더 나은 솔루션 lambda a:r(a)교체로 발생하는 모든 것을 제거하십시오r
Erwan

@ Erwan 감사합니다, 너무 그리워!
Denker

1

펄, 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.