Cơ sở điên rồ nhưng hợp lý


11

Chúng tôi có nhiều thách thức dựa trên cơ sở 10, cơ sở 2, cơ sở 36 hoặc thậm chí cơ sở -10 , nhưng còn tất cả các cơ sở hợp lý khác thì sao?

Bài tập

Cho một số nguyên trong cơ sở 10 và một cơ sở hợp lý, trả về số nguyên trong cơ sở đó (dưới dạng một mảng, chuỗi, v.v.).

Quá trình

Thật khó để tưởng tượng một cơ sở hợp lý, vì vậy hãy hình dung nó bằng Exploding Dots :

Xem xét hoạt hình này, thể hiện 17 trong cơ sở 3:

nhập mô tả hình ảnh ở đây

Mỗi dấu chấm đại diện cho một đơn vị và các hộp đại diện cho các chữ số: hộp ngoài cùng bên phải là vị trí của một người, hộp giữa là vị trí 3 ^ 1 và hộp ngoài cùng bên trái là vị trí 3 ^ 2.

Chúng ta có thể bắt đầu với 17 chấm tại địa điểm của một người. Tuy nhiên, đây là cơ sở 3, vì vậy các vị trí phải nhỏ hơn 3. Do đó, chúng tôi "nổ" 3 chấm và tạo một dấu chấm trên hộp ở bên trái. Chúng tôi lặp lại điều này cho đến khi chúng tôi kết thúc với một vị trí ổn định không có chấm phát nổ (tức là 3 chấm trong cùng một hộp).

Vậy 17 ở cơ sở 10 là 122 ở cơ sở 3.


Một cơ sở phân số là tương tự để nổ một số lượng chấm đến nhiều hơn một dấu chấm. Cơ sở 3/2 sẽ phát nổ 3 chấm để tạo 2.

Thể hiện 17 trong cơ sở 3/2:

nhập mô tả hình ảnh ở đây

Vậy 17 ở cơ sở 10 là 21012 ở cơ sở 3/2.


Các cơ sở tiêu cực hoạt động tương tự, nhưng chúng ta phải theo dõi các dấu hiệu (sử dụng cái gọi là chống chấm, bằng -1; được biểu thị bằng một vòng tròn mở).

Biểu thị 17 trong cơ sở -3:

nhập mô tả hình ảnh ở đây

Lưu ý, có thêm vụ nổ để làm cho dấu hiệu của tất cả các hộp giống nhau (bỏ qua số không).

Do đó, 17 trong cơ sở 10 là 212 trong cơ sở -3.

Cơ sở hợp lý tiêu cực làm việc tương tự, trong sự kết hợp của hai trường hợp trên.

Quy tắc

  • Không có sơ hở tiêu chuẩn.
  • Dấu của mỗi "chữ số" trong đầu ra phải giống nhau (hoặc bằng không).
  • Giá trị tuyệt đối của tất cả các chữ số phải nhỏ hơn giá trị tuyệt đối của tử số của cơ sở.
  • Bạn có thể giả định rằng giá trị tuyệt đối của cơ sở lớn hơn 1.
  • Bạn có thể cho rằng một cơ sở hợp lý ở dạng giảm thấp nhất.
  • Bạn có thể lấy tử số và mẫu số của cơ sở riêng biệt trong đầu vào.
  • Nếu một số có nhiều biểu diễn, bạn có thể xuất bất kỳ một trong số chúng. (ví dụ 12 trong cơ sở 10 có thể {-2, -8}{1, 9, 2}trong cơ sở -10)

Các trường hợp thử nghiệm:

Định dạng: {in, base} -> result

{7, 4/3}        ->  {3, 3}
{-42, -2}       ->  {1, 0, 1, 0, 1, 0}
{-112, -7/3}    ->  {-6, -5, 0, -1, 0}
{1234, 9/2}     ->  {2, 3, 6, 4, 1}
{60043, -37/3}  ->  {-33, -14, -22, -8}

Vì một số đầu vào có thể có nhiều biểu diễn, tôi khuyên bạn nên thử nghiệm đầu ra bằng đoạn Mathicala này trên TIO.

