Ecrivez un programme complet ou une fonction prenant un entier positif en N
tant qu'entrée via STDIN / ligne de commande / ARGV ou une argumentation de fonction et affiche un double nœud ASCII correspondant à la N
destination de STDOUT.
Le double noeud ASCII ressemble à ceci:
__ __ __ __ __ __
/ \/ \/ \/ \/ \/ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\ \/\ \/\ \/\ \/\ \/\ \/
/\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\__/\__/\__/\__/\__/\__/
Ce qui précède est pour N = 6
Voici quelques autres doubles noeuds pour d'autres valeurs de N
:
Si N = 1
, le double noeud de sortie ressemble à:
__
/ \
| /\ |
| \/ |
\ \/
/\ \
| /\ |
| \/ |
\__/
Pour N = 2
, ses
__ __
/ \/ \
| /\/ /\ |
| \/ /\/ |
\ \/\ \/
/\ \/\ \
| /\/ /\ |
| \/ /\/ |
\__/\__/
Pour N = 3
, ses
__ __ __
/ \/ \/ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\ \/\ \/\ \/
/\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\__/\__/\__/
et de même, le motif continue et toute valeur plus grande de N
.
Détails :
- L'entrée est toujours un entier positif supérieur à
0
.
- Le retour à la ligne est facultatif
- Il devrait y avoir soit aucun espace de fin dans chaque ligne, soit suffisamment d'espaces de fin pour que la longueur de chaque ligne soit égale à
4*N + 2
.
- Il ne devrait jamais y avoir d'espace principal qui ne fasse pas partie du modèle spécifié.
C'est du code-golf , donc le code le plus court en octets gagne.
Classement des séries
Je convertis cela en une série de défis artistiques ASCII et ajoute ainsi un tableau des leaders pour la série (extrait de Martin). Pour vous assurer que vos réponses apparaissent, commencez chaque réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# 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>
Série jusqu'ici
1. Double noeud
2. couleuvre
3. sanctuaires chinois
4. Les signes du zodiaque
5. Tuile de diamant aléatoire
Réponses:
CJam, 55 octets
Je me suis fait très mal balloter par ça ... enfin, j'ai finalement trouvé 55 octets d'ISO 8859-1:
ou cette alternative :
Au départ, j'ai essayé de le faire en ASCII simple, mais je ne l'ai réduit qu'à 58 octets :
et encore une alternative :
Explication:
L'idée est de coder les parties uniques (bord gauche, bord droit et motif central) de manière pratique, de répéter la partie centrale si nécessaire et de les assembler. Le code finit par être similaire à bien des égards à la réponse de Dennis; Je n'ai pas essayé de le copier, mais j'ai essayé plusieurs approches différentes (y compris l'exploitation de plus de symétries et de répétitions) et c'est ce qui a fonctionné le mieux.
Je mets les bords gauche et droit ensemble comme ceci:
Le motif du milieu a 4 colonnes, mais elles sont répétées N-0,5 fois, c’est-à-dire qu’une répétition est coupée en deux. Pour plus de commodité, j'ai utilisé ce modèle:
et enlevé la première moitié de la première répétition.
J'ai donc réuni les parties et les ai encodées sous forme transposée, car il est plus facile de travailler avec elles de cette façon. Le premier et le troisième programme encodent cette chaîne:
(sans nouvelles lignes), qui est la transposition des bords moyen +. Les deuxième et quatrième programmes (les "alternatives") codent cette chaîne:
encore une fois, sans nouvelles lignes, et ceci est la transposition d'arêtes + milieu.
Voici comment cette partie commune du code fonctionne:
Après cela, la mise en œuvre diffère légèrement. Dans le premier et le troisième programme, nous avons:
Dans les deuxième et quatrième programmes (alternatifs), nous avons:
la source
1>W<
plus court. Il s'avère que je n'avais qu'à faire pivoter le tableau avant de l'encoder et de l'utiliser2>
...CJam,
1039283696657 octetsEssayez-le en ligne dans l' interprète CJam .
Idée
Le motif devient beaucoup plus évident une fois que nous avons transposé des lignes avec des colonnes (complétées à droite avec des espaces).
Pour l'entrée 3 , par exemple, ceci donne:
Les deux premières et les deux dernières lignes sont spéciales, mais les autres répètent encore et encore le même motif.
Ainsi, pour l’entrée N , tout ce que nous avons à faire est de répéter
N fois, remplacez la première ligne par
la dernière rangée avec
et, enfin, transposer des lignes avec des colonnes.
Code
la source
Javascript ( ES7 Draft ),
169163160158 octetsÉditez: -6 en utilisant une chaîne de modèle pour éliminer certaines répétitions de la chaîne de modèle.
Éditez: -3 en passant de
slice(0,-2)
àslice(2)
en réorganisant la chaîne de modèle.Edit: -2 en boucle à la
b
place dea
et en réduisant laa
chaîne à 4 avec un modulo.Commenté:
la source
.split(0)
avec('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\')
.0
, vous verrez un8
.``
et${...}
exactement?${}
est évalué comme une expression javascript.Perl,
134129Prend un paramètre de ligne de commande:
la source
JavaScript ( ES6 ), 165
166Éléments de noeud:
Ungolfed
Golfé
la source
0
et vous obtiendrez une araignée à 4 pattes.C ++,
1530639479Cela ressemblait à un défi amusant, mais je me suis un peu écarté du mémoire.
Je ne sais pas comment mesurer la taille de mon application en octets, mais je vais essayer de le comprendre et de mettre à jour ma réponse.
Mon application pourrait être plus petite mais elle tourne en boucle dans les domaines x et y, et j'aime un peu comme ça: D
la source
Python 2,
156151147141139edit 1: édité pour utiliser input () au lieu d'une fonction.
edit 2: utilisé str.join et ajouté à var c pour supprimer certains caractères redondants.
edit 3: suppression de certaines séquences d'échappement de chaînes inutiles.
edit 4: utilisé ~ -n au lieu de a = n-1
C'était très amusant de programmer mon premier code golf!
enregistrez-le dans un éditeur de texte externe sous n.py afin de supprimer le dernier caractère de nouvelle ligne afin de réduire la taille du fichier de 1 octet, exécutez le module et entrez votre numéro.
la source
input ()
Est généralement considéré comme correct lors de la lecture de STDIN.a=n-1
pour économiser sur l'écriture*(n-1)
deux fois, mais c'est le cas*~-n
.Python 2,
139133129 octetsCelui-ci construit et imprime ligne par ligne.
Voici le code sous forme non-golfée:
Edit: j'ai changé le langage en python 2, pour être compatible avec ma réponse pour # 3 (et il enregistre également 6 octets de plus)
la source
w=(3*' ||')[i] -> w=' |'[i&2]
et' '+s[1:-1]+' ' -> ' %s '%s[1:-1]
travaille (le premier est une chaîne avec deux espaces puis un tuyau, mais SE joue le jeu)' ||'[i%4]
, mais c'est encore plus court (également avec deux espaces).C, 159 octets
Avec des espaces et d’autres améliorations de la lisibilité:
Ceci est principalement basé sur des modèles. Le modèle
t
contient les 9 colonnes possibles de la sortie, ce qui signifie qu'il code 9 * 9 = 81 caractères, ou 80 sans la nouvelle ligne.Comme il n’existe que 6 caractères différents dans le modèle (y compris les caractères de nouvelle ligne), j’en ai emballé des paires dans un seul caractère de modèle, ce qui signifie que le modèle peut être stocké dans 40 caractères. Il y a alors 6 * 6 = 36 paires de caractères possibles, codées en tant que caractères ASCII, de 48 à 73. La conversion en caractère original est donnée par la petite table de correspondance
m
.Le reste de la logique consiste principalement à répéter les
n
temps de motif , ce qui signifie revenir en arrière de 4 caractères dans le modèle, tout en émettant correctement les parties de début et de fin de chaque ligne.la source
PHP 5.5.3,
488, 466la source
=
et.=
.Prolog (SWI), 285 octets
(Avec des espaces):
J'ai essayé quelques façons de couper les cordes, mais aucune ne semblait battre cette méthode des colonnes naïves.
la source
JavaScript (ES6),
158154148137 octetsEdit: 11 octets enregistrés grâce à @ Bálint.
la source
/(..)(.{4})/g
c'est 13 octets, la même chose que/(..)(....)/g
...Java,
339330 octetsMa première solution contenait tellement de mots clés "statiques" qu'il était plus court de rendre les méthodes et les attributs non statiques et d'exécuter le code dans le constructeur.
la source
PowerShell,
228207181133 octetsRappel - PowerShell n'attend pas automatiquement stdin. Vous devez diriger quelque chose, par exemple
3|%{...}
la source
SmileBASIC, 149 octets
Chaque chaîne contient le motif à
AACCBBDD
développer.AABB(CCBB)*DD
LaCCBB
partie est répétée N fois, puis les 2 premiers caractères sont supprimés. (C'était plus court d'enlever des caractères du début que de la fin)la source