Ваша задача состоит в том, чтобы отобразить нижнюю букву "E" в форме ASCII, учитывая пять входов.
Примеры:
Ввод: 7,2,+,|,-
(Примечание: вам не обязательно следовать этому точному формату ввода, и если вы его не используете, вы должны объяснить, как работает ваш собственный формат ввода)
Объяснение:
7
общая ширина, включая символы левого и правого края.
2
Количество вертикальных символов.
+
Символ, который должен отображаться по краям.
|
Символ, который должен отображаться вертикально между краями.
-
Символ, который должен отображаться горизонтально.
Вывод приведенного выше примера:
+-----+
|
|
+-----+
|
|
+-----+
Другие примеры:
Входные данные: 7,2,@,|,-
Выход:
@-----@
|
|
@-----@
|
|
@-----@
Входные данные: 7,2,+,|,#
Выход:
+#####+
|
|
+#####+
|
|
+#####+
Входные данные: 8,3,+,|,#
Выход:
+######+
|
|
|
+######+
|
|
|
+######+
Входные данные: 8,3,+,@,#
Выход:
+######+
@
@
@
+######+
@
@
@
+######+
Входные данные: 9,4,^,$,!
Выход:
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^
Обман и стандартные лазейки не допускаются.
Ваш код не должен ничего печатать в STDERR.
Ваш код может принимать любую кодировку символов, которую вы выбираете в качестве ввода, но любая выбранная кодировка символов должна, как минимум, поддерживать все 95 печатных символов ASCII.
Самый короткий код, в байтах, который успешно завершает эту задачу, является выигрышным кодом.
Leaderboard
var QUESTION_ID=92138,OVERRIDE_USER=58717;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
E
в качестве входных данных, и сделатьE
сE
с?Ответы:
05AB1E ,
1614 байтовобъяснение
Попробуйте онлайн!
Сохранено 4 байта благодаря Аднану.
источник
©
регистр: p?Í×s.øU×S»X»D»Xr»
.Python,
535155 байт+4 байта благодаря @nimi
анонимная лямбда-функция, чтобы вызвать ее, напишите
f=
перед ней. Пример:альтернатива, 53 байта
старая версия со специальным случаем без ввода,
696563 байтаможно изменить требования mid-challenge ...
источник
2
в вашем примере) - это общая длина линии, включая углы, поэтому правильный ввод для вашей фигурыf(4,1 ...)
.C
167161159 байтовДа.
Попробуйте это на Ideone, с некоторыми тестами
источник
Рубин,
544542 байтаЭто анонимная функция, которая принимает разные части входных данных как отдельные параметры и возвращает результат в виде полной строки.
Например,
печать
источник
Javascript (ES6), 64 байта
пример
источник
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }
когда запустить в строке..repeat()
V , 18 байт
Попробуйте онлайн!
источник
R, 80 байт
Довольно повторяющееся:
Ungolfed:
источник
Пайк,
1615 байтПопробуй это здесь!
источник
Pyth, 19 байт
Программа, которая принимает разделенный новой строкой ввод в STDIN углового символа, количества горизонтальных символов, горизонтального символа, количества вертикальных символов и вертикального символа и печатает результат.
Попробуйте онлайн
Как это устроено
источник
MATLAB,
95 92 91 8581 байтФункция MATLAB 'E'. (редактировать: не работает в Октаве)
И безглым
Функция должна быть вызвана так:
Который вернется:
Возможно, это можно немного упростить, я буду продолжать над этим работать. Мне не нравится иметь полное объявление функции для получения ввода, поэтому посмотрим, смогу ли я улучшить это.
Сохранено 3 байта за счет упрощения генерации первой строки, чтобы сначала сделать строку без углов, а затем добавить углы, поскольку это сокращает число раз, когда требуется индексация.
Еще один байт сохранен, начиная с первого угла.
Еще 6 байтов, заменив
repmat(a,3,1)
вызов на[a;a;a]
.Сохранено 4 байта при использовании
a
без специальной инициализации (это уже объявлено в объявлении функции) - спасибо @LuisMendoисточник
a=[c a c]
там, но удалил его, чтобы уменьшить его, так как обычно вы не можете индексировать доступ к несуществующей переменной и создавать ее в процессе. Я забыл, что это была функция, поэтомуa
она уже объявлена в объявлении функции как возвращаемое значение. Спасибо :)Perl, 40 + 1 (
-n
) = 41 байтСпасибо @Ton Hospel за сохранение 14 байтов и разрешение программе работать с входом больше 10.
Нужно
-n
так же, как-E
(или-M5.010
) бежать. Например :источник
< 10
, помещая/(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3
в файл (так как он использует$'
) и вызов сperl -M5.010 -n prog.pl <<< '^!S\n4\n9'
(использованием реальных перевода строки) , который считается, что 48 байт (2 экстра гандикап, поскольку его нельзя сочетать с-e
)>10
. Отличная работа с форматом ввода, спасибо.perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'
составляет 41 байт (не более$'
), а также избавляет от ложного конечного перевода строкиДьялог АПЛ ,
3129 байтЗапросы для горизонтального символа, ширины, символа соединения, высоты, вертикального символа - в этом порядке.
⎕⍴⍞
символ ввода-горизонтальный и повторное значение ширины ввода ( ⍵ ниже)⍞{
...}
символ ввода-соединения, который будет ⍺ в функции ...∊⍺⍵⍺
сплющить [[соединение], [горизонтали], [соединение]]⊂
инкапсулировать, чтобы он мог быть частью списка(
...),
готовиться ...h←⎕
ввод высота⍞⍴⍨
введите вертикальный символ и повторите это много раз↑
сделать список строк в таблицу символов⊂
инкапсулировать (чтобы можно было повторить в целом)3/
повтори это три раза⍪/
соединить три части по вертикали(это тоже их инкапсулирует, поэтому нам нужно ...)
⊃
удалить инкапсуляциюh↓
отбросить первые ч (строки)Попробуй APL онлайн!
источник
C, 130 байтов
Использование:
Выход
источник
define
с запятой в s и добавление ее в качествеf(C,O,P,S,_,D,o){W;E;W;E;W;}
сохранения байта.C #, 108 байт
Анонимная функция, которая генерирует каждую горизонтальную и вертикальную линию и создает окончательный результат.
Неуправляемая функция:
Полная программа с тестовыми примерами:
источник
MATL , 15 байт
Спасибо @muddyfish за исправление
Попробуйте онлайн!
объяснение
Содержимое стека после каждого шага указано для ясности, используя первый пример в задании.
источник
Bash + coreutils, 105 байт
Предполагая, что файл, в котором он хранится, называется
A.sh
, использование будет:Они
--
необходимы, на случай, если один из входных символов окажется a-
, и,printf
очевидно, не очень хорошо обрабатывает дефисы в начале строки без двойных тире.объяснение
Предполагая, что вход
5 2 + * |
...$3
printf -- "$4%.0s" $(seq $1)
$3printf "\n$5%.0s" $(seq $2)
Создайте первый горизонтальный сегмент и вертикальный сегмент все вместе. Это приведет к:
printf -- "$3
printf -- "$4%.0s" $(seq $1)
$3printf "\n$5%.0s" $(seq $2)
%.0s\n" {1..3}Повторите ранее созданную часть
3
раз. Это теперь приводит к:printf -- "$3
printf -- "$4%.0s" $(seq $1)
$3printf "\n$5%.0s" $(seq $2)
%.0s\n" {1..3}|sed -n 1,$(($2*2+3))pНаконец, передайте предыдущий вывод, чтобы
sed
избавиться от последних 2-х линейных сегментов, выводя только первые<Vertical Segment Length>*2+3
строкиE
. Мы наконец получаем то,E
что хотим:источник
PowerShell v2 +,
6059 байтПринимает ввод как отдельные аргументы командной строки. Создает горизонтальную строку, сохраняет ее
$x
для последующего использования, затем формирует в массив с помощью оператора запятой,
. Выполняет конкатенацию массива (т.е. добавление элементов в конец)$d
сформулированного в массив$b
элементов. Это, в свою очередь, формулируется в виде массива из двух элементов с другим оператором запятой и остается на конвейере. Затем горизонталь$x
остается на конвейере. Злоупотребляет форматированием по умолчаниюWrite-Output
для вставки новой строки между элементами.пример
источник
Python 3, 60 байт
Функция
Прецедент
источник
Brainf * ck, 147 байт
Принимает ввод из стандартного ввода в качестве первых 5 введенных символов. Первые два имеют 48 вычтенных из их кода ASCII, поэтому 0-9 ведут себя, как и ожидалось. Для чисел> 9 добавьте 48 к числу и используйте соответствующий символ. Остальные три персонажа соответствуют заданию.
Я уверен, что это не оптимальное решение, но жизнь слишком коротка для игры в гольф.
С комментариями:
Пример выполнения:
источник
PHP, 97 байт
нет петли, только встроенные.
Беги с
php -r '<code>' <parameters>
.источник
Java 7,
205129 байт-76 байт благодаря анонимному незнакомцу.
PS: не ходите редактировать посты других людей в следующий раз. Если у вас есть что-то для игры в гольф, пожалуйста, оставьте это в качестве комментария, или если он использует совершенно другой подход, вы можете сделать свой собственный ответ. Тем не менее, спасибо за игру в гольф все эти байты, кто бы вы ни были ..
Ungolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
Ракетка 124 байта
Более читаемая форма:
Тестирование:
источник
C ++, 121 байт
Ungolfed:
В C ++ не разрешается объявлять функции без типа, как в C. Но макросы, которые ведут себя так же, как функция, вполне возможны. Также обратите внимание, что версия без заглавных букв не скомпилируется, пока вы не добавите «\» к каждой строке макроса, кроме последней. Вы можете сохранить два дополнительных байта, удалив {}, но тогда вы не сможете использовать макрос дважды подряд.
Использование:
Выход:
Попробуйте онлайн
источник
CJam , 23 байта
Попробуйте онлайн!
Входные данные в указанном порядке, но должны быть разделены пробелами, а не запятыми. Некоторая трудность заключается в получении правильного порядка ввода для операции соединения
*
CJam ; для сравнения перестановка ввода может сэкономить 4 байта .Если входные данные дублированы,
A B C D E
программа работает примерно так:источник
Lua (5,2), 144 байта
Попробуйте онлайн! (Кодирование Земли)
Это должно вывести что-то подобное прямо сейчас:
Собственный вклад:
7 2 + l @
Вы можете изменить входные данные в параметрах проекта-> компиляции, и там изменить значения, каждое значение как в примере, но не через запятую, а через пробел.
источник
QBIC, 44 байта
объяснение
источник
PHP, 94 байта
Формат ввода массива в том же порядке, что и предложенная строка
источник
,"\n"
вместо."\n"
, вы можете бросить парены для троичного.for($h++;$i<=2*$h;)
и$i++%$h
сохраняет еще один байт.$v-1
дает только 3 горизонтальных символа для[5,2,+,|,-]
. Количество горизонтальных символов, не включая символы левого и правого края