Một nửa, một nửa và một nửa


33

Hãy xem xét chuỗi số sau:

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

Nó liệt kê tất cả các phân số nhị phân trong khoảng đơn vị .[0,1)

(Để làm cho thử thách này dễ dàng hơn, yếu tố đầu tiên là tùy chọn: Bạn có thể bỏ qua nó và xem xét chuỗi bắt đầu bằng 1/2.)

Bài tập

Viết chương trình (chương trình hoàn chỉnh hoặc chức năng) mà ...

Chọn một trong những hành vi sau:

  • Đầu vào n, phần tử thứ n đầu ra của chuỗi (0-index hoặc 1-index);
  • Đầu vào n, đầu ra n phần tử đầu tiên của chuỗi;
  • Không nhập gì, xuất chuỗi số vô hạn mà bạn có thể lấy từng cái một;

Qui định

  • Chương trình của bạn ít nhất phải hỗ trợ 1000 mục đầu tiên;
  • Bạn có thể chọn xuất số thập phân hoặc phân số (tích hợp, cặp số nguyên, chuỗi) tùy thích;
    • Đầu vào / đầu ra dưới dạng chữ số nhị phân không được phép trong câu hỏi này;
  • Đây là , mã ngắn nhất giành chiến thắng;
  • Sơ hở tiêu chuẩn không được phép.

Tủ thử

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

Những ví dụ này dựa trên chuỗi 0 được lập chỉ mục với 0 hàng đầu đi kèm. Bạn sẽ cần phải điều chỉnh đầu vào cho phù hợp với giải pháp của bạn.

Đọc thêm

  • OEIS A006257
    • Vấn đề Josephus: . (Trước đây là M2216)a2n=2an1,a2n+1=2an+1
    • 0, 1, 1, 3, 1, 3, 5, 7, 1, 3, 5, 7, 9, 11, 13, 15, 1, 3, 5, ...
  • OEIS A062383
    • a0=1 : cho , hoặc .n>0an=2log2n+1an=2an2
    • 1, 2, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, ...
  • A006257 (n) / A062383 (n) = (0, 0.1, 0.01, 0.11, 0,001, ...) liệt kê tất cả các phân số nhị phân trong khoảng đơn vị [0, 1). - Fredrik Johansson, ngày 14 tháng 8 năm 2006


4
"Không nhập gì, xuất từng dãy số vô hạn từng cái một " Nó có phải là từng cái một không, hay chúng ta cũng được phép đưa ra một danh sách vô hạn (có thể trong Haskell, Elixir, 05AB1E, v.v.)?
Kevin Cruijssen

Tôi có thể xuất danh sách các chuỗi không? ví dụ"1/2" "1/4" "1/8"...
Barranka

@KevinCruijssen Danh sách vô hạn là tốt miễn là bạn có thể taken yếu tố từ nó sau này.
tsh

@Barranka Tôi nghĩ nó được chấp nhận. Điều đó không có gì khác nhau để in phân số đến thiết bị xuất chuẩn.
tsh

Khi bạn nói Đầu vào / Đầu ra là số nhị phân không được phép , có nghĩa là chúng ta không thể viết một hàm trả về một cặp nếu ints, hoặc doubletrong một ngôn ngữ / triển khai doublesử dụng định dạng nhị phân IEEE64 ? Tôi hy vọng bạn không có nghĩa là phải phân tích chuỗi ASCII nếu chúng ta muốn lấy một số nguyên? Các kiểu số nguyên bình thường là nhị phân trong các ngôn ngữ như C. Hoặc bạn có nghĩa là đầu vào / đầu ra không thể là một mảng hoặc chuỗi số nguyên hoặc số không ASCII?
Peter Cordes

Câu trả lời:


22

Haskell , 25 byte

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

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

Đầu ra số thập phân, một chỉ mục mà không có số hạng ban đầu.

Thêm 0,5 vào đầu vào, sau đó giảm một nửa cho đến khi kết quả dưới 2, sau đó trừ đi 1. Sử dụng biểu thức pointfree sẽ tiết kiệm được 1 byte

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

11

Java 10, 68 64 byte

Lần đầu thử tại golf mã!

Tùy chọn 1: tìm phần tử thứ n (được lập chỉ mục 1)

-4 byte nhờ @Kevin Cruijssen

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

Đây là một phương thức ẩn danh tìm ra số hạng thứ n bằng cách loại bỏ bit có ý nghĩa nhất khỏi n , nhân đôi nó và thêm một, sau đó chia cho công suất cao nhất tiếp theo là 2.

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

