Chuỗi chuỗi Sum


16

Sự nối tiếp:

  1. Chúng tôi bắt đầu tại 1.
  2. Trước tiên chúng ta thêm giá trị 1 chỉ mục hiện tại vào số trước đó trong chuỗi.
  3. Sau đó, chúng tôi áp dụng các hoạt động toán học sau theo thứ tự nếu chúng áp dụng cho giá trị hiện tại này:
    • Chia hết cho 2? => Bổ sung
    • Chia hết cho 3 ? => Phép trừ
    • Chia hết cho 4? => (Bổ sung VÀ) Nhân
    • Không chia hết được 2, 3cũng không 4? -> Tiếp tục với kết quả tổng hiện tại

Đầu ra:

Xuất 100 số đầu tiên trong chuỗi này:

1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645

Dưới đây là 10 số đầu tiên trong chuỗi với lời giải thích:

// Starting number of the sequence:
1

// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1

// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21

// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25

// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30

// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216

// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223

// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223

// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169

// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179

Quy tắc thử thách:

  • Nếu ngôn ngữ của bạn không hỗ trợ bất cứ điều gì lớn hơn 2 31 -1, bạn có thể tiếp tục chuỗi cho đến mức tối đa đó (vì vậy 46 số đầu tiên, cho đến khi - và bao gồm -1,517,792,609 ).
  • Các định dạng đầu ra là linh hoạt. Bạn có thể trả về một mảng hoặc danh sách, một chuỗi được phân tách bằng dấu cách, dấu phẩy, v.v. Cuộc gọi của bạn.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Chúng ta có xuất giá trị thứ n, giá trị n đầu tiên hay chỉ cho đến khi kích thước số nguyên tối đa của chúng ta?
Gabriel Benamy

@GabrielBenamy 100 đầu tiên trong chuỗi.
Kevin Cruijssen

1
Tôi khá chắc chắn rằng bạn chỉ có 99 số trong khối đó.
Kade

2
Câu trả lời của tôi không đồng ý với đầu ra của bạn chỉ trong 13 số cuối.
Gabriel Benamy

1
@Shebang Đã sửa .. Xin lỗi vì sự khởi đầu cẩu thả .. Nó đã ở trong hộp cát được 5 ngày, nhưng tôi đoán cả tôi và những người khác đều không nhận ra điều đó ..: S nên sửa ngay.
Kevin Cruijssen

Câu trả lời:


1

05AB1E , 24 23 byte

-1 byte nhờ Kevin Crujissen

¼¾тF=¼¾+©…+-*v®NÌÖi¾y.V

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

Giải trình:

¼¾                        # set the counter to 1, then push 1
  тF                      # repeat the following 100 times
    =                     # print the current number in the sequence
     ¼¾                   # increment the counter
       +                  # add it to the current number
        ©                 # save the result in the register
         …+-*v            # for each of '+', '-', and '*'...
              ®   i       # if the register...
                 Ö        # is divisible by...
               NÌ         # the loop index + 2...
                   ¾y.V   # then apply the current operation

1
Đã cố gắng tìm một cái gì đó ngắn hơn với biến đếm để UXcó thể loại bỏ, nhưng tôi không thể. Tôi cũng kết thúc ở mức 24 byte vì nó bắt đầu 0thay vì 1. Bây giờ tôi đã tăng nó trước đó, nhưng sau đó chúng tôi phải lặp lại 101thời gian thay vì 100.. Ah tốt.
Kevin Cruijssen

@KevinCruijssen yeah, đó UXlà một chướng mắt. Tôi đã cố gắng loại bỏ nó trong một thời gian và kết thúc với một loạt 24 và 25 biến thể : 1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V, 1тL>v=y+©3F®NÌÖiy…+-*Nè.V... Tôi đã không cân nhắc sử dụng biến đếm, điều này thật thú vị.
Grimmy

1
@KevinCruijssen 24 lấy cảm hứng từ 23: chỉ cần sử dụng тF thay vì Ƶ0µ. Tôi đã chỉnh sửa nó trong, cảm ơn! (PS: thực sự nên có một byte đơn ¼¾...)
Grimmy

À Hình bạn sẽ tìm thấy một cái gì đó bằng cách nào đó, haha. ;) Và vâng, một byter duy nhất ¼¾sẽ rất tuyệt, mặc dù khá trung thực, tôi gần như không bao giờ sử dụng nó như thế. Hàm dựng sẵn một byte mà tôi thích nhất bây giờ là ©®biến thứ hai không bật. Có lẽ bắt đầu từ một chuỗi trống ""như bạn đã đề cập trong một thử thách khác trước đây.
Kevin Cruijssen

