Напишите полную программу или функцию, которая принимает положительное целое число в N
качестве входных данных через STDIN / командную строку / ARGV или аргументы функции и печатает двойной ASCII-узел, соответствующий N
значению STDOUT.
Двойной узел ASCII выглядит так:
__ __ __ __ __ __
/ \/ \/ \/ \/ \/ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\ \/\ \/\ \/\ \/\ \/\ \/
/\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\__/\__/\__/\__/\__/\__/
Выше для N = 6
Вот еще несколько двойных узлов для других значений N
:
Если N = 1
выходной двойной узел выглядит так:
__
/ \
| /\ |
| \/ |
\ \/
/\ \
| /\ |
| \/ |
\__/
Ибо N = 2
его
__ __
/ \/ \
| /\/ /\ |
| \/ /\/ |
\ \/\ \/
/\ \/\ \
| /\/ /\ |
| \/ /\/ |
\__/\__/
Ибо N = 3
его
__ __ __
/ \/ \/ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\ \/\ \/\ \/
/\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\__/\__/\__/
и аналогичным образом, шаблон продолжается и любое большее значение N
.
Детали :
- На входе всегда положительное целое число больше, чем
0
.
- Трейлинг новой строки не является обязательным
- В каждой строке либо не должно быть завершающих пробелов, либо должно быть достаточно конечных пробелов, чтобы длина каждой строки была равна
4*N + 2
.
- Никогда не должно быть начальных пробелов, которые не являются частью указанного шаблона.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Таблица лидеров
Я превращаю это в серию художественных испытаний ASCII и тем самым добавляю таблицу лидеров для этой серии (фрагмент от Мартина). Чтобы убедиться, что ваши ответы отображаются, начните каждый ответ с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N - размер вашей заявки. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
/* Configuration */
var QUESTION_IDs = [50484, 50521, 50625, 51123, 51222]; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!.FjwQBrX2KXuFkv6p2lChi_RjzM19";
/* App */
var answers = [], page = 1, currentQ = -1;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_IDs.join(";") + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function getAnswers() {
$.ajax({
url: answersUrl(page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
if (data.has_more) getAnswers();
else process();
}
});
}
getAnswers();
var SIZE_REG = /\d+(?=[^\d&]*(?:<(?:s>((?!>).)*<\/s>|((?!>).)+>)[^\d&]*)*$)/;
var NUMBER_REG = /\d+/;
var LANGUAGE_REG = /^#*\s*([^\n,]+)(?=,)/;//
function shouldHaveHeading(a) {
var pass = false;
var lines = a.body_markdown.split("\n");
try {
pass |= /^#/.test(a.body_markdown);
pass |= ["-", "="]
.indexOf(lines[1][0]) > -1;
pass &= LANGUAGE_REG.test(a.body_markdown);
} catch (ex) {}
return pass;
}
function shouldHaveScore(a) {
var pass = false;
try {
pass |= SIZE_REG.test(a.body_markdown.split("\n")[0]);
} catch (ex) {}
if (!pass) console.log(a);
return pass;
}
function getAuthorName(a) {
return a.owner.display_name;
}
function getAuthorId(a) {
return a.owner.user_id;
}
function process() {
answers = answers.filter(shouldHaveScore)
.filter(shouldHaveHeading);
answers.sort(function (a, b) {
var aB = +(a.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0],
bB = +(b.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0];
return aB - bB
});
var users = {};
answers.forEach(function (a) {
var headline = a.body_markdown.split("\n")[0];
var question = QUESTION_IDs.indexOf(a.question_id);
var size = parseInt((headline.match(SIZE_REG)||[0])[0]);
var language = headline.match(LANGUAGE_REG)[1];
var user = getAuthorName(a);
var userId = getAuthorId(a);
if (!users[userId]) users[userId] = {name: user, nAnswer: 0, answers: []};
if (!users[userId].answers[question]) {
users[userId].answers[question] = {size: Infinity};
users[userId].nAnswer++;
}
if (users[userId].answers[question].size > size) {
users[userId].answers[question] = {size: size, link: a.share_link}
}
});
var sortedUsers = [];
for (var userId in users)
if (users.hasOwnProperty(userId)) {
var user = users[userId];
user.score = 0;
user.completedAll = true;
for (var i = 0; i < QUESTION_IDs.length; ++i) {
if (user.answers[i])
user.score += user.answers[i].size;
else
user.completedAll = false;
}
sortedUsers.push(user);
}
sortedUsers.sort(function (a, b) {
if (a.nAnswer > b.nAnswer) return -1;
if (b.nAnswer > a.nAnswer) return 1;
return a.score - b.score;
});
var place = 1;
for (var i = 0; i < sortedUsers.length; ++i) {
var user = sortedUsers[i];
var row = '<tr><td>'+ place++ +'.</td><td>'+user.name+'</td>';
for (var j = 0; j < QUESTION_IDs.length; ++j) {
var answer = user.answers[j];
if (answer)
row += '<td><a href="'+answer.link+'">'+answer.size+'</a></td>';
else
row += '<td class="missing"></td>';
}
row += '<td></td>';
if (user.completedAll)
row += '<td class="total">'+user.score+'</td>';
else
row += '<td class="total missing">'+user.score+'</td>';
row += '</tr>';
$("#users").append(row);
}
}
body { text-align: left !important}
#leaderboard {
width: 500px;
}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
td.total {
font-weight: bold;
text-align: right;
}
td.missing {
background: #bbbbbb;
}
<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="leaderboard">
<h2>Leaderboard</h2>
<p>
Missing scores are shown as grey cells. A grey total indicates that the user has not participated in all challenges and is not eligible for the overall victory yet.
</p>
<table class="_user-list">
<thead>
<tr><td></td><td>User</td>
<td><a href="https://codegolf.stackexchange.com/q/50484/31414">#1</a></td>
<td><a href="https://codegolf.stackexchange.com/q/50521/31414">#2</a></td>
<td><a href="https://codegolf.stackexchange.com/q/50625/31414">#3</a></td>
<td><a href="https://codegolf.stackexchange.com/q/51123/31414">#4</a></td>
<td><a href="https://codegolf.stackexchange.com/q/51222/31414">#5</a></td>
<td></td><td>Total</td>
</tr>
</thead>
<tbody id="users">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><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>
Серия пока что
1. Двойной узел
2. Поток Змей
3. Китайские святыни
4. Знаки Зодиака
5. Случайные алмазные мозаики
Ответы:
CJam, 55 байтов
Я получил довольно сильный удар по ботанику ... во всяком случае, я наконец-то получил 55 байтов ISO 8859-1:
или эта альтернатива :
Первоначально я пытался сделать это в простом ASCII, но получил только 58 байт :
и снова альтернатива :
Объяснение:
Идея состоит в том, чтобы кодировать уникальные части (левый край, правый край и средний рисунок) удобным способом, повторять среднюю часть по мере необходимости и соединять их вместе. Код оказался во многом похожим на ответ Денниса; Я не пытался копировать его, но я пробовал много разных подходов (включая использование большего количества симметрий и повторений), и это то, что работало лучше всего.
Я соединил левый и правый края так:
Средний шаблон имеет 4 столбца, но они повторяются N-0,5 раза, то есть один повтор разрезается пополам. Для удобства я использовал этот шаблон:
и удалил первую половину первого повторения.
Поэтому я соединил части и закодировал их в транспонированном виде, так как с ними проще работать. Первая и третья программы кодируют эту строку:
(без перевода строки), что является транспонированием средних + ребер. Вторая и четвертая программы («альтернативы») кодируют эту строку:
опять же, без перевода строки, и это транспонирование ребер + середина.
Вот как работает эта общая часть кода:
После этого реализация немного отличается. В первой и третьей программе мы имеем:
Во второй и четвертой (альтернативных) программах имеем:
источник
1>W<
короче. Оказывается, мне нужно было только повернуть массив перед его кодированием и использовать2>
...CJam,
1039283696657 байтовПопробуйте онлайн в интерпретаторе CJam .
идея
Шаблон становится намного более очевидным, как только мы транспонируем строки со столбцами (дополняемые справа пробелами).
Например , для входа 3 это дает:
Первые два и два последних ряда особенные, но остальные повторяют один и тот же шаблон снова и снова.
Таким образом, для ввода N все, что нам нужно сделать, это повторить
N раз заменить первый ряд на
последний ряд с
и, наконец, транспонировать строки со столбцами.
Код
источник
Javascript ( ES7 Draft ),
169163160158 байтРедактировать: -6 с помощью строки шаблона, чтобы исключить некоторое повторение из строки шаблона.
Редактировать: -3 путем переключения с
slice(0,-2)
наslice(2)
, переставляя строку шаблона.Отредактируйте: -2, просматривая
b
вместоa
и сокращаяa
строку до 4 по модулю.комментарии:
источник
.split(0)
с('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\')
.0
его, вы увидите8
.``
и чем${...}
конкретно занимаются?${}
оценивается как выражение javascript.Perl,
134129Принимает параметр командной строки:
источник
JavaScript ( ES6 ), 165
166Элементы узла:
Ungolfed
Golfed
источник
0
к нему, и вы получите 4-х ногого паука.С ++,
1530639479Это выглядело как забавный вызов, я немного отклонился от краткого описания.
Я не уверен, как измерить размер моего приложения в байтах, но я постараюсь выяснить это и обновить свой ответ.
Мое приложение может быть меньше, но оно имеет циклы как по x, так и по y, и я вроде как: D
источник
Питон 2,
156151147141139edit 1: отредактировано для использования input () вместо функции.
edit 2: использовал str.join и добавил в var c для удаления некоторых лишних символов.
редактировать 3: удалены некоторые ненужные escape-последовательности строк.
редактировать 4: использовал ~ -n вместо a = n-1
Это было очень весело программировать, мой первый гольф-код!
сохраните его во внешнем текстовом редакторе как n.py, чтобы удалить последний символ новой строки, чтобы уменьшить размер файла на 1 байт, запустите модуль и введите свой номер.
источник
input ()
считается нормальным при чтении из STDIN.a=n-1
чтобы сэкономить на записи*(n-1)
дважды, но вы делаете*~-n
.Python 2,
139133129 байтЭтот просто строит и печатает построчно.
Вот код в негольфированной форме:
Изменить: я изменил язык на Python 2, чтобы быть совместимым с моим ответом для # 3 (и это также экономит еще 6 байтов)
источник
w=(3*' ||')[i] -> w=' |'[i&2]
и' '+s[1:-1]+' ' -> ' %s '%s[1:-1]
работаю (первая - строка с двумя пробелами, затем труба, но SE' ||'[i%4]
, но это еще короче (также с двумя пробелами).C 159 байтов
С пробелами и некоторыми другими улучшениями читабельности:
Это в первую очередь на основе шаблонов. Шаблон
t
содержит все 9 возможных столбцов выходных данных, что означает, что он кодирует 9 * 9 = 81 символ или 80 без завершающего символа новой строки.Поскольку в шаблоне всего 6 различных символов (включая символы новой строки), я упаковал их пары в один шаблонный символ, что означает, что шаблон может храниться в 40 символах. Тогда существует 6 * 6 = 36 возможных пар символов, которые закодированы как символы ASCII 48–73. Перевод обратно к исходному символу дается небольшой справочной таблицей
m
.Остальная логика в основном состоит в том, чтобы повторять времена шаблона
n
, что означает возврат назад на 4 символа в шаблоне при правильном выделении начальной и конечной частей каждой строки.источник
PHP 5.5.3,
488, 466источник
=
и.=
.Пролог (SWI), 285 байт
(С пробелами):
Я попробовал несколько способов нарезки строк, но ни один из них не побил этот метод наивных столбцов.
источник
JavaScript (ES6),
158154148137 байтРедактировать: Сохранено 11 байтов благодаря @ Bálint.
источник
/(..)(.{4})/g
составляет 13 байтов, так же, как/(..)(....)/g
...Java,
339330 байтВ моем первом решении было так много «статических» ключевых слов, что было короче сделать методы и атрибуты нестатичными и запустить код в конструкторе.
источник
PowerShell,
228207181133 байтаНапоминание - PowerShell не ожидает автоматически на stdin. Вы должны что-то трубить, например,
3|%{...}
источник
SmileBASIC, 149 байт
Каждая строка содержит шаблон,
AACCBBDD
который расширяется до формыAABB(CCBB)*DD
.CCBB
Часть повторяется N раз, затем удаляются первые 2 символа. (Убрать символы с начала было короче, чем с конца)источник