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


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
Футбол с палками, верно?
Мего

Нет, это шаффлборд Вы хотите тот с пони.
Geobits

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 раза
Erwan

лучшее решение удалить все случаи 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.