Güçlü bir Darboux işlevi uygulayın


13

Wikipedia'ya göre güçlü bir Darboux işlevi

her (boş olmayan) açık aralığın görüntüsünün tamamı gerçek çizgi

Diğer bir deyişle, f işlevinin 3 rasgele gerçek sayı a , b ve y verildiği takdirde kuvvetle Darboux'dur , f ( x ) = y olacak şekilde (farklı) a ve b arasında bir x bulmak her zaman mümkündür .birbf(x)=y

Bu zorluğun amaçları için, bunun yerine rasyonlar üzerinde Darboux işlevlerini güçlü bir şekilde ele alacağız.

Sorun, aşağıdakileri yapan bir program veya işlev yazmaktır:

  • her rasyonel sayı girişi için çıkış olarak rasyonel bir sayı verir,
  • verilen bir giriş için her zaman aynı çıktıyı verir ve
  • güçlü Darboux özelliğine sahiptir.

Giriş ve çıkış aşağıdakilerden biri olabilir:

  • dilinizde bir tane varsa (veya biri için bir kitaplığı varsa, örn. GMP) rastgele bir sayı türü.
  • sayının dize olarak temsil edileceği varsayılır, her zaman ondalık bir nokta ve her iki tarafta en az bir basamak bulunur. Herhangi bir baz b2 , ancak giriş ve çıkış aynı bazda olmalıdır. Rakamlar ve ondalık nokta için herhangi bir karakter kümesi kullanabilirsiniz (ancak yine giriş ve çıkış arasında tutarlı olmalıdırlar).

Giriş her zaman bir sonlandırma tabanı b genişlemesine sahip olacaktır . Fonksiyon seçiminize bağlı olarak teorik olarak sonlandırılmayan baz b genişlemesine sahip olabilen çıktıya gelince , aşağıdakilerden herhangi birini seçebilirsiniz:

  • sonsuza kadar basamak basar.
  • en az o basamaktan giriş ve çıkış olarak ek bir tamsayı alın.
  • en az girdi içerdiği kadar basamak (bu sayı sıfır içerebilir).

Bu zorluğun doğası gereği, yukarıdaki seçenek 2'de açıklanan ikinci girdi haricinde, sayıların standart sayı türleriyle temsil edilebileceği varsayımının geçerli olmadığını unutmayın.

Yalnızca sonlandırılmayan gerekçelerde tanımlanan işlevlere sahip boşluklardan kaçınmak için, gönderiminizin pratikte istenen değere yakın keyfi olarak çıktı üretebilmesi gerekir . Resmi olarak rasyonel numaraları verilmiş bir , b , y , ve ε , bir rasyonel sayı olmalıdır x o seçtiğiniz tabanında son bulur, öyle ki bir<x<b ve |f(x)-y|<ε .


Size bazı fikirler vermek için, Conway base 13 işlevinin açıklaması aşağıdadır :

  • Dönüştürme x tabana 13 ve ondalık noktayı kaldırın.
  • Sonuç [x]bir[y]C[z]13 biçimindeyse , burada [y] ve [z] yalnızca 0 ile 9 arasındaki rakamlardan oluşur, sonra f(x)=[y].[z] .
  • Sonuç [x]B[y]C[z]13 biçimindeyse , burada [y] ve [z] yalnızca 0 ile 9 arasındaki rakamlardan oluşur, sonra f(x)=-[y].[z] .
  • Aksi takdirde, f(x)=0 .

Bu işlev kesinlikle Darboux'dur. Ki, örneğin, istediğimiz bazı bulmak için x arasında 123,45613 ve 123,45713 bu şekilde f(x)=7.89 . Temel 13 değeri 123,456bir7C8913 bu gereksinimi karşılar.

Uygulamanız çok daha kısa olan güçlü Darboux işlevleri olduğundan şüphelenmeme rağmen, başvurunuz bu işlevin bir uygulaması olabilir. :)


Sayıların sonlandırıcı baz genişlemesi olduğu varsayılıyor mu? b
Nitrodon

math.stackexchange bağlantısı ve ayrıca bazı soru için bir dupe olan orijinal soru
Giuseppe

Conway temel 13 algoritmasını uygularsak, temel 13'te girdi alabiliriz, ancak daha sonra temel 13'te de çıktı almak zorunda kalırız. İşlevin çıktısı genellikle ondalık olduğundan, yinelenen üç basamaklı bir sayı ile sonuçlanır. Bu nasıl çıktılanmalıdır? Soruda x belirtildiği (henüz değil) ilk rakamını çıkarıyor muyuz ? Yoksa yinelenen bir durum mu belirtmeliyiz? xx
Nick Kennedy