Mã hướng dẫn:

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`

Sẽ chỉnh sửa nếu cần in giá trị cuối cùng thay vì trả lại.


Chào mừng bạn đến với PPCG, rất vui khi có bạn với chúng tôi :)
Shaggy

Xin chào, chào mừng đến với PPCG! Câu trả lời đầu tiên tuyệt vời, +1 từ tôi. Hiện tại, nó có cùng số byte với câu trả lời Java của tôi, nhưng bạn vẫn có thể đánh golf một số phần trong câu trả lời của mình để làm cho nó ngắn hơn câu trả lời của tôi: {}Vòng lặp sau có thể là một ;thay thế; bạn có thể loại bỏ không gian sau return; 2.0có thể được 2.; Và thay đổi n>>x!=1;x++, 1<<x1<<x+1để n>>x++!=1;, 1<<x-1, 1<<xtương ứng cũng tiết kiệm một byte. Dùng thử trực tuyến: 64 byte . Tận hưởng kì nghỉ của bạn!
Kevin Cruijssen

Ồ, và nếu bạn chưa thấy nó: Mẹo chơi golf trong JavaMẹo chơi gôn bằng <tất cả các ngôn ngữ> đều khá thú vị để đọc qua. :)
Kevin Cruijssen

Xem câu trả lời 30 byte của tôi , ban đầu dựa trên câu trả lời của bạn nhưng được đánh gôn và đánh gôn.
Olivier Grégoire

9

MathGolf , 5 4 byte

╫\╨]

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

Nó trông như thế nào với toán tử hoạt động chính xác

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

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

Giải trình

╫     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)

Tôi lấy cảm hứng từ câu hỏi này để giải quyết vấn đề, giải pháp "của riêng tôi" là khoảng 10-12 byte tôi nghĩ.

Tôi đã dự định làm tròn số lên tới lũy thừa 2 để trả về số đó nếu nó là số hai, nhưng do nhầm lẫn, nó làm tròn thành lũy thừa tiếp theo của hai (ví dụ 4 -> 8 thay vì 4 -> 4 ). Điều này sẽ phải được sửa sau, nhưng bây giờ nó tiết kiệm cho tôi một byte.


2
Tôi không biết MathGolf nhưng nếu ]phục vụ không có mục đích nào khác ngoài định dạng đầu ra, tôi muốn nói rằng bạn không cần đưa nó vào số byte của mình.
Xù xì

2
Tôi đã không chắc chắn về nó. Vì ngăn xếp được in trên đầu ra dưới dạng một chuỗi đã nối, nó tạo ra một ngăn xếp có các số 1 và 2 là 12. Nếu vẫn còn tôi sẽ xóa một byte
maxb

Tôi nghĩ bạn nên để nó vào. Đôi khi nó tiết kiệm một byte để xuất ngăn xếp thành một chuỗi, đôi khi nó sẽ khiến bạn tốn một byte.
H.PWiz

@ H.PWiz đó là suy nghĩ ban đầu của tôi, vì có vẻ công bằng khi sử dụng các thế mạnh của ngôn ngữ của bạn. Một số ngôn ngữ chỉ in phần trên cùng của ngăn xếp khi hoàn tất, một số ngôn ngữ in dưới dạng danh sách. Thông thường, đó là sự khác biệt 1 byte, nhưng đó là một phần của thách thức.
maxb

8

Java 10, 89 85 70 69 68 byte

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

Cảng @Emigma 05AB1E câu trả lời 's , do đó kết quả đầu ra số thập phân vô hạn định là tốt.
-15 byte nhờ @Arnauld .

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

Giải trình:

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`

1
Bao lâu tôi có thể nói rằng tôi một nửa số byte của bạn? Chà, tôi nghĩ đây là lần đầu tiên ;-)
Olivier Grégoire

@ OlivierGrégoire Dang, bây giờ đó là một câu trả lời Java ấn tượng. :) Tôi thấy phiên bản 37 byte của bạn là nhận xét về câu trả lời của TCFP, nhưng bạn thậm chí đã loại bỏ nhiều byte hơn. Bây giờ nó trông cực kỳ đơn giản trong phiên bản 30 byte của bạn, nhưng vẫn khéo léo khi bạn chơi golf từ phiên bản ban đầu. Làm tốt!
Kevin Cruijssen



7

Java (JDK 10) , 30 byte

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

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

Trả về mục thứ n trong chuỗi.

Câu trả lời này ban đầu là một chuỗi các câu trả lời Java của TCFP . Cuối cùng, các golf không còn giống như câu trả lời ban đầu nữa (mặc dù toán học được sử dụng giống nhau) nên tôi quyết định đăng các golf như một câu trả lời riêng thay vì chỉ bình luận về câu trả lời của TCFP. Vì vậy, nếu bạn thích câu trả lời này, hãy truy cập câu trả lời của TCFP ! ;-)

