Определение
Согласно Википедии :
Телеграф Кука и Уитстона был ранней электрической телеграфной системой, датируемой 1830-ми годами, изобретенной английским изобретателем Уильямом Фотергиллом Куком и английским ученым Чарльзом Уитстоном. Это была первая телеграфная система, введенная в коммерческую эксплуатацию. Приемник состоял из нескольких игл, которые могли перемещаться электромагнитными катушками, чтобы указывать на буквы на доске. Эта функция понравилась ранним пользователям, которые не желали изучать коды, и работодателям, которые не хотели вкладывать средства в обучение персонала.
Это работает так:
В середине находятся пять игл, которые могут быть отклонены по часовой стрелке (как в случае средней иглы) или против часовой стрелки (как в случае последней иглы).
На рисунке выше две отклоненные иглы указывают на букву G
, что означает, что передаваемое / полученное письмо является буквой G
.
Обратите внимание , что буквы C
, J
, Q
, V
, X
, Z
отсутствуют и , следовательно , должны быть заменены другими буквами.
задача
Вы получите символ в ABDEFGHIKLMNOPRSTUWY
качестве входных данных и выведите соответствующую конфигурацию из пяти игл с неотклоненным как |
, отклоненным по часовой стрелке как /
и отклоненным против часовой стрелки как \
.
Testcases
Это охватывает все возможные входы
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 \|||/
Правила / Требования
- Каждое представление должно быть либо полной программой, либо функцией. Если это функция, ее нужно запустить, для этого нужно всего лишь добавить вызов функции в конец программы. Все остальное (например, заголовки в C), должно быть включено.
- Если это возможно, предоставьте ссылку на сайт, где ваша программа может быть протестирована.
- Ваша программа не должна ничего писать
STDERR
.
- Стандартные лазейки запрещены.
- Ваша программа может выводить в любом случае, но она должна быть напечатана (не массив или аналогичный).
счет
Программы оцениваются в соответствии с байтами, в UTF-8 по умолчанию или другой набор символов по вашему выбору.
Eventually
ответ с наименьшим количеством байтов выиграет.
Материалы
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Leaderboard
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
/* 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
вместоindex
-1 байт.05AB1E ,
3734 байтаКод:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
JavaScript (ES6),
9789 байтИзменить: 3 байта сохранены путем переключения на таблицу поиска, которая не нуждается в заполнении. Сохранено 5 байтов путем установки элементов массива вместо попытки редактирования строки.
Объяснение: Таблица
ABEHMDFINRGKOSULPTWY
организована таким образом, что если вы разбиваете ее на 5 групп по 4 смежных буквы, то каждая буква в группе находится на одном и том же/
наклоне диаграммы, а если вы разбиваете ее на 5 групп, взяв индекс по модулю 5, то каждый Буква в группе находится на той же\
кривой на диаграмме. Эти последние группы расположены в обратном порядке, но это легко обрабатывается путем вычитания из 4. (Расположение таблицы таким образом, чтобы прежние группы были в обратном порядке, стоило больше исправлять.)источник
VBA, 106 байт
Последний байт,
enter
который автоматически генерируетсяEnd Function
. С благодарностями к схеме @Dave разработано .Вызвать в таблице или в VBA Immediate окно, например, с
?v("K")
источник
Mathematica, 129 байт
Анонимная функция. Принимает строку в качестве входных данных и возвращает строку, представляющую ее код в качестве выходных данных. Использует относительно простую схему кодирования.
источник
Pyth, 27 байт
Заменить побеги
\x94
,\x18
с соответствующими байтами.Попробуйте онлайн
Как это устроено
Pyth, 32 байта
Без использования каких-либо жестко закодированных таблиц поиска.
Попробуйте онлайн
Как это устроено
источник
Python 2,
115111 байтЭто простая реализация, но она может использовать гольф. Предложения приветствуются.
Ungolfed:
источник
C 78 байтов
Показана версия для печати в формате ASCII, 79 байт. Второй
\\
может быть заменен любым одним байтом, который имеет те же последние 6 битов, что и\
символ 0x5C: 0x1C (если ваш компилятор это позволяет), 0x9C или 0xDC.Ввод символы ищутся в строке волшебной , которая содержит значение для
A
кY
( в том числе пространств для неподдерживаемых символовCJQVX
символ из справочной таблицы интерпретируются как пять перекрывающимися 2-битовые кодами , где это .):Комментарий кода в тестовой программе
источник
Рубин, 159 байт
Объяснение:
Положение отклоненных игл отображается на 0..4, и считается числом с основанием-5 (2 цифры). Для AL числа «как есть»; для MZ добавьте 25 к числу. Карта из переменных
a
вw
.Учитывая число, соответствующее букве, используйте представление base-5: цифру 5s для первой иглы, цифру 1s для второй иглы и цифру 25s для направления игл.
Программа для кодирования всей строки вместо одного символа немного длиннее: 172 байта.
источник