@NickKennedy Teşekkürler, bunu göz ardı ettim - Açıklığa kavuşturmak için soruyu düzenledim.
Kapı tokmağı

1
Hmm, sürekli olarak güçlü bir Darboux işlevi veya tüm sonlandırma girişlerinde kimlik tanımlayabileceğime eminim ...
Christian Sievers

Yanıtlar:


4

Retina 0.8.2 , 43 50 bayt

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

Çevrimiçi deneyin! G / Ç ikili bir dizedir. yBaşka bir ikili sayıya yakın bir ikili sayıyı aaşağıdaki gibi kodlayın :

  1. A aiçermiyorsa ., bir sonek ekleyin.
  2. Eğer asonraki basamak bir tek sayı .olan bir sonek 0.
  3. Negatifse y, sonek 11aksi takdirde sonek 10.
  4. Girilen her basamak için ysonek ve 0ardından bu basamak.
  5. Bu noktada ya .eki varsa 11, aksi takdirde tüm basamaklardan sonra sonek ekleyin y.

Açıklama:

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

İkili noktadan başlayarak rakamları eşleştirin. Sayı geçerli bir kodlama ise, son 1xbasamak çiftini a .ve ikinci sonuncuyu isteğe bağlı bir -işaretin kodunu çözün . Bundan önceki rakamlar yok sayılır.

0(.)
$1

Bu, ile başlayan çiftleri bırakmalıdır 0, bu yüzden 0s'yi silin .


Bazen gibi çıktılar alıyorum -.. Bunlar sıfır mı ima ediyor yoksa üretilmemeleri mi gerekiyor?
Erik Outgolfer

@EriktheOutgolfer ben değiştirebilir tahmin *etmek s +ondan önce ve sonra en az bir rakam güvence altına alacak, s .?
Neil

Aslında .. Bence yine de bir rakam garanti edebilirim ..
Neil

İle bir sayıdaki ek bir terminal 0 .değerini değiştirmez, ancak işlevinizin girişindeki böyle bir değişiklik çıkışı değiştirir. Belki de girişin böyle bir 0 değeri olmadığı varsayılarak bunu düzeltmenize izin verilir. Ayrıca, çiftleri sağdan gruplandırırsanız, bu "teorik olarak herhangi bir gerçek girdi için nasıl çalışır"?
Christian Sievers

@ChristianSievers (Maalesef daha önce gelen kutumu fark etmedim) Cevabımı, sorudaki temel 13 işlevinin açıklamasına dayandım, bu da sonlandırıcı bir temsil gerektiriyor gibi görünüyor. Ayrıca, hiçbir sıfırın olmayacağını varsaydığım konusunda haklısın. (Yani tamsayılar her zaman 112. adımda
Neil

1

Jöle , 71 bayt

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

Çevrimiçi deneyin!

Giriş ve çıkış olarak taban-10 sayısını alan ve Conway taban 13 işlevini uygulayan ancak 10 ve 13 yerine 7 ve 10 tabanlarını kullanan tam bir program. Hem giriş hem de çıkış ondalık ayırıcı olarak virgül kullanır. Çıktıda öncü olur - negatif sayılar için.


TIO bağlantısındaki örnekte giriş ve çıkışta 9 rakamı vardır, bu yüzden bu temel 7 sayıları nasıl?
Christian Sievers

@ChristianSievers üzgünüm giriş ve çıkış için temel 10 anlamına geliyordu. Kod 7'de kod kullanılmıştır, ancak tekrar 10 tabanına dönüştürülmüştür.
Nick Kennedy

Tamam, şimdi girdiyi değiştirebilir ve bunun çıktıyı nasıl etkilediğini anlayabilirim!
Christian Sievers

1

Retina ,28 25 26 28 bayt

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

Çevrimiçi deneyin!

açıklama

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

Bir tamsayı parçası olmadan baştaki ve sondaki sıfırları ve sayıları çıktılayabilir.

Eğer kullanabilir miyim 2 veya 3 bayt daha golfed olabilir 4+. Ancak girdinin sonsuz bir 4s akışı varsa, teorik sonucun nasıl tanımlanacağından emin değilim .


1
Bu cevabı göndererek T şeklinde bir şeyle lanetlendim.
jimmy23013
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.