Golf trung cấp là:

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

Và tôi đang ngồi đây nghĩ rằng câu trả lời của tôi ngắn đến mức tôi có thể làm được, bạn đi cùng và cắt nó hơn một nửa! Công cụ tuyệt vời, chắc chắn xứng đáng được +1 từ tôi.
TCFP

@TCFP Đó là một quá trình lặp đi lặp lại trong khoảng vài giờ. Tôi thực sự đã đăng mỗi bài đánh gôn trung gian như một bình luận cho câu trả lời của bạn, nhưng đã xóa chúng khi tôi tìm thấy những bài đánh golf tốt hơn. Cảm ơn vì lời khen ngợi ;-)
Olivier Grégoire

6

05AB1E , 11 8 byte

Đã lưu 3 byte nhờ Kevin Cruijssen .

∞oDÅÉs/˜

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

Giải trình

∞         # 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

1
-1 byte bằng cách sử dụng (danh sách vô hạn bắt đầu từ 1):∞oεDÅÉs/}˜
Kevin Cruijssen

@KevinCruijssen: Tuyệt! Đó là một mệnh lệnh tôi chưa từng thấy trước đây. Cảm ơn :)
Emigna

1
À, và cách hay để tiết kiệm thêm hai byte do ánh xạ ngầm .. Thậm chí còn không nghĩ về điều đó, lol ..
Kevin Cruijssen

1
: O làm thế nào là điều này có thể. Bạn đã cô đọng câu hỏi ~ 2 trang thành 8 byte.
Cullub

Tôi đã suy nghĩ bằng cách sử dụng các số nguyên tố và một danh sách [1,2,4,4,8,8,8,8,16,16,...,2**n]và chuẩn bị số nguyên tố được lập chỉ mục chính xác theo sau /... Nhưng điều đó không hiệu quả lắm. Vâng, nhưng không 8-bytestốt. Một cái gì đó như 9LoDÅP)ζ.
Bạch tuộc ma thuật Urn


5

PowerShell , 40 byte

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

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

Xuất ra chuỗi vô hạn dưới dạng giá trị thập phân. Với những hạn chế về ngôn ngữ, cuối cùng sẽ gặp vấn đề về độ chính xác, nhưng dễ dàng xử lý 1000 mục đầu tiên.

Bắt đầu bằng cách thiết lập $i=2, sau đó vào một forvòng lặp. Mỗi lần lặp, chúng tôi xây dựng một phạm vi từ 1..$ivà kéo ra các giá trị lẻ với |?{$_%2}. Chúng được đưa vào vòng lặp bên trong của riêng chúng, nơi chúng ta chia từng phần để lấy số thập phân |%{$_/$i}. Những cái còn lại trên đường ống và đầu ra khi đường ống được tuôn ra sau mỗi forlần lặp. Mỗi lần lặp chúng ta chỉ đơn giản là incrementing $ibởi $i*=2để có được đường đi-vòng tiếp theo.


5

Haskell, 35 32 byte

Chỉnh sửa: -3 byte nhờ @ Delfad0r.

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

Đây là một danh sách vô hạn của các cặp số nguyên.

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


5

Haskell , 40 byte

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

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

Chuỗi vô hạn dưới dạng các cặp số nguyên (bắt đầu từ (1,2)).

Khá lâu hơn câu trả lời của @ nimi , nhưng cách tiếp cận hoàn toàn khác, vì vậy tôi quyết định đăng nó bằng mọi cách.

Giải pháp này dựa trên quan sát sau đây.

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

  • ij{2i12j,2i+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,}

Lưu ý cách bạn quay lại chuỗi bạn đã bắt đầu!

Giải pháp khai thác thực tế này (cùng với sự lười biếng của Haskell) để tính toán trình tự s.


4

Python 2 - 68 66 byte

-2 byte nhờ Kevin

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

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


Bạn có thể chơi golf 1 byte bằng cách thay đổi return 2*(n-a)thành return(n-a)*2. Và bạn có thể lưu một byte bổ sung bằng cách sử dụng Python 2 thay vì 3, vì vậy returncó thể print(với dấu ngoặc đơn).
Kevin Cruijssen

2
@KevinCruijssen Đối với một người không sử dụng Python, bạn chắc chắn là một lập trình viên Python tốt hơn tôi.
Don Ngàn

