36
\$\begingroup\$

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 : 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>

\$\endgroup\$
  • \$\begingroup\$ Can I reverse the arguments, i.e. instead of providing a b providing b a instead? \$\endgroup\$ – Erik the Outgolfer Mar 27 '17 at 13:29
  • \$\begingroup\$ @EriktheOutgolfer: You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable \$\endgroup\$ – Emigna Mar 27 '17 at 13:30
  • \$\begingroup\$ @Emigna Yeah, I was not sure if reversing didn't make them indistinguishable though. \$\endgroup\$ – Erik the Outgolfer Mar 27 '17 at 13:32
  • \$\begingroup\$ @EriktheOutgolfer if you know that they need to be reversed you have no problem in distinguishing them :) \$\endgroup\$ – Leo Mar 27 '17 at 13:45
  • \$\begingroup\$ Unfortunately, the BF algorithm doesn't work if the divisor is 1. \$\endgroup\$ – mbomb007 Mar 27 '17 at 13:45

75 Answers 75

1 2
3
0
\$\begingroup\$

CJam, 7 bytes

q_~/n~%

Try it online!

n = print with trailing newline

-2 thanks to Martin Ender.
-3 thanks to Peter Taylor and Basic Sunset.I was thinking eval first then the rest.

| improve this answer | |
\$\endgroup\$
  • 2
    \$\begingroup\$ You can save a few bytes by duplicating the input string before evaling it: q_~/n~% \$\endgroup\$ – Business Cat Mar 27 '17 at 14:12
0
\$\begingroup\$

GolfScript, 6 bytes

.~/p~%

Try it online!

I'm literally on an answer spree!

-3 thanks to Peter Taylor.

| improve this answer | |
\$\endgroup\$
  • 2
    \$\begingroup\$ Why evaluate so early if it forces you into such complicated stack manipulations? .~/p~% and similarly for CJam. \$\endgroup\$ – Peter Taylor Mar 27 '17 at 14:12
  • \$\begingroup\$ @PeterTaylor That is very cool. \$\endgroup\$ – Erik the Outgolfer Mar 27 '17 at 14:41
0
\$\begingroup\$

Math++, 18 bytes

?>a
?>b
_(a/b)
a%b
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

ForceLang, 106 bytes

def N io.readnum()
def S set
S W gui.show
S a N
S b N
W S c math.floor a.mult b.pow -1
S c c.mult b
W a+-c
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Lua, 40 Bytes

a=arg;io.write(a[1]//a[2],",",a[1]%a[2])
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Pyth, 7 bytes

/QKE%QK

Online interpreter

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

REXX, 20 bytes

arg a b
say a%b a//b
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Fortran 95, 45 bytes

function f(i,j)
write(*,*)i/j,modulo(i,j)
end
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

jq, 25 characters

def f(a;b):a/b|floor,a%b;

Sample run:

bash-4.3$ jq -n 'def f(a;b):a/b|floor,a%b;f(255;25)'
10
5

On-line test

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Gema, 25 characters

* *=@div{*;*} @mod{$1;$2}

Sample run:

bash-4.3$ gema '* *=@div{*;*} @mod{$1;$2}' <<< '255 25'
10 5
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

AHK, 35 bytes

a=%1%
b=%2%
Send,% a//b ","Mod(a,b)

AutoHotkey assigns numbers 1-n as variable names for the incoming parameters. It causes some problems when you try to use those in functions because it thinks you mean the literal number 1 instead of the variable named 1. The best workaround I can find is to assign them to different variables.

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Sinclair ZX80 16-bit Integer BASIC (4K ROM), ~152 BASIC bytes used (listing)

 1 LET R=0
 2 PRINT "ENTER A NUMBER THEN DIVISOR"
 3 INPUT Z
 4 INPUT D
 5 PRINT Z;"/";D;"=";
 6 GO SUB 9
 7 PRINT R;" REMAINDER ";Z
 8 STOP
 9 FOR I=1 TO 0
10 LET Z=Z-D
11 LET R=R+1
12 LET I=(Z>D)+(Z=D)
13 NEXT I
14 RETURN

Some notes:

Because the ZX80 (with the old ROM) can only handle 16-bit signed integer numbers, your range is -32768 to +32767 for your inputs. There is no native modulo function, nor does there seem to be a >= (if there is then I can't find it) - hence why this had to be split in line 12.

I haven't handled the division by zero in the program, but I guess that it entering 0 as your divisor will keep the sub-routine from line 9 in an infinite loop (as it should), except for the 16-bit integer range, so Z/0 should be Z r ∞.

The byte count is only an approximation for now.

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Taxi, 1189 bytes

"," is waiting at Writer's Depot.Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l 2 r.Pickup a passenger going to What's The Difference.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Trunkers.Go to Trunkers:e 1 r 3 r 1 l.Pickup a passenger going to Cyclone.Go to Cyclone:w 2 r.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to What's The Difference.Go to Cyclone:s 1 r 2 l 2 r.Pickup a passenger going to The Babelfishery.Go to What's The Difference:n 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 3 r.Pickup a passenger going to Post Office.Go to Writer's Depot:n 1 l 1 l 2 l.Pickup a passenger going to Post Office.Go to The Babelfishery:n 1 r 2 r 1 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

Try it online!


With line breaks:

"," is waiting at Writer's Depot.
Go to Post Office:w 1 l 1 r 1 l.
Pickup a passenger going to The Babelfishery.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s 1 l 1 r.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Cyclone.
Go to Cyclone:n 1 l 1 l 2 r.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer:n 2 r 2 r 1 r.
Pickup a passenger going to Trunkers.
Go to Trunkers:e 1 r 3 r 1 l.
Pickup a passenger going to Cyclone.
Go to Cyclone:w 2 r.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:s 1 l 2 r 4 l.
Pickup a passenger going to What's The Difference.
Go to Cyclone:s 1 r 2 l 2 r.
Pickup a passenger going to The Babelfishery.
Go to What's The Difference:n 1 l.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:e 3 r.
Pickup a passenger going to Post Office.
Go to Writer's Depot:n 1 l 1 l 2 l.
Pickup a passenger going to Post Office.
Go to The Babelfishery:n 1 r 2 r 1 r.
Pickup a passenger going to Post Office.
Go to Post Office:n 1 l 1 r.
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

W r, 3 bytes

/@m

Explanation

abab    % Implicit ops
    /   % Divide a by b.                Stack: a b (a/b)
     @  % Roll down to show 2 operands. Stack: (a/b) a b
      m % Modulo the operands.          Stack: (a/b) (a%b)

% Output the whole stack
```
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

x86-16 machine code, 5 bytes (non-competing?)

88 1E 0105  MOV  BYTE PTR[AAM1+1], BL   ; modify second byte of AAM opcode for divisor
        AAM1:
D4 ?        AAM                         ; ASCII Adjust AX After Multiply

Input numbers in AL and BL. Output division in AH, remainder in AL.

This "abuses" the x86 "ASCII adjust after multiply" instruction intended to facilitate multiplication of binary coded decimal values (BCD), to convert results to base-10 values. These instructions were deprecated in x64, however as an under-documented feature this behavior can be altered by using self-modifying code to perform arbitrary base conversion of variable input data.

Caveat:

The challenge does state Builtins that return both the result of the division and the remainder are forbidden. These operations are always done at the same time in x86 machine code so not clear if this would disqualify the platform. This answer, however, does not use the x86's DIV instruction. Question posed to OP. :)

| improve this answer | |
\$\endgroup\$
1 2
3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.