Thực hiện chức năng Darboux mạnh mẽ


12

Theo Wikipedia , một chức năng Darboux mạnh mẽ là

một trong đó hình ảnh của mỗi khoảng mở (không trống) là toàn bộ dòng thực

Nói cách khác, hàm f rất mạnh Darboux nếu được cho 3 số thực a , by tùy ý , luôn có thể tìm thấy một x giữa (phân biệt) ab sao cho f(x)=y .

Đối với mục đích của thách thức này, chúng tôi sẽ xem xét các chức năng Darboux mạnh mẽ hơn các lý do thay thế.

Thách thức của bạn là viết một chương trình hoặc chức năng:

  • đưa ra một số hữu tỷ làm đầu ra cho mỗi đầu vào số hữu tỷ,
  • luôn luôn cung cấp cùng một đầu ra cho một đầu vào nhất định và
  • có tài sản Darboux mạnh mẽ.

Đầu vào và đầu ra có thể là một trong những điều sau đây:

  • một loại số chính xác tùy ý, nếu ngôn ngữ của bạn có một (hoặc có một thư viện cho một, ví dụ như GMP).
  • một chuỗi đại diện cho số mà bạn có thể giả sử sẽ luôn chứa dấu thập phân và ít nhất một chữ số ở hai bên. Nó có thể ở bất kỳ cơ sở b2 , nhưng đầu vào và đầu ra phải nằm trong cùng một cơ sở. Bạn có thể sử dụng bất kỳ bộ ký tự nào cho chữ số và dấu thập phân (nhưng một lần nữa, chúng phải nhất quán giữa đầu vào và đầu ra).

Đầu vào sẽ luôn có một mở rộng cơ sở b kết thúc . Đối với đầu ra, có thể có mở rộng cơ sở b không kết thúc về mặt lý thuyết tùy thuộc vào lựa chọn chức năng của bạn, bạn có thể chọn bất kỳ tùy chọn nào sau đây:

  • chữ số đầu ra mãi mãi.
  • lấy một số nguyên bổ sung làm đầu vào và đầu ra ít nhất là nhiều chữ số.
  • đầu ra ít nhất là nhiều chữ số trong đầu vào (có thể chứa các số 0 ở cuối).

Lưu ý rằng theo bản chất của thách thức này, quy ước rằng các số có thể được coi là đại diện cho các loại số tiêu chuẩn không được áp dụng, ngoại trừ đầu vào thứ hai được mô tả trong tùy chọn 2 ở trên.

Để tránh các sơ hở với các hàm chỉ được xác định trên các tỷ lệ không kết thúc, trình của bạn phải có thể tạo ra đầu ra tùy ý gần với giá trị mong muốn trong thực tế . Chính thức, được đưa ra con số hợp lý a , b , y , và ε , thì phải có một số lượng hợp lý x mà chấm dứt trong cơ sở của bạn chọn sao cho a<x<b|f(x)y|<ε .


Để cung cấp cho bạn một số ý tưởng, đây là mô tả về chức năng Conway cơ sở 13 :

  • Chuyển x sang cơ sở 13 và xóa dấu thập phân.
  • Nếu kết quả có dạng [x]A[y]C[z]13 , trong đó [y][z] bao gồm các chữ số từ 0 đến 9, thì f(x)=[y].[z] .
  • Nếu kết quả có dạng [x]B[y]C[z]13 , trong đó [y][z] bao gồm các chữ số từ 0 đến 9, thì f(x)=[y].[z] .
  • Mặt khác, f(x)=0 .

Chức năng này là mạnh mẽ Darboux. Ví dụ, giả sử rằng chúng tôi muốn tìm một số x trong khoảng 123.45613123.45713 sao cho f(x)=7.89 . Giá trị cơ sở 13 123.456A7C8913 sẽ đáp ứng yêu cầu này.

Việc gửi của bạn có thể là việc thực hiện chức năng này, mặc dù tôi nghi ngờ rằng có những chức năng Darboux mạnh mẽ khác ngắn hơn rất nhiều để thực hiện. :)


Là những con số được giả định là có một mở rộng cơ sở kết thúc ? b
Nitrodon

liên kết math.stackexchange và cũng là câu hỏi ban đầu, đây là bản sao của một số ví dụ
Giuseppe

Nếu chúng ta thực hiện thuật toán Conway cơ sở 13, chúng ta có thể lấy đầu vào ở cơ sở 13 nhưng sau đó cũng sẽ phải xuất ở cơ sở 13. Vì đầu ra của hàm thường là số thập phân, nên chúng tôi sẽ kết thúc với số thứ ba định kỳ. Làm thế nào điều này nên được đầu ra? Chúng ta có xuất các chữ số đầu tiên không , trong đó x được chỉ định trong câu hỏi (mặc dù chưa)? Hay chúng ta cần chỉ ra rằng nó đang tái diễn? xx
Nick Kennedy

@NickKennedy Cảm ơn, tôi đã bỏ qua điều đó - Tôi đã chỉnh sửa câu hỏi để làm rõ.
Doorknob

1
Hmm, tôi khá chắc chắn rằng tôi có thể xác định một chức năng Darboux mạnh mẽ không đổi hoặc danh tính trên tất cả các đầu vào chấm dứt ...
Christian Sievers

