Ce défi est basé sur Ajustez votre chaise de Downgoat .
Défi
Vous venez de régler votre nouvelle chaise! Cela vous va parfaitement. Cependant, la roue grince et vous savez que les réparateurs changeront le réglage. Le problème est que vous n'avez pas de règle, vous devrez donc écrire un programme pour le mesurer pour vous.
Les réparateurs ne peuvent attendre que si longtemps. Votre code doit donc être aussi court que possible.
Exemples
O
|
|
| _
| |
|_|_
|
|
O
5,3,2,2,1
O
| _
| |
|__|__
|
|
__|__
OOOOO
3,5,2,3,5
O
| _
|______|______
______|______
OOOOOOOOOOOOO
2,13,1,1,13
Pièces de chaise
La chaise a différents composants:
O <- Headrest
|
| <- Backrest
| _ <- Armrest
| |
|__|__ <- Seat
|
| <- Leg
_|_
OOO <- Wheels
Descriptions détaillées de la chaise
Les parties de la chaise sont:
Appui-tête: Il y aura toujours un appui-tête au-dessus du dossier
O
|
Dossier: Le nombre de |
est la hauteur du dossier
O
|
|
Siège: Le nombre de _
est la largeur du siège , il y a un |
au milieu pour l'accoudoir.
__|__
Accoudoir: Le nombre de |
est la hauteur de l' accoudoir . Celui-ci sera inséré au milieu du siège.
_
|
|
Jambe: Le nombre de |
est la hauteur de la jambe
|
|
Roues: les roues sont centrées sous les jambes. S'ils sont plus d'un, tous sauf la roue centrale seront _
alignés au-dessus d'eux.
_ _
OOO
Production
Étant donné une chaise, vous sortirez diverses variables.
La sortie doit être dans l'ordre suivant:
- Hauteur dossier
- Largeur du siège toujours étrange
- Hauteur de l'accoudoir Toujours inférieure à la hauteur du dossier
- Hauteur de jambe
- Nombre de roues Toujours inférieur ou égal à la largeur du siège et toujours impair
La sortie peut avoir une nouvelle ligne de fin ou être sous forme de tableau / liste s'il s'agit d'une fonction.
Classement
/* Configuration */
var QUESTION_ID = 67522; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 43394; // This should be the user ID of the challenge author.
/* App */
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+(?:[.]\d+)?)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if (OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
});
valid.sort(function(a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function(a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {
lang: a.language,
user: a.user,
size: a.size,
link: a.link
};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function(a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i) {
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body {
text-align: left !important
}
#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;
}
<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>
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque 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 dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Réponses:
Lua, 187 octets
Je pense que je pourrais peut-être jouer au golf un peu plus, mais je pense que c'est bien pour le moment. En outre, si la sortie doit être séparée par des virgules, je peux résoudre ce problème, mais cela répond toujours aux exigences.
De plus, l'entrée est alimentée sur une ligne à la fois. Une fois les roues entrées, appuyez sur Entrée avec une ligne vide pour finaliser la saisie.
Non golfé
(Les positions sont mesurées de haut en bas, donc le `` O '' supérieur est la position 1, et les roues sont la position la plus grande.
#c
) moins la position du siège moins 2, pour compenser les roues et le siège.la source
Groovy, 161 octets !!!
Yay!! Pas en dernier !!
Non golfé:
Tests de programme non golfé:
la source
Pyth,
57545350 octetsPeut probablement être joué au golf plus loin. -3 octets grâce à issacg pour l'astuce de chaîne de caractères unique.
Explication:
la source
\
. Donc"_"
=\_
Perl,
93 + 2 = 9590 + 1 = 9183 + 1 = 84 octetsApparemment, la sortie n'a pas besoin de séparation par des virgules
Invoquer avec
perl -n chair.pl chairInput
(pénalité 1B pour le drapeau).Non golfé:
La version précédente:
Invoquer avec
perl -0n chair.pl < chairInput
Explication:
la source
Python 3,
160158 octetsCe code fonctionne mais uniquement dans les conditions suivantes: 1)
armrest height > 0
sinon le_
comptage se casse et 2)seat width > 1
sinon l'accoudoir bloque le siège de largeur 1 et le_
comptage se casse.la source