Definicja
Według Wikipedii :
Telegraf Cooke and Wheatstone był wczesnym systemem telegraficznym z lat 30. XIX wieku, wynalezionym przez angielskiego wynalazcę Williama Fothergilla Cooke i angielskiego naukowca Charlesa Wheatstone'a. Był to pierwszy system telegraficzny wprowadzony do użytku komercyjnego. Odbiornik składał się z wielu igieł, które można przesuwać za pomocą cewek elektromagnetycznych, aby wskazywały litery na tablicy. Ta funkcja podobała się początkującym użytkownikom, którzy nie chcieli uczyć się kodów, oraz pracodawcom, którzy nie chcieli inwestować w szkolenie personelu.
Działa to tak:
Na środku znajduje się pięć igieł, które można odchylić zgodnie z ruchem wskazówek zegara (jak w przypadku igły środkowej) lub przeciwnie do ruchu wskazówek zegara (jak w przypadku ostatniej igły).
Na powyższym obrazku dwie odchylone igły wskazują na literę G
, co oznacza, że przesyłany / odbierany list jest literą G
.
Zauważ, że litery C
, J
, Q
, V
, X
, Z
brakuje, a więc muszą być zastąpione innymi literami.
Zadanie
Otrzymasz znak w ABDEFGHIKLMNOPRSTUWY
postaci wejściowej i wyprowadzisz odpowiednią konfigurację pięciu igieł, z nieodkształconą jako |
, odchyloną zgodnie z ruchem wskazówek zegara /
i odchyloną przeciwnie do ruchu wskazówek zegara jako \
.
Przypadki testowe
Obejmuje to wszystkie możliwe dane wejściowe
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 \|||/
Zasady / wymagania
- Każde zgłoszenie powinno być pełnym programem lub funkcją. Jeśli jest to funkcja, musi być uruchomiona, wystarczy dodać wywołanie funkcji na dole programu. Wszystko inne (np. Nagłówki w C) musi zostać uwzględnione.
- Jeśli to możliwe, podaj link do strony, na której można przetestować Twój program.
- Twój program nie może nic pisać
STDERR
.
- Standardowe luki są zabronione.
- Twój program może wysyłać dane w każdym przypadku, ale musi zostać wydrukowany (nie tablica lub podobny).
Punktacja
Programy są oceniane według bajtów, domyślnie w UTF-8 lub według innego zestawu znaków.
Eventually
, wygra odpowiedź z najmniej bajtami.
Zgłoszenia
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
/* 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
zamiastindex
-1 bajtu.05AB1E ,
3734 bajtówKod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
JavaScript (ES6),
9789 bajtówEdycja: Zapisano 3 bajty, przechodząc do tabeli odnośników, która nie wymaga wypełniania. Zapisano 5 bajtów, ustawiając elementy tablicy zamiast próbować edytować ciąg.
Objaśnienie: Tabela
ABEHMDFINRGKOSULPTWY
jest zorganizowana w taki sposób, że jeśli podzielisz ją na 5 grup 4 sąsiednich liter, to każda litera w grupie jest na tym samym/
skosie na schemacie, a jeśli podzielisz ją na 5 grup, biorąc indeks indeksu 5, to każda litera w grupie jest na tym samym\
skosie na schemacie. Te ostatnie grupy są w odwrotnej kolejności, ale łatwo sobie z tym poradzić, odejmując od 4. (Ułożenie tabeli tak, aby poprzednie grupy kosztowały więcej, trzeba było naprawić).źródło
VBA, 106 bajtów
Ostatni bajt jest tym,
enter
który generuje automatycznieEnd Function
. Z podziękowaniami dla projektu opracowanego przez @Dave .Wywołaj w arkuszu kalkulacyjnym lub w oknie natychmiastowym VBA np. Za pomocą
?v("K")
źródło
Mathematica, 129 bajtów
Funkcja anonimowa. Pobiera ciąg znaków jako dane wejściowe i zwraca ciąg znaków reprezentujący jego kod jako dane wyjściowe. Stosuje stosunkowo prosty schemat kodowania.
źródło
Pyth, 27 bajtów
Wymienić ucieczki
\x94
,\x18
z odpowiednimi bajtów.Wypróbuj online
Jak to działa
Pyth, 32 bajty
Bez użycia zakodowanych tabel odnośników.
Wypróbuj online
Jak to działa
źródło
Python 2,
115111 bajtówJest to prosta implementacja, ale przydałoby się trochę golfa. Sugestie mile widziane.
Nie golfowany:
źródło
C, 78 bajtów
pokazana wersja to wszystkie ASCII do wydruku, 79 bajtów. Drugi
\\
można zastąpić dowolnym pojedynczym bajtem, który ma te same ostatnie 6 bitów, co\
znak 0x5C: 0x1C (jeśli kompilator na to pozwala), 0x9C lub 0xDC.Znak wejście jest wzrok w ciągu magicznym, który zawiera wartości
A
doY
(ze spacjami dla nieobsługiwanych znakówCJQVX
postać z tabeli przeglądowej jest interpretowane jako nakładające się pięć kodów 2-bitowych gdzie.):Skomentowany kod w programie testowym
źródło
Rubin, 159 bajtów
Wyjaśnienie:
Pozycje odchylonych igieł są odwzorowane na 0..4 i uważane za liczbę podstawową-5 (2 cyfry). W przypadku AL liczby są „takie, jakie są”; dla MZ dodaj 25 do liczby. Mapa jest od zmiennych
a
dow
.Biorąc pod uwagę liczbę odpowiadającą literze, użyj jej reprezentacji podstawy-5: cyfra 5s dla pierwszej igły, cyfra 1s dla drugiej igły i cyfra 25s dla kierunków igieł.
Program do kodowania całego łańcucha zamiast jednego znaku jest tylko nieco dłuższy: 172 bajty.
źródło