Diese Herausforderung basiert auf Downgoat's Adjust your Chair .
Herausforderung
Sie haben gerade Ihren neuen Stuhl angepasst! Es passt perfekt zu dir. Das Rad ist jedoch quietschend und Sie wissen, dass die Reparaturmitarbeiter die Einstellung ändern werden. Das Problem ist, dass Sie kein Lineal haben, also müssen Sie ein Programm schreiben, um es für Sie zu messen.
Die Reparaturleute können nur so lange warten. Ihr Code muss also so kurz wie möglich sein.
Beispiele
O
|
|
| _
| |
|_|_
|
|
O
5,3,2,2,1
O
| _
| |
|__|__
|
|
__|__
OOOOO
3,5,2,3,5
O
| _
|______|______
______|______
OOOOOOOOOOOOO
2,13,1,1,13
Stuhlteile
Der Stuhl hat verschiedene Komponenten:
O <- Headrest
|
| <- Backrest
| _ <- Armrest
| |
|__|__ <- Seat
|
| <- Leg
_|_
OOO <- Wheels
Detaillierte Stuhlbeschreibungen
Die Teile des Stuhls sind:
Kopfstütze: Über der Rückenlehne befindet sich immer eine Kopfstütze
O
|
Rückenlehne: Die Anzahl |
ist die Höhe der Rückenlehne
O
|
|
Sitz: Die Anzahl _
ist die Sitzbreite , |
in der Mitte befindet sich eine für die Armlehne.
__|__
Armlehne: Die Anzahl |
ist die Höhe der Armlehne . Dies wird in der Mitte des Sitzes eingefügt.
_
|
|
Bein: Die Anzahl |
ist die Beinhöhe
|
|
Räder: Die Räder sind unter den Beinen zentriert. Wenn sie mehr als eins sind, befinden sich alle außer dem Mittelrad _
in der Linie über ihnen.
_ _
OOO
Ausgabe
Bei einem Stuhl geben Sie verschiedene Variablen aus.
Die Ausgabe sollte in der folgenden Reihenfolge erfolgen:
- Rückenlehnenhöhe
- Sitzbreite immer ungerade
- Armlehnenhöhe Immer kleiner als die Rückenlehnenhöhe
- Beinhöhe
- Radanzahl Immer kleiner oder gleich der Sitzbreite und immer ungerade
Die Ausgabe kann einen nachgestellten Zeilenumbruch haben oder in einer Array- / Listenform vorliegen, wenn es sich um eine Funktion handelt.
Bestenliste
/* 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>
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie dort mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder Sie die Strafen für Dolmetscherflaggen separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Sprachnamen auch zu einem Link machen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Antworten:
Lua, 187 Bytes
Ich denke, ich könnte vielleicht noch mehr Golf spielen, aber ich denke, das ist im Moment gut. Auch wenn die Ausgabe durch Kommas getrennt werden muss, kann ich das beheben, aber dies entspricht immer noch den Anforderungen.
Außerdem wird der Eingang jeweils in einer Zeile eingespeist. Drücken Sie nach der Eingabe der Räder die Eingabetaste mit einer leeren Zeile, um die Eingabe abzuschließen.
Ungolfed
(Die Positionen werden von oben nach unten gemessen, sodass das obere 'O' Position 1 ist und die Räder die größte Position sind.
#c
) abzüglich der Position des Sitzes minus 2, um die Räder und den Sitz auszugleichen.quelle
Groovy, 161 Bytes !!!
Yay!! Nicht im letzten !!
Ungolfed:
Tests des ungolfed Programms:
quelle
Pyth,
57545350 BytesKann wahrscheinlich weiter Golf gespielt werden. -3 Bytes dank issacg für den Trick mit einer einzelnen Zeichenfolge.
Erläuterung:
quelle
\
. Also"_"
=\_
Perl,
93 + 2 = 9590 + 1 = 9183 + 1 = 84 BytesAnscheinend muss die Ausgabe nicht durch Kommas getrennt werden
Mit
perl -n chair.pl chairInput
(1B Strafe für die Flagge) aufrufen .Ungolfed:
Vorherige Version:
Rufen Sie mit auf
perl -0n chair.pl < chairInput
Erläuterung:
quelle
Python 3,
160158 BytesDieser Code funktioniert jedoch nur unter den folgenden Bedingungen: 1)
armrest height > 0
Andernfalls_
bricht die Zählung und 2)seat width > 1
Andernfalls blockiert die Armlehne den Sitz mit der Breite 1 und die_
Zählung bricht.quelle