Bộ chuyển đổi số tòa nhà cơ sở của Giáo sư


12

Giáo sư toán học hạt dẻ muốn mã hóa tất cả các nghiên cứu của họ bằng cách sử dụng một hệ thống chắc chắn để cáo buộc ngay cả những đối thủ đáng gờm nhất của họ!

Cuối cùng, giáo sư đã quyết định thay đổi cơ sở không chỉ là số họ đang viết mà còn mỗi chữ số trong số đó, theo đó chữ số tự tìm thấy (tính từ bên phải, bắt đầu bằng 1). Ví dụ:

Số 0 có một chữ số, vì vậy nó được biểu thị trong cơ sở 1: 0

Số 1 sẽ có một chữ số trong cơ sở mười, nhưng trong hệ thống giáo sư của chúng tôi không hợp lệ. Vị trí đầu tiên chỉ dành riêng cho 1 chữ số cơ sở! Điều này có nghĩa là nó phải được đặt ở vị trí thứ hai nơi cơ sở 2 được phép: 10

Số 2 yêu cầu ít nhất cơ sở 3 được viết: 100

Nhưng bây giờ số 3 có thể được viết bằng cách thay đổi chữ số ở vị trí thứ hai: 110

và 4 như vậy: 200

Dưới đây là một số ví dụ khác để giúp bạn có được ý tưởng:

5: 210

6: 1000

7: 1010

8: 1100

9: 1110

10: 1200

11: 1210

12 giờ 2000

13: 2010

14: 2100

15: 2110

16: 2200

17: 2210

18: 3000

Sử dụng hệ thống này, các ghi chú của giáo sư sẽ không có ý nghĩa với bất kỳ ai ngoài họ, và cuối cùng họ có thể chiếm lĩnh thế giới !!!! Ngủ ngon vào ban đêm.

Tất nhiên phương pháp mã hóa phải tối nghĩa nhất có thể.


Nhiệm vụ của bạn là viết 10 đoạn mã, mỗi đoạn đại diện cho một trong 10 chữ số cơ bản

0 1 2 3 4 5 6 7 8 9

mà khi kết hợp theo thứ tự của số được chuyển đổi sẽ tạo ra một số được viết trong hệ thống đánh số tiểu đường của giáo sư (phương thức đầu ra có thể là lựa chọn của bạn nhưng phải là số có thể đọc được bằng con người chỉ sử dụng các chữ số 0-9)

Ví dụ: nếu đoạn trích của tôi là:

0 = TIỀN 1 = VÍ DỤ, 2 = MÃ, 3 = GOLF và 9 = KIỂM TRA

sau đó

19 = KIỂM TRA -> 3010

20 = CODEMONKEY -> 3100

21 = MÃ SỐ MÃ -> 3110

22 = CODECODE -> 3200

23 = CODEGOLF -> 3210

Không có số đầu vào nào có nhiều hơn 10 chữ số hoặc số âm cần phải được xem xét, mặc dù nếu bạn muốn viết mã cho các chữ số bổ sung, bạn sẽ nhận được thêm số tiền. Đây là mã golf, vì vậy câu trả lời ngắn nhất (sử dụng tổng số byte kết hợp của tất cả các đoạn) sẽ thắng và các sơ hở tiêu chuẩn không được phép.

ĐỊA CHỈ: Trước khi bất cứ ai bắt đầu về việc 0 có phải là đại diện chính xác của 0 trong cơ sở 1 không, tôi muốn nhắc bạn rằng giáo sư này là người dở hơi. Sống với nó.


1
Lưu ý: Hệ thống của giáo sư còn được gọi là hệ thống số giai thừa .
Sản xuất ETH

Đó cũng là OEIS A124252
Kritixi Lithos

@ETHproductions Tôi chưa bao giờ nói mã hóa của Giáo sư là tốt .
Joe Bloggs

@KritixiLithos Cảm ơn bạn vì điều đó! Tôi đã tìm kiếm để sử dụng như là xác nhận.
Joe Bloggs

4
Chào mừng bạn đến với PPCG, nhân tiện :-)
ETHproductions

Câu trả lời:


1

Mathicala (môi trường REPL), tổng số 858 byte

Đây là đoạn mã 86 byte cho chữ số 9:

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

Các đoạn mã cho các chữ số 1 đến 8 là giống hệt nhau, ngoại trừ 9 được thay thế bằng chữ số thích hợp. Đoạn mã cho chữ số 0 giống hệt nhau, ngoại trừ việc +9bị xóa đơn giản.

a~IntegerDigits~MixedRadix@Range[b,1,-1]tính toán danh sách các chữ số hệ số giai thừa của a, miễn blà ít nhất bằng số chữ số; FromDigitschuyển đổi danh sách các chữ số thành số nguyên cơ bản 10 thông thường cho mục đích đầu ra. (Nếu bất kỳ yếu tố nào trong danh sách vượt quá 9, điều gì đó buồn cười sẽ xảy ra.)

Trong môi trường REPL của Mathematica, các tính toán có thể được kết thúc bằng dấu chấm phẩy để triệt tiêu đầu ra; do đó, chỉ đầu ra cuối cùng trong chuỗi được phân tách bằng dấu chấm phẩy sẽ được hiển thị. Chúng tôi xác định đệ quy số nguyên ađược chỉ định bởi các đoạn mã và cũng là một ràng buộc bvề số chữ số hệ thống giai thừa cần thiết. Lệnh ValueQ@a||(a=0;b=3)khởi tạo các biến này nếu chúng chưa được khởi tạo (nghĩa là trong đoạn mã đầu tiên) và để chúng một mình theo cách khác; sau đó a=10a+9;b++thực hiện đệ quy. Cuối cùng, ban đầu 1;là để dán các đoạn mã lại với nhau: nó nhân các phép tính trung gian với 1 (dù sao chúng ta không bao giờ thấy).


Tôi thích sự lạm dụng dấu chấm phẩy.
Joe Bloggs

0

Goruby, 790 810 980

Đây là một nỗ lực thứ hai, dựa trên thực tế là, về cơ bản, trong bất kỳ vỏ nào, việc in trở lại vận chuyển ("\ r") mà không có dòng mới ("\ n") sẽ ghi đè lên dòng in trước đó, cuối cùng đảm bảo rằng chỉ in bit cuối cùng (đó là, kết quả cuối cùng) được hiển thị.

Điều này phải được chạy trong một vỏ, ví dụ ruby name_of_file.rb.

Nó hoạt động cho số lượng tích cực của chiều dài không giới hạn.

Mã này là mười bản sao của đoạn trích bên dưới, với X(ở trên cùng) được thay thế bằng các chữ số từ 0-9, một bản trên mỗi đoạn.

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Đó là, đoạn trích đại diện (ví dụ) 8 sẽ giống như:

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Thách thức nêu rõ rằng các đoạn mã cần được "kết hợp" để tạo đại diện cho một số có nhiều chữ số, do đó, để nối một chữ số vào một số, chỉ cần đặt nó vào dấu ngoặc vuông ở cuối số. Do đó, số 103 (theo số thập phân) sẽ là:

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]

Ý bạn là số 108.
user75200
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.