Menerapkan fungsi yang sangat Darboux

12

Menurut Wikipedia , fungsi yang sangat kuat adalah Darboux

satu yang gambar setiap interval terbuka (tidak kosong) adalah seluruh garis nyata

Dengan kata lain, suatu fungsi f adalah Darboux kuat jika diberikan 3 bilangan real arbitrer a , b , dan y , selalu mungkin untuk menemukan x antara (berbeda) a dan b sedemikian rupa sehingga f(x)=y .

Untuk keperluan tantangan ini, kami akan mempertimbangkan fungsi-fungsi Darboux yang kuat atas dasar pemikiran.

Tantangan Anda adalah menulis program atau fungsi yang:

  • memberikan angka rasional sebagai output untuk setiap input angka rasional,
  • selalu memberikan output yang sama untuk input yang diberikan, dan
  • memiliki properti sangat Darboux.

Input dan output dapat berupa salah satu dari berikut ini:

  • tipe angka presisi arbitrer, jika bahasa Anda memiliki satu (atau memiliki perpustakaan untuk satu, misalnya GMP).
  • representasi string angka, yang Anda anggap akan selalu berisi titik desimal dan setidaknya satu digit di kedua sisi. Mungkin ada di basis apa saja b2 , tetapi input dan output harus dalam basis yang sama. Anda dapat menggunakan serangkaian karakter apa pun untuk digit dan titik desimal (tetapi sekali lagi, mereka harus konsisten antara input dan output).

Input akan selalu memiliki basis pemutusan b . Adapun output, yang mungkin memiliki basis ekspansi b secara teoritis non-terminasi tergantung pada pilihan fungsi Anda, Anda dapat memilih salah satu dari berikut ini:

  • digit keluaran selamanya.
  • ambil bilangan bulat tambahan sebagai input dan output setidaknya sebanyak itu digit.
  • output setidaknya sebanyak digit dalam input (yang mungkin mengandung nol trailing).

Perhatikan bahwa dengan sifat tantangan ini, konvensi yang nomor dapat diasumsikan representable oleh jenis nomor standar tidak tidak berlaku, kecuali untuk input kedua dijelaskan dalam opsi 2 di atas.

Untuk menghindari celah dengan fungsi yang hanya ditentukan pada rasional yang tidak berakhir, kiriman Anda harus dapat menghasilkan output yang mendekati sewenang-wenang dengan nilai yang diinginkan dalam praktiknya . Secara formal, mengingat bilangan rasional a , b , y , dan ε , harus ada bilangan rasional x yang berakhir pada basis yang Anda pilih sehingga a<x<b dan |f(x)y|<ε .


Untuk memberi Anda beberapa ide, berikut adalah deskripsi fungsi Conway base 13 :

  • Konversikan ke basis 13 dan hapus titik desimal.x
  • Jika hasilnya dalam bentuk , di mana dan hanya terdiri dari digit dari 0 hingga 9, maka .[x]A[y]C[z]13[y][z]f(x)=[y].[z]
  • Jika hasilnya dalam bentuk , di mana dan hanya terdiri dari digit dari 0 hingga 9, maka .[x]B[y]C[z]13[y][z]f(x)=[y].[z]
  • Kalau tidak, .f(x)=0

Fungsi ini sangat Darboux. Katakan, misalnya, bahwa kita ingin menemukan beberapa antara dan sedemikian rupa sehingga . Nilai base-13 akan memenuhi persyaratan ini.x123.45613123.45713f(x)=7.89123.456A7C8913

Kiriman Anda mungkin merupakan implementasi dari fungsi ini, meskipun saya menduga ada fungsi-fungsi Darboux kuat lainnya yang jauh lebih pendek untuk diimplementasikan. :)

Gagang pintu
sumber
Apakah angka diasumsikan memiliki basis pemutusan ekspansi? b
Nitrodon
link math.stackexchange dan juga pertanyaan asli itu adalah penipuan untuk beberapa contoh
Giuseppe
xx
@NickKennedy Terima kasih, saya mengabaikannya - Saya telah mengedit pertanyaan untuk diklarifikasi.
Gagang Pintu
1
Hmm, saya cukup yakin saya dapat mendefinisikan fungsi Darboux kuat yang konstan atau identitas pada semua input penghentian ...
Christian Sievers