Hehe. : D Những điều đơn giản như thế này đi kèm với kinh nghiệm tôi đoán. Tôi đang ở trên trang này khoảng hai năm nay tôi nghĩ (EDIT: Kể từ tháng 4 năm 2016). Đôi khi tôi thậm chí còn gợi ý mọi thứ cho golf để tìm câu trả lời được viết bằng ngôn ngữ mà tôi chưa từng thấy trước đây .. Một số điều cơ bản hoạt động trong hầu hết các ngôn ngữ. Ví dụ, tuần trước tôi đã đề xuất một golf cho câu trả lời T-SQL và tôi đã từng đề xuất một golf trong câu trả lời Đỏ . xD
Kevin Cruijssen

2
44 byte sử dụng lenbinthay vì log.
trứng



4

R , 42 byte

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

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

Denominator,NumeratorN=2(n2log2(n))+1D=2log2(n)+1



3

MATL , 8 byte

BnWGEy-Q

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

Trả về Số, rồi Mẫu số. Sử dụng phương pháp tương tự như câu trả lời R của tôi , mặc dù nó hiệu quả hơn một chút.

Giải thích, với đầu vào 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

2

Ngôn ngữ lập trình Shakespeare , 426 byte

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

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

Xuất ra chuỗi vô hạn khi cả hai số được phân tách bằng một khoảng trắng, với mỗi mục được phân tách bằng một dòng mới.


Yêu nó. LolYou be twice the sum of a cat
Cullub

Trên thực tế, đó là "gấp đôi tổng số của một con mèo lớn một con mèo lớn" (tức là 10 vì một số lý do).
JosiahRyanW


2

Excel 48 28 byte

Đã lưu 20 byte (!) Nhờ tsh

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

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

Giả sử giá trị trong A1, đầu ra là số thập phân. Nếu bạn muốn đầu ra ở dạng phân số, bạn có thể tạo định dạng tùy chỉnh cho ô đầu ra là "0 / ### 0" và nó sẽ hiển thị dưới dạng phân số.

Giải thích: Khó giải thích, vì có một phím tắt được thực hiện để đi đến công thức này. Về cơ bản tử số là một chút dịch chuyển bên trái của đầu vào và mẫu số là công suất tiếp theo cao hơn 2 so với đầu vào số.

Ban đầu tôi bắt đầu với các hàm tích hợp trong Excel cho BITLSHIFT và BITRSHIFT, nhưng chúng sẽ thay đổi toàn bộ 48 bit không phải là điều bạn muốn. Các hàm DEC2BIN (và BIN2DEC) có giới hạn từ -512 đến 511 (10 bit) nên điều này sẽ không hoạt động. Thay vào đó, tôi phải xây dựng lại số với một mô-đun của số ban đầu, sau đó nhân hai, sau đó thêm 1 (vì chữ số bên trái sẽ luôn là 1 trước khi thay đổi).

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

Ví dụ: nhập mô tả hình ảnh ở đây


Thế còn =(A1+0.5)/2^INT(LOG(A1,2))-1?
tsh

2

C ++, 97 75 71 byte

-26 byte nhờ tsh, Barecat, Zacharý

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

Mã kiểm tra:

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';

Bạn chỉ có thể bỏ qua if(!i)return 0;vì 0 không bắt buộc trong thử thách.
tsh

1
Khi cố gắng để chơi ngôn ngữ giống như C. Bạn nên tránh sử dụng whilenhưng hãy thử for. for(;exp;)cũng giống như while(exp)nhưng bạn có thể viết thêm hai câu khác vào đó. Thích ?:thay vì if else, sẽ ngắn hơn trong hầu hết các trường hợp.
tsh

1
Tôi không nghĩ rằng bạn cần (...)xung quanh d-n-1.
Zacharý






1

> <> , 19 18 byte

Sử dụng ý tưởng của xnor , được sửa bởi Jo King, -1 byte bằng cách sử dụng tốt hơn các gương và -2 byte khác bởi Jo King vì !nó không cần thiết và ;không bắt buộc.

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

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


Bạn nên kiểm tra nếu nó nhỏ hơn 2 trước, nếu không thì phần tử đầu tiên là -0.25. Khắc phục cho cùng một lượng byte
Jo King

Cảm ơn! Tôi cũng quản lý để loại bỏ một byte khác bằng cách sử dụng lại các gương.
PidgeyUsedGust

Tại sao bạn lại đảo ngược tình trạng? 16 byte
Jo King

Không nhận thấy rằng nó sẽ tiếp tục vòng lặp. Chúng ta có được phép không hoàn thành đúng không?
PidgeyUsedGust

Vâng, chấm dứt với một lỗi là tốt miễn là OP không chỉ định khác
Jo King


1

APL (Dyalog Unicode) , 15 byte

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

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

Tiền tố nặc danh lambda.

Cảm ơn Adám cho 4 byte và quẻ bò cho 2 byte.

Làm sao:

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

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;}

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

Ung dung:

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