Definição
De acordo com a Wikipedia :
O telégrafo de Cooke e Wheatstone foi um antigo sistema de telégrafo elétrico datado da década de 1830, inventado pelo inventor inglês William Fothergill Cooke e pelo cientista inglês Charles Wheatstone. Foi o primeiro sistema de telégrafo a ser colocado em serviço comercial. O receptor consistia em várias agulhas que podiam ser movidas por bobinas eletromagnéticas para apontar para letras em um quadro. Esse recurso foi apreciado por usuários iniciais que não estavam dispostos a aprender códigos e por empregadores que não desejavam investir em treinamento de pessoal.
Funciona assim:
No meio, há cinco agulhas, que podem ser desviadas no sentido horário (como é o caso da agulha do meio) ou no sentido anti-horário (como é o caso da última agulha).
Na figura acima, as duas agulhas desviadas apontam para a letra G
, o que significa que a letra que está sendo transmitida / recebida é a letra G
.
Note-se que as letras C
, J
, Q
, V
, X
, Z
estão faltando e, portanto, tem que ser substituído por outras letras.
Tarefa
Você receberá um caractere ABDEFGHIKLMNOPRSTUWY
como entrada e produzirá a configuração correspondente das cinco agulhas, com undeflected como |
, defletido no sentido horário como /
e defletido no sentido anti-horário como \
.
Casos de teste
Isso cobre todas as entradas possíveis
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 \|||/
Regras / Requisitos
- Cada envio deve ser um programa ou uma função completa. Se for uma função, ela deve ser executável, bastando adicionar a chamada de função na parte inferior do programa. Qualquer outra coisa (por exemplo, cabeçalhos em C) deve ser incluída.
- Se possível, forneça um link para um site onde seu programa possa ser testado.
- Seu programa não deve escrever nada para
STDERR
.
- As brechas padrão são proibidas.
- Seu programa pode produzir em qualquer caso, mas deve ser impresso (não uma matriz ou similar).
Pontuação
Os programas são classificados de acordo com os bytes, em UTF-8, por padrão, ou com um conjunto de caracteres diferente de sua escolha.
Eventually
, a resposta com o mínimo de bytes vencerá.
Submissões
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores 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
vez deindex
para -1 byte.05AB1E ,
3734 bytesCódigo:
Usa a codificação CP-1252 . Experimente online! .
fonte
JavaScript (ES6),
9789 bytesEditar: salvou 3 bytes alternando para uma tabela de pesquisa que não precisa de preenchimento. Economizou 5 bytes configurando elementos da matriz em vez de tentar editar uma sequência.
Explicação: A tabela
ABEHMDFINRGKOSULPTWY
está organizada para que, se você a dividir em 5 grupos de 4 letras adjacentes, cada letra do grupo estiver na mesma/
inclinação do diagrama, enquanto que se você a dividir em 5 grupos, utilizando o módulo de índice 5, A letra do grupo está na mesma\
inclinação do diagrama. Esses últimos grupos estão na ordem inversa, mas isso é facilmente subtraído de 4. (Organizar a tabela para que os grupos anteriores estivessem na ordem inversa custa mais para corrigir).fonte
VBA, 106 bytes
Byte final é o
enter
que gera automaticamenteEnd Function
. Com agradecimentos ao esquema @Dave concebido .Invoque na planilha ou na janela Imediata do VBA, por exemplo, com
?v("K")
fonte
Mathematica, 129 bytes
Função anônima. Pega uma sequência como entrada e retorna uma sequência que representa seu código como saída. Usa um esquema de codificação relativamente simples.
fonte
Pitão, 27 bytes
Substitua as fugas
\x94
,\x18
com os bytes correspondentes.Experimente online
Como funciona
Pitão, 32 bytes
Sem usar nenhuma tabela de pesquisa codificada.
Experimente online
Como funciona
fonte
Python 2,
115111 bytesEsta é uma implementação simples, mas poderia ser útil. Sugestões são bem-vindas.
Ungolfed:
fonte
C, 78 bytes
A versão mostrada é toda ASCII imprimível, 79 bytes. O segundo
\\
pode ser substituído por qualquer byte único com os mesmos últimos 6 bits que o\
caractere 0x5C: 0x1C (se o seu compilador permitir), 0x9C ou 0xDC.O caractere de entrada é procurado na string mágica que contém valores para
A
aY
(incluindo espaços para os caracteres não suportadosCJQVX
O carácter da tabela de consulta é interpretado como cinco códigos sobrepostos 2-bit, em que.):Código comentado no programa de teste
fonte
Ruby, 159 bytes
Explicação:
As posições das agulhas desviadas são mapeadas para 0..4 e pensadas como um número de base 5 (2 dígitos). Para AL, os números são "como estão"; para MZ, adicione 25 ao número. O mapa é de variáveis
a
paraw
.Dado o número correspondente à letra, use sua representação de base 5: o dígito 5s para a primeira agulha, o dígito 1s para a segunda agulha e o dígito 25s para as direções das agulhas.
Um programa para codificar uma sequência inteira, em vez de um caractere, é um pouco mais longo: 172 bytes.
fonte