28
5
Your task: given an input string, determine whether the binary representation of that string does not have 4 1
s or 0
s in a row, anywhere. Furthermore, your code itself should not contain any such runs of four in a row.
Test Cases
String Binary Result
U3 01010101 00110011 Truthy
48 00110100 00111000 Falsy
Foobar 01000110 01101111 Falsy
01101111 01100010
01100001 01110010
Feeber 01000110 01100101 Truthy
01100101 01100010
01100101 01110010
$H 00100100 01001000 Truthy
<Empty> - Truthy
Rules
- Input will always be within the range of printable ASCII, including whitespace characters.
- Your code may use any encoding, since it only matters at the bit level.
- Because this condition prevents the use of white space and many other chars, your code actually can contain such runs of four in a row, at a 10 byte penalty for each run.
- A run of 5
1
s or0
s counts as two runs, 6 in a row counts as three runs, etc.
- A run of 5
- Input will be a string or char array, not any other form.
- You may write a complete program or function.
- You must provide the binary representation of your code in your answer.
Good luck, lowest score wins!
This script might help you with your challenge, put your code in the input and it will give you your code's binary representation, it's length, your penalty, and the total score, if you're using UTF-8.
Leaderboard
Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.
/* Configuration */
var QUESTION_ID = 111758; // 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 = 60042; // 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>
1I'm pretty sure that snippet is buggy, e.g. I see
||
listed and that is0111110001111100
. – Ørjan Johansen – 2017-03-01T05:46:14.060Right, good point. One second. – Pavel – 2017-03-01T05:47:48.930
ok but why can I see the comment – Destructible Lemon – 2017-03-01T06:06:51.970
Your tio.run link seems to exclude a bunch of valid pairs of characters (for example, lowercase letters followed by uppercase letters) ... are you using unordered pairs in your loop instead of ordered pairs? – Greg Martin – 2017-03-01T06:11:16.977
@GregMartin Uhh, as you can maybe see, I tried to comment it out. The code was written by ConorO'Brien. Anyway, fixed the post now. – Pavel – 2017-03-01T06:13:03.840
2Would have been even more fun if the task was to find the score of a string. – Adám – 2017-03-01T06:54:33.167
Hmm, does "The value you output/return for truthy and falsy must be consistent." imply only a single value (unlike the standard definition of truthy and falsy)? – Jonathan Allan – 2017-03-01T11:11:48.477
Do we pretend big-endianness? – Adám – 2017-03-01T12:08:26.773
1@JonathanAllan well, the way I intended it, it does, but upon further reflection I don't really see a reason for that, so I'll change it. – Pavel – 2017-03-01T15:03:00.610
I think this is an interesting challenge even without the source code constraint. Poor java :[ – Poke – 2017-03-01T15:28:11.427
@Adám yeah, do that. – Pavel – 2017-03-01T15:32:52.090
@Poke You can make a submission and try to minimize penalties. Java wasn't going to win anyway ;) – Pavel – 2017-03-01T15:33:56.170
Here's a program to count penalties for ISO 8859-1 submissions.
– mbomb007 – 2017-03-01T18:22:59.8331@Pavel The scoring is not based solely on bytes if there are penalties. This makes it a [code-challenge], not [code-golf]. From the tag wiki: "If source code length is not the primary scoring criterion, consider using another tag instead." TL;DR, since the actual score =/= the program's byte count, and the shortest code doesn't mean getting the best score, it's not [code-golf]. – mbomb007 – 2017-03-01T20:23:37.573
Suggested additional test cases: <line-feed>, <tab>, <carriage-return>, <space>. Also all of those with a trailing string that on its own would be truthy (e.g.
U3
). I say this because my code was actually failing some of these and I had not noticed for a while. – Jonathan Allan – 2017-03-02T07:00:53.857@JonathanAllan I'm not sure what you mean by that last one, but feel free to edit it in. – Pavel – 2017-03-03T04:37:01.753