Definición
De acuerdo con Wikipedia :
El telégrafo Cooke y Wheatstone fue uno de los primeros sistemas de telégrafo eléctrico que data de la década de 1830 inventado por el inventor inglés William Fothergill Cooke y el científico inglés Charles Wheatstone. Fue el primer sistema telegráfico puesto en servicio comercial. El receptor constaba de una serie de agujas que podían ser movidas por bobinas electromagnéticas para señalar letras en un tablero. Esta característica fue del agrado de los primeros usuarios que no estaban dispuestos a aprender códigos, y los empleadores que no querían invertir en la capacitación del personal.
Funciona así:
En el medio hay cinco agujas, que pueden desviarse en sentido horario (como es el caso de la aguja central) o en sentido antihorario (como es el caso de la última aguja).
En la imagen de arriba, las dos agujas desviadas apuntan a la letra G
, lo que significa que la letra que se transmite / recibe es la letra G
.
Tenga en cuenta que las letras C
, J
, Q
, V
, X
, Z
se han perdido y por lo tanto tiene que ser sustituido con otras letras.
Tarea
Recibirá un carácter ABDEFGHIKLMNOPRSTUWY
como entrada, y dará salida a la configuración correspondiente de las cinco agujas, sin desviar como |
, desviada en sentido horario como /
y desviada en sentido antihorario como \
.
Casos de prueba
Esto cubre todas las entradas posibles.
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 \|||/
Reglas / Requisitos
- Cada presentación debe ser un programa completo o una función. Si es una función, debe ser ejecutable solo necesitando agregar la llamada a la función al final del programa. Cualquier otra cosa (por ejemplo, encabezados en C), debe incluirse.
- Si es posible, proporcione un enlace a un sitio donde se pueda probar su programa.
- Su programa no debe escribirle nada
STDERR
.
- Las lagunas estándar están prohibidas.
- Su programa puede generar resultados en cualquier caso, pero debe imprimirse (no una matriz o similar).
Puntuación
Los programas se puntúan según los bytes, en UTF-8 de forma predeterminada o en un conjunto de caracteres diferente de su elección.
Eventually
, la respuesta con la menor cantidad de bytes ganará.
Envíos
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
/* 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
lugar deindex
para -1 byte.05AB1E ,
3734 bytesCódigo:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
JavaScript (ES6),
9789 bytesEditar: guardado 3 bytes al cambiar a una tabla de búsqueda que no necesita relleno. Ahorró 5 bytes configurando elementos de la matriz en lugar de intentar editar una cadena.
Explicación: La tabla
ABEHMDFINRGKOSULPTWY
está organizada de modo que si la divide en 5 grupos de 4 letras adyacentes, cada letra del grupo está en la misma/
inclinación del diagrama, mientras que si la divide en 5 grupos tomando el módulo de índice 5, cada La letra del grupo está en la misma\
inclinación en el diagrama. Estos últimos grupos están en orden inverso, pero eso se maneja fácilmente restando 4.fuente
VBA, 106 bytes
El byte final es el
enter
que se genera automáticamenteEnd Function
. Con agradecimientos a esquema ideado por @Dave .Invocar en una hoja de cálculo o en una ventana VBA Inmediata, por ejemplo, con
?v("K")
fuente
Mathematica, 129 bytes
Función anónima. Toma una cadena como entrada y devuelve una cadena que representa su código como salida. Utiliza un esquema de codificación relativamente simple.
fuente
Pyth, 27 bytes
Reemplace los escapes
\x94
,\x18
con los bytes correspondientes.Pruébalo en línea
Cómo funciona
Pyth, 32 bytes
Sin usar ninguna tabla de búsqueda codificada.
Pruébalo en línea
Cómo funciona
fuente
Pitón 2,
115111 bytesEsta es una implementación simple, pero podría usar algo de golf. Sugerencias bienvenidas.
Sin golf:
fuente
C, 78 bytes
La versión que se muestra es ASCII para imprimir, 79 bytes. El segundo
\\
puede ser reemplazado por cualquier byte único que tenga los mismos últimos 6 bits que el\
carácter 0x5C: 0x1C (si su compilador lo permite), 0x9C o 0xDC.El carácter de entrada se busca en la cadena mágica que contiene valores para
A
aY
(incluyendo espacios para los caracteres no admitidosCJQVX
el carácter de la tabla de consulta se interpreta como la superposición de cinco códigos de 2 bits donde.):Código comentado en programa de prueba
fuente
Ruby, 159 bytes
Explicación:
Las posiciones de las agujas desviadas se asignan a 0..4, y se consideran como un número de base 5 (2 dígitos). Para AL, los números son "tal cual"; para MZ, agregue 25 al número. El mapa es de variables
a
aw
.Dado el número correspondiente a la letra, use su representación de base 5: el dígito 5 para la primera aguja, el dígito 1 para la segunda aguja y el dígito 25 para las direcciones de las agujas.
Un programa para codificar una cadena completa, en lugar de un carácter, es solo un poco más largo: 172 bytes.
fuente