Halb, halb, halb und halb

33

Betrachten Sie die folgende Zahlenfolge:

0,12,14,34,18,38,58,78,116,316,516,716,916,1116,1316,1516,132,332,532,

Sie zählt alle binären Brüche im Einheitsintervall auf .[0,1)

(Um diese Herausforderung zu vereinfachen, ist das erste Element optional: Sie können es überspringen und berücksichtigen, dass die Sequenz mit 1/2 beginnt.)

Aufgabe

Schreiben Sie ein Programm (komplettes Programm oder eine Funktion), das ...

Wählen Sie eines dieser Verhaltensweisen:

  • Eingabe n, Ausgabe n-tes Element der Sequenz (0-indiziert oder 1-indiziert);
  • Eingabe n, Ausgabe der ersten n Elemente der Sequenz;
  • Geben Sie nichts ein und geben Sie die unendliche Zahlenfolge aus, die Sie nacheinander abrufen können.

Regel

  • Ihr Programm sollte mindestens die ersten 1000 Elemente unterstützen.
  • Sie können Dezimalstellen oder Brüche (eingebaute, ganzzahlige Paare, Strings) nach Belieben ausgeben.
    • Die Eingabe / Ausgabe als Binärziffern ist in dieser Frage nicht zulässig.
  • Das ist , kürzeste Codes gewinnen;
  • Standardlücken sind nicht erlaubt.

Testfälle

input output
1     1/2     0.5
2     1/4     0.25
3     3/4     0.75
4     1/8     0.125
10    5/16    0.3125
100   73/128  0.5703125
511   511/512 0.998046875
512   1/1024  0.0009765625

Diese Beispiele basieren auf einer mit 0 indizierten Sequenz, wobei die führende 0 enthalten ist. Sie müssten die Eingabe anpassen, um Ihre Lösung anzupassen.

Weiterlesen

  • OEIS A006257
    • Josephus-Problem: . (Ehemals M2216)ein2n=2einn-1,ein2n+1=2einn+1
    • 0, 1, 1, 3, 1, 3, 5, 7, 1, 3, 5, 7, 9, 11, 13, 15, 1, 3, 5, ...
  • OEIS A062383
    • ein0=1 : für , oder .n>0einn=2lOG2n+1einn=2einn2
    • 1, 2, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, ...
  • In A006257 (n) / A062383 (n) = (0, 0,1, 0,01, 0,11, 0,001, ...) werden alle binären Brüche im Einheitsintervall [0, 1) aufgelistet. - Fredrik Johansson, 14. August 2006

tsh
quelle
4
" Geben Sie nichts ein, geben Sie die unendliche Zahlenfolge nacheinander aus " Muss es eine nach der anderen sein, oder dürfen wir auch eine unendliche Liste ausgeben (in Haskell, Elixir, 05AB1E usw. möglich)?
Kevin Cruijssen
Kann ich eine Liste von Zeichenfolgen ausgeben? zB"1/2" "1/4" "1/8"...
Barranka
@ KevinCruijssen Unendliche Liste ist in Ordnung, solange Sie takespäter n Elemente daraus können.
TSH
@Barranka Ich finde es akzeptabel. Das ist nichts anderes, als Brüche nach Standard zu drucken.
TSH
Wenn Sie sagen, dass Eingabe / Ausgabe als Binärzahl nicht zulässig ist , können wir keine Funktion schreiben, die ein Paar zurückgibt, wenn ints, oder doublein einer Sprache / Implementierung, in der doubledas IEEE binary64-Format verwendet wird ? Ich hoffe, Sie meinen nicht, dass Sie eine ASCII-Zeichenfolge analysieren müssen, wenn wir eine Ganzzahleingabe vornehmen möchten. Normale Integer-Typen sind in Sprachen wie C binär. Oder heißt das, dass die Eingabe / Ausgabe kein Array oder keine Zeichenfolge aus Integer- oder ASCII-Nullen / Einsen sein kann?
Peter Cordes

Antworten:

22

Haskell , 25 Bytes

pred.until(<2)(/2).(+0.5)