8

R, 85 82 79 76 72 70 byte

for(i in 2:56)T[i]=((z=i+T[i-1])+i*(!z%%2)-i*(!z%%3))*`if`(z%%4,1,i);T

vô dụng:

s=1 ## formerly s=1:56, formerly s=1:100
for(i in 2:56){
    z=i+s[i-1]
    s[i]=(z+i*(z%%2<1)-i*(z%%3<1))*(1+(i-1)*(z%%4<1))
}
s

Cảm ơn @rturnbull đã chỉ ra rằng tôi có thể sử dụng (!z%%3)thay vì(z%%3<1) kiểm tra các mô-đun và định nghĩa về zmột sự kiện xảy ra khi nó được sử dụng lần đầu tiên.

Đánh bại 3-4 ký tự bằng cách lạm dụng mở rộng véc tơ: câu trả lời ban đầu bắt đầu s=1:56... nhưng chúng ta không cần phải làm điều đó, độ dài ssẽ được kéo dài khi cần.

Đã lưu thêm 3 byte bằng cách thay thế điều kiện cuối cùng bằng một cuộc gọi đến "if" hàm (vâng, đó là một hàm thích hợp trong R!)

Đã lưu thêm 4 byte bằng cách thay thế sbằng T, đó là một tích hợp bằngTRUE cũng bằng 1. Tôi nhận ra nó cùng lúc với @rturnbull (trung thực!)

Điều này không gặp phải một số vấn đề về số khi chúng tôi vượt quá 2 ^ 52, nhưng tôi không thể làm gì về điều đó --- R chỉ có thể sử dụng doublecác loại cho các số lớn hơn 2^31-1, nhưng chúng lưu trữ các số nguyên chính xác đến 2 ^ 52. Do đó, tôi chỉ được phép xuất 56 thuật ngữ đầu tiên (thuật ngữ cuối cùng là "đúng") giúp tiết kiệm một byte trong trường hợp 100 độ dài.

Đây là đầu ra từ phiên bản 56 độ dài:

    > for(i in 2:56){z=i+T[i-1];T[i]=(z+i*(!z%%2)-i*(!z%%3))*`if`(z%%4,1,i)};T
 [1]               1               1              21              25              30             216
 [7]             223             223            2169            2179            2190            2202
[13]            2215            2215            2245            2261            2295            2295
[19]            2333            2353            2395            2417           56649           56649
[25]           56699           56725         1533033         1533061         1533090        45993600
[31]        45993631        45993631      1517792001      1517792035      1517792070      1517792106
[37]      1517792143      1517792143      1517792221      1517792261      1517792343      1517792343
[43]      1517792429      1517792473      1517792563      1517792609     71336257041     71336257041
[49]     71336257139     71336257189   3638149121841   3638149121893   3638149121946 196460052588000
[55] 196460052588055 196460052588055

1
Tôi muốn nói rằng chỉ lặp tối đa 56 là trò chơi công bằng với mô tả về thử thách.
Billywob

@Billywob thực sự đúng. Trong phần mô tả tôi nêu " Nếu ngôn ngữ của bạn không hỗ trợ bất cứ thứ gì lớn hơn 2 ^ 31-1, bạn có thể tiếp tục chuỗi cho đến mức tối đa đó (vì vậy 46 số đầu tiên, cho đến khi - và bao gồm - 1,517,792,609). ", Nhưng đây là Tất nhiên cũng áp dụng cho các số khác nhau hơn 32 bit. Nếu R không thể xử lý bất cứ điều gì lớn hơn, 56 số đầu tiên là hoàn toàn tốt. Và vâng, nếu bạn biết nó không bao giờ có thể đi trên 56, bạn có thể thay đổi 100để 56tiết kiệm một byte.
Kevin Cruijssen

1
Bạn có thể lưu ba byte bằng cách thay đổi z%%2<1(v.v.) thành !z%%2, lạm dụng chuyển đổi loại ngầm định.
rturnbull

Cảm ơn @rturnbull, vì một số lý do tôi nghĩ !đã không đánh bại %%, nhưng rõ ràng là có!
JDL