Câu trả lời:


4

Võng mạc 0.8.2 , 43 50 byte

^.*\.(..)*1(.)((..)+)1.((..)*)$
$2$*-$3.$5
0(.)
$1

Hãy thử trực tuyến! I / O là một chuỗi nhị phân. Mã hóa một số nhị phân ygần với số nhị phân khác anhư sau:

  1. Nếu akhông chứa một ., hậu tố một.
  2. Nếu achứa một số chữ số lẻ sau dấu ., hậu tố a 0.
  3. Nếu ylà âm thì hậu tố 11khác hậu tố 10.
  4. Đối với mỗi chữ số trong y, hậu tố 0theo sau chữ số đó.
  5. Nếu ychứa a ., hậu tố 11tại điểm đó, nếu không thì hậu tố đó sau tất cả các chữ số trong y.

Giải trình:

^.*\.(..)*1(.)((..)+)1.((..)*)$
$2$*-$3.$5

Ghép các chữ số bắt đầu tại điểm nhị phân. Nếu số là mã hóa hợp lệ, sau đó giải mã 1xcặp chữ số cuối cùng thành a .và số thứ hai cuối cùng thành -dấu tùy chọn . Chữ số trước đó được bỏ qua.

0(.)
$1

Điều này chỉ nên để lại các cặp bắt đầu với 0, vì vậy hãy xóa 0s.


Đôi khi tôi nhận được kết quả đầu ra như -.. Những cái đó có nghĩa là số không hay chúng không được sản xuất?
Erik the Outgolfer

@EriktheOutgolfer Tôi đoán tôi có thể thay đổi *s thành +s, điều đó sẽ đảm bảo ít nhất một chữ số trước và sau .?
Neil

Trên thực tế tôi không thể đảm bảo chữ số sau .. Tôi nghĩ rằng tôi vẫn có thể đảm bảo một chữ số trước khi .mặc dù.
Neil

Một thiết bị đầu cuối 0 trong một số .không thay đổi giá trị của nó, nhưng sự thay đổi trong đầu vào của chức năng của bạn sẽ thay đổi đầu ra. Có lẽ bạn được phép sửa lỗi này bằng cách giả sử đầu vào không có 0 như vậy. Ngoài ra, nếu bạn nhóm các cặp từ bên phải, làm thế nào "lý thuyết này hoạt động cho bất kỳ đầu vào thực tế"?
Christian Sievers

@ChristianSievers (Xin lỗi tôi đã không nhận thấy hộp thư đến của mình trước đó) Tôi dựa trên câu trả lời của tôi về mô tả của hàm cơ sở 13 trong câu hỏi, dường như cũng yêu cầu một đại diện chấm dứt. Ngoài ra, bạn đúng rằng tôi đã giả định rằng sẽ không có số 0 ở cuối. (Vì vậy, số nguyên luôn phải được 11thêm vào trong bước 2.)
Neil

1

Thạch , 71 byte

L7*©ṛḅ7WµṪ×⁵d®µ⁴‘¤Ð¡ḊṖ
DF7,8ṣṪ¥ƒṣ9ḅ7×ɗÇƭ€j”,
DFf7r9¤ṫ-Ḍ⁼Ɱ“OY‘TịØ+³çƲ0Ẹ?

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

Một chương trình đầy đủ lấy số cơ sở 10 làm đầu vào và đầu ra và thực hiện chức năng Conway cơ sở 13 nhưng sử dụng cơ sở 7 và 10 thay vì 10 và 13. Cả đầu vào và đầu ra đều sử dụng dấu phẩy làm dấu tách thập phân. Đầu ra sẽ có một đầu - cho số âm.


Ví dụ tại liên kết TIO có chữ số 9 ở đầu vào và đầu ra, vậy 7 số cơ sở này như thế nào?
Christian Sievers

@ChristianSievers xin lỗi có nghĩa là cơ sở 10 cho đầu vào và đầu ra. Cơ sở 7 được sử dụng trong mã, nhưng được chuyển đổi trở lại cơ sở 10.
Nick Kennedy

Tốt thôi, bây giờ tôi có thể thay đổi đầu vào và hiểu điều đó ảnh hưởng đến đầu ra như thế nào!
Christian Sievers

1

Võng mạc ,28 25 26 28 byte

.*11|22
.
D^`\.
^3
-
4(.)
$1

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

Giải trình

.*11|22     Delete up to the last 11 and prepend a dot. Also change 22 to a dot.
.
D^`\.       Keep only the last dot, if there is one.
^3          Change 3 at the beginning to a minus sign.
-
4(.)        4 is the escape character.
$1

Nó có thể xuất các số 0 đứng đầu và cuối, và các số không có phần nguyên.

Nó có thể được chơi thêm 2 hoặc 3 byte nếu tôi có thể sử dụng 4+. Nhưng tôi không chắc làm thế nào để xác định kết quả lý thuyết nếu đầu vào có một luồng 4s vô tận .


1
Tôi đã bị nguyền rủa bởi một điều hình chữ T bằng cách đăng câu trả lời này.
jimmy23013
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.