Définition
Selon Wikipedia :
Le télégraphe de Cooke et Wheatstone était un premier système de télégraphe électrique datant des années 1830 inventé par l'inventeur anglais William Fothergill Cooke et le scientifique anglais Charles Wheatstone. C'était le premier système télégraphique mis en service commercial. Le récepteur se composait d'un certain nombre d'aiguilles qui pouvaient être déplacées par des bobines électromagnétiques pour pointer vers des lettres sur une planche. Cette fonctionnalité a été appréciée par les premiers utilisateurs qui ne voulaient pas apprendre les codes et les employeurs qui ne voulaient pas investir dans la formation du personnel.
Cela fonctionne comme ceci:
Au milieu se trouvent cinq aiguilles, qui peuvent être déviées dans le sens des aiguilles d'une montre (comme c'est le cas de l'aiguille du milieu) ou dans le sens inverse des aiguilles d'une montre (comme c'est le cas de la dernière aiguille).
Dans l'image ci-dessus, les deux aiguilles déviées pointent vers la lettre G
, ce qui signifie que la lettre transmise / reçue est la lettre G
.
Notez que les lettres C
, J
, Q
, V
, X
, Z
manquent et doivent donc être remplacés par d' autres lettres.
Tâche
Vous recevrez un caractère en ABDEFGHIKLMNOPRSTUWY
entrée et vous produirez la configuration correspondante des cinq aiguilles, avec unfléchi comme |
, dévié dans le sens horaire comme /
, et dévié dans le sens anti-horaire comme \
.
Cas de test
Cela couvre toutes les entrées possibles
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 \|||/
Règles / exigences
- Chaque soumission doit être soit un programme complet soit une fonction. S'il s'agit d'une fonction, elle doit être exécutable en n'ajoutant que l'appel de fonction au bas du programme. Tout autre élément (par exemple, en-têtes en C) doit être inclus.
- Si c'est possible, fournissez un lien vers un site où votre programme peut être testé.
- Votre programme ne doit rien écrire
STDERR
.
- Les échappatoires standard sont interdites.
- Votre programme peut sortir dans tous les cas, mais il doit être imprimé (pas un tableau ou similaire).
Notation
Les programmes sont notés en octets, en UTF-8 par défaut ou dans un jeu de caractères différent de votre choix.
Eventually
, la réponse avec le moins d'octets gagnera.
Soumissions
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Classement
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
/* 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
au lieu deindex
pour -1 octet.05AB1E ,
3734 octetsCode:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
JavaScript (ES6),
9789 octetsModifier: enregistré 3 octets en basculant vers une table de recherche qui n'a pas besoin de remplissage. Enregistré 5 octets en définissant des éléments de tableau au lieu d'essayer de modifier une chaîne.
Explication: Le tableau
ABEHMDFINRGKOSULPTWY
est organisé de sorte que si vous le divisez en 5 groupes de 4 lettres adjacentes, chaque lettre du groupe est sur la même/
pente dans le diagramme, tandis que si vous le divisez en 5 groupes en prenant l'index modulo 5, puis chacun lettre dans le groupe est sur la même\
pente dans le diagramme. Ces derniers groupes sont dans l'ordre inverse, mais cela est facilement géré en soustrayant de 4. (Organiser le tableau de sorte que les anciens groupes soient dans l'ordre inverse coûte plus cher à corriger.)la source
VBA, 106 octets
L'octet final est celui
enter
qui se génère automatiquementEnd Function
. Avec des remerciements au schéma @Dave conçu .Appelez dans une feuille de calcul ou dans VBA Fenêtre immédiate, par exemple avec
?v("K")
la source
Mathematica, 129 octets
Fonction anonyme. Prend une chaîne en entrée et renvoie une chaîne représentant son code en sortie. Utilise un schéma de codage relativement simple.
la source
Pyth, 27 octets
Remplacer les évasions
\x94
,\x18
les octets correspondants.Essayez-le en ligne
Comment ça fonctionne
Pyth, 32 octets
Sans utiliser de tables de recherche codées en dur.
Essayez-le en ligne
Comment ça fonctionne
la source
Python 2,
115111 octetsIl s'agit d'une implémentation simple, mais elle pourrait utiliser du golf. Suggestions bienvenues.
Non golfé:
la source
C, 78 octets
la version indiquée est entièrement imprimable en ASCII, 79 octets. Le second
\\
peut être remplacé par n'importe quel octet unique ayant les mêmes 6 derniers bits que le\
caractère 0x5C: 0x1C (si votre compilateur le permet), 0x9C ou 0xDC.Le caractère d'entrée est recherché dans la chaîne magique qui contient les valeurs de
A
toY
(y compris les espaces pour les caractères non pris en chargeCJQVX
.) Le caractère de la table de recherche est interprété comme cinq codes 2 bits qui se chevauchent où:Code commenté dans le programme de test
la source
Rubis, 159 octets
Explication:
Les positions des aiguilles déviées sont mappées à 0..4 et considérées comme un nombre en base 5 (2 chiffres). Pour AL, les nombres sont «tels quels»; pour MZ, ajoutez 25 au nombre. La carte est de variables
a
àw
.Étant donné le nombre correspondant à la lettre, utilisez sa représentation en base 5: le chiffre 5s pour la première aiguille, le chiffre 1s pour la deuxième aiguille et le chiffre 25s pour les directions des aiguilles.
Un programme pour encoder une chaîne entière, au lieu d'un caractère, est juste un peu plus long: 172 octets.
la source