Enumerasi integer pusing


25

Tantangan Anda hari ini adalah untuk menampilkan istilah tertentu dari urutan yang menyebutkan semua bilangan bulat. Urutannya adalah sebagai berikut: Jika kita memiliki fungsi diindeks 0 menghasilkan urutan f(n)dan ceil(x)fungsi langit-langit, maka f(0) = 0; abs(f(n)) = ceil(n/2); sign(f(n))positif ketika ndan ceil(n/2)keduanya genap atau ganjil.

Untuk membantu memahami urutan ini, beberapa istilah pertama adalah sebagai berikut: 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7...

Tugas Anda adalah menulis sebuah program yang membutuhkan bilangan bulat ndan menampilkan urutan nke-3 dari urutan tersebut. Input mungkin hanya 0 atau 1-diindeks saja.

Kasus uji (0-diindeks):

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

Ini adalah , byte terkecil menang!



Tampaknya kebalikan dari fungsi Lipat
sergiol

Jawaban:


8

SOGL V0.12 , 8 6 byte

I».»⌡±

Coba Di Sini! atau coba nomor pasangan pertama (diubah sedikit agar berfungsi)
0-diindeks.

Penjelasan:

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

Atau lebih sederhana:

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

3
ITU TIDAK MENGAMBIL MENIT SINGLE!
NieDzejkob

6
Saya ».»sedang menelepon I».»⌡±.
Jonathan Allan

@ Jonathan Allan Saya tidak mengerti ._.
Pavel



4

C, 25 byte

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

Anda dapat menyimpan 4 byte dengan menetapkan nilai kembali ke parameter pertama alih-alih menggunakan kata kunci kembali. f(n){n=~n/2*~-(n&2);}
cleblanc

5
@cleblanc Bukan itu cara C bekerja.
orlp

2
gcc -O0untuk x86-64 memang terjadi untuk mengkompilasi versi @ cleblanc dengan instruksi yang meninggalkan hasil multiply eax( godbolt.org/g/dztKPV ), tetapi kemudian itu akan menjadi x86-64 gcc -O0jawaban, bukan jawaban C. Saya tidak memilih-C jawaban yang berhenti dengan optimasi diaktifkan, terutama tidak ekspresi terakhir yang bodoh sebagai omong kosong nilai-kembali. Bahkan jika begitulah cara gcc bekerja, itu bukan cara C bekerja.
Peter Cordes

Buat penunjuk na. Anda tidak perlu optimisasi jika nilai asli dan akhir tidak ada di tumpukan.
mreff555

1
@ mreff555 Itu akan menjadi metode IO non-standar (meskipun dapat diterima), dan tidak akan lebih pendek.
orlp


3

Pyke , 6 byte

heQeV_

Coba di sini!

Gunakan pendekatan dzaima ... Beats Ties Jelly!

Penjelasan

h      - Increment the input, which is implicit at the beginning.
 e     - Floor halve.
  Q    - Push the input.
   e   - Floor halve.
    V_ - Apply repeatedly (V), ^ times, using negation (_).
       - Output implicitly.

Byte hex-encoded setara akan menjadi: 68 65 51 65 56 5F.




3

Mathematica, 24 byte

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

-14 byte dari @Misha Lavrov


