Số liệt kê chóng mặt


25

Thử thách của bạn hôm nay là đưa ra một thuật ngữ nhất định của một chuỗi liệt kê tất cả các số nguyên. Trình tự như sau: Nếu chúng ta có hàm 0 chỉ mục tạo ra chuỗi f(n)ceil(x)là hàm trần, thì f(0) = 0; abs(f(n)) = ceil(n/2); sign(f(n))là dương khi nceil(n/2)cả hai chẵn hoặc cả hai lẻ.

Để giúp hiểu trình tự này, một số thuật ngữ đầu tiên như sau: 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7...

Nhiệm vụ của bạn là viết một chương trình để lấy một số nguyên nvà xuất ra số hạng nthứ tự của chuỗi. Đầu vào có thể là 0 hoặc 1 chỉ mục.

Các trường hợp thử nghiệm (0 chỉ mục):

0  =>  0
1  =>  1
2  => -1
3  => -2
4  =>  2
5  =>  3

Đây là , ít byte thắng nhất!



Có vẻ như nghịch đảo của chức năng Folding
sergiol

Câu trả lời:


8

SOGL V0.12 , 8 6 byte

I».»⌡±

Hãy thử nó ở đây! hoặc thử các số cặp đầu tiên (thay đổi một chút để nó hoạt động)
được lập chỉ mục 0.

Giải trình:

I       increment the input
 »      floor divide by 2
  .     push the original input
   »    floor divide by 2
    ⌡   that many times
     ±    negate

Hoặc đơn giản hơn:

(input + 1) // 2 negated input // 2 times
        I     »     ±      .     »    ⌡

3
NÓ TUYỆT ĐỐI MỘT PHÚT MỘT PHÚT!
NieDzejkob

6
Tôi ».»đang trên điện thoại I».»⌡±.
Jonathan Allan

@Jonathan ALLan Tôi không hiểu ._.
Pavel



4

C, 25 byte

f(n){return~n/2*~-(n&2);}

Bạn có thể lưu 4 byte bằng cách gán giá trị trả về của mình cho tham số đầu tiên thay vì sử dụng trả về từ khóa. f(n){n=~n/2*~-(n&2);}
cleblanc

5
@cleblanc Đó không phải là cách C hoạt động.
orlp

2
gcc -O0đối với x86-64 không xảy ra để biên dịch phiên bản của @ cleblanc thành các hướng dẫn xảy ra để lại kết quả nhân trong eax( godbolt.org/g/dztKPV ), nhưng sau đó sẽ là x86-64 gcc -O0câu trả lời, không phải là câu trả lời C. Tôi không bình chọn C câu trả lời phá vỡ với tối ưu hóa được kích hoạt, đặc biệt không phải là biểu thức cuối cùng ngu ngốc như là giá trị trả về. Ngay cả khi đó là cách gcc xảy ra để hoạt động, đó không phải là cách C hoạt động.
Peter Cordes

Làm con trỏ na. Bạn không cần tối ưu hóa nếu giá trị ban đầu và giá trị cuối cùng không có trong ngăn xếp.
mreff555

1
@ mreff555 Đó sẽ là phương pháp IO không chuẩn (mặc dù có thể chấp nhận) và sẽ không ngắn hơn.
orlp





3

Toán học, 24 byte

