Definition
Laut Wikipedia :
Der Cooke and Wheatstone-Telegraph war ein frühes elektrisches Telegraphensystem aus den 1830er Jahren, das vom englischen Erfinder William Fothergill Cooke und dem englischen Wissenschaftler Charles Wheatstone erfunden wurde. Es war das erste Telegraphensystem, das in den kommerziellen Dienst gestellt wurde. Der Empfänger bestand aus einer Anzahl von Nadeln, die durch elektromagnetische Spulen bewegt werden konnten, um auf Buchstaben auf einer Tafel zu zeigen. Diese Funktion fand großen Anklang bei frühen Benutzern, die keine Codes lernen wollten, und bei Arbeitgebern, die nicht in die Schulung ihrer Mitarbeiter investieren wollten.
Das funktioniert so:
In der Mitte befinden sich fünf Nadeln, die im Uhrzeigersinn (wie bei der mittleren Nadel) oder gegen den Uhrzeigersinn (wie bei der letzten Nadel) ausgelenkt werden können.
Im obigen Bild zeigen die beiden abgelenkten Nadeln auf den Brief G
, was bedeutet, dass der gesendete / empfangene Brief der Brief ist G
.
Beachten Sie, dass die Buchstaben C
, J
, Q
, V
, X
, Z
fehlen und müssen somit mit anderen Buchstaben ersetzt werden.
Aufgabe
Sie erhalten ein Zeichen ABDEFGHIKLMNOPRSTUWY
als Eingabe und geben die entsprechende Konfiguration der fünf Nadeln aus, wobei nicht |
abgelenkt als /
, im Uhrzeigersinn als und gegen den Uhrzeigersinn als abgelenkt wird \
.
Testfälle
Dies umfasst alle möglichen Eingaben
input output
A /|||\
B /||\|
D |/||\
E /|\||
F |/|\|
G ||/|\ (explanation: see above)
H /\|||
I |/\||
K ||/\|
L |||/\
M \/|||
N |\/||
O ||\/|
P |||\/
R \|/||
S |\|/|
T ||\|/
U \||/|
W |\||/
Y \|||/
Regeln / Anforderungen
- Jede Einreichung sollte entweder ein vollständiges Programm oder eine Funktion sein. Wenn es sich um eine Funktion handelt, muss sie ausgeführt werden können, indem nur der Funktionsaufruf am Ende des Programms hinzugefügt wird. Alles andere (z. B. Überschriften in C) muss enthalten sein.
- Wenn es möglich ist, geben Sie einen Link zu einer Site an, auf der Ihr Programm getestet werden kann.
- Ihr Programm darf nichts schreiben
STDERR
.
- Standardlücken sind verboten.
- Ihr Programm kann in jedem Fall ausgeben, es muss jedoch gedruckt werden (kein Array oder ähnliches).
Wertung
Programme werden nach Bytes, standardmäßig in UTF-8 oder einem anderen Zeichensatz Ihrer Wahl bewertet.
Eventually
gewinnt die Antwort mit den wenigsten Bytes.
Einreichungen
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? 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 mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags 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 Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Bestenliste
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu erstellen.
/* Configuration */
var QUESTION_ID = 87104; // 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 = 48934; // 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+)(?=[^\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>
find
anstelle vonindex
-1 Byte verwenden.05AB1E ,
3734 BytesCode:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
JavaScript (ES6),
97-89ByteBearbeiten: Speichert 3 Bytes durch Wechseln zu einer Nachschlagetabelle, für die kein Auffüllen erforderlich ist. 5 Bytes gespart, indem Array-Elemente festgelegt wurden, anstatt zu versuchen, eine Zeichenfolge zu bearbeiten.
Erläuterung: Die Tabelle
ABEHMDFINRGKOSULPTWY
ist so organisiert, dass, wenn Sie sie in 5 Gruppen mit jeweils 4 benachbarten Buchstaben aufteilen, jeder Buchstabe in der Gruppe/
im Diagramm dieselbe Neigung aufweist. Wenn Sie sie in 5 Gruppen aufteilen, nehmen Sie den Index modulo 5 Der Buchstabe in der Gruppe befindet sich\
im Diagramm auf der gleichen Neigung. Diese letzteren Gruppen sind in umgekehrter Reihenfolge, aber das ist einfach durch Subtrahieren von 4 zu handhaben.quelle
VBA, 106 Bytes
Das letzte Byte wird
enter
automatisch generiertEnd Function
. Mit Danksagungen zum Schema @Dave erfunden .In der Tabelle oder im VBA-Direktfenster aufrufen, z. B. mit
?v("K")
quelle
Mathematica, 129 Bytes
Anonyme Funktion. Nimmt eine Zeichenfolge als Eingabe und gibt eine Zeichenfolge zurück, die den Code als Ausgabe darstellt. Verwendet ein relativ einfaches Codierungsschema.
quelle
Pyth, 27 Bytes
Ersetzt die entweicht
\x94
,\x18
mit dem entsprechenden Bytes.Probieren Sie es online aus
Wie es funktioniert
Pyth, 32 Bytes
Ohne hartcodierte Nachschlagetabellen zu verwenden.
Probieren Sie es online aus
Wie es funktioniert
quelle
Python 2,
115111 BytesDies ist eine einfache Implementierung, die jedoch etwas Golfspiel verträgt. Vorschläge sind willkommen.
Ungolfed:
quelle
C 78 Bytes
Die angezeigte Version ist allesamt druckbares ASCII, 79 Bytes. Die Sekunde
\\
kann durch ein einzelnes Byte ersetzt werden, das die gleichen letzten 6 Bits wie das\
Zeichen 0x5C: 0x1C (sofern Ihr Compiler dies zulässt), 0x9C oder 0xDC enthält.Das eingegebene Zeichen wird in der magischen Zeichenfolge nachgeschlagen, die Werte für
A
bis enthältY
(einschließlich Leerzeichen für die nicht unterstützten ZeichenCJQVX
). Das Zeichen aus der Nachschlagetabelle wird als fünf überlappende 2-Bit-Codes interpretiert, wobei:Kommentierter Code im Testprogramm
quelle
Ruby, 159 Bytes
Erläuterung:
Die Positionen der abgelenkten Nadeln werden auf 0..4 abgebildet und als Zahl zur Basis 5 (2 Stellen) gedacht. Für AL sind die Zahlen "wie sie sind"; Für MZ addieren Sie 25 zur Zahl. Die Karte ist von Variablen
a
bisw
.Verwenden Sie für die Zahl, die dem Buchstaben entspricht, die Basis-5-Darstellung: die 5-stellige Zahl für die erste Nadel, die 1-stellige Zahl für die zweite Nadel und die 25-stellige Zahl für die Nadelrichtungen.
Ein Programm zum Codieren einer gesamten Zeichenfolge anstelle eines Zeichens ist nur ein bisschen länger: 172 Byte.
quelle