Reciprocal of a number (1/x)

27

8

Challenge

Given a (floating-point/decimal) number, return its reciprocal, i.e. 1 divided by the number. The output must be a floating-point/decimal number, not just an integer.

Detailed specification

  • You must receive input in the form of a floating-point/decimal number...
    • ...which has at least 4 significant digits of precision (if needed).
    • More is better, but does not count in the score.
  • You must output, with any acceptable output method...
    • ...the reciprocal of the number.
    • This can be defined as 1/x, x⁻¹.
    • You must output with at least 4 significant digits of precision (if needed).

Input will be positive or negative, with absolute value in the range [0.0001, 9999] inclusive. You will never be given more than 4 digits past the decimal point, nor more than 4 starting from the first non-zero digit. Output needs to be accurate up to the 4th digit from the first non-zero one.

(Thanks @MartinEnder)

Here are some sample inputs:

0.5134
0.5
2
2.0
0.2
51.2
113.7
1.337
-2.533
-244.1
-0.1
-5

Note that you will never be given inputs which have above 4 digits of precision.

Here is a sample function in Ruby:

def reciprocal(i)
    return 1.0 / i
end

Rules

  • All accepted forms of output are allowed
  • Standard loopholes banned
  • This is , shortest answer in bytes wins, but will not be selected.

Clarifications

  • You will never receive the input 0.

Bounties

This challenge is obviously trivial in most languages, but it can offer a fun challenge in more esoteric and unusual languages, so some users are willing to award points for doing this in unusually difficult languages.

  • @DJMcMayhem will award a +150 points bounty to the shortest brain-flak answer, since brain-flak is notoriously difficult for floating-point numbers

  • @L3viathan will award a +150 points bounty to the shortest OIL answer. OIL has no native floating point type, nor does it have division.

  • @Riley will award a +100 points bounty to the shortest sed answer.

  • @EriktheOutgolfer will award a +100 points bounty to the shortest Sesos answer. Division in brainfuck derivatives such as Sesos is very difficult, let alone floating-point division.

  • I (@Mendeleev) will award a bounty of +100 points to the shortest Retina answer.

If there's a language you think would be fun to see an answer in, and you're willing to pay the rep, feel free to add your name into this list (sorted by bounty amount)

Leaderboard