2
Bạn cũng có thể lạm dụng Tvà sử dụng nó thay thế s, cho phép bạn loại bỏ s=1;, lưu bốn byte khác. Bạn có thể gấp lại định nghĩa về zđịnh nghĩa của s[i](tốt, T[i]ngay bây giờ), như vậy : T[i]=((z=i+T[i-1])+ ..., có nghĩa là bạn có thể mất dấu ngoặc nhọn, tiết kiệm thêm một số byte. EDIT: Ồ, tôi thấy rằng bạn đã Tlừa khi tôi đang viết bình luận của tôi! Những bộ óc vĩ đại nghĩ giống nhau, họ nói.
rturnbull

5

Python 3, 82 78 76 74 72 byte

i=s=1
exec('print(s);i+=1;s+=i;s=(s+i-i*(s%2+(s%3<1)))*i**(s%4<1);'*100)

Đầu ra:

1
1
21
25
30
216
223
223
2169
2179
2190
2202
2215
2215
2245
2261
2295
2295
2333
2353
2395
2417
56649
56649
56699
56725
1533033
1533061
1533090
45993600
45993631
45993631
1517792001
1517792035
1517792070
1517792106
1517792143
1517792143
1517792221
1517792261
1517792343
1517792343
1517792429
1517792473
1517792563
1517792609
71336257041
71336257041
71336257139
71336257189
3638149121841
3638149121893
3638149121946
196460052588000
196460052588055
196460052588055
11198222997525633
11198222997525691
11198222997525750
11198222997525810
11198222997525871
11198222997525871
11198222997525997
11198222997526061
11198222997526191
11198222997526191
11198222997526325
11198222997526393
11198222997526531
11198222997526601
795073832824398753
795073832824398753
795073832824398899
795073832824398973
59630537461829934225
59630537461829934301
59630537461829934378
4651181922022734887568
4651181922022734887647
4651181922022734887647
376745735683841525912529
376745735683841525912611
376745735683841525912694
376745735683841525912778
376745735683841525912863
376745735683841525912863
376745735683841525913037
376745735683841525913125
376745735683841525913303
376745735683841525913303
376745735683841525913485
376745735683841525913577
376745735683841525913763
376745735683841525913857
35790844889964944961834465
35790844889964944961834465
35790844889964944961834659
35790844889964944961834757
3543293644106529551221660545
3543293644106529551221660645

Đề nghị được chào đón!



4

05AB1E , 34 31 30 byte

XTnFD,NÌ©+D3L>%_`X®‚sèrŠs-®*+*

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

Giải trình

X                               # initialize stack with 1
 TnF                            # for N in [0 ... 99]
    D,                          # print a copy of top of stack
      NÌ©                       # increase index N by 2 and store in register
         +                      # add this to current value
          D                     # make a copy of the current value
           3L>                  # push the list [2,3,4]
              %                 # take current value mod elements in list
               _                # invert this
                `               # push the elements from the list to stack
                 X®‚sè          # index into list [1,N+2] with the result of mod 4
                      rŠs-      # subtract result of mod 3 from result of mod 2
                          ®*    # multiply by N+2
                            +   # add this to current value
                             *  # multiply current value with the result from index operation

3

Python 2, 76 byte

Việc thực hiện khá chuẩn, tôi nghĩ rằng sử dụng một câu lệnh exec chứ không phải là một vòng lặp while đã lưu 2 byte hoặc hơn. Một phương thức đệ quy có thể ngắn hơn, tôi tưởng tượng xnor sẽ bật lên sớm;)

n=1
f=1
exec'print f;n+=1;d=f+n;f=(d+n*(d%2<1)-n*(d%3<1))*[1,n][d%4<1];'*100

Nếu tôi sử dụng các bản cập nhật mà TheNumberOne đã tìm ra, tôi sẽ ở mức 69 byte (nhưng sau đó tôi sẽ sao chép)

n=f=1;exec'print f;n+=1;d=f+n;f=(d+n-n*(d%2+(d%3<1))*n**(d%4<1);'*100

Đầu ra:

1
1
21
25
30
216
223
223
2169
2179
2190
2202
2215
2215
2245
2261
2295
2295
2333
2353
2395
2417
56649
56649
56699
56725
1533033
1533061
1533090
45993600
45993631
45993631
1517792001
1517792035
1517792070
1517792106
1517792143
1517792143
1517792221
1517792261
1517792343
1517792343
1517792429
1517792473
1517792563
1517792609
71336257041
71336257041
71336257139
71336257189
3638149121841
3638149121893
3638149121946
196460052588000
196460052588055
196460052588055
11198222997525633
11198222997525691
11198222997525750
11198222997525810
11198222997525871
11198222997525871
11198222997525997
11198222997526061
11198222997526191
11198222997526191
11198222997526325
11198222997526393
11198222997526531
11198222997526601
795073832824398753
795073832824398753
795073832824398899
795073832824398973
59630537461829934225
59630537461829934301
59630537461829934378
4651181922022734887568
4651181922022734887647
4651181922022734887647
376745735683841525912529
376745735683841525912611
376745735683841525912694
376745735683841525912778
376745735683841525912863
376745735683841525912863
376745735683841525913037
376745735683841525913125
376745735683841525913303
376745735683841525913303
376745735683841525913485
376745735683841525913577
376745735683841525913763
376745735683841525913857
35790844889964944961834465
35790844889964944961834465
35790844889964944961834659
35790844889964944961834757
3543293644106529551221660545
3543293644106529551221660645

3

JavaScript, 75 63 byte

for(n=p=0;n++<57;alert(p=p%4?q:q*n))q=(p+=n)%2?p:p+n,q-=p%3?0:n

Phiên bản khác:

for(n=p=0;n++<57;)alert(p=((p+=n)+(!(p%2)-!(p%3))*n)*(p%4?1:n))

Cả hai đều dừng ở chỉ số 57 (được lập chỉ mục 0) vì đó là khi đầu ra vượt quá kích thước số an toàn của JavaScript (2 53 - 1). Hóa ra một vòng lặp ngắn hơn một hàm đệ quy, ngay cả với ES6:

f=(n=0,p=0)=>n++>56?[]:(q=(p+=n)%2?p:p+n,q-=p%3?0:n,[q*=p%4?1:n,...f(n,q)])

Cái này trả về một mảng gồm 57 phần tử đầu tiên.


Tôi nghĩ bạn nên tránh vượt quá ~ 50-60 vì sau đó bạn vượt quá Number.MAX_SAFE_INTEGER, và sự phân chia của bạn sẽ trở nên không chính xác. Tôi cũng đã thử mapphiên bản cho đầy đủ và nó cũng có tốc độ 75 byte.
Neil

@Neil À, cảm ơn. Nói chính xác, nó vượt qua Number.MAX_SAFE_INTEGER sau 57 mục.
Sản phẩm ETH

3

Brain-Flak 476 466 462 456 446 Byte

Đã lưu 6 byte nhờ Wheat Wizard

(((((((())<>()(())()){}){}){}())){}{}){({}[()]<(((({})<>({}())<>))<({}(()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}({}<>({})<>)>)}{}>)(({})<({}(()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}({}<>[({})]<>)>)}{}>)({}(()()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}(<>({}))({<({}[()])><>({})<>}{}<><{}>)>)}{}>)}{}

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

Điều này thực sự chậm. TIO không thể xử lý toàn bộ 100 số (giới hạn dường như là 22 hoặc 23). Vì vậy, ví dụ này chỉ tạo ra 20 đầu tiên, nhưng mã cũng sẽ hoạt động cho 100.

Giải thích ngắn gọn:

      (())<>                           # push a 1 (the index) and switch stacks 
            (())                       # then push a 1 (the starting number)
((((((          ()()){}){}){}())){}{}) # and a 99 (a counter so that we only print the 
                                       # first 100 numbers)

