Проілюструйте формування футбольної команди на полі


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-мистецтва можна знайти на малюнках (малюнок містить більше 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 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), тощо.
    • Вхід не повинен містити іншої інформації, крім двох формувань
  • Вихід повинен виглядати точно як зразкові цифри, але пробіли та нові рядки в порядку.
  • Ви можете припустити, що введено лише дійсне введення (використовуватимуться лише формації зі списку).
  • Повна програма або функція

Це код гольфу, тому найкоротший код у байтах виграє.


1
Футбол той із палицями, правда?
Мего

Ні, це шафборд. Ви хочете того, з поні.
Геобіт

1
Ні, це виїзд. Ви хочете того, хто має цілі.
Морган Трапп

4
Що! Немає кола середнього поля?
Луїс Мендо

2
@LuisMendo, просто припустимо, що в Сток дощовий день! Коло середнього поля часто важко знайти = P
Стюі Гріффін

Відповіді:


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 Спасибі, хороший улов!
Денкер

я думаю, що найгірше визначити, t=lambda a:r(a) як ти його використовуєш 2 рази
Ерван

краще рішення видалити всі випадки lambda a:r(a)заміни його простоr
Ерван

@Erwan Спасибі, теж пропустив!
Денкер

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.