Schreiben Sie ein vollständiges Programm oder eine Funktion, die eine positive Ganzzahl N
als Eingabe über STDIN / Befehlszeile / ARGV oder Funktionsargumente verwendet und einen ASCII-Doppelknoten entsprechend N
STDOUT ausgibt.
Der ASCII-Doppelknoten sieht folgendermaßen aus:
__ __ __ __ __ __
/ \/ \/ \/ \/ \/ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\ \/\ \/\ \/\ \/\ \/\ \/
/\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
\__/\__/\__/\__/\__/\__/
Das obige ist für N = 6
Hier sind noch ein paar Doppelknoten für andere Werte von N
:
Wenn N = 1
der Ausgangsdoppelknoten wie folgt aussieht:
__
/ \
| /\ |
| \/ |
\ \/
/\ \
| /\ |
| \/ |
\__/
Für N = 2
sein
__ __
/ \/ \
| /\/ /\ |
| \/ /\/ |
\ \/\ \/
/\ \/\ \
| /\/ /\ |
| \/ /\/ |
\__/\__/
Für N = 3
sein
__ __ __
/ \/ \/ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\ \/\ \/\ \/
/\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
\__/\__/\__/
und in ähnlicher Weise geht das Muster weiter und jeder größere Wert von N
.
Details :
- Die Eingabe ist immer eine positive ganze Zahl größer als
0
.
- Der Zeilenumbruch ist optional
- Es sollten entweder keine nachgestellten Leerzeichen in jeder Zeile oder genügend nachgestellte Leerzeichen vorhanden sein, damit die Länge jeder Zeile gleich ist
4*N + 2
.
- Es sollte niemals ein führendes Leerzeichen geben, das nicht Teil des angegebenen Musters ist.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Serien-Bestenliste
Ich wandle dies in eine Reihe von ASCII-Kunstherausforderungen um und füge so eine Rangliste für die Reihe hinzu (Ausschnitt von Martin). Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wobei N die Größe Ihrer Einreichung ist. Wenn Sie Ihre Punktzahl verbessern, können Sie alte Punkte in der Überschrift behalten, indem Sie sie durchstreichen. Zum Beispiel:
# 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>
Serie soweit
1. Doppelknoten
2. Flow Snakes
3. Chinesische Schreine
4. Sternzeichen
5. Zufällige Diamantkacheln
Antworten:
CJam, 55 Bytes
Ich habe mich ziemlich schlecht von diesem Nerd schnappen lassen ... trotzdem habe ich mir endlich 55 Bytes ISO 8859-1 ausgedacht :
oder diese Alternative :
Anfangs habe ich versucht, es in einfachem ASCII zu machen, aber nur auf 58 Bytes reduziert :
und nochmal eine alternative :
Erläuterung:
Die Idee ist, die einzelnen Teile (linker Rand, rechter Rand und mittleres Muster) auf bequeme Weise zu kodieren, den mittleren Teil nach Bedarf zu wiederholen und sie zusammenzufügen. Der Code ähnelte in vielerlei Hinsicht Dennis 'Antwort. Ich habe nicht versucht, ihn zu kopieren, aber ich habe viele verschiedene Ansätze ausprobiert (einschließlich der Ausnutzung von mehr Symmetrien und Wiederholungen), und dies hat am besten funktioniert.
Ich habe den linken und rechten Rand so zusammengefügt:
Das mittlere Muster hat 4 Spalten, aber sie werden N-0,5-mal wiederholt, dh eine Wiederholung wird halbiert. Der Einfachheit halber habe ich dieses Muster verwendet:
und entfernte die erste Hälfte der ersten Wiederholung.
Also habe ich die Teile zusammengefügt und transponiert codiert, da es einfacher ist, auf diese Weise mit ihnen zu arbeiten. Das erste und dritte Programm codieren diese Zeichenfolge:
(ohne Zeilenumbruch), das ist die Transposition der Mittelkanten. Das zweite und vierte Programm (die "Alternativen") codieren diese Zeichenfolge:
wieder ohne Zeilenumbrüche, und dies ist die Transposition von Kanten + Mitte.
So funktioniert dieser gemeinsame Teil des Codes:
Danach unterscheidet sich die Implementierung geringfügig. Im ersten und dritten Programm haben wir:
Im zweiten und vierten (alternativen) Programm haben wir:
quelle
1>W<
verkürzen. Es stellte sich heraus, dass ich das Array nur drehen musste, bevor ich es codierte und verwendete2>
...CJam,
1039283696657 BytesProbieren Sie es online im CJam-Interpreter aus .
Idee
Das Muster wird viel offensichtlicher, wenn wir Zeilen mit Spalten transponieren (rechts mit Leerzeichen aufgefüllt).
Für Eingang 3 ergibt dies beispielsweise:
Die ersten beiden und letzten beiden Zeilen sind speziell, aber die anderen wiederholen das gleiche Muster immer und immer wieder.
Für die Eingabe N müssen wir also nur wiederholen
Ersetzen Sie die erste Zeile N- mal durch
die letzte Reihe mit
und schließlich Zeilen mit Spalten transponieren.
Code
quelle
Javascript ( ES7-Entwurf ),
169163160158 BytesBearbeiten Sie: -6, indem Sie eine Vorlagenzeichenfolge verwenden, um Wiederholungen in der Musterzeichenfolge zu vermeiden.
Editieren: -3 durch Umschalten von
slice(0,-2)
aufslice(2)
durch Umordnen der Pattern-Zeichenkette.Editieren: -2 durch Durchschleifen
b
anstelle vona
und Reduzieren dera
Zeichenkette auf 4 mit einem Modulo.Kommentiert:
quelle
.split(0)
durch ersetzen('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\')
.0
, siehst du eine8
.``
und die${...}
genau?${}
befindet, wird als Javascript-Ausdruck gewertet.Perl,
134,129Nimmt einen Kommandozeilenparameter an:
quelle
JavaScript ( ES6 ), 165
166Knotenelemente:
Ungolfed
Golf gespielt
quelle
0
und Sie werden eine 4-beinige Spinne bekommen.C ++,
1530639479Das sah nach einer lustigen Herausforderung aus, von der ich ein wenig abgewichen bin.
Ich bin nicht sicher, wie man Bytes der Größe meiner Anwendung misst, aber ich werde versuchen, es herauszufinden und meine Antwort zu aktualisieren.
Meine App könnte kleiner sein, aber sie läuft sowohl im x als auch im y und ich mag das irgendwie: D
quelle
Python 2,
156151147141139edit 1: bearbeitet, um input () anstelle einer Funktion zu verwenden.
edit 2: benutze str.join und füge var c hinzu, um einige überflüssige Zeichen zu entfernen.
edit 3: einige unnötige String-Escape-Sequenzen entfernt.
edit 4: benutze ~ -n anstelle von a = n-1
Es hat Spaß gemacht, dies zu programmieren, mein erster Code Golf!
Speichern Sie es in einem externen Texteditor als n.py, um das letzte Zeilenumbruchzeichen zu entfernen und die Dateigröße um 1 Byte zu verringern. Führen Sie das Modul aus und geben Sie Ihre Nummer ein.
quelle
input ()
beim Lesen von STDIN als in Ordnung angesehen.a=n-1
, um*(n-1)
zweimal zu schreiben , aber Sie tun es*~-n
.Python 2,
139133129 BytesDieser erstellt und druckt nur Zeile für Zeile.
Hier ist der Code in ungolfed Form:
Bearbeiten: Ich habe die Sprache in Python 2 geändert, um mit meiner Antwort für # 3 kompatibel zu sein (und es werden auch 6 weitere Bytes gespart).
quelle
w=(3*' ||')[i] -> w=' |'[i&2]
und' '+s[1:-1]+' ' -> ' %s '%s[1:-1]
arbeite (die erste ist eine Zeichenfolge mit zwei Leerzeichen, dann eine Pfeife, aber SE handelt)' ||'[i%4]
, aber das ist noch kürzer (auch mit zwei Leerzeichen).C 159 Bytes
Mit Leerzeichen und einigen anderen Verbesserungen der Lesbarkeit:
Dies ist hauptsächlich vorlagenbasiert. Die Vorlage
t
enthält alle 9 möglichen Spalten der Ausgabe, dh, sie codiert 9 * 9 = 81 Zeichen oder 80 Zeichen ohne die nachfolgende Zeile.Da das Muster nur 6 verschiedene Zeichen enthält (einschließlich Zeilenvorschubzeichen), habe ich Paare von diesen in ein Vorlagenzeichen gepackt, was bedeutet, dass die Vorlage in 40 Zeichen gespeichert werden kann. Es gibt dann 6 * 6 = 36 mögliche Zeichenpaare, die als ASCII-Zeichen 48 bis 73 codiert sind. Die Rückübersetzung zum Originalzeichen erfolgt über die kleine Nachschlagetabelle
m
.Der Rest der Logik besteht hauptsächlich darin, die Musterzeiten zu wiederholen
n
, was bedeutet, dass 4 Zeichen in der Vorlage zurückgesprungen werden, während der Anfangs- und der Endteil jeder Zeile korrekt ausgegeben werden.quelle
PHP 5.5.3,
488, 466quelle
=
und.=
.Prolog (SWI), 285 Bytes
(Mit Leerzeichen):
Ich habe ein paar Möglichkeiten ausprobiert, die Saiten zu zerhacken, aber keine schien diese naive Säulenmethode zu übertreffen.
quelle
JavaScript (ES6),
158154148137 BytesBearbeiten: 11 Bytes dank @ Bálint gespeichert.
quelle
/(..)(.{4})/g
ist 13 Bytes, das gleiche wie/(..)(....)/g
...Java,
339.330BytesMeine erste Lösung enthielt so viele "statische" Schlüsselwörter, dass es kürzer war, die Methoden und Attribute nicht statisch zu machen und den Code im Konstruktor auszuführen.
quelle
PowerShell,
228207181133 ByteErinnerung - PowerShell wartet nicht automatisch auf stdin. Sie müssen etwas einpfeifen, z
3|%{...}
quelle
SmileBASIC, 149 Bytes
Jede Zeichenfolge enthält das Muster,
AACCBBDD
das zur Form erweitert wird.AABB(CCBB)*DD
DerCCBB
Teil wird N-mal wiederholt, dann werden die ersten beiden Zeichen entfernt. (Es war kürzer, Zeichen vom Anfang als vom Ende zu entfernen)quelle