16
\$\begingroup\$

Output the following result (which is a result of calculating 6 * 9 in bases from 2 to 36). Make sure letters are uppercase, and the multiplication itself is outputed on every line.

6 * 9 = 110110
6 * 9 = 2000
6 * 9 = 312
6 * 9 = 204
6 * 9 = 130
6 * 9 = 105
6 * 9 = 66
6 * 9 = 60
6 * 9 = 54
6 * 9 = 4A
6 * 9 = 46
6 * 9 = 42
6 * 9 = 3C
6 * 9 = 39
6 * 9 = 36
6 * 9 = 33
6 * 9 = 30
6 * 9 = 2G
6 * 9 = 2E
6 * 9 = 2C
6 * 9 = 2A
6 * 9 = 28
6 * 9 = 26
6 * 9 = 24
6 * 9 = 22
6 * 9 = 20
6 * 9 = 1Q
6 * 9 = 1P
6 * 9 = 1O
6 * 9 = 1N
6 * 9 = 1M
6 * 9 = 1L
6 * 9 = 1K
6 * 9 = 1J
6 * 9 = 1I

Shortest code wins.

\$\endgroup\$
  • 1
    \$\begingroup\$ @Howard: Fixed. I was considering changing 2 to 10, but forgot about this edit while fixing something else in the result, so I accidentally left it the wrong way. \$\endgroup\$ – Konrad Borowski Jan 5 '14 at 10:06
  • 2
    \$\begingroup\$ Calculate 6*9 in different bases I wonder why the statement is worded thus, why 6*9 and not simply 54? Perhaps the originally intended meaning was that 6 and 9 should be interpreted not always as decimal but in different bases? That would make the statement more logical, and the problem more interesting (but then we should start from base 10 to 36) \$\endgroup\$ – leonbloy Jan 5 '14 at 16:16
  • 2
    \$\begingroup\$ @leonbloy: 6 and 9 are single-digit numbers. They mean the same in every base in which those digits are valid. \$\endgroup\$ – Ilmari Karonen Jan 5 '14 at 16:46
  • 1
    \$\begingroup\$ @IlmariKaronen: Correct, but 6 * 9 = 110110 doesn't make a lot of sense... \$\endgroup\$ – Dennis Jan 5 '14 at 18:09
  • 3
    \$\begingroup\$ This is a reference to the Hitchhiker's Guide to the Galaxy series by Douglas Adams. In the series, the Answer to the Ultimate Question of Life, The Universe, and Everything is "42". Later, its revealed that the Ultimate Question of Life, the Universe, and Everything is "What do you get when you multiply six by nine?", which works out in base-13. Note: Douglas Adams said this was unintentional; "I don't write jokes in base-13". \$\endgroup\$ – dr jimbob Jan 10 '14 at 21:14

24 Answers 24

1
\$\begingroup\$

05AB1E, 21 20 bytes

36G54N>B"6 * 9 = ÿ",

Try it online!

\$\endgroup\$
  • \$\begingroup\$ I assume it's non-competing just because the language is newer than a challenge? Marking as accepted, as rules as of now allow this. \$\endgroup\$ – Konrad Borowski Mar 21 '18 at 11:35
  • \$\begingroup\$ @xfix pretty much haha \$\endgroup\$ – Magic Octopus Urn Mar 21 '18 at 12:35
7
\$\begingroup\$

GolfScript, 39 characters

35,{2+'6 * 9 = '54@base{.9>7*+48+}%n+}/

Result can be seen here.

\$\endgroup\$
7
\$\begingroup\$

Octave, 49

for i=2:36printf("6 * 9 = %s\n",dec2base(54,i))end

\$\endgroup\$
6
\$\begingroup\$

Javascript, 57 55 bytes

for(i=2;++i<37;)console.log('6 * 9 = '+54..toString(i))

Could be shortened to 49 with alert, but I don't want to submit anyone to that...