# repeat until the counter is 0
{
  # pop the counter and push it minus 1 after:
  ({}[()]<
    # hold onto the current number plus the index (leave a copy on the stack to be printed)
    # and increment the index
    (((({})<>({}())<>))<
      # push logical not of (current mod 2)
      ({}(()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
      # if !(current mod 2) is 1, add the index
      {(<{}({}<>({})<>)>)}{}
    # push the current number back on
    >)
    # hold onto the current number
    (({})<
     # push logical not of (current mod 3)
     ({}(()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
     # if !(current mod 3) is 1, then subtract the index
     {(<{}({}<>[({})]<>)>)}{}
    # push the current number back on
    >)
    # push logical not of (current mod 4)
    ({}(()()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
    # if !(current mod 4) is 1, multiply by the index
    {(<{}(<>({}))({<({}[()])><>({})<>}{}<><{}>)>)}{}
  # put the counter back on
  >)
# loop until done
}
# pop the counter
{}

({}<>[({})]<>)(<()>)có thể được thay thế bằng(<({}<>[({})]<>)>)
Wheat Wizard

@WheatWizard Cập nhật. Cảm ơn!
Riley

1

Java 7, 316 byte

import java.math.*;String c(){String r="";BigInteger t=BigInteger.ONE,x,p;for(int i=2;i<102;){r+=t+" ";p=(t=t.add(x=new BigInteger(i+++"")));t=x(p,2)?t.add(x):t;t=x(p,3)?t.subtract(x):t;t=x(p,4)?t.multiply(x):t;}return r;}boolean x(BigInteger p,int i){return p.mod(new BigInteger(i+"")).compareTo(BigInteger.ONE)<0;}

Mã thử nghiệm & mã hóa:

Hãy thử nó ở đây.

import java.math.*;
class M{
  static String c(){
    String r = "";
    BigInteger t = BigInteger.ONE,
               x,
               p;
    for(int i = 2; i < 102;){
      r += t+" ";
      p = (t = t.add(x = new BigInteger(i++ + "")));
      t = x(p, 2)
           ? t.add(x)
           : t;
      t = x(p, 3)
           ? t.subtract(x)
           : t;
      t = x(p, 4)
           ? t.multiply(x)
           : t;
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c());
  }

  static boolean x(BigInteger p, int i){
    return p.mod(new BigInteger(i+"")).compareTo(BigInteger.ONE) < 0;
  }
}

Đầu ra:

1 1 21 25 30 216 223 223 2169 2179 2190 2202 2215 2215 2245 2261 2295 2295 2333 2353 2395 2417 56649 56649 56699 56725 1533033 1533061 1533090 45993600 45993631 45993631 1517792001 1517792035 1517792070 1517792106 1517792143 1517792143 1517792221 1517792261 1517792343 1517792343 1517792429 1517792473 1517792563 1517792609 71336257041 3424140340272 3424140340321 3424140340371 3424140340473 3424140340525 3424140340631 3424140340631 3424140340741 3424140340797 3424140340911 3424140340969 202024280124133 202024280124193 202024280124315 202024280124377 12727529647843689 814561897462000192 52946523335030016705 52946523335030016771 52946523335030016905 52946523335030016973 52946523335030017111 52946523335030017111 52946523335030017253 52946523335030017253 52946523335030017399 52946523335030017473 3970989250127251321725 301795183009671100456876 301795183009671100456953 301795183009671100457031 301795183009671100457110 301795183009671100457270 301795183009671100457351 301795183009671100457433 25049000189802701337980717 25049000189802701337980801 25049000189802701337980971 25049000189802701337981057 2179263016512835016404367097 191775145453129481443584312280 17067987945328523848479003800841 1536118915079567146363110342083790 1536118915079567146363110342083790 1536118915079567146363110342083974 1536118915079567146363110342083974 144395178017479311758132372155911228 13717541911660534617022575354811575685 13717541911660534617022575354811575781 13717541911660534617022575354811575975 13717541911660534617022575354811576073 1358036649254392927085234960126346050829 

1

C #, 120 byte

Cũng như không có người tỉnh táo nào chơi golf ở Java, không có người tỉnh táo nào nên chơi golf trong C #! Nhưng vặn vẹo điều đó, tôi muốn xem những gì tôi có thể làm. Các 1Mdiễn viên flà một số thập phân có đủ độ chính xác cho câu trả lời này mà không cần tôi phải viết decimal. Ngoài ra, việc tăng tại chỗ lưu một số byte vào câu trả lời Python của tôi. cuối cùng nó vẫn dài hơn 50 byte.

void k(){int n=1;var f=1M;while(n<101){Console.WriteLine(f);var d=++n+f;f=(d+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1);}}

Đây là phiên bản dễ đọc hơn (và có thể chạy được):

using System;
class P
{
    static void Main(string[]a) 
    {
        int n = 1;
        var f = 1M;
        while (n < 101) 
        {
            Console.WriteLine(f);
            var d = ++n + f;
            f = (d + n * ((d % 2 < 1 ? 1 : 0) - (d % 3 < 1 ? 1 : 0))) * (d % 4 < 1 ? n : 1);
        }
        Console.Read();
    }
}

Bạn có thể chơi golf 1 byte bằng cách thay đổi whilethành forvà chèn int như thế này:for(int n=1;n<101;)
Kevin Cruijssen

Bạn thậm chí có thể chơi golf nhiều hơn như thế này: void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}( 112 byte )
Kevin Cruijssen

1

Mẻ, 110 byte

@set n=0
@for /l %%i in (1,1,46)do @set/an=((n+=%%i)+(!(n%%2)-!(n%%3))*%%i)*(~-%%i*!(n%%4)+1)&call echo %%n%%

Sử dụng công thức của @ETHproductions, nhưng được điều chỉnh một chút vì Batch không có ?:. Batch sử dụng số nguyên có chữ ký 32 bit để các vòng lặp dừng ở 46.


1

Perl, 75 byte

use bigint;$a+=$_,say$a=($a+($a%2?0:$_)-($a%3?0:$_))*($a%4?1:$_)for(1..100)

Mã này xuất ra từng giá trị trên một dòng mới và tính toán tất cả 100 giá trị.


-Mbigint, không có dấu ngoặc đơn xung quanh 1..100!($a%2)*$_thay vì ($a%2?0:$_)(tương tự a%3..) sẽ tiết kiệm một vài byte;)
Dada

Giảm xuống còn 60 byte với những gợi ý đó và một vài cách mát xa khác.
Xcali

1

Haskell, 70 64 byte

a%b=0^mod a b
n#i|s<-n+i=(s+s%2*i-s%3*i)*i^s%4
scanl1(#)[1..100]

scanl1(#)[1..100]trả về danh sách với 100 phần tử đầu tiên. Ít hơn một byte nếu tôi có thể ở trong phạm vi 2 ^ 31 (->[1..46] ).

scanl1giống như foldl1nhưng thu thập các kết quả trung gian trong một danh sách. Các thử nghiệm chia hết được thực hiện thông qua chức năng của trình trợ giúp %trả về 0^0 = 1nếu chia hết và 0^x = 0nếu không.


1

J, 46 byte

(,{:((]^0=4|+)*(]*0=2|+)++-]*0=3|+)1+#)^:99]1x

Áp dụng phương pháp được mô tả trong thử thách.

Sử dụng

Lệnh thêm (,.~#\)được sử dụng để thêm các chỉ mục cho mỗi giá trị.

   (,.~#\) (,{:((]^0=4|+)*(]*0=2|+)++-]*0=3|+)1+#)^:99]1x
  1                            1
  2                            1
  3                           21
  4                           25
  5                           30
  6                          216
  7                          223
  8                          223
  9                         2169
 10                         2179
 11                         2190
 12                         2202
 13                         2215
 14                         2215
 15                         2245
 16                         2261
 17                         2295
 18                         2295
 19                         2333
 20                         2353
 21                         2395
 22                         2417
 23                        56649
 24                        56649
 25                        56699
 26                        56725
 27                      1533033
 28                      1533061
 29                      1533090
 30                     45993600
 31                     45993631
 32                     45993631
 33                   1517792001
 34                   1517792035
 35                   1517792070
 36                   1517792106
 37                   1517792143
 38                   1517792143
 39                   1517792221
 40                   1517792261
 41                   1517792343
 42                   1517792343
 43                   1517792429
 44                   1517792473
 45                   1517792563
 46                   1517792609
 47                  71336257041
 48                  71336257041
 49                  71336257139
 50                  71336257189
 51                3638149121841
 52                3638149121893
 53                3638149121946
 54              196460052588000
 55              196460052588055
 56              196460052588055
 57            11198222997525633
 58            11198222997525691
 59            11198222997525750
 60            11198222997525810
 61            11198222997525871
 62            11198222997525871
 63            11198222997525997
 64            11198222997526061
 65            11198222997526191
 66            11198222997526191
 67            11198222997526325
 68            11198222997526393
 69            11198222997526531
 70            11198222997526601
 71           795073832824398753
 72           795073832824398753
 73           795073832824398899
 74           795073832824398973
 75         59630537461829934225
 76         59630537461829934301
 77         59630537461829934378
 78       4651181922022734887568
 79       4651181922022734887647
 80       4651181922022734887647
 81     376745735683841525912529
 82     376745735683841525912611
 83     376745735683841525912694
 84     376745735683841525912778
 85     376745735683841525912863
 86     376745735683841525912863
 87     376745735683841525913037
 88     376745735683841525913125
 89     376745735683841525913303
 90     376745735683841525913303
 91     376745735683841525913485
 92     376745735683841525913577
 93     376745735683841525913763
 94     376745735683841525913857
 95   35790844889964944961834465
 96   35790844889964944961834465
 97   35790844889964944961834659
 98   35790844889964944961834757
 99 3543293644106529551221660545
100 3543293644106529551221660645

1

Perl 6 , 62 byte

1,{((my \v=$_+my \n=++$+1)+n*(v%%2-v%%3))*(v%%4*n||1)}.../645/

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

THỰC SỰ phải làm việc để có được số byte của tôi dưới mức của các giải pháp phi ngôn ngữ golf khác.

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.