Probieren Sie es online!

Gibt Dezimalstellen mit einem Index ohne den anfänglichen Nullterm aus.

Addiert 0,5 zur Eingabe, halbiert dann, bis das Ergebnis unter 2 liegt, und subtrahiert dann 1. Bei Verwendung eines pointfree-Ausdrucks werden 1 Byte mehr gespeichert

f n=until(<2)(/2)(n+0.5)-1
xnor
quelle
11

Java 10, 68 64 Bytes

Versuchen Sie es zuerst mit Code Golf!

Option 1: Finde das n- te Element (1-indiziert)

-4 Bytes dank @Kevin Cruijssen

n->{int x=0;for(;n>>++x!=1;);return((~(1<<x)&n)*2.+1)/(1<<x+1);}

Dies ist eine anonyme Methode, die den n- ten Term findet, indem das höchstwertige Bit aus entfernt wird n entfernt , es verdoppelt und eins addiert und dann durch die nächsthöhere Potenz von 2 dividiert wird.

Probieren Sie es online!

Code-Komplettlösung:

n->{                      // builds anonymous function with input n
int x=0;                  // stores floor of log(n) (base 2) for most significant digit
for(;n>>++x!=1;);         // calculates floor of log(n) by counting right shifts until 1
return((~(1<<x)&n)        // removes most significant digit of n
*2.+1)                     // multiplies 2 and adds 1 to get the odd numerator
/(1<<x+1);}               // divides by the next highest power of 2 and returns`

Wird bearbeitet, wenn es erforderlich ist, den endgültigen Wert zu drucken, anstatt ihn zurückzugeben.

TCFP
quelle
Willkommen bei PPCG, schön, Sie bei uns zu haben :)
Shaggy
Hallo, willkommen bei PPCG! Tolle erste Antwort, +1 von mir. Momentan ist es die gleiche Anzahl von Bytes wie meine Java-Antwort, aber Sie können immer noch einige Teile Ihrer Antwort auf Golf spielen, um sie kürzer als meine zu machen: Die {}After-the-Loop- Antwort kann stattdessen eine sein ;. Sie können das Leerzeichen nach dem return; entfernen . 2.0kann sein 2.; Und die Veränderung n>>x!=1;x++, 1<<xund 1<<x+1zu n>>x++!=1;, 1<<x-1, 1<<xbzw. speichert auch ein Byte. Versuchen Sie es online: 64 Bytes . Genieße deinen Aufenthalt!
Kevin Cruijssen
Oh, und wenn Sie es noch nicht gesehen haben: Tipps zum Golfen in Java und Tipps zum Golfen in <allen Sprachen> sind beide sehr interessant zu lesen. :)
Kevin Cruijssen
Sehen Sie meine 30-Byte- Antwort, die ursprünglich auf Ihrer basiert, aber immer Golf und Golf gespielt hat.
Olivier Grégoire
9

MathGolf , 5 4 Bytes

╫\╨]

Probieren Sie es online!

Wie es aussehen würde, wenn der Bediener richtig arbeitet

╫\)╨]   (")" adds 1 to TOS, making rounding behave as expected)

Probieren Sie es online!

Erläuterung

╫     Left-rotate all bits in input
 \    Swap top two elements on stack, pushing the input to the top
  ╨   Round up to nearest power of 2
   ]  Wrap in array (just for pretty printing)

Ich habe meine Inspiration aus dieser Frage , um das Problem zu lösen. Ich glaube, meine "eigene" Lösung lag bei 10-12 Bytes.

Ich hatte vorgehabt, bei der Aufrundung auf die nächste Zweierpotenz die Zahl selbst zurückzugeben, wenn es sich um eine Zweierpotenz handelt. Aufgrund eines Fehlers wird jedoch auf die nächste Zweierpotenz gerundet (z. B. 4 -> 8 statt 4 -> 4) ). Dies muss später behoben werden, aber jetzt spart es mir ein Byte.