Here is a Stack Snippet to generate an overview of winners by language.

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

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=114544,OVERRIDE_USER=62393;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()}})}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),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={};e.forEach(function(e){var o=e.language;/<a/.test(o)&&(o=jQuery(o).text().toLowerCase()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link,uniq:o}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.uniq>s.uniq?1:e.uniq<s.uniq?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).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>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#language-list{padding:10px;width:290px;float:left}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="//cdn.sstatic.net/codegolf/all.css?v=617d0685f6f3"> <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="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>

dkudriavtsev

Posted 2017-03-30T17:53:40.550

Reputation: 5 781

23

Please stop upvoting trivial answers

– user41805 – 2017-03-30T18:04:01.263

15@KritixiLithos People can vote as they see fit. Given the simplicity of this challenge, most, if not all answers are something like 1/x. – NoOneIsHere – 2017-03-30T18:08:22.250

3@NoOneIsHere ...until people have had enough time to implement the reciprocal in languages without floating point numbers and/or division. – Martin Ender – 2017-03-30T18:10:09.840

9This isn't objectively specified without very clear detail on accuracy and precision. – Peter Taylor – 2017-03-30T18:10:43.873

@PeterTaylor Different languages implement floating point numbers very differently. I can't think of a good way to write a spec. I would really appreciate help. – dkudriavtsev – 2017-03-30T18:11:46.873

1Related – Adnan – 2017-03-30T18:15:42.237

Regarding sed and Retina, there is a meta consensus that the input can be in unary. For floating point input I guess '3.5' can be given as '000.00000'. Do you allow it?

– seshoumara – 2017-03-30T18:47:02.830

@MartinEnder What I am saying is using most languages make the answer "uninteresting", but in any other language, the answer is bounty-worthy. – NoOneIsHere – 2017-03-30T18:57:52.540

@seshoumara How would you enter 3.1415 in unary? – Digital Trauma – 2017-03-30T19:02:49.777

@DigitalTrauma 000.<1415 zeroes> – Pavel – 2017-03-30T19:06:51.737

@seshoumara I guess... Would make it uninteresting though. I would prefer the (much harder) decimal alternative – dkudriavtsev – 2017-03-30T19:07:57.420

What about 3.05 then? That needs to be distinguishable for 3.5, they can’t both be 000.00000. – Lynn – 2017-03-30T19:15:13.957

@Lynn idea: the part after the decimal is reversed. So 3.5 is 000.00000, 1.15 is 0.0<51 zeroes>, 3.05 is 000.<50 zeroes> – Pavel – 2017-03-30T19:50:14.417

@ГригорийПерельман That is interesting, but now the point of saving bytes is defeated, so I might as well take the input in decimal, as the OP prefers. – seshoumara – 2017-03-30T20:03:40.460

1So how exactly does the input format work for very large or small numbers? Do we assume that there's always a . somewhere, at least one digit before and one digit after, and we ignore the exact value of all digits past the fourth from the first non-zero one? So input 123400.0 would be treated identically to 123456.78? – Martin Ender – 2017-03-30T20:19:48.153

And then can we assume that we'll always do get 4 significant digits? I.e. can we assume that 12.3 won't be given as input, but at least 12.30 instead? – Martin Ender – 2017-03-30T20:21:05.073

@MartinEnder No – dkudriavtsev – 2017-03-30T20:24:57.073

@MartinEnder All numbers you will be given are 4 significant or less. they can be given in 0.x, x, x.y, but not x.0 or .x – dkudriavtsev – 2017-03-30T20:26:50.763

6

What about accuracy? Presumably you want 4 sf of accuracy too, but then there's the issue of rounding. Floating point questions are hard to get right and very worth sandboxing.

– Peter Taylor – 2017-03-30T20:27:48.567

1@MendeleevLemon Don't be so stringent on input format. A language can have different data types, making x an integer, and x.0 a decimal/float. A language should be able to use its native representation of a floating point number, if it has one. – mbomb007 – 2017-03-30T20:29:25.610

2This is still really underspecified and shouldn't have been re-opened. – AdmBorkBork – 2017-03-30T20:47:05.160

2@MendeleevLemon Can we choose how to round? – Martin Ender – 2017-03-30T21:34:49.950

@MendeleevLemon May the output have leading zeroes? (e.g. 000.3333 or 024.424) – L3viathan – 2017-03-30T21:52:28.850

@MartinEnder Please clarify. – dkudriavtsev – 2017-03-30T23:03:45.093

@L3viathan Yes. – dkudriavtsev – 2017-03-30T23:03:53.437

@MendeleevLemon Can we e.g. choose to round 0.12345 as 0.1234? – L3viathan – 2017-03-30T23:19:03.023

Can we have our input padded with extra zeros. E.g. instead of 5 we take 5.00000 as input? – Post Rock Garf Hunter – 2017-03-30T23:53:10.830

@L3viathan Sure, I guess – dkudriavtsev – 2017-03-31T01:39:09.453

@WheatWizard Yeah – dkudriavtsev – 2017-03-31T01:39:18.290

10-1, this is a poor challenge because using a builtin is the ONLY way to do it and know you have satisfied the "specification". If you have a standard floating point implementation, you can use it and tell yourself this is standard floating point, it must be ok. If you have to implement it yourself, there is no specification so you can't sensibly try to golf it. – feersum – 2017-03-31T05:12:31.190

Can we output results below 1 as .123 (i.e. without the leading zero)? – Martin Ender – 2017-03-31T07:04:07.260

Can scientific notation be used for output? – Poke – 2017-03-31T13:46:42.387

As a bonus, your title contains a huge part of the solution for dozens of languages. – Eric Duminil – 2017-03-31T21:48:49.537

Can we round the answer? Say for input 11 we output .090909091 – user41805 – 2017-04-01T06:21:33.987

@KritixiLithos Sure... – dkudriavtsev – 2017-04-01T07:36:41.487

2Those bounties are not able to be given. You cannot do arbitrary amounts repeatedly. You can do 50, 100, 200, 400 then 500 – Tim – 2017-04-01T09:06:06.023

Can we output with trailing zeroes? For example, outputting .5000000000 for input 2 – user41805 – 2017-04-01T16:42:37.253

2@Tim I believe that is only the case for a single user. Separate users can bounty how they see fit. – Post Rock Garf Hunter – 2017-04-01T17:22:13.167

@MartinEnder Yes – dkudriavtsev – 2017-04-01T20:05:52.713

Argh, all the languages on bounty has no division at all! – Matthew Roh – 2017-04-02T04:51:08.727

4@SIGSEGV That's precisely why there are bounties for these languages – user41805 – 2017-04-02T07:30:56.903

@DJMcMayhem Your bounty can now be assigned – dkudriavtsev – 2017-04-08T20:37:30.107

And what has to happen with input 0.0000001? – RosLuP – 2017-04-17T19:54:20.997

@RosLuP 4 significant digits, that input will never occur because it is basically 0 – dkudriavtsev – 2017-04-17T22:08:48.693

I'm assuming that fraction number formats cannot be outputted? – Value Ink – 2017-07-11T20:12:59.433

Answers

58

Brain-Flak, 772 536 530 482 480 + 1 = 481 bytes

Since Brain-Flak does not support floating point numbers I had to use the -c flag in order input and output with strings, hence the +1.

(({})[((((()()()()())){}{})){}{}]){((<{}>))}{}({}<{({}[((((()()()){}())()){}{}){}]<>)<>}<>{({}<>[()()])<>}{}([]<{({}<>[()()])<>}>)<>([[]](())){({}()<((((((({}<(((({})({})){}{}){}{})>)({})){}{}){})({})){}{}){})>)}{}({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>){({}<((()()()()()){})>(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><([{}()]{})>)}{}<>({}()<<>([]){{}({}<>)<>([])}{}<>>){({}[()]<({}<>((((()()()){}){}){}){})<>>)}{}([()()])([]){{}({}<>((((()()()){}){}){}){})<>([])}<>>)

Try it online!

Explanation

The first thing we need to take care of is the negative case. Since the reciprocal of a negative number is always negative we can simply hold on to the negative sign until the end. We start by making a copy of the top of the stack and subtracting 45 (the ASCII value of -) from it. If this is one we put a zero on the top of the stack, if not we do nothing. Then the we pick up the top of the stack to be put down at the end of the program. If the input started with a - this is still a - however if it is not we end up picking up that zero we placed.

(({})[((((()()()()())){}{})){}{}]){((<{}>))}{}
({}<

Now that that is out of the way we need to convert the ASCII realizations of each digit into there actual values (0-9). We also are going to remove the decimal point . to make computations easier. Since we need to know where the decimal point started when we reinsert it later we store a number to keep track of how many digits were in front of the . on the offstack.

Here is how the code does that:

We start by subtracting 46 (the ASCII value of .) from each element on the stack (simultaneously moving them all onto the offstack). This will make each digit two more than should be but will make the . exactly zero.

{({}[((((()()()){}())()){}{}){}]<>)<>}<>

Now we move everything onto the left stack until we hit a zero (subtracting two from each digit while we go):

{({}<>[()()])<>}{}

We record the stack height

([]<

Move everything else onto the left stack (once again subtracting the last two from every digit as we move them)

  {({}<>[()()])<>}

And put the stack height we recorded down

>)

Now we want to combine the digits into a single base 10 number. We also want to make a power of 10 with twice the digits as that number for use in the calculation.

We start by setting up a 1 on top of the stack to make the power of 10 and pushing the stack height minus one to the on stack for the use of looping.

<>([][(())])

Now we loop the stack height minus 1 times,

{
 ({}[()]<

Each time we multiply the top element by 100 and underneath it multiply the next element by 10 and add that to the number below.

 ((((((({}<(((({})({})){}{}){}{})>)({})){}{}){})({})){}{}){})

We end our loop

 >)
}{}

Now we are finally done with the set up and can begin the actual calculation.

({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)

That was it...

We divide the power of 10 by the modified version of the input using 0 ''s integer division algorithm as found on the wiki. This simulates the division of 1 by the input the only way Brain-Flak knows how.

Lastly we have to format our output into the appropriate ASCII.

Now that we have found ne we need to take out the e. The first step to this is converting it to a list of digits. This code is a modified version of 0 ''s divmod algorithm.

{({}<((()()()()()){})>(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><([{}()]{})>)}{}

Now we take the number and add the decimal point back where it belongs. Just thinking about this part of the code brings back headaches so for now I will leave it as an exercise for the reader to figure out how and why it works.

<>({}()<<>([]){{}({}<>)<>([])}{}<>>){({}[()]<({}<>((((()()()){}){}){}){})<>>)}{}([()()])([]){{}({}<>((((()()()){}){}){}){})<>([])}<>

Put the negative sign down or a null character if there is no negative sign.

>)

Post Rock Garf Hunter

Posted 2017-03-30T17:53:40.550

Reputation: 55 382

18+1, I love how much of this explanation is I don't know what this does or why I need it, but I promise it's important. – James – 2017-03-31T04:31:23.887

This doesn't seem to work for input 1.0 or 10 – Poke – 2017-03-31T13:11:56.213

3Can anybody else read this code? Is Brain-Flak meant to be write-only? – Eric Duminil – 2017-03-31T21:54:42.280

1@EricDuminil Brain-flak is an esoteric language so it is very hard to read at a glance. People who are well versed in Brain-Flak can read it to some degree of fluency. But this task in incredibly complex and Brain-Flak is not really designed with readability in mind. – Post Rock Garf Hunter – 2017-03-31T22:43:13.333

@ThisGuy It requires the -c flag to be run with ASCII in and out. Since Brain-Flak doesn't support floating numbers I need to take IO as a string. – Post Rock Garf Hunter – 2017-04-01T21:01:43.380

I was going to do this :( Now I am sad – Christopher – 2017-05-07T23:12:12.940

47

Python 2, 10 bytes

1..__div__

Try it online!

Dennis

Posted 2017-03-30T17:53:40.550

Reputation: 196 637

5Dot. Dot. Div. +1 :) – caird coinheringaahing – 2017-04-01T20:26:01.273

37

Retina, 99 91 bytes

1`\.|$
8$*;
+`;(;*)(\d)
$2$1
\d+
$*1,10000000$*
(1+),(\1)+1*
$#2
+`(\d)(;+);
$2$1
1`;
.
;
0

Try it online!

Woohoo, sub-100! This is surprisingly efficient, considering that it creates (and then matches against) a string with more than 107 characters at one point. I'm sure it's not optimal yet, but I'm quite happy with the score at the moment.

Results with absolute value less than 1 will be printed without the leading zero, e.g. .123 or -.456.

Explanation

The basic idea is to using integer division (because that's fairly easy with regex and unary arithmetic). To ensure that we get a sufficient number of significant digits, we divide the input into 107. That way, any input up to 9999 still results in a 4-digit number. Effectively, that means we're multiplying the result by 107 so we need to keep track of that when later reinsert the decimal point.

1`\.|$
8$*;

We start by replacing the decimal point, or the end of the string if there is no decimal point with 8 semicolons. The first one of them is essentially the decimal point itself (but I'm using semicolons because they don't need to be escaped), the other 7 indicate that value has been multiplied by 107 (this isn't the case yet, but we know we will do that later).

+`;(;*)(\d)
$2$1

We first turn the input into an integer. As long as there are still digits after the decimal point, we move one digit to the front and remove one of the semicolons. This is because moving the decimal point right multiplies the input by 10, and therefore divides the result by 10. Due to the input restrictions, we know this will happen at most four times, so there are always enough semicolons to be removed.

\d+
$*1,10000000$*

Now that the input is an integer, we convert it to unary and append 107 1s (separated by a ,).

(1+),(\1)+1*
$#2

We divide the integer into 107 by counting how many backreferences to it fit ($#2). This is standard unary integer division a,b --> b/a. Now we just need to correct the position of the decimal point.

+`(\d)(;+);
$2$1

This is basically the inverse of the second stage. If we still have more than one semicolon, that means we still need to divide the result by 10. We do this by moving the semicolons one position to the left and dropping one semicolon until we either reach the left end of the number, or we're left with only one semicolon (which is the decimal point itself).

1`;
.

Now is a good time to turn the first (and possibly only) ; back into ..

;
0

If there are still semicolons left, we've reached the left end of the number, so dividing by 10 again will insert zeros behind the decimal point. This is easily done by replacing each remaining ; with a 0, since they're immediately after the decimal point anyway.

Martin Ender

Posted 2017-03-30T17:53:40.550

Reputation: 184 808

A very short algorithm, +1. I bet the sed translation would be the shortest as well. Can you replace \B; with ^; to save 1 byte? – seshoumara – 2017-03-31T16:11:41.080

@seshoumara No because of negative inputs, where there's a - in front of the ;. – Martin Ender – 2017-03-31T16:17:48.083

31

yup, 5 bytes

|0~-e

Try it online! This takes input from the top of the stack and leaves output on the top of the stack. The TIO link takes input from command line arguments, which is only capable of taking integer input.

Explanation

yup only has a few operators. The ones used in this answer are ln(x) (represented by |), 0() (constant, nilary function returning 0), (subtraction), and exp(x) (represented by e). ~ switches the top two members on the stack.

|0~-e     top of the stack: n    stack: [n]
|         pop n, push ln(n)      stack: [ln(n)]
 0        push 0                 stack: [ln(n), 0]
  ~       swap                   stack: [0, ln(n)]
   -      subtract               stack: [-ln(n)]
    e     exp                    stack: [exp(-ln(n))]

This uses the identity

x/y = e^(ln(x)-ln(y))

which implies that

Conor O'Brien

Posted 2017-03-30T17:53:40.550

Reputation: 36 228

3I'd love to improve my content, so if you'd explain your downvote, that would really help and I would appreciate that :) – Conor O'Brien – 2017-04-02T19:58:06.917

20

LOLCODE, 63, 56 bytes

HOW DUZ I r YR n 
VISIBLE QUOSHUNT OF 1 AN n
IF U SAY SO

7 bytes saved thanks to @devRicher!

This defines a function 'r', which can be called with:

r 5.0

or any other NUMBAR.

Try it online!

James

Posted 2017-03-30T17:53:40.550

Reputation: 54 537

I guess you could use ITZ A NUMBAR in the assignment of I? – ckjbgames – 2017-03-31T00:01:16.423

1HOW DUZ I r YR n VISIBLE QUOSHUNT OF 1 AN n IF U SAY SO (add newlines) is a few bytes shorter and can be called with r d, where d is any NUMBAR. – devRicher – 2017-03-31T07:19:40.847

You can use IZ instead of DUZ because of interpreter rule – OldBunny2800 – 2017-04-02T22:29:08.160

17

sed, 575 + 1 (-r flag) = 723 718 594 588 576 bytes

s/$/\n0000000000/
tb
:b
s/^0+//
s/\.(.)(.*\n)/\1.\2/
tD
bF
:D
s/.*/&&&&&&&&&&/2m
tb
:F
s/\.//
h
s/\n.+//
s/-//
:
s/\b9/;8/
s/\b8/;7/
s/\b7/;6/
s/\b6/;5/
s/\b5/;4/
s/\b4/;3/
s/\b3/;2/
s/\b2/;1/
s/\b1/;0/
s/\b0//
/[^;]/s/;/&&&&&&&&&&/g
t
y/;/0/
x
G
s/[^-]+(\n0+)\n(0+)/\2\1/
s/\n0+/&&\n./
:a
s/^(-?)(0*)0\n0\2(.*)$/\10\2\n\30/
ta
s/.*/&&&&&&&&&&/2m
s/\n0(0*\n\..*)$/\n\1 x/
Td
s/x//
ta
:d
s/[^-]+\n//
s/-(.+)/\1-/
s/\n//
:x
s/^0{10}/0x/
s/(.)0{10}/0\1/
tx
s/00/2/g
s/22/4/g
y/0/1/
s/41/5/g
s/21/3/g
s/45/9/g
s/44/8/g
s/43/7/g
s/42/6/g
y/ /0/
s/([1-9])0/\1/g
y/x/0/
s/(.+)-/-\1/

Try it online!

Note: floats for which the absolute value is less than 1 will have to be written without a leading 0 like .5 instead of 0.5. Also the number of decimal places is equal to enter image description here, where n is the number of decimal places in the number (so giving 13.0 as input will give more decimal places than giving 13 as input)

This is my first sed submission on PPCG. Ideas for the decimal-to-unary conversion were taken from this amazing answer. Thanks to @seshoumara for guiding me through sed!

This code performs repeated long division to get the result. The division only takes ~150 bytes. The unary-decimal conversions take the most bytes, and a few other bytes go to supporting negative numbers and floating-point inputs

Explanation

Explanation on TIO

#Append 10 0's. This is the dividend, I think
s/$/\n0000000000/
tb

#This branch moves the decimal point 1 to the right
:b
#Remove leading 0's (such as from numbers like .05 => 0.5)
s/^0+//
#Move the decimal point 1 to the right
s/\.(.)(.*\n)/\1.\2/
#If the above has resulted in a successful substitution, go to branch D
tD
#else go to branch F
bF

#Multiply the dividend by 10; also keeps the mood positive
:D
s/.*/&&&&&&&&&&/2m
#Then go back to branch b
tb

:F
#Remove decimal point since it is all the way to the right now
s/\.//
h
#Remove "unnecessary" things
s/\n.+//
s/-//

#Convert to unary
:
s/\b9/;8/
s/\b8/;7/
s/\b7/;6/
s/\b6/;5/
s/\b5/;4/
s/\b4/;3/
s/\b3/;2/
s/\b2/;1/
s/\b1/;0/
s/\b0//
/[^;]/s/;/&&&&&&&&&&/g
t
y/;/0/

#Append the unary number to the pattern space
x
G
s/[^-]+(\n0+)\n(0+)/\2\1/

### END Decimal-to-Unary conversion
### BEGIN Division

#Performs Long Division
#Format looks something like this (can't remember): divisor\ndividend\ncount\nresult
#Count controls how many decimal places the answer should have; dp => 10^numDigits(n)
#Removes divisor from dividend and then add a 0 to result
#Once the dividend becomes too small, append a space to result and remove a zero from count
#Rinse and repeat
s/\n0+/&&\n./
:a
s/^(-?)(0*)0\n0\2(.*)$/\10\2\n\30/
ta
s/.*/&&&&&&&&&&/2m
s/\n0(0*\n\..*)$/\n\1 x/
Td
s/x//
ta

### END DIVISION
### BEGIN Unary-to-Decimal conversion

:d
s/[^-]+\n//
s/-(.+)/\1-/
s/\n//

#"carry over"-ing; .0000000000 => 0.
:x
s/^0{10}/0x/
s/(.)0{10}/0\1/
tx

#Convert each pair of unary 0s to their decimal counterparts
s/00/2/g
s/22/4/g
y/0/1/
s/41/5/g
s/21/3/g
s/45/9/g
s/44/8/g
s/43/7/g
s/42/6/g
y/ /0/
s/([1-9])0/\1/g
y/x/0/
s/(.+)-/-\1/

Edits

  • s:s/(.)/(.)/g:y/\1/\2/g:g to save 1 byte at each substitution (5 in total)
  • Saved a ton of bytes by looking at a nice decimal-to-unary converter on "Tips for golfing in sed"
  • I changed around some substitutions revolved around taking care of the minus sign to save 6 bytes.
  • Used \n instead of ; as the separator, then I was able to shorten the "multiply by 10" substitutions to save 12 bytes (thanks to @Riley and @seshoumara for showing me this)

user41805

Posted 2017-03-30T17:53:40.550

Reputation: 16 320

You made it! +1 – seshoumara – 2017-04-01T18:51:42.500

16

JSFuck, 3320 bytes

JSFuck is an esoteric and educational programming style based on the atomic parts of JavaScript. It uses only six different characters ()[]+! to write and execute code.

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]])+[])[!+[]+!+[]]+[+!+[]]+(![]+[+![]])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+!+[]+[+[]]]+(!![]+[])[+[]]+(+(+!+[]+[+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+[+!+[]])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]+!+[]])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]

