首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库克和惠斯顿电报公司,五针

库克和惠斯顿电报公司,五针
EN

Code Golf用户
提问于 2016-07-31 18:04:34
回答 5查看 1.1K关注 0票数 19

定义

根据维基百科的说法:

库克和惠特斯通电报是早在19世纪30年代由英国发明家威廉·福瑟吉尔·库克和英国科学家查尔斯·惠特斯通发明的一种早期的电报系统。这是第一个投入商业服务的电报系统。接收器由若干针组成,这些针可以被电磁线圈移动以指向板上的字母。这一特性受到不愿学习代码的早期用户和不愿投资于员工培训的雇主的喜爱。

它的工作方式如下:

中间有五根针,它们可以顺时针方向(如中间针的情况)或逆时针方向(如最后一根针的情况)倾斜。

在上面的图片中,两个偏转针指向字母G,这意味着被发送/接收的信件是字母G

请注意,字母CJQVXZ缺少,因此必须用其他字母替换。

任务

您将收到ABDEFGHIKLMNOPRSTUWY中的一个字符作为输入,您将输出五个针的相应配置,其中非偏转为|,顺时针为/,逆时针为\

测试案例

这涵盖了所有可能的输入。

代码语言:javascript
复制
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     \|||/

Rules/Requirements

  • 每个提交应该是一个完整的程序或功能。如果它是一个函数,它必须可以运行,只需将函数调用添加到程序的底部。其他任何内容(例如C中的标题)都必须包括在内。
  • 如果可能的话,提供一个链接到可以测试您的程序的站点。
  • 您的程序不得向STDERR写入任何内容。
  • 标准漏洞是禁止的。
  • 您的程序在任何情况下都可以输出,但必须打印(不是数组或类似的)。

评分

程序是根据字节进行评分的,默认情况下是UTF-8,或者是您选择的不同字符集。

Eventually,使用最少字节的答案将获胜。

提交的

为了确保您的答案显示出来,请使用下面的Markdown模板以标题开头:

代码语言:javascript
复制
# Language Name, N bytes

其中N是您提交的大小。如果你提高你的分数,你可以保持旧的分数在标题中,通过敲击他们。例如:

代码语言:javascript
复制
# Ruby, <s>104</s> <s>101</s> 96 bytes

如果您想在标题中包含多个数字(例如,因为您的分数是两个文件的总和,或者要分别列出解释器标志惩罚),请确保实际分数是标题中的最后一个数字:

代码语言:javascript
复制
# Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称作为链接,然后将其显示在领导板片段中:

代码语言:javascript
复制
# [><>](http://esolangs.org/wiki/Fish), 121 bytes

主板

这里有一个Stack代码片段,用于生成一个常规的领导板和一个按语言分列的获奖者概览。

代码语言:javascript
复制
/* 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);
  }

}
代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<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>
EN

回答 5

Code Golf用户

发布于 2016-07-31 18:29:30

CJam,42字节

代码语言:javascript
复制
r"HEBAMRUYIFDNSWKGOTLP"5e!{_$"/\|"er}%_&er

在这里测试一下

虽然输出有很多结构,但我还不能完全确定是否能够有效地计算结果(以字节表示)。因此,这仍然是一个查找表,但我正在通过列表[0 1 2 3 4]的排列生成可能的针形配置列表。

票数 5
EN

Code Golf用户

发布于 2016-07-31 22:31:56

VBA,106个字节

代码语言:javascript
复制
Function v(s):v="|||||":p=InStr(1,v &"MRUYH NSWEI OTBFK PADGL",s):Mid(v, p\5)="\":Mid(v, (p Mod 5)+1)="/"

最后一个字节是enter,它自动生成End Function.向戴夫设计的这个计划致谢。

在电子表格或VBA即时窗口中调用(如使用?v("K") )

票数 1
EN

Code Golf用户

发布于 2016-07-31 19:31:50

Mathematica,129个字节

代码语言:javascript
复制
""<>(IntegerDigits[IntegerDigits[36^^3ucgb2abu46m2rewohw225q4lc6hczypueyb3,190][[LetterNumber@#]],3,5]/.{0->"|",1->"/",2->"\\"})&

匿名函数。接受字符串作为输入,并返回表示其代码的字符串作为输出。使用相对简单的编码方案。

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/87104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档