maxb
quelle
2
Ich kenne MathGolf nicht, aber wenn es ]keinen anderen Zweck als das Formatieren der Ausgabe gibt, würde ich sagen, dass Sie es nicht in Ihre Byteanzahl aufnehmen müssen.
Shaggy
2
Ich war mir nicht sicher. Da der Stapel bei der Ausgabe als zusammengefügte Zeichenfolge gedruckt wird, gibt er einen Stapel mit den Nummern 1 und 2 als 12 aus. Wenn das noch zählt, entferne ich ein Byte
maxb 14.09.18
Ich denke, Sie sollten es in belassen. Es speichert manchmal ein Byte, um den Stapel als eine Zeichenfolge auszugeben, manchmal kostet es Sie ein Byte.
H.PWiz
@H.PWiz das war mein ursprünglicher Gedanke, da es fair erscheint, die Stärken deiner Sprache zu nutzen. Einige Sprachen drucken nur den oberen Bereich des Stapels, andere geben ihn als Liste aus. Normalerweise ist es ein Unterschied von 1 Byte, aber es ist Teil der Herausforderung.
Maxb
8

Java 10, 89 85 70 69 68 Bytes

v->{for(float j,t=2;;t*=2)for(j=1;j<t;j+=2)System.out.println(j/t);}

Port von @Emigmas 05AB1E-Antwort , gibt also auch Dezimalzahlen auf unbestimmte Zeit aus.
-15 Bytes dank @Arnauld .

Probieren Sie es online aus.

Erläuterung:

v->{                      // Method with empty unused parameter and no return-type
  for(float j,t=2;;       //  Loop `t` from 2 upwards indefinitely,
                   t*=2)  //  doubling `t` after every iteration
    for(j=1;j<t;          //   Inner loop `j` in the range [1, `t`),
                j+=2)     //   in steps of 2 (so only the odd numbers)
      System.out.println( //    Print with trailing new-line:
        j/t);}            //     `j` divided by `t`
Kevin Cruijssen
quelle
1
Wie oft kann ich sagen, dass ich die Hälfte deiner Bytes zähle? Nun, ich denke, dies ist das erste Mal ;-)
Olivier Grégoire
@ OlivierGrégoire Dang, das ist jetzt eine beeindruckende Java-Antwort. :) Ich habe Ihre 37-Byte-Version als Kommentar zur Antwort von TCFP gesehen, aber Sie haben sogar mehr Bytes entfernt. In Ihrer 30-Byte-Version sieht es jetzt so extrem einfach aus, aber es ist immer noch genial, wie Sie es von der ersten Version an gespielt haben. Gut gemacht!
Kevin Cruijssen
7

Python 3 , 33 Bytes

lambda n:(8*n+4)/2**len(bin(n))-1

Probieren Sie es online!

Gibt Dezimalstellen mit einem Index ohne den anfänglichen Nullterm aus.

xnor
quelle
7

Java (JDK 10) , 30 Byte

n->(n+.5)/n.highestOneBit(n)-1

Probieren Sie es online!

Gibt das n zurück te Element in der Sequenz zurück.

Diese Antwort ist ursprünglich eine Folge von Golfspielen der Java-Antwort von TCFP . Am Ende sahen die Golfspiele nicht mehr wie die ursprüngliche Antwort aus (obwohl die verwendete Mathematik dieselbe ist), so dass ich mich entschied, die Golfspiele als separate Antwort zu veröffentlichen, anstatt einfach die Antwort des TCFP zu kommentieren. Wenn dir diese Antwort gefällt, stimme zu Sie auch der Antwort von TCFP zu ! ;-)

Intermediate Golfs waren:

n->{int x=0;for(;n>>++x!=1;);return((~(1<<x)&n)*2.+1)/(1<<x+1);} // 64 bytes (TCFP's answer when I started golfing)
n->{int x=0;for(;n>>++x!=1;);x=1<<x;return((~x&n)*2.+1)/x/2;}    // 61 bytes
n->{int x=n.highestOneBit(n);return((~x&n)*2.+1)/x/2;}           // 54 bytes
n->{int x=n.highestOneBit(n);return((~x&n)+.5)/x;}               // 50 bytes
n->((n&~(n=n.highestOneBit(n)))+.5)/n                            // 37 bytes
n->(n-(n=n.highestOneBit(n))+.5)/n                               // 34 bytes
n->(n+.5)/n.highestOneBit(n)-1                                   // 30 bytes, current score
Olivier Grégoire
quelle
Und ich saß hier und dachte, meine Antwort sei so kurz wie möglich, du kommst mit und schneidest sie um mehr als die Hälfte! Erstaunliches Zeug, verdient definitiv eine +1 von mir.
TCFP
@TCFP Es war ein mehrstündiger iterativer Prozess. Eigentlich habe ich jedes Golf-Zwischenprodukt als Kommentar zu Ihrer Antwort gepostet, diese jedoch gelöscht, da ich bessere Golfplätze gefunden habe. Vielen Dank für das Lob ;-)
Olivier Grégoire
6

05AB1E , 11 8 Bytes

3 Bytes gespart dank Kevin Cruijssen .

∞oDÅÉs/˜

Probieren Sie es online!

Erläuterung

∞         # start an infinite list [1...
 o        # calculate 2**N
  D       # duplicate
   ÅÉ     # get a list of odd numbers up to 2**N
     s/   # divide each by 2**N
       ˜  # flatten
Emigna
quelle
1
-1 Byte mit (unendliche Liste ab 1):∞oεDÅÉs/}˜
Kevin Cruijssen
@ KevinCruijssen: Cool! Das war ein Befehl, den ich noch nie gesehen hatte. Danke :)
Emigna
1
Ah, und eine gute Möglichkeit, zwei weitere Bytes aufgrund der impliziten Zuordnung zu sparen. Hatte noch nicht einmal darüber nachgedacht, lol ..
Kevin Cruijssen
1
: O wie ist das möglich Sie haben die Frage mit ~ 2 Seiten in 8 Bytes zusammengefasst.
Cullub
Ich überlegte, [1,2,4,4,8,8,8,8,16,16,...,2**n]ob ich die Primzahlen und eine Liste der richtigen indizierten Primzahlen verwenden sollte, gefolgt von einem /... Aber das funktionierte nicht so gut. Gut, aber nicht 8-bytesgut. So etwas wie 9LoDÅP)ζ.
Magic Octopus Urn
5

PowerShell , 40 Byte

for($i=2;;$i*=2){1..$i|?{$_%2}|%{$_/$i}}

Probieren Sie es online!

Gibt die unendliche Folge als Dezimalwerte aus. Aufgrund von Spracheinschränkungen treten möglicherweise Präzisionsprobleme auf, die ersten 1000 Einträge können jedoch problemlos verarbeitet werden.

Beginnt mit dem Setzen $i=2und tritt dann in eine forSchleife ein. Bei jeder Iteration konstruieren wir einen Bereich aus 1..$iund ziehen die ungeraden Werte mit heraus |?{$_%2}. Diese werden in ihre eigene innere Schleife eingespeist, in der wir sie teilen, um die Dezimalstelle zu erhalten |%{$_/$i}. Diese verbleiben in der Pipeline und werden ausgegeben, wenn die Pipeline nach jeder forIteration geleert wird. Jede Iteration wir einfach erhöht wird, $iindem $i*=2die nächste Go-Runde zu bekommen.

AdmBorkBork
quelle
5

Haskell, 35 32 Bytes

Edit: -3 Bytes dank @ Delfad0r.

[(y,2^x)|x<-[1..],y<-[1,3..2^x]]

Dies ist eine unendliche Liste von ganzzahligen Paaren.

Probieren Sie es online!

nimi
quelle
5

Haskell , 40 Bytes

s=(1,2):[(i*2+u,j*2)|(i,j)<-s,u<-[-1,1]]

Probieren Sie es online!

Unendliche Folge als ganze Zahlenpaare (ab (1,2) ).

Ziemlich viel länger als @nimis Antwort , aber die Herangehensweise ist völlig anders, also habe ich beschlossen, es trotzdem zu posten.

Diese Lösung basiert auf der folgenden Beobachtung.

