36
4
This challenge, while probably trivial in most "standard" languages, is addressed to those languages which are so esoteric, low-level, and/or difficult to use that are very rarely seen on this site. It should provide an interesting problem to solve, so this is your occasion to try that weird language you've read about!
The task
Take two natural numbers a
and b
as input, and output two other numbers: the result of the integer division a/b
, and the remainder of such division (a%b
).
This is code-golf: shortest answer (in bytes), for each language, wins!
Input/Output
- 0<=
a
<=255, 1<=b
<=255. Each of your inputs (and outputs too) will fit in a single byte. - You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable (e.g. no printing the two results together without a delimiter)
Examples
a,b->division,remainder
5,7->0,5
5,1->5,0
18,4->4,2
255,25->10,5
Note: Builtins that return both the result of the division and the remainder are forbidden. At least show us how your language deals with applying two functions to the same arguments.
Note 2: As always, an explanation of how your code works is very welcome, even if it looks readable to you it may not be so for someone else!
The Catalogue
The Stack Snippet at the bottom of this post generates the catalogue from the answers a) as a list of shortest solution per language and b) as an overall leaderboard.
To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:
## Language Name, N bytes
where N
is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:
## Ruby, <s>104</s> <s>101</s> 96 bytes
If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:
## Perl, 43 + 2 (-p flag) = 45 bytes
You can also make the language name a link which will then show up in the snippet:
## [><>](https://esolangs.org/wiki/Fish), 121 bytes
/* Configuration */
var QUESTION_ID = 114003; // 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 = 8478; // 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,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\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,
});
else console.log(body);
});
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;
lang = jQuery('<a>'+lang+'</a>').text();
languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, 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_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) 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;
display: block !important;
}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 500px;
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="https://cdn.sstatic.net/Sites/codegolf/all.css?v=ffb5d0584c5f">
<div id="language-list">
<h2>Shortest Solution 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>
<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>
<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>
Can I reverse the arguments, i.e. instead of providing
a b
providingb a
instead? – Erik the Outgolfer – 2017-03-27T13:29:40.540@EriktheOutgolfer:
You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable
– Emigna – 2017-03-27T13:30:01.210@Emigna Yeah, I was not sure if reversing didn't make them indistinguishable though. – Erik the Outgolfer – 2017-03-27T13:32:58.840
@EriktheOutgolfer if you know that they need to be reversed you have no problem in distinguishing them :) – Leo – 2017-03-27T13:45:07.837
Unfortunately, the BF algorithm doesn't work if the divisor is
1
. – mbomb007 – 2017-03-27T13:45:49.470@mbomb007 Which BF algorithm? – Leo – 2017-03-27T13:47:59.070
The BF algorithm for divmod, of course. https://esolangs.org/wiki/Brainfuck_algorithms#Divmod_algorithm
– mbomb007 – 2017-03-27T13:56:08.000The code snippet doesn't appear to display anything? (Actually, it displays "Winners by Language
Language User Score" but nothing else.) – Brian McCutchon – 2017-03-27T22:30:41.230
@BrianMcCutchon strange, it worked fine earlier... unfortunately, I can't check it now since I'm from my phone. If anyone knows how to fix it feel free to edit the question, otherwise I'll have a look at it tomorrow morning. – Leo – 2017-03-27T22:42:26.157
If it helps, when I run it, I get "
[Error] Error: Syntax error, unrecognized expression: QBasic (<a href="https://drive.google.com/open?id=0B0R1Jgqp8Gg4UVliSTE0MzdLcEU" rel="nofollow noreferrer">Get it here</a>) 4.5
". – Brian McCutchon – 2017-03-27T23:17:33.727This error message contains part of the title of an answer to this question. (Are you trying to eval it?) I suggested an edit to said answer to make it follow your format as a temporary solution.
– Brian McCutchon – 2017-03-27T23:23:35.643I'd recommend adding that input will always be positive. Negative modulo is arbitrary in many languages, some return
remainder
while others return inverse-remainder (or x-rem). For example in C(-5)%(3)
is-2
whereas on Wolfram|Alpha(-5)%(3)
is1
. There is no defined standard. – Albert Renshaw – 2017-04-11T20:38:35.437@AlbertRenshaw
0<=a<=255, 1<=b<=255
, it's right there in the Input/Output rules ;) – Leo – 2017-04-11T20:40:36.160@Leo Haha! Thank you, I just cmd+f "positive" and "negative", silly me – Albert Renshaw – 2017-04-11T20:41:10.007
If this could be accomplished in a single operation by a method that isn't a divmod or meant to be a mathematical operation, would that be forbidden? I'm speaking of things like self-modifying code and abusing base-conversion... – 640KB – 2019-12-11T21:23:59.387