Представьте, как я готовлю этот вызов с моими передовыми навыками рисования.
Фон
Войны с Стикманом произошли очень давно, когда доминирующий вид Земли состоял только из палочек. Историки сожалеют о том, что тогда не было художников или камер, мы могли бы использовать некоторые фотографии той войны в современных учебниках истории. Вот где ваши способности кодирования становятся полезными. Stickmen очень легко нарисованы, и Историкам удалось найти некоторые данные о том, сколько stickmen участвовало в войнах ». Теперь вам предстоит воссоздать образ момента прямо перед началом войны!
Вот отважные клюшки, участвовавшие в войне:
O / | / | \ / | | / \ Фехтовальщик О.А. / | \ | | | / \ | копьеносец , .» *. 'O * '\ | /. , | * './ \ *. маг О / | \ | / \ Сельчанин О / | \ / \ Младенец
вход
Получите через стандартный ввод или эквивалентное изображение каждого крупье, который появился на каждой стороне поля битвы. Например, если два Swordmen боролись с правой стороны и два копьеносцев на левой стороне, ваш вход может быть {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
или "WW", "SS"
.
Выход
Представление каждого храброго человечка на поле битвы, согласно правилам ниже. Это может быть показано на стандартный вывод или сохранено в файл, что бы ни качало вашу лодку.
правила
- С левой стороны будут все стикмены первого массива / строки / объекта, полученные вашей программой.
- Эти клюшки должны выглядеть точно так же, как показано выше по этому вопросу.
- Порядок левой армии должен быть
Infants Villagers Mages Swordsmen Spearmen
. - Армия правой стороны будет вести себя точно так же, но с отражением персонажей и порядка.
- Каждый крупье будет разделен 1 пробелом.
- Каждый класс будет разделен 3 пробелами.
- Армии будут разделены на 8 мест.
- Так как stickmen не летают, вы должны рисовать землю, используя дефис-минусы
-
. - Земля должна заканчиваться в той же колонне, где заканчивается последний крупье правой армии.
пример
Давайте предположим, что моя программа ожидает два массива длиной 5, и каждое значение в массиве представляет по порядку Infants Villagers Mages Swordsmen Spearmen
.
Ввод: [1,1,2,3,1] [0,0,1,1,1]
, , , .» *. .» *. . * '. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. '\ | /. | / | \ / | / | \ / | / | \ / / | \ | | / | \ \ / | \ | , \ | / ' / | \ | , | * | * | | | | | | | | | | | | * | , / \ / \ './ \ *. './ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Заключительные соображения
Обратите внимание, что применяются стандартные лазейки и что маг полностью асимметричен только потому, что.
Результатом ответа, получившего наибольшее количество голосов, станет «изображение обложки» этой задачи. Самый короткий ответ к концу месяца (31.08.2014) будет выбран победителем.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Требуется цитата
источник
IVMMWWWS SWM
находиться в пределах «всего, что вам помогает»?Ответы:
JavaScript (E6) 336
344 356 369 424 478 522 570Редактировать 6 Последнее редактирование было с ошибкой. Ошибка исправлена и укорочена. Это все, что я надеюсь.
Править 5 Наконец-то нашел способ избавиться от умножения на 23 - надоело мне с самого начала. Плюс еще одно изменение ввода (кричать @William, когда его слишком много). Теперь функция ожидает один параметр массива, содержащий 2 подмассива. Без этого изменения это 349 - все еще улучшение
Редактировать 4 Побрить еще несколько байтов и немного изменить формат ввода. В новом формате ввода отсутствующий класс представляется как пустой элемент массива. Так что
D([1,,2,3,1],[,3,1,1,2])
вместоD([1,0,2,3,1],[0,3,1,1,2])
. Я думаю, что это все еще подчиняется правилам.Редактировать 3 Гольф больше. Никаких изменений в алгоритме, но злоупотребление множеством array.map и локальных функций, чтобы избежать циклов.
Правка 2 сжатия строк, правильный путь ...
Редактировать Добавлено сжатие строк, много работы и мало что получилось. Теперь зеркальные стикмены генерируются из шаблона, а не сохраняются.
Сделал несколько попыток, сначала работает.
Быть в гольфе.Н.Б.Колмогоров - дело еще предстоит решить.Тест в консоли FireFox.
Измените 'return' с помощьюAdd 'alert (...)', чтобы иметь оператор вывода (хотя и не полезный вообще)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Выход
Гольф-код
Код (редактировать 2)
Ungolfed код (1-я версия)
источник
Python
362353Редактирование: удаление одного цикла for и использование оператора exec позволило сэкономить 9 байт.
Входные данные:
Выход:
источник
С
418414Пример ввода:
Пример вывода:
Гольф-код (разрывы строк предназначены только для удобства чтения; это должна быть одна длинная строка кода):
Максимальная ширина поля битвы составляет 999 (я мог бы сохранить 2 символа, ограничив его до 99). Я использовал управляющую структуру из 1 байта на каждый выходной символ (не пробел), рисуя цифры снизу вверх.
В структуре управления 5 смещений.
Некоторые другие неясные биты:
f%27%5
переводит символыVWSMI
в цифры0, 1, 2, 3, 4
t*3%12%5+4
вычисляет ширину крупье типаt
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
учитывает левую / правую асимметриюargc=3
для генерации флагов направления рисования1
и-1
Ungolfed код:
источник
*a
с запятой после запятой? Это избавляет от предупреждения и имеет такое же количество байтов.f=*a
в качестве условия остановки; Компилятор может пожаловаться, но я это имею ввиду. Я не могу удалить его, потому что вfor
синтаксисе -loop должно быть две точки с запятой.Хаскелл, 556
Формат ввода
Порядок: [Младенец, Житель деревни, Маг, Мечник, Копейщик], [Копейщик, Мечник, Маг, Житель деревни, Младенец]
Пример вывода
Код
Ungolfed
источник
Haskell (
736733720 байт)Вызов с ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . -1 обозначает разделитель для двух массивов. Я надеюсь, что все в порядке.
Что ж, это мой первый тест по коду в гольф и первый раз, когда я использовал haskell для реального приложения после того, как изучил его в этом семестре в моем университете. Вероятно, даже близко не быть лучшим или самым коротким решением, но я получал удовольствие, создавая его, и это было хорошее упражнение :) Критика и отзывы очень ценятся.
Гольф это из этого:
источник
Хаскелл, 450
Крутой вызов! Я мог бы сыграть в гольф немного больше. По сути, я храню столбец с цифрами, чтобы я мог легко добавлять их друг к другу, а затем переворачивать весь массив
String
с помощью Haskelltranspose
.Формат ввода
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Вот пример из ОП:
И вот мое любимое изображение печально известного ритуального детоубийства во время второй эры!
источник
Python (
612,522,460, 440)Каждая «линия» обрезается от отступов вправо, и это добавляется обратно при восстановлении.
Я предварительно поменял стикмены во внутренней кодировке, потому что это избавило меня от необходимости менять их по отдельности при рендеринге в коде.
Образец прогона:
Код:
источник
Python (476)
Отличный решатель от моего предыдущего; дольше, но более функционально.
Код:
источник