\$\endgroup\$
  • 3
    \$\begingroup\$ Output should be uppercase, and (54) can be replaced with 54. (to write 54..toString). \$\endgroup\$ – Konrad Borowski Jan 5 '14 at 11:03
  • 2
    \$\begingroup\$ for(i=1;++i<37;) also saves a character. \$\endgroup\$ – grc Jan 5 '14 at 11:42
  • \$\begingroup\$ Can you ignore the 37? It will result in an error and stop \$\endgroup\$ – l4m2 Mar 21 '18 at 16:37
4
\$\begingroup\$

Ruby (47)

2.upto(36){|t|puts"9 * 6 = "+54.to_s(t).upcase}

Well, I know that GolfScript solution is better, but hey, at least this is not esoteric...

\$\endgroup\$
  • \$\begingroup\$ 2.step{|t|puts"9 * 6 = "+54.to_s(t).upcase} saves a few bytes. It exits with an error, but that's ok :D. \$\endgroup\$ – m-chrzan Sep 20 '16 at 18:06
4
\$\begingroup\$

Python, 89

B=lambda x:x*'.'and B(x/b)+chr(x%b+7*(x%b>9)+48)
b=2
while b<37:print'6 * 9 =',B(54);b+=1
\$\endgroup\$
  • \$\begingroup\$ Brilliant. Quite noticeable that I'm a total Python noob in comparison :) \$\endgroup\$ – Joachim Isaksson Jan 5 '14 at 21:02
  • \$\begingroup\$ @JoachimIsaksson Thanks... I've got loads more to learn. \$\endgroup\$ – boothby Jan 5 '14 at 21:58
  • \$\begingroup\$ You can shave off one character by using a while loop instead: b=2 <linebreak> while b<37:print'6 * 9 =',B(54);b+=1 (assuming single character for a *nix linebreak) \$\endgroup\$ – Bob Jan 5 '14 at 22:53
  • \$\begingroup\$ @Bob Whenever I try a while loop, it's too expensive. Then, I forget to try the next time. ;) Thanks! \$\endgroup\$ – boothby Jan 5 '14 at 23:00
3
\$\begingroup\$

Python 2.7 (124 114)

EDIT: Cut some fluff thanks to @boothby's comment below

I think Python is doing ok considering it has no built-in (that I know of) to do the base conversion so it has to be done in code;

for b in range(2,37):print'6 * 9 = '+''.join(chr((54/b**y%b>9)*7+48+54/b**y%b)for y in range(4,-1,-1)).lstrip('0')
\$\endgroup\$
  • \$\begingroup\$ I have to remind myself of this continually: print'\n'.join(...for x in y) is rather longer than for x in y:print.... \$\endgroup\$ – boothby Jan 5 '14 at 15:54
  • \$\begingroup\$ @boothby Thanks, updated with your suggestion :) \$\endgroup\$ – Joachim Isaksson Jan 5 '14 at 20:32
2
\$\begingroup\$

Perl 6, 36 bytes

say '6 * 9 = ',54.base($_) for 2..36
\$\endgroup\$
1
\$\begingroup\$

Mathematica 40

Not in contention (lower case letters used):

