Este desafío se basa en Ajustar su silla de Downgoat .
Desafío
¡Acabas de ajustar tu nueva silla! Te queda perfectamente. Sin embargo, la rueda está chirriando y usted sabe que las personas de reparación cambiarán el ajuste. El problema es que no tienes una regla, así que tendrás que escribir un programa para medirlo por ti.
El personal de reparación solo puede esperar tanto tiempo. Por lo tanto, su código debe ser lo más corto posible.
Ejemplos
O
|
|
| _
| |
|_|_
|
|
O
5,3,2,2,1
O
| _
| |
|__|__
|
|
__|__
OOOOO
3,5,2,3,5
O
| _
|______|______
______|______
OOOOOOOOOOOOO
2,13,1,1,13
Partes de la silla
La silla tiene varios componentes:
O <- Headrest
|
| <- Backrest
| _ <- Armrest
| |
|__|__ <- Seat
|
| <- Leg
_|_
OOO <- Wheels
Descripciones detalladas de la silla
Las partes de la silla son:
Reposacabezas: siempre habrá un reposacabezas sobre el respaldo
O
|
Respaldo: el número |
es la altura del respaldo
O
|
|
Asiento: el número _
es el ancho del asiento , hay un |
en el medio para el reposabrazos.
__|__
Reposabrazos: el número |
es la altura del reposabrazos . Esto se insertará en el medio del asiento.
_
|
|
Pierna: el número |
es la altura de la pierna
|
|
Ruedas: las ruedas están centradas debajo de las patas. Si son más de uno, todos menos la rueda central tendrán _
en la línea sobre ellos.
_ _
OOO
Salida
Dada una silla, generará varias variables.
La salida debe estar en el siguiente orden:
- Altura del respaldo
- Ancho del asiento siempre impar
- Altura del reposabrazos Siempre menor que la altura del respaldo
- Altura de la pierna
- Recuento de ruedas Siempre menor o igual que el ancho del asiento y Siempre impar
La salida puede tener una nueva línea final o estar en forma de matriz / lista si es una función.
Tabla de clasificación
/* 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>
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Respuestas:
Lua, 187 bytes
Creo que podría jugar un poco más, pero creo que esto es bueno en este momento. Además, si la salida necesita estar separada por comas, puedo arreglar eso, pero esto aún cumple con los requisitos.
Además, la entrada se alimenta en una línea a la vez. Después de ingresar las ruedas, presione Intro con una línea vacía para finalizar la entrada.
Sin golf
(Las posiciones se miden de arriba a abajo, por lo que la 'O' superior es la posición 1 y las ruedas son la posición más grande.
#c
) menos la posición del asiento menos 2, para compensar las ruedas y el asiento.fuente
Groovy, 161 bytes !!!
¡¡Hurra!! ¡No en el último!
Sin golf:
Pruebas de programa sin golf:
fuente
Pyth,
57545350 bytesProbablemente se pueda jugar más al golf. -3 bytes gracias a issacg por el truco de la cadena de un solo carácter.
Explicación:
fuente
\
. So"_"
=\_
Perl,
93 + 2 = 9590 + 1 = 9183 + 1 = 84 bytesAparentemente, la salida no necesita separar comas
Invocar con
perl -n chair.pl chairInput
(1B de penalización por la bandera).Sin golf:
Versión previa:
Invocar con
perl -0n chair.pl < chairInput
Explicación:
fuente
Python 3,
160158 bytesEste código funciona pero solo en las siguientes condiciones: 1) de lo
armrest height > 0
contrario, el_
recuento se rompe y 2) de loseat width > 1
contrario, el reposabrazos bloquea el ancho del asiento y el_
recuento se rompe.fuente