1
Menggunakan Booledan OddQmemiliki efek mengubah angka ganjil menjadi 1 dan bahkan angka menjadi 0, tetapi Anda tidak perlu itu di sini: kekuatan -1 memberikan Anda jawaban yang tepat untuk semua angka ganjil. Jadi Anda bisa mengurangi langkah itu menjadi (-1)^Tr@{#,s}atau hanya (-1)^(#+s).
Misha Lavrov

3

Haskell , 25 43 42 byte

((do a<-[0..];[[-a,a],[a,-a]]!!mod a 2)!!)

Cobalah online! 1-diindeks.

Sunting: Versi sebelumnya memiliki tanda-tanda yang salah, terima kasih kepada @ Potato44 karena menunjukkan. Diperbaiki untuk 18 byte ...

Sunting 2: Terima kasih kepada BMO untuk -1 byte!


Anda dapat menghemat 1 byte dengan menggunakan do-notation, coba online!
ბიმო

@BMO Terima kasih! ...
Laikoni





2

Batch, 29 byte

@cmd/cset/a"%1/2^(%1<<30>>30)

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

Diindeks 0.


2

Javascript, 17 byte

n=>~n/2*~-(n&2)^0

Yang ini diindeks 0. Ini sepenuhnya tipuan tipuan.


2

Secara kubik , 23 byte

(Diindeks 1)

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

Cobalah online!

Kesulitan utama saat menulis kode dalam Cubically adalah:

  • Hanya ada 1 variabel yang dapat ditulis, dan
  • Mendapatkan konstanta itu sulit.

Jadi, solusi ini menghitung

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

di mana /menunjukkan pembagian bilangan bulat. Itu hanya perlu 1 variabel sementara, dan konstanta 1 dan 2.

Penjelasan:

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

Program lengkap yang disebut seperti 5:prgmNAME.

TI-Basic adalah bahasa tokenized , semua token yang digunakan di sini adalah satu byte, kecuali remainder(yang dua. mewakili token resmi, yang diketik dengan (-)kunci.

Contoh:

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

Penjelasan:

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

Rumus yang sama dengan fungsi Y-var:

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

2

dc , 16 byte

1+d2~+2%2*1-r2/*

Saya yakin ada cara untuk membuat 0,1 ke -1. 1 di dc lebih pendek, tetapi tidak ada ide untuk saat ini.

Cobalah online!


2

Java 8, 15 byte

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

EDIT: Apakah Jawa benar-benar bahasa terpendek dari non-golf ?! o.Ô

Penjelasan:

Coba di sini.

Saya akan menggunakan tabel di bawah ini sebagai referensi tentang apa yang terjadi.

  1. ~nsama dengan -n-1.
  2. Karena pembagian integer di Jawa secara otomatis didasarkan pada bilangan bulat positif dan ceils pada bilangan bulat negatif, ~n/2akan menghasilkan urutan0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,...
  3. n&2akan menghasilkan salah satu 0atau 2, dalam urutan0,0,2,2,0,0,2,2,0,0,2,...
  4. ~-xsama dengan (x-1), jadi ~-(n&2)( ((n&2)-1)) menghasilkan urutan-1,-1,1,1,-1,-1,1,1,-1,-1,1,...
  5. Mengalikan dua urutan ~n/2dan ~-(n&2)memberi adalah urutan yang benar yang ditanyakan dalam tantangan:0,1,-1,-2,2,3,-3,-4,4,5,-5,...

Tabel ikhtisar:

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

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

Cobalah online!

Penjelasan

Ada dua bagian dari kode ini. Bagian pertama

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

apakah kekuatan perhitungan. Ini menentukan ceil(n/2)dan apakah akan meniadakan output atau tidak.

Untuk menjelaskan cara kerjanya, pertama saya akan menjelaskan bagaimana seseorang akan menghitung ceil(n/2). Ini bisa dilakukan dengan kode berikut

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

Ini menghitung mundur dari n setiap kali melakukan not ( ([{}]())) pada penghitung dan menambahkan penghitung ke hasil. Karena penghitungnya adalah nol separuh waktu, kami hanya menambah setiap proses lainnya dimulai dengan yang pertama.

Sekarang saya ingin juga menghitung tanda hasil kami. Untuk melakukan ini kita mulai penghitung lain. Penghitung ini hanya mengubah status jika penghitung pertama mati. Dengan begitu kita mendapatkan pola yang diinginkan. Kami menempatkan kedua penghitung ini di tumpukan off untuk memudahkan dengan memindahkannya ketika saatnya tiba.

Sekarang setelah kita selesai menghitung tumpukan kita terlihat seperti ini

          parity(n)
ceil(n/2) sign

Jadi kita perlu melakukan beberapa pekerjaan untuk mendapatkan hasil yang diinginkan bagian kedua ini melakukannya.

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



1

QBIC , 27 26 byte

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

Penjelasan

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, bahkan saat bermain golf. Saya akan memilih simpati di sini ... :-)

Golf:

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

Tidak Disatukan:

(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 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari sel A1dan output ke jendela langsung VBE

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

Dibatasi hingga 32-Bit karena A^Btidak valid dalam 64-Bit ( A ^Bsedekat mungkin dapat dicapai)


Apakah ruang antara (-1) dan ^[Intdibutuhkan?
Pavel

@Pavel setidaknya untuk Versi 64-Bit dari Excel VBA, ya; Tetapi itu mengatakan saya bersumpah bahwa itu bukan untuk Versi 32-Bit, tetapi sayangnya saya tidak dapat menguji itu pada perangkat keras yang saya miliki
Taylor Scott

@ Pavel - Saya sudah melihatnya di bawah Sistem 32-Bit (spesifikasi instalasi default) dan di bawah sistem itu ruang tidak diperlukan - Saya telah membatasi solusi untuk 32-Bit untuk mengambil keuntungan dari ini
Taylor Scott

1
Keren! Anda lupa menambahkan dalam hitungan byte yang dikoreksi.
Pavel

Whoops, Trims @Pavel - Sudah diperbaiki sekarang
Taylor Scott

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.