尝试用您的语言编写一些代码,并使其不再满足我们成为编程语言的条件。
在以下情况下,一种语言可以满足我们作为编程语言的标准(此挑战的简化版本):
- 它可以通过某种方式读取表示正整数元组的用户输入。
- 根据输入,它可以输出至少两个不同的可能结果。
- 它可以取两个正整数并将其相加(结果可能会影响输出)。
- 它可以取一个正整数,并确定它是否为质数(结果可能会影响输出)。
- 出于此挑战的目的,将忽略不是正常挑战所允许的输出方法的任何类型的输出。因此,程序是否还可以播放音乐或通过HTTP发布等等都无关紧要。
- 更新:您还可以选择一种或某些允许的输出方法,而忽略其他所有方法。但是您必须在以下条件中的任何地方使用相同的定义。而且,如果您的程序可以禁用不止一种输出方法,则值得进行更多投票。
例如,使其无法输出,或者禁用所有循环构造,这样它将无法进行素数测试并确保用户无法重新启用它们,例如。
您应该留出一个插入新代码的地方。默认情况下,它位于代码的末尾。如果我们考虑将源代码放在您的答案中,然后将完整的代码作为一个完整的程序(一种新语言的解释程序)运行,则该语言应不符合标准。
但插入的代码必须以这样的方式执行像满足的标准语言:
- 从想要编写语法突出显示的人的角度来看,插入的代码在语法上必须与通常满足条件的某些东西(例如,以下条件中的代码块)在语法上相同。因此它不能在字符串,注释等中。
- 插入的代码必须以符合标准的方式实际执行。因此它不能出现在未使用的函数或
sizeof
C语言中,您不能仅执行代码中的非功能部分,也不能将其置于无限循环之后,等等。 - 您不能限制以此方式生成的可能的语法正确程序的数量。如果您所使用的语言中已经存在长度限制之类的内容,则即使取消了此限制,它也不符合条件。
- 您不能修改或“用完”输入/输出的内容,但是可以防止它们被访问。
- 这些条件通常仅适用于没有显式I / O的语言:
- 如果代码块通常无法直接/显式地使用您使用的语言来获取用户输入,则您的代码应将用户输入(包含任意长度的信息)重定向到插入的代码。
- 如果代码块通常无法直接/显式地使用您使用的语言输出内容,则您的代码应打印出插入代码的返回值。
- 如果您打印返回的值,并且使用您使用的语言键入了该值,则返回的类型应能够具有2种实际可能的值。例如,您不能使用类型
struct {}
或struct {private:int x;}
C ++。
这是人气竞赛。票数最高的有效答案(因此,没有人发现错误或所有错误均已解决)获胜。
澄清说明
- 您不应该修改文本形式的代码,但是可以在解释或编译代码之前更改语法。
- 您可以在代码运行时执行其他操作。但是,它不满足条件的原因应该在插入的代码本身内。它可能由于另一个线程的干扰而出错,而不仅仅是被另一个线程杀死。
- 所有规范基本上都意味着,如果所有内置功能都没有更改但实际上没有更改,则在语法上应该符合标准。如果您发现任何非语法的变通办法,例如将参数正确地传递到代码块,但又使其无法以某种方式使用,那是很好的。
- 同样,插入的代码必须实际执行。无限循环或崩溃后的代码被视为“未实际执行”,因此无效。这些答案可能很有趣,但是此站点上已经存在其他无限循环或崩溃问题,您可能会找到一个更合适的答案。如果不是,请考虑提出一个新问题。这些问题的示例是:
排行榜
var QUESTION_ID=61115/*,OVERRIDE_USER=8478*/;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,/*getComments()*/(more_answers?getAnswers():process())}})}/*function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}*/function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),score:s.score,language:a[1],lang:jQuery('<div>').html(a[1]).text(),link:s.share_link})}),e.sort(function(e,s){var r=e.score,a=s.score;return a-r});var s={},r=1,a=null,n=1;e.forEach(function(e){e.score!=a&&(n=r),a=e.score,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",e.n=n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.score).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text())/*,s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}*/});var t=e/*[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o])*/;t.sort(function(e,s){return (e.lang.toUpperCase()>s.lang.toUpperCase())-(e.lang.toUpperCase()<s.lang.toUpperCase())||(e.lang>s.lang)-(e.lang<s.lang)});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{PLACE}}",o.n).replace("{{LANGUAGE}}",o.language).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.score).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<(?:h\d|(?!.*<h\d>)p)>\s*((?:[^,;(\s]| +[^-,;(\s])+)(?=(?: *(?:[,;(]| -).*?)?\s*<\/(h\d|p)>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;float:left}table{width:250px}table thead{font-weight:700}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="https://cdn.sstatic.net/Sites/codegolf/all.css?v=7509797c03ea"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Score</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Sorted by Language</h2> <table class="language-list"> <thead> <tr><td></td><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>{{PLACE}}</td><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>