Jawaban:

4

Retina 0.8.2 , 43 50 byte

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

Cobalah online! I / O adalah sebagai string biner. Enkode nomor biner ydekat dengan nomor biner lain asebagai berikut:

  1. Jika atidak mengandung ., sufiks satu.
  2. Jika aberisi angka ganjil setelah ., sufiks a 0.
  3. Jika ynegatif maka akhiran 11sebaliknya akhiran 10.
  4. Untuk setiap digit dalam y, akhiran 0diikuti oleh digit itu.
  5. Jika ymengandung ., suffix 11pada titik itu, jika tidak suffix setelah semua digit dalam y.

Penjelasan:

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

Pasangkan digit mulai dari titik biner. Jika nomor tersebut merupakan penyandian yang valid, maka decode 1xpasangan digit terakhir ke a .dan yang kedua terakhir ke -tanda opsional . Digit sebelum itu diabaikan.

0(.)
$1

Ini seharusnya meninggalkan pasangan yang memulai 0, jadi hapus 0s.

Neil
sumber
Saya terkadang mendapatkan output seperti -.. Apakah itu menyiratkan nol atau tidak seharusnya diproduksi?
Erik the Outgolfer
@EriktheOutgolfer Saya kira saya bisa mengubah *s ke +, yang akan menjamin setidaknya satu digit sebelum dan sesudah .?
Neil
Sebenarnya saya tidak bisa menjamin angka setelah .. Saya pikir saya masih bisa menjamin satu digit sebelum .sekalipun.
Neil
Terminal tambahan 0 dalam angka dengan .tidak mengubah nilainya, tetapi perubahan pada input fungsi Anda mengubah output. Mungkin Anda diizinkan untuk memperbaikinya dengan mengasumsikan input tidak memiliki 0s. Juga, jika Anda mengelompokkan pasangan dari kanan, bagaimana ini "secara teoritis bekerja untuk input nyata"?
Christian Sievers
@ChristianSievers (Maaf saya tidak melihat kotak masuk saya sebelumnya) Saya mendasarkan jawaban saya pada deskripsi fungsi basis 13 dalam pertanyaan, yang tampaknya juga memerlukan representasi terminating. Anda juga benar bahwa saya berasumsi bahwa tidak akan ada nol tambahan. (Jadi bilangan bulat selalu harus 11ditambahkan pada langkah 2.)
Neil
1

Jelly , 71 byte

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

Cobalah online!

Program lengkap yang menggunakan nomor basis-10 sebagai input dan output dan mengimplementasikan fungsi Conway base 13 tetapi menggunakan basis 7 dan 10 daripada 10 dan 13. Kedua input dan output menggunakan koma sebagai pemisah desimal. Output akan memiliki yang memimpin - untuk angka negatif.

Nick Kennedy
sumber
Contoh di tautan TIO memiliki angka 9 di input dan output, jadi bagaimana angka 7 dasar ini?
Christian Sievers
@ChristianSievers maaf berarti basis 10 untuk input dan output. Basis 7 digunakan dalam kode, tetapi dikonversi kembali ke pangkalan 10.
Nick Kennedy
Baik, sekarang saya bisa mengubah input dan mengerti bagaimana itu mempengaruhi output!
Christian Sievers
1

Retina ,28 25 26 28 byte

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

Cobalah online!

Penjelasan

.*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

Ini dapat menampilkan nol di depan dan di belakang, dan angka tanpa bagian integer.

Bisa golf 2 atau 3 byte lebih banyak jika saya bisa menggunakan 4+. Tapi saya tidak yakin bagaimana mendefinisikan hasil teoritis jika input memiliki aliran 4s yang tak berujung .

jimmy23013
sumber
1
Saya dikutuk oleh benda berbentuk T dengan memposting jawaban ini.
jimmy23013