{12,14,34,18,38,58,78,116,316,}

  • ichj{2ich-12j,2ich+12j}
    {{14,34},{18,38},{58,78},{116,316},}
  • {14,34,18,38,58,78,116,316,}
  • 12
    {12,14,34,18,38,58,78,116,316,}

Beachten Sie, wie Sie zu der Sequenz zurückkehren, mit der Sie begonnen haben!

Die Lösung nutzt diese Tatsache (zusammen mit Haskells Faulheit), um die Sequenz zu berechnen s.

Delfad0r
quelle
4

Python 2 - 68 66 Bytes

-2 Bytes dank Kevin

from math import*
def g(n):a=2**floor(log(n,2));print(n-a)*2+1,2*a

Probieren Sie es online!

Don Tausend
quelle
Sie können Golf 1 Byte durch eine Änderung return 2*(n-a)an return(n-a)*2. Und Sie können ein zusätzliches Byte speichern, indem Sie Python 2 anstelle von 3 verwenden. Dies returnist auch möglich print(mit Klammern).
Kevin Cruijssen
2
@KevinCruijssen Für jemanden, der Python nicht verwendet, sind Sie sicherlich ein besserer Python-Programmierer als ich.
Don Thousand
Hehe : D Einfache Dinge wie diese kommen mit Erfahrung, denke ich. Ich bin jetzt seit ungefähr zwei Jahren auf dieser Seite (EDIT: Seit April 2016). Manchmal schlage ich sogar Dinge zum Golfspielen vor, um Antworten zu erhalten, die in Sprachen verfasst sind, die ich noch nie gesehen habe. Einige grundlegende Dinge funktionieren in den meisten Sprachen. Zum Beispiel habe ich letzte Woche ein Golfspiel für eine T-SQL-Antwort vorgeschlagen , und ich habe einmal ein Golfspiel in einer roten Antwort vorgeschlagen . xD
Kevin Cruijssen
2
44 Bytes mit lenund binanstelle von log.
Ovs
@ovs 42 Bytes .
Jonathan Frech
4

Python 3 , 53 51 Bytes

  • Zwei Bytes dank mypetlion gespart ; Wiederverwenden von Standardparametern zum Zurücksetzen n.
def f(m=2,n=1):n<m and print(n/m)&f(m,2+n)or f(m+m)

Probieren Sie es online!

Jonathan Frech
quelle
Tauschen Sie die Parameter aus, um 2 Bytes zu sparen:def f(m=2,n=1):n<m and print(n/m)&f(m,n+2)or f(m+m)
mypetlion
1
@mypetlion Cool, danke!
Jonathan Frech
4

R , 42 Bytes

function(n)c(y<-2^(log2(n)%/%1)*2,2*n-y+1)

Probieren Sie es online!

Denominator,NumeratorN=2(n-2Log2(n))+1D=2Log2(n)+1

Giuseppe
quelle
3

Schläger , 92 91 Bytes

(define(f k(m 2)(n 1))(if(> k 0)(if(=(+ n 1)m)(f(- k 1)(+ m m))(f(- k 1)m(+ n 2)))(/ n m)))

Probieren Sie es online!

  • Dank Giuseppe ein Byte gespart - überflüssige Leerzeichen entfernt.
Jonathan Frech
quelle
3

MATL , 8 Bytes

BnWGEy-Q

Probieren Sie es online!

Gibt Zähler und dann Nenner zurück. Verwendet die gleiche Methode wie meine R-Antwort , obwohl sie etwas effizienter ist.

Erklärung mit Eingabe 5:

           # implicit input 5
B          # convert to array of bits
           # STACK: [[1 0 1]]
n          # length (place of Most Significant Bit)
           # STACK: [3]
W          # elementwise raise 2^x
           # STACK: [8]
G          # paste input
           # STACK: [8, 5]
E          # double
           # STACK: [8, 10]
y          # copy from below
           # STACK: [8, 10, 8]
-          # subtract
           # STACK: [8, 2]
Q          # increment
           # STACK: [8, 3]
           # implicit end of program, display stack contents