Try it online!

alert(
  /* empty array       */ []
  /* ['fill']          */ [(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]
  /* ['constructor']   */ [([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]
  /* ('return+1/this') */ ((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]])+[])[!+[]+!+[]]+[+!+[]]+(![]+[+![]])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+!+[]+[+[]]]+(!![]+[])[+[]]+(+(+!+[]+[+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+[+!+[]])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]+!+[]])
  /* ['call']          */ [([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]
  (prompt())
)

powelles

Posted 2017-03-30T17:53:40.550

Reputation: 1 277

1This language-subset is hard to golf by hand but easy to automate (as a conversion from ordinary JavaScript). – wizzwizz4 – 2017-03-30T20:41:24.830

True, but the character count of the source doesn't directly relate to the output length. – powelles – 2017-03-30T20:49:31.357

4I was trying to convey that, if you have a source, it's easier to automate the golfy conversion than do a golfy version by hand. – wizzwizz4 – 2017-03-30T20:52:00.240

4@wizzwizz4 Even when it's automated, it's also tricky to find out which "core" JavaScript code actually produces the shortest program. In this particular case, return 1/this would be about 76 bytes longer than return+1/this. – ETHproductions – 2017-03-31T00:43:41.850

[].fill.constructor('alert(1/prompt())') 2929 bytes https://paste.ubuntu.com/p/5vGTqw4TQQ/ add () 2931 – l4m2 – 2018-03-18T15:55:18.047

16

OIL, 1428 1420 bytes

Oh well. I thought I might as well try it, and I did in the end succeed. There's just one downside: It takes almost as long to run as it took to write.

The program is separated into multiple files, which have all 1-byte-filenames (and count for one additional byte in my byte calculation). Some of the files are part of the example files of the OIL language, but there's no real way to consistently call them (there's no search path or anything like that in OIL yet, so I don't consider them a standard library), but that also means that (at the time of posting) some of the files are more verbose than neccessary, but usually only by a few bytes.

The computations are accurate to 4 digits of precision, but calculating even a simple reciprocal (such as the input 3) takes a really long time (over 5 minutes) to complete. For testing purposes, I've also made a minor variant that's accurate to 2 digits, which takes only a few seconds to run, in order to prove that it does work.

I'm sorry for the huge answer, I wish I could use some kind of spoiler tag. I could also put the bulk of it on gist.github.com or something similar, if desired.

Here we go: main, 217 bytes (file name doesn't count for bytes):

5
1
1
4
-
14
a
5
Y
10
5
8
14
29
12
1
97
1
97
24
9
24
13
99

1
1
4
31
1
35

14
a
32
.
10
32
8
50
41
1
53
2
14
b
1
1
6
72
14
c
5
0000
14
d
6
6
10
74
5
63
68
1
6
1
6
72
14
b
1
5
1
77
0
14
e
1
0
14
f
1
1
1
31
0
14
b
0
0
4

a (checks if a given string is in a given other string), 74+1 = 75 bytes:

5
0
5
1
14
g
2
0
10
2
30
24
13
10
1
31
27
18
14
h
1
1
6
4
4
30
3
4
29
N
Y

b (joins two given strings), 20+1=21 bytes:

5
0
5
1
13
0
2
0
4
0

c (given a symbol, splits the given string at its first occurrence), 143+1=144 bytes (this one is obviously still golfable):

5
0
5
83
12
83
83





10
84
0
21
17
8
13
6
12
1
13
1
1
5
2
14
i
45
1
1
83
1
1
45
2
14
i
57
1
9
45
13
84

1



8
13
1
13
56
13
13

2
4
1
11
4
2

d (given a string, gets the first 4 characters), 22+1=23 bytes:

5
0
12
0
20
13
21
4

4

e (high-level division (but with zero division danger)), 138+1=139 bytes:

5
0
5
1
.
.
1
1
6
14
j
0
0
1
0
4
10
11
1
58
21
14
b
4
4
1
1
15
14
k
0
15
1
6
1
14
j
0
0
1
0
5
14
b
4
4
9
8
10
8
11
58
53
10
11
1
58
25
4
4

f (moves a dot 4 positions to the right; "divides" by 10000), 146+1=147 bytes:

5
.
12
0
100
10
101
1
14
10
8
6
6
5
1
6
34
1
6
33
8
33
1
6
37
8
37
10
55
3
48
32
1
102
101
1
1
102
9
55
8
34
8
33
8
37
6
27
1
100
53
13
101


4

4

g (checks if a string starts with a given character), 113+1=114 bytes:

5
0
5
1
12
0
100
12
1
200
1
6
2
1
9
3
8
2
8
3
9
100
9
200
1
2
31
1
3
32
10


39
35
4
38
3
N
10
100
5
44
16
4
46
Y

h (returns everything but the first character of a given string), 41+1=42 bytes:

5
0
12
0
100
9
100
1
100
12
13
102

0
4
0

i (subtracts two numbers), 34+1=35 bytes:

5
0
5
1
10
16
1
14
9
9
0
9
1
6
4
0

j (low-level division that doesn't work in all cases), 134+1=135 bytes:

5
0
5
2
10
2
19
52
9
1
2
3
10
23
2
28
17
10
23
0
35
22
9
0
9
2
6
12
8
1
1
3
2
6
17
10
23
2
46
40
9
2
9
3
6
35
4
1
11
4
3
3
4
19
11
4
0

k (multiplication), 158+1=159 bytes:

5
0
5
1
8
0
9
0
8
1
9
1
1
5
2
12
0
68
10
69
66
23
29
8
7
14
l
0
0
12
1
68
10
69
66
37
43
8
7
14
l
1
1
10
0
5
56
48
9
0
14
m
2
1
6
43
10
7
3
61
63
4
66
4
2
3
-

l (return absolute value), 58+1=59 bytes:

5
-
12
0
24
10
25
1
13
10
4
0
3
9
24
1
24
20
13
26

0
6
10

m (addition), 109+1=110 bytes:

5
0
5
1
8
0
9
0
8
1
9
1
12
1
46
10
47
45
31
20
10
1
43
42
25
9
1
8
0
6
20
10
1
43
42
36
8
1
9
0
6
31
4
0
3
-

L3viathan

Posted 2017-03-30T17:53:40.550

Reputation: 3 151

15

J, 1 byte

%

% is a function giving the reciprocal of its input. You can run it like this

   % 2
0.5

Loovjo

Posted 2017-03-30T17:53:40.550

Reputation: 7 357

15

Vim, 10 8 bytes/keystrokes

C<C-r>=1/<C-r>"

Since V is backwards compatible, you may Try it online!

James

Posted 2017-03-30T17:53:40.550

Reputation: 54 537

@NonlinearFruit No, it didn't. Turns out, I was overthinking it, and supporting that is actually less bytes, not more. Thanks! – James – 2017-03-30T18:29:11.750

This is really interesting. I wonder if it's possible to do the same thing without using the =. Solely relying on other macros, registers for holding memory, and keys to navigate and modify data. Would be much more complex but I think it would be so cool! I think f would play a huge role as a conditional test. – Stefan Aleksić – 2017-03-31T08:33:15.130

If input is 6431, the output should be 0.0001554, or more precise, but not 0. – seshoumara – 2017-03-31T09:19:24.983

1@seshoumara I think you need to input 6431.0 so it's treated as a floating point number – Poke – 2017-03-31T13:04:18.340

@Poke I tried it and it works, but the output is in scientific notation. Is that allowed? – seshoumara – 2017-03-31T13:39:47.693

@seshoumara I don't see anything against it and it does still have 4 significant figures. I'll ask in a comment – Poke – 2017-03-31T13:44:55.477

15

Taxi, 467 bytes

Go to Starchild Numerology:w 1 l 2 r 1 l 1 l 2 l.1 is waiting at Starchild Numerology.Pickup a passenger going to Divide and Conquer.Go to Post Office:w 1 r 2 r 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:e 4 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 1 r.Pickup a passenger going to Post Office.Go to Post Office:e 1 l 1 r.

Try it online!

Ungolfed:

Go to Starchild Numerology:west 1 left, 2 right, 1 left, 1 left, 2 left.
1 is waiting at Starchild Numerology.
Pickup a passenger going to Divide and Conquer.
Go to Post Office:west 1 right, 2 right, 1 right, 1 left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:south 1 left, 1 right.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer:east 4 left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:east 1 right.
Pickup a passenger going to Post Office.
Go to Post Office:east 1 left, 1 right.

Erik the Outgolfer

Posted 2017-03-30T17:53:40.550

Reputation: 38 134

Would you mind adding a non-golfed version for easier readability? – Kevin Cruijssen – 2017-03-31T07:07:38.707

@KevinCruijssen Sure, it's just that when I answered this it was late night. – Erik the Outgolfer – 2017-03-31T07:08:06.237

11

C, 15 12 bytes

#define f 1/

Try it online!

16 13 bytes, if it needs to handle integer input also:

#define f 1./

So you can call it with f(3) instead of f(3.0).

Try it online!

Thanks to @hvd for golfing 3 bytes!

Steadybox

Posted 2017-03-30T17:53:40.550

Reputation: 15 798

The original version of your program has been lost to the consecutive-edit merger, so the ---17--- is a little meaningless. – wizzwizz4 – 2017-03-30T20:42:40.313

2Could you change the language name to "C Preprocessor?" – ckjbgames – 2017-03-30T23:58:26.030

4Being very picky, this doesn't "compute" the value; it just replaces f(x) with 1/x. When the "function" is executed, which can happen as late as runtime or as early as your compiler feels like (and can prove correct), is technically not the preprocessor step. – CAD97 – 2017-03-31T05:46:23.460

Also this won't work if x is an expression that includes other operators (e.g. 5+3) – fluffy – 2017-03-31T08:09:22.490

@fluffy That's not relevant. – pipe – 2017-03-31T11:39:40.390

It doesn't work with integer inputs, however. – pipe – 2017-03-31T11:40:10.737

@pipe It doesn't need to work with integer inputs. From the question: "Given a (floating-point/decimal) number" – Steadybox – 2017-03-31T12:21:05.007

@Steadybox It's also clear from the examples that 2 and -5 are a valid inputs, which will be treated as an integers here. – pipe – 2017-03-31T12:23:36.130

@pipe That's because they are integer literals. Using 2.0 and -5.0 instead will work. – Steadybox – 2017-03-31T12:25:03.250

1@Steadybox I'm literally quoting from the sample input section in the challenge description. Your code will get 2 and -5 as input. Both 2 and -5 are decimals, containing digits in the range 0 to 9. – pipe – 2017-03-31T12:28:57.400

2There is no need for a function-like macro: #define f 1./ works too. – hvd – 2017-04-01T16:09:12.623

2"Being very picky, this doesn't "compute" the value; it just replaces f(x) with 1/x." I'm that picky. This is entirely possible to do using the C preprocessor, but one shouldn't claim to have done something in the C preprocessor if one requires C or C++ to actually do it. – H Walters – 2017-04-02T23:42:04.817

1@HWalters That's why the language name in the answer originally was C, not C preprocessor. I think I'll change it back. – Steadybox – 2017-04-03T09:27:54.603

11

x86_64 Linux machine language, 5 bytes

0:       f3 0f 53 c0             rcpss  %xmm0,%xmm0
4:       c3                      retq

To test this, you can compile and run the following C program

#include<stdio.h>
#include<math.h>
const char f[]="\xf3\xf\x53\xc0\xc3";
int main(){
  for( float i = .1; i < 2; i+= .1 ) {
    printf( "%f %f\n", i, ((float(*)(float))f)(i) );
  }
}

Try it online!

ceilingcat

Posted 2017-03-30T17:53:40.550

Reputation: 5 503

1We might want to add that rcpss only calculates an approximate reciprocal (around 12 bit precision). +1 – Christoph – 2017-03-31T06:28:36.253

10

MATLAB / Octave, 4 bytes

@inv

Creates a function handle (named ans) to the built-in inv function

Online Demo

Suever

Posted 2017-03-30T17:53:40.550

Reputation: 10 257

8

05AB1E, 1 byte

z

Try it online!

z # pop a  push 1 / a

Riley

Posted 2017-03-30T17:53:40.550

Reputation: 11 345

8

GNU sed, 377 362 + 1(r flag) = 363 bytes

Warning: the program will eat all the system memory trying to run and require more time to finish than you'd be willing to wait! See below for an explanation and a fast, but less precise, version.

s:\.|$:,,,,,,,,:;:i;s:,(,+)(\w):\2\1:;ti
h;:;s:\w::2g;y:9876543210:87654321\t :;/ /!s:,:@,:;/\s/!t;x;s:-?.::;x;G;s:,.*::m;s:\s::g;/\w/{s:@+:&&&&&&&&&&:;t}
/@,-?@/!{s:^:10000000,:;h;t}
:l;s:(@+)(,-?\1):\2;:;tl;s:,::;s:@+;?@+::
s:-?:&0:;:c;s:\b9+:0&:;s:.9*;:/&:;h;s:.*/::;y:0123456789:1234567890:;x;s:/.*::;G;s:\n::;s:;::;/;/tc
:f;s:(\w)(,+),:\2\1:;tf;s:,:.:;y:,:0:

This is based on the Retina answer by Martin Ender. I count \t from line 2 as a literal tab (1 byte).

My main contribution is to the conversion method from decimal to plain unary (line 2), and vice versa (line 5). I managed to significantly reduce the size of code needed to do this (by ~40 bytes combined), compared to the methods shown in a previous tip. I created a separate tip answer with the details, where I provide ready to use snippets. Because 0 is not allowed as input, a few more bytes were saved.

Explanation: to better understand the division algorithm, read the Retina answer first

The program is theoretically correct, the reason why it consumes so much computational resources is that the division step is run hundred of thousands of times, more or less depending on the input, and the regex used gives rise to a backtracking nightmare. The fast version reduces the precision (hence the number of division steps), and changes the regex to reduce the backtracking.

Unfortunately, sed doesn't have a method to directly count how many times a backreference fits into a pattern, like in Retina.

s:\.|$:,,,,,,,,:             # replace decimal point or end of string with 8 commas
:i                           # loop to generate integer (useful for unary division)
  s:,(,+)(\w):\2\1:          # move 1 digit in front of commas, and delete 1 comma
ti                           # repeat (':i')
h;:                          # backup pattern and start decimal to unary conversion
  s:\w::2g                   # delete decimal digits, except the first (GNU magic)
  y:9876543210:87654321\t :; # transliterate characters
  / /!s:,:@,:                # if no space is present, append a unary digit ('@')
  /\s/!t                     # if no whitespace is present, go back to ':'
  x;s:-?.::;x                # delete first digit and the negative sign from backup
  G;s:,.*::m;s:\s::g         # append backup, delete whitespace and duplicate stuff
/\w/{s:@+:&&&&&&&&&&:        # if decimal digit left, multiply unary number by 10
t}                           # and repeat (':')
/@,-?@/!{                    # if only one unary number found (the input)
  s:^:10000000,:             # prepend decimal 10^7 separated by a comma
h;t}                         # backup pattern and convert new number to unary also
:l                           # start unary division loop (tons of RAM and time!!!)
  s:(@+)(,-?\1):\2;:         # delete as many '@'s from 10^7, as found in unary
                             #input, and add one ';' (new unary digit)
tl                           # repeat (':l')
s:,::;s:@+;?@+::             # delete leftover stuff
s:-?:&0:;:c                  # prepend zero and start unary to decimal conversion
  s:\b9+:0&:                 # if only 9s found, prepend zero to them
  s:.9*;:/&:                 # separate the digit(s) that would change on increment
  h;s:.*/::                  # backup, delete all (non-changing) digits (till '/')
  y:0123456789:1234567890:   # increment changing digit(s)
  x;s:/.*::                  # delete changing digits from backup
  G;s:\n::                   # append backup, delete newline
  s:;::                      # delete one unary digit (';')
/;/tc                        # if unary portion left, repeat (':c')
:f                           # loop to generate floating-point number
  s:(\w)(,+),:\2\1:          # move 1 digit after the commas, and delete 1 comma
tf                           # repeat (':f')
s:,:.:                       # turn first comma into a decimal point
y:,:0:                       # turn the rest of commas into zeroes (final result)
                             # implicit printing

For a fast and safe version of the program, but less precise, you can try this online.

seshoumara

Posted 2017-03-30T17:53:40.550

Reputation: 2 878

7

Javascript ES6, 6 bytes

x=>1/x

Try it online!

Javascript defaults to floating point division.

fəˈnɛtɪk

Posted 2017-03-30T17:53:40.550

Reputation: 4 166

I am unfamiliar with the way your created and called f(). Can you explain that a little, or suggest a reference? – TecBrat – 2017-03-31T13:46:49.503

@TecBrat This is an anonymous function. In the try it online link I have f= in the header to assign the anonymous function so that it can be called. In the footer I have console.log(f(whatever number)) to output the result of calling the function – fəˈnɛtɪk – 2017-03-31T14:02:11.727

Shouldn't your total be 8 Bytes then? – TecBrat – 2017-03-31T14:08:26.987

@TecBrat The anonymous function is an answer without having to assign it. – fəˈnɛtɪk – 2017-03-31T14:15:37.423

I'm not trying to argue. I'm trying to learn. How does this work? – TecBrat – 2017-03-31T14:23:05.380

1

@TecBrat The function is x=>1/x, which is equivalent to function(x){return 1/x}. As according to this answer in meta, which is referencing this consensus, anonymous functions that will perform the requested task are a valid answer to the challenge.

– fəˈnɛtɪk – 2017-03-31T14:31:22.227

I was not familiar with arrow functions. I see there is a proposal for them in PHP. I hope it goes through. #ilearnedsomethingtoday – TecBrat – 2017-03-31T15:45:17.527

7

APL, 1 byte

÷

÷ Computes reciprocal when used as monadic function. Try it online!

Uses the Dyalog Classic character set.

Uriel

Posted 2017-03-30T17:53:40.550

Reputation: 11 708

Encoding. – Adám – 2017-05-25T14:34:46.227

7

Japt, 2 bytes

The obvious solution would be

1/U

which is, quite literally, 1 / input. However, we can do one better:

pJ

This is equivalent to input ** J, and J is set to -1 by default.

Try it online!

Fun fact: as p is the power function, so q is the root function (p2 = **2, q2 = **(1/2)); this means that qJ will work as well, since -1 == 1/-1, and therefore x**(-1) == x**(1/-1).

ETHproductions

Posted 2017-03-30T17:53:40.550

Reputation: 47 880

6

Cheddar, 5 bytes

1&(/)

Try it online!

This uses &, which bonds an argument to a function . In this case, 1 is bound to the left hand side of /, which gives us 1/x, for an argument x. This is shorter than the canonical x->1/x by 1 byte.


Alternatively, in the newer versions:

(1:/)

Conor O'Brien

Posted 2017-03-30T17:53:40.550

Reputation: 36 228

New version lets this become (1:/) for same byte count – Downgoat – 2017-04-13T13:22:04.313

5

Python, 12 bytes

lambda x:1/x

One for 13 bytes:

(-1).__rpow__

One for 14 bytes:

1 .__truediv__

Loovjo

Posted 2017-03-30T17:53:40.550

Reputation: 7 357

5

TI-Basic (TI-84 Plus CE), 6 5 2 bytes

Ans⁻¹

-1 byte thanks to Timtech.

-3 bytes with Ans thanks to Григорий Перельман.

Ans and ⁻¹ are one-byte tokens.

TI-Basic implicitly returns the last value evaluated (Ans⁻¹).

pizzapants184

Posted 2017-03-30T17:53:40.550

Reputation: 3 174

Input also implicitly gets coordinate input into X and Y, but you couldn't use that since you need to be able to accept floating point numbers. Remember that X^-1 is only two bytes so you could save one there. – Timtech – 2017-03-31T12:29:51.520

TI-Basic is allowed to take input from Ans, so you can replace this with Ans⁻¹ – Pavel – 2017-03-31T16:57:10.190

4

MATL, 3 bytes

l_^

Try it at MATL Online

Explanation

    % Implictily grab input
l_  % Push -1 to the stack
^   % Raise the input to the -1 power
    % Implicitly display the result

Suever

Posted 2017-03-30T17:53:40.550

Reputation: 10 257

4

Java 8, 6 bytes

x->1/x

Almost the same as the JavaScript answer.

Loovjo

Posted 2017-03-30T17:53:40.550

Reputation: 7 357

Would this encounter any issues with integer division? – kamoroso94 – 2018-02-09T01:02:02.007

4

Mathematica, 4 bytes

1/#&

Provides you with an exact rational if you give it an exact rational, and with a floating-point result if you give it a floating-point result.

Martin Ender

Posted 2017-03-30T17:53:40.550

Reputation: 184 808

4

ZX Spectrum BASIC, 13 bytes

1 INPUT A: PRINT SGN PI/A

Notes:

  • Each line costs 2 bytes for the line number, 2 bytes for the length of the line and 1 byte for the newline
  • Numeric literals are converted into binary at parse time, costing an extra 6 bytes, thus the use of SGN PI instead of literal 1.
  • Keywords take 1 byte each.

ZX81 version for 17 bytes:

1 INPUT A
2 PRINT SGN PI/A

Neil

Posted 2017-03-30T17:53:40.550

Reputation: 95 035

1Where can I find more specific information about how to score ZX Spectrum BASIC? – Luis Mendo – 2017-03-31T09:48:42.740

@LuisMendo You can find the character set (including keywords) on Wikipedia, but apart from that I don't know whether there is a consensus on scoring ZX Basic. (For instance, the ZX81 version must be a full program, but the ZX Spectrum supports INPUT as an immediate command.) – Neil – 2017-03-31T10:23:37.340

To save program listing bytes on the ZX81, you can do LET A=17 and refactor your application to one line to 1 PRINT SGN PI/A, you will need to change the value of A with more typing each time you want to run your program though. – Shaun Bebbers – 2017-03-31T13:39:31.213

4

Haskell, 4 bytes

(1/)

Try it online!

flawr

Posted 2017-03-30T17:53:40.550

Reputation: 40 560

4

R, 8 bytes

1/scan()

Pretty straightforward. Directly outputs the inverse of the input.

Another, but 1 byte longer solution can be : scan()^-1, or even scan()**-1 for an additional byte. Both ^ and ** the power symbol.

Frédéric

Posted 2017-03-30T17:53:40.550

Reputation: 2 059

3

C, 30 bytes

float f(float x){return 1./x;}

dkudriavtsev

Posted 2017-03-30T17:53:40.550

Reputation: 5 781

You can remove the trailing 0 to save one byte. With 1. it will still be compiled as a double. – Patrick Roberts – 2017-03-30T18:20:42.677

@PatrickRoberts Not in my testing. 1. is still treated like an integer. – dkudriavtsev – 2017-03-30T18:24:55.917

Works for me using echo -e "#include <stdio.h>\nfloat f(x){return 1./x;}main(){printf(\"%f\\\\n\",f(5));}" | gcc -o test -xc - Output of ./test is 0.200000 – Patrick Roberts – 2017-03-30T18:33:09.380

@PatrickRoberts Oh crap, I mixed this up with my Ruby answer. Sorry! – dkudriavtsev – 2017-03-30T18:34:18.367

1

Doesn't this take input as an integer instead of a float? It doesn't work for floats, at least on gcc. float f(float x){return 1/x;} would work correctly.

– Steadybox – 2017-03-30T18:41:43.663

@Steadybox woops – dkudriavtsev – 2017-03-30T19:32:22.680

2No need for the trailing . - C will happily implicitly convert (int)1 to (float)1 because of the type of x. – fluffy – 2017-03-31T08:10:53.170

3

Jelly, 1 byte

İ

Try it online!

Dennis

Posted 2017-03-30T17:53:40.550

Reputation: 196 637

That's actually 2 bytes. – Coder-256 – 2017-04-17T18:39:39.387

In UTF-8, sure. By default, Jelly uses a custom SBCS though.

– Dennis – 2017-04-17T19:33:24.380

@Dennis the wiki you linked says Jelly programs consist of up to 257 different Unicode characters. – Khaled.K – 2017-04-19T10:03:40.523

@Khaled.K Yes, it also says The character and the linefeed character can be used interchangeably, so while Unicode mode "understands" 257 different characters, they map to 256 tokens. – Dennis – 2017-04-19T18:16:32.133

3

Perl 6, 3 bytes

1/*

Try it

This also works, but is 5 or 6 bytes
You can use (superscript minus) at 3 bytes, or ¯ (macron) which is 2 bytes

*⁻¹

Try it

Brad Gilbert b2gills

Posted 2017-03-30T17:53:40.550

Reputation: 12 713

3

C++ lambda function, 24 bytes

[](float x){return 1/x;} 

Full program

#include <iostream>

void main()
{
    auto y = [](float x){return 1/x;} ;
    std::cout << y(5) << std::endl;
}

Johan du Toit

Posted 2017-03-30T17:53:40.550

Reputation: 1 524

2In C++14 you can use auto x instead of float x to save a byte. Additionally, main should be declared as returning an int. – lukeg – 2017-03-31T16:26:37.087

2

Ruby, 10 bytes

->x{1.0/x}

Very simple

dkudriavtsev

Posted 2017-03-30T17:53:40.550

Reputation: 5 781

2

Quetzalcoatl, 3 bytes

cfI

c takes input, f converts to a float, and I takes the inverse.

NoOneIsHere

Posted 2017-03-30T17:53:40.550

Reputation: 1 916

2

Actually, 1 byte

ì

From the docs:

8D (ì): pop a: push 1/a

Try It Online

In Seriously, it would be two bytes:

quintopia

Posted 2017-03-30T17:53:40.550

Reputation: 3 899

3This doesn't work in Seriously because Seriously doesn't do implicit input. You should also provide a TIO link. – Mego – 2017-03-30T18:36:01.290

Huh. I must have misremembered. Feel free to edit. – quintopia – 2017-03-30T22:15:57.943

Actually, this is 2 bytes. – Coder-256 – 2017-04-17T18:44:06.607

It's one Seriously/Actually byte. See the docs. – quintopia – 2017-04-17T23:42:50.383

2

Julia, 3 bytes

3 bytes saved thanks to @gggg

inv

Try it online!

Returns the matrix inverse.

Uriel

Posted 2017-03-30T17:53:40.550

Reputation: 11 708

inv is just 3 bytes – gggg – 2018-02-01T18:35:44.647

2

Bean, 7 6 bytes

Equivalent JavaScript:

(1/A)

Bean xxd-style hexdump:

00000000: 4ca5 3a8e 2043                           L¥:. C

Explanation

A is auto-initialized with the 1st input line JSON-parsed. (e.g. 5 is interpreted as JSON and becomes a number), and the program implicitly outputs 1/A.

Edit The "hack" I just realized is that removing the first byte of the AST binary doesn't seem to affect the compilation of the program...

Try the demo here.

Patrick Roberts

Posted 2017-03-30T17:53:40.550

Reputation: 2 475

Interesting, what's the main cause of this being longer than vanilla JS even though it's basically compressed JS? – ETHproductions – 2017-03-30T18:28:55.303

@ETHproductions The overhead of the block scope and I believe binary operators are each 2 bytes (This is due to the binary directly representing the AST of the equivalent JavaScript). Bean really shines with challenges that would typically require several calls to builtins, or when interpreting input as objects automatically saves bytes, or when having a program implicitly input and output is smaller than writing answer as a function where you explicitly input and output. – Patrick Roberts – 2017-03-30T18:38:36.503

Weird... I just found an interesting hack. – Patrick Roberts – 2017-03-30T18:51:02.653

2

dc, 7 6 bytes

Edit: saved 1 byte thanks to Digital Trauma

7k1?/p

Try it online!

Because dc treats the input as commands, negative numbers are recognized using _ as the negative sign, instead of -, which is interpreted as the subtraction command. This is allowed by this meta consensus.

Explanation:

7k           # set precision to 7 digits. This is needed to output at least 4
             #significant figures when the input is '6431' for example)
1?           # push 1, then push input number
/p           # divide and print result

seshoumara

Posted 2017-03-30T17:53:40.550

Reputation: 2 878

1The r is unnecessary with a slight change: 4k1?/p – Digital Trauma – 2017-03-30T18:55:02.233

@DigitalTrauma You're right, thanks. I rushed it. I updated the answer. – seshoumara – 2017-03-30T19:37:42.820

2

Forth, 3 bytes

1/f

Try it online

Takes a floating point literal, which in Forth must be in scientific notation, like 5e-4 for 0.0005 or 2e3 for 2000.0. The result will be left on the floating point stack.

Reference on number conversion in Forth.

mbomb007

Posted 2017-03-30T17:53:40.550

Reputation: 21 944

2

C#, 7 6 bytes

Saved a byte thanks to David Conrad.

x=>1/x;

Anonymous function which returns the inverse of a number.

Full program with test cases:

using System;

public class Program
{
    public static void Main()
    {
        Func<double, double> f =
        x=>1/x;

        // test cases:
        Console.WriteLine(f(0.5134));
        Console.WriteLine(f(0.5));
        Console.WriteLine(f(2));
        Console.WriteLine(f(2.0));
        Console.WriteLine(f(0.2));
        Console.WriteLine(f(51.2));
        Console.WriteLine(f(113.7));
        Console.WriteLine(f(1.337));
        Console.WriteLine(f(-2.533));
        Console.WriteLine(f(-244.1));
        Console.WriteLine(f(-0.1));
        Console.WriteLine(f(-5));
    }
}

adrianmp

Posted 2017-03-30T17:53:40.550

Reputation: 1 592

1I don't think you need to count the semicolon in C#. Imagine that the lambda was being passed to a function that took a Func<double, double> as a parameter; in that case, it wouldn't be followed immediately by a semicolon. – David Conrad – 2017-03-31T14:20:52.990

1AFAIK you should submit separate languages as separate answers. This helps the leaderboard userscript detect them as separate posts. – dkudriavtsev – 2017-03-31T19:16:18.403

2

Brachylog, 2 bytes

/₁

Try it online!

For the sake of completeness…

Explanation

/, by default, takes a list of 2 numbers [A, B] as input and unify its output with A divided by B.

When / has a subscript, it takes a single number as input unify its output with that number divided by the subscript. For example, /₄₂ will divide the input number by 42.

The only exception is if the subscript is 1 (because dividing by 1 is kind of useless). In that case, it unifies its output with the inverse of its input.

Fatalize

Posted 2017-03-30T17:53:40.550

Reputation: 32 976

2

Java 7, 29 bytes

Golfed:

float i(float x){return 1/x;}

Ungolfed:

float i(float x)
{
    return 1 / x;
}

Pretty straight forward.

peech

Posted 2017-03-30T17:53:40.550

Reputation: 309

2

bc + sh, 14 10 bytes

1/read()<NEWLINE>

Run bc with -l which sets the default scale to 20. That way both input and output have 20 digits after the decimal point.

Edit: Thanks DigitalTrauma for a tip on changing the answer from bc + sh to pure bc. Saved 4 bytes.

Maxim Mikhaylov

Posted 2017-03-30T17:53:40.550

Reputation: 571

Welcome to PPCG!. I think you can claim 1/read()<NEWLINE> as a 10-scoring pure bc answer. This would include +1 for the use of the -l flag to bc, as per standard rules – Digital Trauma – 2017-03-31T16:35:00.813

@DigitalTrauma Thanks for the tip! I'll change the answer. I've never used bc by itself, only inside sh scripts, so I didn't know it is possible to use read() to enter variables. Just found an example in bc man page that does something similar. – Maxim Mikhaylov – 2017-03-31T16:57:01.307

Why is it 10 bytes? I count only 8 visible (one-byte) characters and one newline (of you really insist that this be part of the program). Makes 9 bytes. Where's the tenth? – Alfe – 2017-04-02T22:53:26.497

1@Alfe Yes, newline counts, since a number can't be read from stdin without it. The 10th byte comes from -l flag that is needed to achieve the required precision. – Maxim Mikhaylov – 2017-04-02T23:09:34.140

2

OCaml, 12

fun x->1./.x

The division of floats is done with the operator /..

Redouane Red

Posted 2017-03-30T17:53:40.550

Reputation: 311

2

PHP, 24 bytes

echo(1/(float)$argv[1]);

This is my first answer, tell me if I can somehow shorten it! Try it online!

When trying it online, just change the argument to the desired number n of which you want to get 1/n

Very straightforward approach.

dv02

Posted 2017-03-30T17:53:40.550

Reputation: 383

I think you can replace 1 with 1.0 and then remove the (float) for some savings. I tried it in your TIO link and it seemed to work. – Malivil – 2017-04-18T17:59:42.320

@Malivil but isn't $argv[1] originally a string and therefore has to be casted to a float? – dv02 – 2017-04-18T18:24:23.613

I think it's doing implicit type casting. I tried it out in your TIO link and it was working. I also read though the PHP manual a bit (http://php.net/manual/en/language.types.type-juggling.php) and it seems like it just changes based on context.

– Malivil – 2017-04-18T18:36:51.060

2

ceilingcat

Posted 2017-03-30T17:53:40.550

Reputation: 5 503

1

CJam, 4 bytes

1rd/

Try it online!

1     e# Push 1
 rd   e# Push input as a double
   /  e# Divide

Alternate solution:

rdW#

rd    e# Push input as a double
  W   e# Push -1
   #  e# Exponentiation

Business Cat

Posted 2017-03-30T17:53:40.550

Reputation: 8 927

1

Pyth, 3 2 bytes

-1 byte thanks to Steven Hewitt

c1

c is float division, with 1 and implicit input.

NoOneIsHere

Posted 2017-03-30T17:53:40.550

Reputation: 1 916

1Pyth can fill in the Q implicitly, so c1 works just as well. – Steven H. – 2017-04-08T12:59:47.437

1

Fortran 95, 23 bytes

function f(x)
f=1/x
end

Steadybox

Posted 2017-03-30T17:53:40.550

Reputation: 15 798

1

Mathics, 4 bytes

1/#&

Try it online!

Pavel

Posted 2017-03-30T17:53:40.550

Reputation: 8 585

1

QBIC, 5 bytes

:?1/a

Explanation:

:    get input from the cmd line, named 'a'
?    PRINT
1/a  1/a

steenbergh

Posted 2017-03-30T17:53:40.550

Reputation: 7 772

1

Scala, 3 bytes

1/_

This defines a lambda equivalent to x => 1/x (_ is a placeholder for the argument). Use by assigning it to a variable, then calling it, like this:

val f: Double => Double = 1/_
f(5) // 0.2

Brian McCutchon

Posted 2017-03-30T17:53:40.550

Reputation: 503

1

Excel VBA, 7 Bytes

Anonymous VBE immediates window function that takes input from cell [A1] of type variantand expecting a (floating-point) number and outputs its inverse to the VBE immediates window. Does not handle improperly formatted input.

?1/[A1]

Taylor Scott

Posted 2017-03-30T17:53:40.550

Reputation: 6 709

1

Racket, 11 bytes

(/ 1(read))

Try it online!

assefamaru

Posted 2017-03-30T17:53:40.550

Reputation: 111

Hello and welcome to the site! It looks like the .0 is not really necessary (tio). You can assume that the input is a float so you don't need to go through the trouble of having the 1 be a float.

– Post Rock Garf Hunter – 2017-03-31T04:31:44.767

@WheatWizard thanks, and does that mean fractions are acceptable output (eg. 1/5 vs 0.2)? – assefamaru – 2017-03-31T04:39:37.510

No, fractions are still not allowed its just that instead of doing (/ 1.0 -33) you can do (/ 1 -33.0) that is put the burden of float casting onto the input instead of your code. If you look at the modified version of your code I provided you will see it still does output a float. – Post Rock Garf Hunter – 2017-03-31T04:47:20.707

Thanks @WheatWizard, made the edit above. Just realized OP allowed x.0 input format after reading the last three comments under main question. – assefamaru – 2017-03-31T05:06:07.687

1

PHP, 11

<?=1/$argn;

Run with echo <n> | php -nR '<code

Christoph

Posted 2017-03-30T17:53:40.550

Reputation: 1 489

1

Scala, 15 Bytes

(x:Double)=>1/x

Don't think there's a shorter way to do this in Scala.

Stefan Aleksić

Posted 2017-03-30T17:53:40.550

Reputation: 119

The input isn't limited to ints. – David Conrad – 2017-03-31T14:26:59.093

Oops. That's what happens when you write code golf solutions at 5 in the morning. Fixed! – Stefan Aleksić – 2017-03-31T16:05:47.967

1

TI-Basic, 2 bytes

Ansֿֿ ¹

You could also do 1/Ans (3) or Ans^~1 (4).

Timtech

Posted 2017-03-30T17:53:40.550

Reputation: 12 038

1

Noodel, 1 byte

A command that takes the first character of a string and places at the end, for numbers takes the reciprocal of the number. The interpreter for Noodel is written in JavaScript which has double precision floating point numbers.

Try it:)


How it works

  # Implicitly pushes the number onto the stack.
ẹ # Takes the reciprocal of the input.
  # Implicitly prints the top of the stack to the screen.

tkellehe

Posted 2017-03-30T17:53:40.550

Reputation: 605

1

Elixir, 7 bytes

&(1/&1)

Anonymous function defined using the capture operator.

Full program:

f=
&(1/&1)

IO.inspect(f.(0.5134))  # 1.94779898714453

Try it online!

adrianmp

Posted 2017-03-30T17:53:40.550

Reputation: 1 592

1

NO!, 31 bytes

NB: Non-competing as language post-dates the challenge

NO! has 6 valid tokens: NOno!? and commands are made up of NO with the number of O determining the command.

NOOOOO?no!NOOOOOOOOOOO
NOOOOOOOO?no

More readable

NOOOOO?                 NOOOOO is the divide command and ? starts the arguments
       no!              no is 1 and ! separates the arguments            
          NOOOOOOOOOOO  This takes input from STDIN.

NOOOOOOOO?              This outputs the result of the       line
          no                                           first 

The equivalent pseudocode:

output divide 1, input

caird coinheringaahing

Posted 2017-03-30T17:53:40.550

Reputation: 13 702

1

Emacs Lisp, 11 bytes

(/ 1(read))

Elisp defaults to integer division, so the input will have to be given as floating point, e.g. 1.0 instead of 1. The engine evaluates the (read) statement to get the input and then evaluates the (/ ...) statement, and outputs the answer to stdout.

Christopher Pitts

Posted 2017-03-30T17:53:40.550

Reputation: 91

1

Bash + bc, 12 bytes

bc -l<<<1/$1

bc defaults to integer division, which would be a problem, but running bc with the -l flag loads a math library that allows for floating point division. The $1 takes the first command line argument passed to the Bash script and the <<< passes the string with the expanded argument to bc.

Christopher Pitts

Posted 2017-03-30T17:53:40.550

Reputation: 91

1

HODOR, 100 bytes

NB: Non-competing because why not? I'm never going to win with Hodor!

Walder
Hodor?!
Hodor, Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor, Hodor,
HODOR!!
HODOR!!!

If you must know how it works, I'll tell you.

Explanation

Walder                                                                       Hodor hodor
Hodor?!                                                                     Hodor hodor hodor HODOR
Hodor, Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor, Hodor,        Hodor hodor hodor hodor hodor hodor
HODOR!!                                                                     Hodor hodor hodor hodor hodor
HODOR!!!                                                                    Hodor hodor (Hodor hodor hodor)

1)

Walder - Start program

2)

Hodor?! - Take input from STDIN

3)

Hodor, Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor Hodor, Hodor, - Change accumulator value to it's reciprocal

4)

HODOR!! - Output accumulator value as number

5)

HODOR!!! - Kill Hodor (End the program)

caird coinheringaahing

Posted 2017-03-30T17:53:40.550

Reputation: 13 702

"Wylis"? Someone didn't read the books. ;) – Martin Ender – 2017-04-05T12:09:57.743

@MartinEnder I read them but couldn't be bothered to look for his name in them. They are other 4000 pages long altogether. – caird coinheringaahing – 2017-04-05T12:11:03.217

http://awoiaf.westeros.org/index.php/Hodor :) – Martin Ender – 2017-04-05T12:11:41.863

@MartinEnder I can't believe I have defiled Hodor's memory like this! (Now I've got to go change all the answers!) – caird coinheringaahing – 2017-04-05T12:22:03.453

1

Keg, 1 byte

Try it online!

Keg, 3 bytes(SBCS)

1¿/

TIO Divide 1 by friendly input

user85052

Posted 2017-03-30T17:53:40.550

Reputation:

for 1 byte. – Lyxal – 2020-01-20T22:02:13.603

0

Jellyfish, 3 bytes

p%i

Try it online!

Unary % computes the reciprocal. i is input, p is output.

Martin Ender

Posted 2017-03-30T17:53:40.550

Reputation: 184 808

0

Erik the Outgolfer

Posted 2017-03-30T17:53:40.550

Reputation: 38 134

0

Dyvil, 5 Bytes

1 / _

Unfortunately we need the extra white space because /_ would be a single operator, and 1/ _ would parse differently

Usage:

let f: double -> double = 1 / _
print(f(2)) // 0.5

Clashsoft

Posted 2017-03-30T17:53:40.550

Reputation: 835

0

Racket 7 bytes

(/ 1 x)

Full function:

(define (f x)
  (/ 1 x))

Testing:

(f 1.56)

Output:

0.641025641025641

rnso

Posted 2017-03-30T17:53:40.550

Reputation: 1 635

0

JavaScript(ES7), 8 bytes

x=>x**-1

f=x=>x**-1;
console.log(f(0.5134));

Matthew Roh

Posted 2017-03-30T17:53:40.550

Reputation: 5 043

@fəˈnɛtɪk Oh dammit. Now I have to rollback to x**-1. – Matthew Roh – 2017-04-05T13:02:21.470

** does not exist in ES6, it was added in ES7, which is why I specified your answer was ES7 – fəˈnɛtɪk – 2017-04-05T13:51:27.260

The Seventh Edition, also known as ECMAScript 2016, intended to continue the themes of language reform, code isolation, control of effects and library/tool enabling from ES2015, includes two new features: the exponentiation operator (**) and Array.prototype.includes. – fəˈnɛtɪk – 2017-04-05T14:01:13.570

0

REXX, 12 bytes

say 1/arg(1)

Divides 1 by first argument. Precision is decided by NUMERIC DIGITS but defaults to at least 9 decimals.

idrougge

Posted 2017-03-30T17:53:40.550

Reputation: 641

0

AWK, 10 7 bytes

$0=1/$0

Usage:

awk '$0=1/$1' <<< "some number here"

or use the TIO link : Try it online!

Explanation: Replace the input line with its reciprocal. This is then evaluated and the entire line is printed if the evaluation in non-zero. Since the result can't be 0 we don't need to worry about not receiving output.

Robert Benson

Posted 2017-03-30T17:53:40.550

Reputation: 1 339

0

Python 2.7, 17 25 bytes

Full program:

print'%.4f'%(1.0/input())

Koishore Roy

Posted 2017-03-30T17:53:40.550

Reputation: 1 144

0

Batch, 69 67 + 39 (vbs section) = 106 bytes

a.bat

@for /f "skip=1" %%n in ('cscript //nologo b.vbs 1/%1')do @echo %%n

Explanation:

  • call VBScript to calculate 1/argument
  • return the result

b.vbs

WScript.Echo Eval(WScript.Arguments(0))

Explanation:(my guess, I'm not good at VBS)

  • return the result calculated by Eval

Test cases

called from command line:

>a.bat 0.5134
1.94779898714453

>a.bat -0.5
-2

Batch can't handle floating point division....

stevefestl

Posted 2017-03-30T17:53:40.550

Reputation: 539

1I can't test VBScript, but my feeling is, that if you change the VBS to WScript.Echo 1/WScript.Arguments(0), and change "1/%1" into "%1", you could save some bytes. – steenbergh – 2017-04-18T14:31:49.713

0

Aceto 1.0, 4 3 bytes non-competing

Non-competing because the challenge predates Aceto. Assumes input number is on the stack, and leaves it on the stack.

1s:

1 pushes 1 on the stack, s swaps the top two values, and : does floating point division.

Also, this is the first Aceto answer!

edit: Saved 1 byte

L3viathan

Posted 2017-03-30T17:53:40.550

Reputation: 3 151

0

CGL (CGL Golfing Language), 6 bytes (non-competing)

This language postdates this challenge.

-÷Ⓧ

Explanation:

- decrements the current stack, so it is now -1, where input is placed

÷ Divides the first element of the stack by the second if it exists, otherwise (this case) it divides 1 by the first (reciprocal)

Output the last stack item (the result of ÷) and exit

programmer5000

Posted 2017-03-30T17:53:40.550

Reputation: 7 828

0

Haskell, 4 bytes

(/)1

Currying FTW!

Enderperson1010

Posted 2017-03-30T17:53:40.550

Reputation: 71

alternatively (1/) – Zwei – 2017-04-25T23:32:48.677

0

Axiom, 57 bytes

f(x)==(y:=abs(x);y>9999 or y<0.0001=>"ObjFloatErr ";1./x)

test code and results

(21) -> [[i,f(i)] for i in [-2,-1,-0.0001,-0.00001,9999,10000]]
   (21)
   [[- 2.0,- 0.5], [- 1.0,- 1.0], [- 0.0001,- 10000.0],
    [- 0.00001,"ObjError 1/x"], [9999.0,0.0001000100 0100010001],
    [10000.0,"ObjError 1/x"]]

RosLuP

Posted 2017-03-30T17:53:40.550

Reputation: 3 036

0

Fourier (Non-Competing), 79 bytes

1~RI~X<0{1}{0-1~R45a}X*R~XL*2+2/2~UX{1}{0~U}10P10/X~DL+U~p10Pp~TD/To*T~A46aD-Ao

Try it online!

This is non-competing for two reasons:

  • Firstly, it does not fulfil the spec (it only works for inputs in the range -10 <= x <= 10
  • Secondly, it uses the functions L and P which were added after the writing of this challenge

So, this answer poses a challenge: can you complete this challenge in Fourier in the range -9999 <= x <= 9999? There are two bounties up for grabs:

  • 100 Rep Bounty for the first solution to complete this task without using the new functions L (log 10) and P (power)
  • 50 Rep Bounty for the shortest solution to complete this task using the new functions L (log 10) and P (power)

Note that on the Fourier github repo (https://github.com/beta-decay/Fourier/tree/master/fourIDE/editor) the FourIDE is up to date with L and P.

To-do list

  • Add explanation of code

Beta Decay

Posted 2017-03-30T17:53:40.550

Reputation: 21 478

For x=0 the 1/x=1/0 is not possible so the domain of function 1/x has to be [-a, -e] [e,a] for some 'a' big enough for them and 'e' little enough... – RosLuP – 2017-04-17T18:52:43.670

0

GamrCorps

Posted 2017-03-30T17:53:40.550

Reputation: 7 058

0

Jelly , 11 Bytes

²Nṭ1,0ÆrḢ×Ṡ

This works without the built-in inverse function . (Who uses that anyway?).

Try it online!

How it works

²Nṭ1,0ÆrḢ×Ṡ
   1,0      # Look at the list [1,0]
  ṭ         # Append (to the end)
²N          #  the negative of the square of the input
      Ær    # Find the roots to the polynomial with coefficients corresponding to the list as [greater root,lower root] pair
        Ḣ   # Head; get the first element of the roots (always positive)
         ×Ṡ # Multiply by the sign of the input (to accommodate negative input)

fireflame241

Posted 2017-03-30T17:53:40.550

Reputation: 7 021

0

Perl 5, 7 bytes

The obvious subroutine.

{1/pop}

msh210

Posted 2017-03-30T17:53:40.550

Reputation: 3 094

I was under the impression that you could only omit the sub when passing it to a subroutine with a & prototype. – a spaghetto – 2017-05-01T18:39:11.610

@quartata, perldoc perlsub says: "The signature is part of a subroutine's body. Normally the body of a subroutine is simply a braced block of code."

– msh210 – 2017-05-01T19:54:37.330

Still, the result is not something that is callable as it stands. I would say it is invalid. – Ton Hospel – 2018-02-01T19:08:49.283

0

8087 machine code, 4 bytes

d9 e8   |   fld1
d8 f1   |   fdiv st0, st1

The obvious/trivial solution. Expects input in register st0.

user5434231

Posted 2017-03-30T17:53:40.550

Reputation: 1 576

0

Bash, 15 bytes

dc -e"Fk$1_1^p"

Try it online!

dc               ::Use dc calculation
   -e            ::Evaluate argument as dc code
     "         " ::Quote
      Fk         ::F sig-figs (F is hex for 15)
        $1       ::$1 is initial value (the first argument)
           _1^   ::Raise $1 to power of -1
              p  ::Print result

Graviton

Posted 2017-03-30T17:53:40.550

Reputation: 2 295

0

Groovy, 9 bytes

{1.0g/it}

Needs the .0g to denote big decimal notation on the 1, making the it unbox itself as a BigDecimal.

Input of 7.29349129124513204632593467635245678734521456789

Results in 0.13710854789123656486815482305643737234188188122

If you use an input of 214700000000000, however, without the .0g...

You get an error or nothing.

Magic Octopus Urn

Posted 2017-03-30T17:53:40.550

Reputation: 19 422

0

ARBLE, 3 bytes

1/x

Try it online!

ATaco

Posted 2017-03-30T17:53:40.550

Reputation: 7 898

0

Attache, 4 bytes

1&`/

Try it online!

This is division (`/) left-bonded with 1, which is equivalent to reciprocal.

Conor O'Brien

Posted 2017-03-30T17:53:40.550

Reputation: 36 228

0

KoopaScript, 48 bytes

def a i inp;setath o 1 / \%vuserInput;print \%vo

And how it works (KS isn't really golfable yet but it's fun nonetheless):

def a i                                          - define a function and call it a lot
        inp;                                     - pause execution until input
            setath o 1 / \%vuserInput;           - set 'o' to 1 / the input
                                      print \%vo - output 'o'

Try it online (paste the code into the left-hand box, press enter, then type a number, press enter, etc)

Now that KS has input, I can finally start using it for stuff that involves interaction :D (Tell me if this should be non-competing :P)

Jhynjhiruu Rekrap

Posted 2017-03-30T17:53:40.550

Reputation: 61

0

SenseTalk, 16 bytes

params r
put 1/r

Explanation

params r # accept input
put 1/r  # get the reciprocal

Allen Fisher

Posted 2017-03-30T17:53:40.550

Reputation: 219

0

W, 3 bytes

You know, we can't beat the built-ins.

1S/

Explanation

a1S  % Stack : 1 a
   / % Divide.(1/a)
     % Output.

user85052

Posted 2017-03-30T17:53:40.550

Reputation:

0

Rogex, 15 bytes

701300001600200

Try it online!

The actual language isn't on TIO yet, so a python 3.8 interpreter with the program in the code section and the python interpreter split in the header and footer is provided

Rogex is a newly developed language that I've recently discovered, so I though I'd give it a crack and write an answer.

Explained

701 300 # Set the buffer to 1 and place it in cell 0
001     # Get numeric input and place it into the buffer
600 200 # Divide cell 0 (1) by the buffer (input) and print

(╭☞´• ᗜ •`)╭☞ 100 answers! Woot! (⌐■◡■)

Lyxal

Posted 2017-03-30T17:53:40.550

Reputation: 5 253