To wyzwanie opiera się na Downgoat's Adjust your chair .
Wyzwanie
Właśnie dostosowałeś swoje nowe krzesło! Idealnie do ciebie pasuje. Jednak koło jest skrzypiące i wiesz, że osoby naprawiające zmienią regulację. Problem polega na tym, że nie masz linijki, więc będziesz musiał napisać program do jej zmierzenia.
Pracownicy naprawy mogą tylko czekać tak długo. Więc twój kod musi być jak najkrótszy.
Przykłady
O
|
|
| _
| |
|_|_
|
|
O
5,3,2,2,1
O
| _
| |
|__|__
|
|
__|__
OOOOO
3,5,2,3,5
O
| _
|______|______
______|______
OOOOOOOOOOOOO
2,13,1,1,13
Części do krzeseł
Krzesło ma różne elementy:
O <- Headrest
|
| <- Backrest
| _ <- Armrest
| |
|__|__ <- Seat
|
| <- Leg
_|_
OOO <- Wheels
Szczegółowe opisy krzeseł
Częściami krzesła są:
Zagłówek: Zawsze będzie jeden zagłówek powyżej oparcia
O
|
Oparcie: Liczba |
to wysokość oparcia
O
|
|
Siedzisko: Liczba _
to szerokość siedziska , |
na środku jest podłokietnik.
__|__
Podłokietnik: liczba |
to Wysokość Podłokietnika . Zostanie on wstawiony na środku siedzenia.
_
|
|
Noga: liczba |
to wysokość nogi
|
|
Koła: koła są wyśrodkowane poniżej nóg. Jeśli jest ich więcej niż jeden, wszystkie koła oprócz środkowego będą miały _
linię nad nimi.
_ _
OOO
Wynik
Biorąc pod uwagę krzesło, będziesz generować różne zmienne.
Dane wyjściowe powinny być w następującej kolejności:
- Wysokość oparcia
- Szerokość siedziska zawsze nieparzysta
- Wysokość podłokietnika Zawsze mniejsza niż wysokość oparcia
- Wysokość nóg
- Liczba kół Zawsze mniejsza lub równa szerokości siedziska i Zawsze nieparzysta
Dane wyjściowe mogą mieć końcowy znak nowej linii lub być w formie tablicy / listy, jeśli jest to funkcja.
Tabela liderów
/* 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>
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Odpowiedzi:
Lua, 187 bajtów
Myślę, że mógłbym jeszcze trochę zagrać w golfa, ale myślę, że w tej chwili jest to dobre. Ponadto, jeśli dane wyjściowe muszą być oddzielone przecinkami, mogę to naprawić, ale nadal spełnia to wymagania metinks.
Ponadto dane wejściowe są podawane w jednym wierszu na raz. Po wprowadzeniu kół naciśnij klawisz Enter z pustą linią, aby zakończyć wprowadzanie.
Nie golfił
(Pozycje są mierzone od góry do dołu, więc górna „O” jest pozycją 1, a koła są największą pozycją.
#c
) minus pozycja siedzenia minus 2, aby zrekompensować koła i siedzisko.źródło
Groovy, 161 bajtów !!!
Tak !! Nie ostatni !!
Nie golfowany:
Testy programu bez golfa:
źródło
Pyth,
57545350 bajtówPrawdopodobnie można dalej grać w golfa. -3 bajty dzięki issacgowi za lewy ciąg znaków.
Wyjaśnienie:
źródło
\
. Więc"_"
=\_
Perl,
93 + 2 = 9590 + 1 = 9183 + 1 = 84 bajtówNajwyraźniej dane wyjściowe nie wymagają oddzielania przecinków
Wywołaj z
perl -n chair.pl chairInput
(kara 1B za flagę).Nie golfowany:
Poprzednia wersja:
Wywołaj z
perl -0n chair.pl < chairInput
Wyjaśnienie:
źródło
Python 3,
160158 bajtówTen kod działa, ale tylko pod następującymi warunkami: 1) w
armrest height > 0
przeciwnym razie_
licznik się psuje i 2) wseat width > 1
przeciwnym razie podłokietnik blokuje siedzisko o szerokości 1 i_
licznik się psuje.źródło