Print["6*9 = ",54~BaseForm~#]&/@2~Range~36

base output

\$\endgroup\$
1
\$\begingroup\$

Julia, 61

for b=2:36;@printf("6 * 9 = %s\n",uppercase(base(b,54)));end

Pretty painless, apart from remembering to use the macro @printf versus printf.

Import Base; not needed ...

\$\endgroup\$
  • \$\begingroup\$ for b=2:36;println("6 * 9 = $(uppercase(base(b,54)))");end is also good... \$\endgroup\$ – cormullion Jan 26 '14 at 12:13
1
\$\begingroup\$

Perl

Had to use the Math::BaseCnv module

35 chars without the use statement:

map{say"6 * 9 = ",cnv(54,$_)}2..36

54 chars with the use statement:

use Math::BaseCnv;
map{say"6 * 9 = ",cnv(54,$_)}2..36

Not sure how you'd score this, so both are included.

The map BLOCK LIST structure was used. List is the range 2 to 36, that was requested. The meat is in the cnv($NUMBER, $BASE) function, and the map is an implied loop.

\$\endgroup\$
  • 1
    \$\begingroup\$ Count the use statement. The first one doesn't work in my perl. \$\endgroup\$ – boothby Jan 5 '14 at 22:09
1
\$\begingroup\$

J - 78 70

'6 * 9 = ',"1>;/(a.#~48 10 7 26 165#0 1 0 1 0){~<&.>(2+i.35)#.inv&.>54

Haskell - 137

let s=['0'..'9']++['A'..'Z'];t _(0,r)=[s!!r];t b(q,r)=(t b$b q)++[s!!r]in mapM_(putStrLn.("6 * 9 = "++).(\b->t b$b 54).flip divMod)[2..36]
\$\endgroup\$
1
\$\begingroup\$

CoffeeScript 71

alert ("6 * 9 = "+59.toString(x).toUpperCase()for x in[2..36]).join "\n"

Link

\$\endgroup\$
1
\$\begingroup\$

C (166 151)

Got rid of some unnecessary characters and changed some declarations. Assumes that you are running the program with no arguments.

p[7],i,l,v,r;main(b){for(r=2;r<37;r++){b++;printf("6 * 9 = ");v=54;while(v>0)l=v%b,p[i++]=l>9?l+55:l+48,v/=b;while(i^0)printf("%c",p[--i]);puts("");}}
\$\endgroup\$
1
\$\begingroup\$

Clojure, 75

(for[i(range 2 37)](println"6 * 9 ="(.toUpperCase(Integer/toString 54 i))))

\$\endgroup\$
1
\$\begingroup\$

Python 3, 83 bytes

import numpy;print('\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)))
\$\endgroup\$
  • 1
    \$\begingroup\$ You can use '\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)) instead of *['6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)],sep='\n' to save a byte. \$\endgroup\$ – Wheat Wizard Dec 31 '16 at 3:12
  • \$\begingroup\$ You should probably specify "Python 3 with Numpy" as it's not a standard library \$\endgroup\$ – FlipTack Jan 17 '17 at 20:36
1
\$\begingroup\$

Dart, 75 bytes

for(int x=2;x<37;x++)print("6 * 9 = ${54.toRadixString(x).toUpperCase()}");

Dart is a bit verbose when it comes to the stdlib, but hey... at least you can read it :P

\$\endgroup\$
0
\$\begingroup\$

Scala, 71

2 to 36 map(i=>println("6 * 9 = "+Integer.toString(54,i).toUpperCase))
\$\endgroup\$
0
\$\begingroup\$

Common Lisp: 56 characters

(do((b 2(1+ b)))((> b 36))(format t"6 * 9 = ~vr~%"b 54))
\$\endgroup\$
0
\$\begingroup\$

Sage, 48:

Shame Sage prints in lowercase... I'd only be one over Howard. Or, I guess, wrong and tied with David Carraher.

for i in[2..36]:print'6 * 9 =',54.str(i).upper()
\$\endgroup\$
0
\$\begingroup\$

Forth, 54

: f 54 37 2 do ." 6 * 9 = " dup i base ! . cr loop ; f
\$\endgroup\$
0
\$\begingroup\$

///, 133 bytes

/R/6 * 9 = //S/
R/R110110S2000S312S204S130S105S66S60S54S4AS46S42S3CS39S36S33S30S2GS2ES2CS2AS28S26S24S22S20S1QS1PS1OS1NS1MS1LS1KS1JS1I

Try it online!

\$\endgroup\$
0
\$\begingroup\$

SpecBAS - 48 bytes

1 FOR i=2 TO 36: ?"6 * 9 = ";BASE$(54,i): NEXT i

SpecBAS is actually quite competitive for a change :-)

\$\endgroup\$
0
\$\begingroup\$

8th, 65 62 bytes

This is a complete program. Exit after execution

( "6 * 9 = " . #54 swap base drop >s s:uc . cr ) 2 36 loop bye 

Explanation

( 
   "6 * 9 = " .   \ Print the first part of the formula
    #54 swap base \ Enter into the base provided by loop index and                
                  \ convert 54 (which is always expressed in base 10)
    drop          \ Get rid of previous base
    >s s:uc       \ Convert number into an upper case string
    . cr          \ Print result and newline
) 2 36 loop       \ Provide base from 2 to 36
bye               \ Quit
\$\endgroup\$

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.