(s=⌈#/2⌉)(-1)^(#+s)&  

-14 byte từ @Misha Lavrov


1
Sử dụng BooleOddQcó tác dụng chuyển đổi số lẻ thành 1 và số chẵn thành 0, nhưng bạn không cần điều đó ở đây: lũy thừa -1 cung cấp cho bạn câu trả lời đúng cho tất cả các số lẻ. Vì vậy, bạn có thể cắt giảm bước đó đến (-1)^Tr@{#,s}hoặc chỉ (-1)^(#+s).
Misha Lavrov







2

JavaScript (ES6), 18 byte

f=
n=>n/2^(n<<30>>30)
<input type=number min=0 value=0 oninput=o.textContent=f(this.value)><pre id=o>0

Chỉ số 0.



2

Về cơ bản , 23 byte

(1 chỉ mục)

FDF'$:7+8/0_0*0-8*7/0%6

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

Khó khăn chính khi viết mã trong Lập phương là:

  • Chỉ có 1 biến có thể ghi và
  • Lấy hằng là khó.

Vì vậy, giải pháp này tính toán

((((n+1)/2)%2)*2-1)*n/2

trong đó /biểu thị sự phân chia số nguyên. Điều đó chỉ cần 1 biến tạm thời, và hằng số 1 và 2.

Giải trình:

FDF'$:7+8/0_0*0-8*7/0%6
FDF'                      Set face value of face 0 to 2, and value of memory index 8 (cube is unsolved) to 1 (true = unsolved)
    $                     Read input
     :7                                 input
       +8                                + 1
         /0                        (        ) /2
           _0                     (             ) %2
             *0                  (                  ) *2
               -8                                        -1
                 *7             (                          ) *n
                   /0                                          /2
                     %6   Print

2

TI-Basic (TI-84 Plus CE), 20 byte

‾int(‾Ans/2)(1-2remainder(int(Ans/2),2

Một chương trình đầy đủ được gọi là như thế 5:prgmNAME.

TI-Basic là một lanug tokenized , tất cả các mã thông báo được sử dụng ở đây là một byte, ngoại trừ remainder(hai byte . đại diện cho mã thông báo chính thức, được nhập bằng (-)khóa.

Ví dụ:

0:prgmNAME
 => 0
1:prgmNAME
 => 1
2:prgmNAME
 => -1
#etc

Giải trình:

‾int(‾Ans/2)(1-2remainder(int(Ans/2),2
‾int(‾Ans/2)                           # -int(-X) is ciel(X), so ciel(Ans/2)
                          int(Ans/2)   # int(X) is floor(X), so floor(Ans/2)
                remainder(int(Ans/2),2 # 1 if floor(Ans/2) is odd else 0
            (1-2remainder(int(Ans/2),2 # -1 if floor(Ans/2) is odd, else 1
_int(_Ans/2)(1-2remainder(int(Ans/2),2 # -ciel(Ans/2) if floor(Ans/2) is odd, else ciel(Ans/2)

Công thức tương tự như hàm Y-var:

Y1= ‾int(‾X/2)(1-2remainder(int(X/2),2


2

Java 8, 15 byte

n->~n/2*~-(n&2)

EDIT: Java có thực sự là ngôn ngữ ngắn nhất trong số các ngôn ngữ không chơi gôn không?! o.Ô

Giải trình:

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

Tôi sẽ sử dụng bảng dưới đây để tham khảo những gì đang xảy ra.

  1. ~nbằng -n-1.
  2. Do phép chia số nguyên trong Java tự động tạo tầng trên các số nguyên dương và trần trên các số nguyên âm, ~n/2sẽ dẫn đến chuỗi0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,...
  3. n&2sẽ dẫn đến một trong hai 0hoặc 2, trong chuỗi0,0,2,2,0,0,2,2,0,0,2,...
  4. ~-xbằng (x-1), vì vậy ~-(n&2)( ((n&2)-1)) kết quả trong chuỗi-1,-1,1,1,-1,-1,1,1,-1,-1,1,...
  5. Nhân hai chuỗi ~n/2~-(n&2)cho là chuỗi chính xác được hỏi trong thử thách:0,1,-1,-2,2,3,-3,-4,4,5,-5,...

Bảng tổng quan:

n       ~n      ~n/2    n&2     ~-(n&2)     ~n/2*~-(n&2)
0       -1      0       0       -1          0
1       -2      -1      0       -1          1
2       -3      -1      2       1           -1
3       -4      -2      2       1           -2
4       -5      -2      0       -1          2
5       -6      -3      0       -1          3
6       -7      -3      2       1           -3
7       -8      -4      2       1           -4
8       -9      -4      0       -1          4
9       -10     -5      0       -1          5
10      -11     -5      2       1           -5

2

Brain-Flak , 86 74 72 70 byte

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

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

Giải trình

Có hai phần của mã này. Phần đầu tiên

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

không brawn của tính toán. Nó xác định ceil(n/2)và có phủ nhận đầu ra hay không.

Để giải thích cách thức hoạt động, trước tiên tôi sẽ giải thích cách người ta tính toán ceil(n/2). Điều này có thể được thực hiện với mã sau đây

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

Điều này đếm ngược từ n mỗi lần nó thực hiện không ( ([{}]())) trên bộ đếm và thêm bộ đếm vào kết quả. Vì bộ đếm bằng không một nửa thời gian, chúng tôi chỉ tăng mỗi lần chạy khác bắt đầu với lần đầu tiên.

Bây giờ tôi cũng muốn tính dấu hiệu của kết quả của chúng tôi. Để làm điều này, chúng tôi bắt đầu một quầy khác. Bộ đếm này chỉ thay đổi trạng thái nếu bộ đếm đầu tiên tắt. Bằng cách đó chúng ta có được mô hình mong muốn. Chúng tôi đặt hai quầy này trên ngăn xếp để dễ dàng di chuyển chúng khi thời gian đến.

Bây giờ khi chúng ta đã hoàn thành tính toán đó, ngăn xếp của chúng ta trông như thế này

          parity(n)
ceil(n/2) sign

Vì vậy, chúng ta cần phải làm một số công việc để có được kết quả như mong muốn phần thứ hai này thực hiện nó.

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



1

QBIC , 27 26 byte

g=(:+1)'\2`~(a-g)%2|?-g\?g

Giải trình

g=          set worker var 'g' to
(:+1)           our index (plus one for the ceil() bit)
'\2`            integer divided by 2 (the int div needs a code literal: '..`
~(a-g)%2    IF index - temp result is odd (index 2 minus result 1 = 1)
|?-g        THEN PRINT g negated
\?g         ELSE PRINT g

1

Clojure 122 byte

Verbose, ngay cả khi chơi golf. Tôi sẽ bỏ phiếu thông cảm ở đây ... :-)

Chơi gôn

(defn d[n](let[x(int(Math/ceil(/ n 2)))y(cond(or(and(even? n)(even? x))(and(odd? n)(odd? x)))(Math/abs x):else(- 0 x))]y))

Ung dung:

(defn dizzy-integer [n]
  (let [x   (int (Math/ceil (/ n 2)))
        y   (cond
                (or (and (even? n) (even? x))
                    (and (odd? n)  (odd? x))) (Math/abs x)
                :else (- 0 x)) ]
    y))

1

Excel VBA 32-bit, 39 37 byte

Hàm cửa sổ tức thời VBE ẩn danh lấy đầu vào từ ô A1và xuất ra cửa sổ ngay lập tức VBE

?[Sign((-1)^Int(A1/2))*Int((A1+1)/2)]

Bị giới hạn ở 32-bit vì A^Bkhông hợp lệ trong 64-bit ( A ^Bcàng gần càng tốt)


Là không gian giữa (-1)^[Intcần thiết?
Pavel

@Pavel ít nhất là đối với Phiên bản 64 bit của Excel VBA, vâng; Nhưng điều đó nói rằng tôi thề rằng nó không dành cho Phiên bản 32 bit, nhưng than ôi tôi không thể kiểm tra xem trên bất kỳ phần cứng nào tôi có trong tay
Taylor Scott

@Pavel - Tôi đã xem xét nó trong Hệ thống 32 bit (thông số cài đặt mặc định) và trong hệ thống đó, không cần không gian - Tôi đã giới hạn giải pháp ở 32-bit để tận dụng lợi thế này
Taylor Scott

1
Mát mẻ! Bạn đã quên để thêm vào số byte đã sửa.
Pavel

Rất tiếc, Cảm ơn @Pavel - Đã sửa ngay bây giờ
Taylor Scott

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.