Giuseppe
quelle
2

Shakespeare-Programmiersprache , 426 Bytes

,.Ajax,.Ford,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:You be the sum ofyou a cat.Ford:You cat.Scene V:.Ford:Is twice you nicer I?If solet usScene X.You be twice you.Let usScene V.Scene X:.Ford:Remember twice you.You be the sum oftwice the remainder of the quotient betweenI you a cat.Open heart.You big big big big big cat.Speak thy.Recall.Open heart.You be twice the sum ofa cat a big big cat.Speak thy.Let usAct I.

Probieren Sie es online!

Gibt die Sequenz unendlich als beide durch ein Leerzeichen getrennten Zahlen aus, wobei jedes Element durch eine neue Zeile getrennt ist.

JosiahRyanW
quelle
Liebe es. LolYou be twice the sum of a cat
Cullub
Tatsächlich ist es "doppelt so viel wie eine Katze eine große große Katze" (dh 10 aus irgendeinem Grund).
JosiahRyanW
2

Python 2 , 44 Bytes

def f(n):m=2**len(bin(n))/4;return 2*n-m+1,m

Probieren Sie es online!

Die Funktion liefert ein Tupel von (Zähler, Nenner). Eine Eingabe von 0 wird nicht verarbeitet (optional).

Chas Brown
quelle
1
return 2*n-m+1,mkann sein print-~n+n-m,m, 2 Bytes zu sparen.
Kevin Cruijssen
2

Excel 48 28 Bytes

20 Bytes (!) Gespart dank tsh

=(A1+0.5)/2^INT(LOG(A1,2))-1

= MOD (A1 + 0,5,2 ^ (INT (LOG (A1,2)))) / 2 ^ INT (LOG (A1,2))

Nimmt den Wert in A1 an, die Ausgabe erfolgt dezimal. Wenn Sie möchten, dass die Ausgabe als Bruch ausgegeben wird, können Sie ein benutzerdefiniertes Format für die Ausgabezelle als "0 / ### 0" erstellen, das als Bruch angezeigt wird.

Erläuterung: Schwierig zu erklären, da eine Abkürzung verwendet wird, um zu dieser Formel zu gelangen. Grundsätzlich ist der Zähler eine Bitverschiebung nach links von der Eingabe, und der Nenner ist die nächste Zweierpotenz höher als die Zahleneingabe.

Ich habe ursprünglich mit in Excel integrierten Funktionen für BITLSHIFT und BITRSHIFT begonnen, aber sie verschieben die gesamten 48 Bits, was nicht das ist, was Sie wollen. Die Funktionen DEC2BIN (und BIN2DEC) sind auf -512 bis 511 (10 Bit) begrenzt, sodass dies nicht funktioniert. Stattdessen musste ich die Zahl mit einem Modul der ursprünglichen Zahl, dann mal zwei, neu aufbauen und dann 1 addieren (da die linke Ziffer vor einer Verschiebung immer 1 wäre).

=MOD(A1                        Use MOD for finding what the right digits are
       +0.5                    this will later add the left "1" to the right digits
           ,2^INT(LOG(A1,2)))) Take Log base 2 number of digits on the right
                               this creates the numerator divided by 2 (explained later)
/ 2^INT(LOG(A1,2))             The denominator should be 2^ (Log2 + 1) but instead of 
                               adding a 1 here, we cause the numerator to be divided by 2 instead
                               This gives us a fraction.  In the numerator, we also added .5
                               instead of 1 so that we wouldn't need to divide it in both the
                               numerator and denominator
Then tsh showed how I could take the int/log out of the mod and remove it from numerator/denominator. 

Beispiele: Bildbeschreibung hier eingeben

Keeta
quelle
Was ist =(A1+0.5)/2^INT(LOG(A1,2))-1?
Dienstag,
2

C ++, 97 75 71 Bytes

-26 Bytes dank tsh, ceilingcat, Zacharý

float f(int i){float d=2,n=1;while(--i)n=d-n==1?d*=2,1:n+2;return n/d;}

Testcode:

