Tính 6 * 9 trong các cơ sở khác nhau


16

Xuất kết quả sau (là kết quả của việc tính toán 6 * 9 trong các cơ sở từ 2 đến 36). Hãy chắc chắn rằng các chữ cái là chữ hoa và phép nhân được xuất ra trên mỗi dòng.

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

Mã ngắn nhất sẽ thắng.


1
@Howard: Đã sửa. Tôi đã xem xét thay đổi 2 thành 10, nhưng quên mất chỉnh sửa này trong khi sửa một cái gì đó khác trong kết quả, vì vậy tôi đã vô tình để nó sai cách.
Konrad Borowski

2
Calculate 6*9 in different basesTôi tự hỏi tại sao tuyên bố được diễn đạt như vậy, tại sao 6*9và không chỉ đơn giản 54? Có lẽ ý nghĩa dự định ban đầu là 69nên được giải thích không phải luôn luôn là số thập phân mà trong các cơ sở khác nhau? Điều đó sẽ làm cho tuyên bố hợp lý hơn và vấn đề thú vị hơn (nhưng sau đó chúng ta nên bắt đầu từ cơ sở 10 đến 36)
leonbloy

2
@leonbloy: 69là các số có một chữ số. Chúng có nghĩa giống nhau ở mọi cơ sở trong đó các chữ số đó là hợp lệ.
Ilmari Karonen

1
@IlmariKaronen: Đúng, nhưng 6 * 9 = 110110không có nhiều ý nghĩa ...
Dennis

3
Đây là một tài liệu tham khảo đến loạt bài Hướng dẫn về thiên hà của Hitchhiker của Douglas Adams. Trong sê-ri, Câu trả lời cho Câu hỏi cuối cùng về Sự sống, Vũ trụ và Mọi thứ là "42". Sau đó, nó tiết lộ rằng Câu hỏi cuối cùng về Sự sống, Vũ trụ và Mọi thứ là "Bạn nhận được gì khi nhân sáu số với chín?", Hoạt động trong cơ sở 13. Lưu ý: Douglas Adams cho biết điều này là vô ý; "Tôi không viết truyện cười ở căn cứ 13" .
dr jimbob

Câu trả lời:



7

GolfScript, 39 ký tự

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

Kết quả có thể được nhìn thấy ở đây .



6

Javascript, 57 55 byte

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

Có thể rút ngắn xuống còn 49 với alert, nhưng tôi không muốn gửi bất cứ ai đến đó ...


3
Đầu ra phải là chữ hoa và (54)có thể được thay thế bằng 54.(để viết 54..toString).
Konrad Borowski

2
for(i=1;++i<37;)cũng lưu một nhân vật.
grc

Bạn có thể bỏ qua 37? Nó sẽ dẫn đến một lỗi và dừng lại
l4m2

4

Hồng ngọc (47)

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

Chà, tôi biết rằng giải pháp GolfScript tốt hơn, nhưng này, ít nhất đây không phải là bí truyền ...


2.step{|t|puts"9 * 6 = "+54.to_s(t).upcase}tiết kiệm một vài byte. Nó thoát với một lỗi, nhưng đó là ok: D .
m-chrzan

4

Con trăn, 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

Xuất sắc. Khá đáng chú ý rằng tôi là một tổng số Python noob so sánh :)
Joachim Isaksson

@JoachimIsaksson Cảm ơn ... Tôi đã có nhiều thứ để tìm hiểu hơn.
gian hàng

Thay vào đó, bạn có thể tắt một ký tự bằng cách sử dụng vòng lặp while: b=2<linebreak> while b<37:print'6 * 9 =',B(54);b+=1(giả sử một ký tự cho ngắt dòng * nix)
Bob

@Bob Bất cứ khi nào tôi thử một vòng lặp while, nó quá đắt. Sau đó, tôi quên thử lần sau. ;) Cảm ơn!
gian hàng

3

Con trăn 2.7 ( 124 114)

EDIT: Cắt một số lông tơ nhờ bình luận của @ boothby bên dưới

Tôi nghĩ Python đang làm tốt vì nó không có sẵn (mà tôi biết) để thực hiện chuyển đổi cơ sở nên nó phải được thực hiện bằng mã;

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')

Tôi phải nhắc nhở bản thân về điều này liên tục: print'\n'.join(...for x in y)khá dài hơn for x in y:print....
gian hàng

@boothby Cảm ơn, cập nhật với đề xuất của bạn :)
Joachim Isaksson


1

Toán học 40

Không tranh chấp (chữ thường được sử dụng):

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

đầu ra cơ sở


1

Julia, 61

cho b = 2: 36; @printf ("6 * 9 =% s \ n", chữ hoa (cơ sở (b, 54))); end

Khá đau đớn, ngoài việc nhớ sử dụng macro @printf so với printf.

Cơ sở nhập khẩu; không cần thiết ...


for b=2:36;println("6 * 9 = $(uppercase(base(b,54)))");endcũng tốt ...
cormullion

1

Perl

Phải sử dụng mô-đun Math :: BaseCnv

35 ký tự không có usetuyên bố:

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

54 ký tự với usetuyên bố:

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

Không chắc chắn làm thế nào bạn ghi được điểm này, vì vậy cả hai đều được bao gồm.

Cấu trúc BLOCK LIST đã được sử dụng. Danh sách là phạm vi 2 đến 36, được yêu cầu. Thịt nằm trong cnv($NUMBER, $BASE)chức năng, và bản đồ là một vòng lặp ngụ ý.


1
Đếm các usetuyên bố. Cái đầu tiên không hoạt động trong perl của tôi.
gian hàng

1

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]


1

C ( 166 151)

Loại bỏ một số ký tự không cần thiết và thay đổi một số tuyên bố. Giả sử rằng bạn đang chạy chương trình không có đối số.

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("");}}

1

Clojure, 75

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


1

Python 3, 83 byte

import numpy;print('\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)))

1
Bạn có thể sử dụng '\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37))thay vì *['6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)],sep='\n'để lưu một byte.
Thuật sĩ lúa mì

Có lẽ bạn nên chỉ định "Python 3 với Numpy" vì đây không phải là thư viện chuẩn
FlipTack

1

Phi tiêu, 75 byte

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

Phi tiêu hơi dài dòng khi nói đến stdlib, nhưng này ... ít nhất bạn có thể đọc nó: P


0

Scala, 71

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

0

Lisp thường gặp: 56 ký tự

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

0

Hiền nhân, 48:

Sage xấu hổ in chữ thường ... Tôi chỉ là một trên Howard. Hoặc, tôi đoán, sai và gắn với David Carraher.

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



0

SpecBAS - 48 byte

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

SpecBAS thực sự khá cạnh tranh cho một sự thay đổi :-)


0

8 , 65 62 byte

Đây là một chương trình hoàn chỉnh. Thoát sau khi thực hiện

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

Giải trình

( 
   "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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.