Đây là , vì vậy những bài nộp có số byte ngắn nhất trong mỗi ngôn ngữ sẽ giành chiến thắng!


Để biết thêm thông tin về các chấm nổ, hãy truy cập trang web của dự án toán học toàn cầu ! Họ có một loạt các công cụ toán học mát mẻ!


Câu trả lời:


6

Python 2 , 42 39 byte

n,a,b=input()
while n:print n%a;n=n/a*b

Hãy thử trực tuyến!

Cảm ơn @xnor đã tìm ra hình thức ngắn hơn.

Phiên bản lỗi thời (42 byte):

f=lambda n,a,b:n and[n%a]+f(n/a*b,a,b)or[]

Hãy thử trực tuyến!

Các tham số: đầu vào, tử số (có dấu) và mẫu số.

Trả về một mảng, chữ số thấp nhất đầu tiên.

Điều này chỉ hoạt động vì sự phân chia và modulo trong Python tuân theo dấu hiệu của mẫu số, vì vậy chúng ta không cần phải quan tâm đến các dấu hiệu tương tự một cách rõ ràng.

Đầu ra trường hợp thử nghiệm:

f(7, 4, 3)       == [3, 3]
f(-42, -2, 1)    == [0, -1, -1, -1, -1, -1, -1]
f(-112, -7, 3)   == [0, -1, 0, -5, -6]
f(1234, 9, 2)    == [1, 4, 6, 3, 2]
f(60043, -37, 3) == [-8, -22, -14, -33]

4
Bất thường, có vẻ như một chương trình ngắn hơn .
xnor

@xnor Cảm ơn, tôi luôn quên cách viết một cái gì đó ...
Bubbler

4

Aheui (bí truyền) , 91 byte

벙수벙섞벙석
희빠챠쌳뻐삭빠빠싻싸삯라망밣밭따맣사나삮빠싸사땨

Hãy thử trực tuyến!

Mất integer, numerator of basedenominator of base.

Do giới hạn của trình thông dịch TIO, mỗi đầu vào phải kết thúc bằng một dòng mới.

Thực hiện câu trả lời Python 2 của @ Bubbler's . May mắn thay, trình thông dịch Aheui này được viết bằng Python, vì vậy chúng ta có thể sử dụng cùng một thủ thuật.


4
o_O ngôn ngữ này là gì ... D:
HyperNeutrino

3

05AB1E , 11 10 byte

[D_#²‰`,³*

Hãy thử trực tuyến!

Mất integer, numerator of basedenominator of basegiống như tất cả các câu trả lời. Vì trình thông dịch 05AB1E được viết bằng Python (?), Thủ thuật trả lời Python 2 của Bubblers cũng có thể được sử dụng trong 05AB1E.

Giải trình

[D_ # ² `, ³ *
[Vòng lặp vô hạn
 D_ # Nếu số là 0, vòng lặp thoát (đầu vào ẩn
                                         trong lần lặp đầu tiên)
     ² Lấy tử số của cơ sở
      Divmod
       `Đẩy tất cả các phần tử vào ngăn xếp
        , In phần còn lại
         Lấy mẫu số của cơ sở
          * Nhân nó lên.

Vì vậy, chương trình hoạt động gần giống như mã Python này:

i1, i2, i3 = đầu vào ()
ngăn xếp = []
trong khi 1:
 ngăn xếp = (ngăn xếp hoặc [i1])
 ngăn xếp + = [ngăn xếp [-1]]
 nếu không stack [-1]: phá vỡ
 ngăn xếp + = [i2]
 ngăn xếp = ngăn xếp [: - 2] + [divmod (ngăn xếp [-2], ngăn xếp [-1])]
 ngăn xếp = ngăn xếp [: - 1] + danh sách (ngăn xếp [-1])
 ngăn xếp in [-1]
 ngăn xếp = ngăn xếp [: - 1]
 ngăn xếp + = [i3]
 ngăn xếp = ngăn xếp [: - 2] + [ngăn xếp [-2] * ngăn xếp [-1]]

11> 10 Cảm ơn Neil


Tôi nghĩ bạn có thể sử dụng _thay vì 0Qở đây.
Neil

@Neil Oh đúng, tôi quên boolean tiêu cực!
Shieru Asakoto
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.