std::cout << "1\t:\t" << f(1) << '\n';
std::cout << "2\t:\t" << f(2) << '\n';
std::cout << "3\t:\t" << f(3) << '\n';
std::cout << "4\t:\t" << f(4) << '\n';
std::cout << "10\t:\t" << f(10) << '\n';
std::cout << "100\t:\t" << f(100) << '\n';
std::cout << "511\t:\t" << f(511) << '\n';
std::cout << "512\t:\t" << f(512) << '\n';
HatsuPointerKun
quelle
Sie können einfach weglassen, if(!i)return 0;da für die Challenge keine 0 erforderlich ist.
Dienstag,
1
Beim Golfspielen versucht man C-ähnliche Sprache. Sie sollten vermeiden, whileaber versuchen for. for(;exp;)ist genauso wie, while(exp)aber Sie können zwei weitere Anweisungen hinzufügen. Lieber ?:stattdessen if else, was in den meisten Fällen kürzer wäre.
Dienstag,
1
Ich glaube nicht, dass du die (...)Umgebung brauchst d-n-1.
Zacharý
1

C (gcc) 63 Bytes

Keine Eingabe, gibt eine unendliche Folge aus:

f(i,j){for(i=1,j=2;;i+=2,i>j&&(j*=2,i=1))printf("%d/%d ",i,j);}

Probieren Sie es online!

Annyo
quelle
3
60 Bytes .
Jonathan Frech
1
Aufbauend auf @ JonathanFrech 59 Bytes
Ceilingcat
1

> <> , 19 18 Bytes

Verwenden von xnors Idee , die von Jo King behoben wurde, -1 Byte, indem die Spiegel besser genutzt wurden, und weitere -2 Byte von Jo King, da dies !überflüssig war und ;nicht erforderlich ist.

2*1+\1-n
2:,2/?(

Probieren Sie es online!

PidgeyUsedGust
quelle
Sie sollten zuerst überprüfen, ob es kleiner als 2 ist, andernfalls ist das erste Element -0.25. Fix für die gleiche Anzahl von Bytes
Jo King
Vielen Dank! Ich habe es auch geschafft, ein weiteres Byte durch Wiederverwenden der Spiegel zu entfernen.
PidgeyUsedGust
Warum haben Sie die Bedingung umgekehrt? 16 Bytes
Jo King
Ich habe nicht bemerkt, dass es die Schleife fortsetzen würde. Dürfen wir nicht richtig fertig werden?
PidgeyUsedGust
Ja, das Beenden mit einem Fehler ist in Ordnung, solange das OP nichts anderes angibt
Jo King
1

APL (Dyalog Unicode) , 15 Byte

1-⍨.5∘+÷2*∘⌊2⍟⊢

Probieren Sie es online!

Anonymes Präfix Lambda.

Vielen Dank an Adám für 4 Bytes und an Cows für 2 Bytes.

Wie:

1-⍨.5∘+÷2*∘⌊2⍟⊢  Anonymous lambda, argument   10
            2⍟⊢  Log (⍟) of  in base 2. 210  3.32192809489...
                 Floor. 3.32192809489...  3
        2*∘       Take that power of 2. 2³  8
       ÷          Use that as denominator
   .5∘+            + 0.5  10.5. Using that as numerator: 10.5÷8  1.3125
1-⍨               Swap the arguments (⍨), then subtract. 1-⍨1.3125  1.3125-1  0.3125
J. Sallé
quelle
1

C # (.NET Core) , 69 Byte

a=>{int b=1,c=2;while(a-->1){b+=2;if(b>c){b=1;c*=2;}}return b+"/"+c;}

Probieren Sie es online!

Ungolfed:

a=> {
    int b = 1, c = 2;   // initialize numerator (b) and denominator (c)
    while (a-- > 1)     // while a decrements to 1
    {
        b += 2;         // add 2 to b
        if (b > c)      // if b is greater than c:
        {
            b = 1;      // reset numerator to 1
            c *= 2;     // double denominator
        }
    }
    return b + "/" + c; // return fraction as string
}
Erdmännchen
quelle