Pola Sembilan


9

pengantar

Saya menemukan pola (tidak berguna) ini tempo hari ketika saya sedang menonton TV. Saya menamainya "pola 9" karena angka pertama yang menggunakannya adalah 9. Intinya adalah, Anda memasukkan nomor (katakanlah x ), dan kemudian Anda kembali:

  • x
  • x + ( x / 3) [sebut saja ini y ]
  • dua pertiga dari y [sebut saja ini z ]
  • z +1

Jadi, jika saya masukkan ke dalam pola ini angka 9 sebagai x , inilah yang akan keluar:

  • 9 ( 9 )
  • 12 ( 9 + 9/3 ) [9 lebih dari 3 adalah 3, dan 9 + 3 adalah 12]
  • 8 ( 12 kali dua pertiga) [sepertiga dari 12 adalah 4, dan 4 * 2 adalah 8]
  • 9 ( 8 + 1 adalah 9)

Tantangan

Tuliskan saya fungsi (dalam bahasa pemrograman apa pun) yang menggunakan angka, dan mengeluarkan array integer menggunakan pola.
Agak menyukai kode-psuedo ini:

function ninePattern(int myInt) returns IntegerArray {  
    int iterationA = myInt + (myInt / 3);  
    int iterationB = iterationA * (2 / 3); 
    int iterationC = iterationB + 1;  
    IntegerArray x = [myInt, iterationA, iterationB, iterationC];  
    return x;  
}

Klarifikasi

Diskusi telah menimbulkan komentar mengenai spesifikasi pertanyaan. Bagian ini dimaksudkan untuk mengklarifikasi beberapa di antaranya.

"lebih baik untuk menghitung dalam byte daripada karakter"

Saya memilih karakter karena (bagi saya, setidaknya) akan lebih mudah untuk menilai. Tentu saja, saya tidak bisa mengubahnya sekarang. (banyak jawaban sudah diposting)

"pembulatan"

Pembulatan mengikuti sajak ini:

Jika 5 atau lebih, naikkan skor
Jika 4 atau kurang, biarkan saja

Sederhananya, jika itu adalah sekitar 4,7 atau 3,85, bulatkan masing-masing menjadi 5 dan 4.

Contohnya

Input => Result
9 => [9, 12, 8, 9]
8 => [8, 11, 7, 8]
6 => [6, 8, 5, 6]
23 => [23, 31, 21, 22]
159 => [159, 212, 141, 142]

Namun, jika angkanya sekitar 2,3 atau 10,435446, bulatkan masing-masing menjadi 2 dan 10.

"dukungan bahasa"

Anda bebas untuk tidak menggunakan fungsi dan / atau array JIKA DAN HANYA JIKA bahasa pilihan Anda tidak mendukungnya. Jika ya (bahkan jika itu akan meningkatkan jumlah karakter Anda), Anda harus menggunakannya .


1
Haruskah output menjadi array, atau apakah angka-angka itu sendiri cukup (seperti jawaban Pyth)?
David

2
Anda bebas untuk membatasi hanya pada program penuh, atau hanya fungsi, tetapi ada diskusi tentang meta dari default, yang memberikan beberapa latar belakang yang berguna jika itu mempengaruhi keputusan Anda untuk tantangan di masa depan. Secara default tantangan menerima keduanya, untuk memungkinkan lebih banyak bahasa bersaing.
trichoplax

1
Ada juga standar untuk input dan output . Sekali lagi, Anda tidak harus mengikuti mereka, ini hanya untuk memberi tahu Anda.
trichoplax

3
-1 untuk larik dan persyaratan fungsi yang berubah-ubah, yang mencegah bahasa tanpa larik / tipe daftar atau fungsi bersaing.
Mego

4
Anda juga harus menilai kontestan dalam byte, bukan dalam karakter. Kami memiliki Sandbox , tempat Anda bisa mendapatkan umpan balik pada posting Anda sebelum ditayangkan.
Loovjo

Jawaban:


11

MarioLANG, 659 621 591 582 556 543 516 458 418 401 352 308 369 byte

pembulatan cukup mahal: /

Cobalah online

;>>[![( [( [( [( [( [<(([!)))!+(((-<>( >((+
:"==#================"===#== #=====""[ "==
)(  -[!)>>[![)  [)[<(!>)[<)) >))) [!!-[!((
 (  )"#="==#======="=#==="=<="=====##==#==<
 +  +>) )-+<>+)[!)+! +))![-[)>[ [([-[![<<:
 +  )-+ )(=""===#==#  ==#===)"=======#=====
 +  >!>)!>  !(- < !:+:))<  ))!((++)))< 
 )  "#"=#===#===" ======" ===#======="
 !
=#========================

Yah ini lebih menyenangkan dari yang diharapkan, ini mungkin tidak optimal tapi saya rasa saya sudah sampai di sana.

Waktu penjelasan:

(untuk versi 352 byte)

pertama kita mendapatkan argumen dan mencetaknya:

;
:

cukup sederhana

kami kemudian pindah ke sebagian besar program: input divisi / 3

;>>[![              [( [( [<result
:"==#======================"======
)   -[!)>>[![        [<((((!   
)   )"#="==#=========="====#
+(  +>) )  +>(+)[!)+))!
+(  )-+ )  -"====#====#
+   >!>)!  >! -  <
    "#"=#  "#===="
 !
=#

yang merupakan konversi yang sedikit dimodifikasi dari divisi brainfuck

[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]

yang mengambil input

n 0 d 0 0 

dan mengembalikanmu

0 n d-n%d n%d n/d 

setelah kami mendapat divisi kami menggunakannya untuk mendapatkan jumlah n dan n / d dan mencetaknya

;>>[![              [( [( [<    !+(((-<
:"==#======================"===)#====="
)   -[!)>>[![        [<((((!    >))) [!(((
)   )"#="==#=========="====#   ="=====#==:
+(  +>) )  +>(+)[!)+))!
+(  )-+ )  -"====#====#
+   >!>)!  >! -  <
    "#"=#  "#===="
 !
=#

kita kemudian perlu melakukan divisi lain: (2 * (n + n / d)) / 3

jadi kita dapatkan (2 * (n + n / d)

;>>[![              [( [( [<    !+(((-<
:"==#======================"===)#====="
)   -[!)>>[![        [<((((!    >))) [!(((
)   )"#="==#=========="====#   ="=====#==:
+(  +>) )  +>(+)[!)+))! 2*2n/d>[   -[![  <
+(  )-+ )  -"====#====# ======"======#====
+   >!>)!  >! -  <            !((++))<
    "#"=#  "#===="            #======"
 !
=#

dan memasukkannya dengan 3 kembali ke divisi

;>>[![              [( [( [<    !+(((-<
:"==#======================"===)#====="
)   -[!)>>[![        [<((((!    >))) [!(((
)   )"#="==#=========="====#   ="=====#==:
+(  +>) )  +>(+)[!)+))!      )>[   -[![  <
+(  )-+ )  -"====#====#      )"======#====
+   >!>)!  >! -  <       +++))!((++))<
    "#"=#  "#====" ===========#======"
 !
=#=================

pada saat itu semuanya terbuka, mario terjebak dalam loop tak terbatas melakukan pembagian pada jumlah yang lebih besar dan lebih besar, selamanya.

dan untuk memperbaikinya kita perlu cara untuk membedakan antara divisi pertama dan kedua, itu berakhir bahwa, oh sukacita, kita memang punya cara

;>>[![              [( [( [<([!)!+(((-<
:"==#======================"==#)#====="
)   -[!)>>[![        [<((((!))< >))) [!(((
)   )"#="==#=========="====#)="="=====#==:
+(  +>) )  +>(+)[!)+))!!:+:)))>[   -[![  <
+(  )-+ )  -"====#====#======)"======#====
+   >!>)!  >! -  <       +++))!((++))<
    "#"=#  "#====" ===========#======"
 !
=#=================

pada dasarnya kita melihat apakah x in

x 0 n d-n%d n%d n/d 

adalah 0, jika itu berarti kita berada di divisi pertama

kalau tidak kita ada di divisi kedua, dan kita hanya mencetak hasil divisi itu, tambahkan 1 lalu cetak lagi

dan voila semudah pie.


Selamat datang di PPCG!
Erik the Outgolfer

Tidak membulatkan ke spesifikasi yang disediakan oleh pertanyaan (tentu saja, saya memang memperbaruinya setelah Anda memposting jawaban Anda, tetapi Anda setidaknya harus memperbarui jawaban Anda agar sesuai dengan spesifikasi baru)
InitializeSahib

Selesai sementara kita berbicara tentang test case Anda harus menambahkan 10 untuk memiliki nomor yang Anda bulatkan pada operasi tinju.
Ether Frog

9

Emotinomicon 99 byte, 33 karakter

😷😭,πŸ˜²πŸ†™πŸ†™πŸ˜ΌπŸ†™πŸ˜¨πŸ˜Žβ¬πŸ˜ŽπŸ†™πŸ˜βž—βž•πŸ†™πŸ˜¨πŸ˜Žβ¬πŸ˜ŽπŸ˜‰βœ–πŸ˜βž—πŸ†™πŸ˜¨πŸ˜Žβ¬πŸ˜ŽπŸ˜…βž•πŸ˜¨

Penjelasan:

😷                                 clear output
 😭                                begin quote string
  ,                               
   😲                              end quote string
    πŸ†™                             duplicate top of stack
     πŸ†™                            duplicate top of stack
      😼                           take numeric input
       πŸ†™                          duplicate top of stack
        😨                         pop N and output as a number
         😎                        reverse stack
          ⏬                       pops and outputs top of stack as character
           😎                      reverse stack
            πŸ†™                     duplicate top of stack
             😍                    push 3 to the stack
              βž—                   divide top two elements on stack
               βž•                  add top two elements on stack
                πŸ†™                 duplicate top of stack
                 😨                pop N and output as a number
                  😎               reverse stack
                   ⏬              pops and outputs top of stack as character
                    😎             reverse stack
                     πŸ˜‰            push 2 to the stack
                      βœ–           multiply top two elements on stack
                       😍          push 3 to the stack
                        βž—         divide top two elements on stack
                         πŸ†™        duplicate top of stack
                          😨       pop N and output as a number
                           😎      reverse stack
                            ⏬     pops and outputs top of stack as character
                             😎    reverse stack
                              πŸ˜…   push 1 to the stack
                               βž•  add top two elements on stack
                                😨 pop N and output as a number

3
Yay untuk bahasa yang tidak konvensional! : P
user48538

4

MATL, 14 byte

Xot4*3/tE3/tQv

Cobalah secara Online

Cukup sederhana, vmenggabungkan tumpukan ke dalam array. Xomengkonversi ke tipe data integer, dan semua operasi sesudahnya adalah operasi integer.


3
Specnya adalah mengembalikan array, bukan hanya hasil akhir.
Value Ink

3
Juga lol pada mereka yang ditandai untuk dihapus dalam <2 menit: D
David

@ David D: Saya tidak berpikir saya bisa menarik kembali suara penghapusan
Downgoat

@ David mengangkat jawaban Anda sebagai belasungkawa saya :)
InitializeSahib

1
Saya cukup yakin ini bukan fungsi juga, koreksi saya jika saya salah.
Maltysen

4

Cheddar , 27 byte

b=8/9*$0
[$0,$0+$0/3,b,b+1]

$0variabel dengan input. Cheddar bukan bahasa golf Β― \ _ (ツ) _ / Β―, juga ini tidak bersaing karena fungsi input Cheddar dibuat setelah tantangan ini.

Tidak Disatukan:

IterationB := 8 / 9 * $0  // 8/9ths of the Input
[ $0,                     // The input
  $0 + $0 / 3,            // Input + (Input/3)
  IterationB,             // (see above)
  IterationB + 1          // above + 1
]

1
Air mata kebahagiaan! Sudah sejauh ini! : D
Conor O'Brien

3

Java, 86 82 84 85 karakter

class c{int[]i(int I){int a=I+(I/3),b=(int)(a*(2d/3d));return new int[]{I,a,b,b+1};}}

Huruf yang dditempatkan tepat setelah bilangan bulat membuat bilangan bulat a double.

Tidak Disatukan:

class c{
    int[] i(int I) {
        int a = I + (I / 3),
            b = (int)(a * (2d / 3d));
        return new int[]{I, a, b, b + 1};
    }
}

Tanpa kelas ( class c{}panjangnya 8 karakter), ukurannya menjadi 76 karakter:

int[]i(int I){int a=I+(I/3),b=(int)(a*(2d/3d));return new int[]{I,a,b,b+1};}

Versi yang lebih akurat dalam 110 karakter (118 dengan enum) - ia menggunakan floats karena tidak ada yang punya ruang untuk casting Math#round(double):

int[]i(int I){float a=I+(I/3f),b=(a*(2f/3f));return new int[]{I,Math.round(a),Math.round(b),Math.round(b+1)};}

Saya pikir saya harus belajar Pyth.
user8397947

5
+1, karena Anda tahu, java
James

1
@dorukayhan Aneh, saya sepertinya mendapatkan kesalahan ketika saya mencoba menjalankan ini di Eclipse, tidak dapat mengkonversi dari ganda ke int. Saya akan melihat apakah saya bisa mencari tahu apa masalahnya besok.
Loovjo

1
Saya baru saja memperbaiki kode
user8397947

1
Saya melihat tetapi itu tidak memberikan hasil yang benar untuk input seperti 8 atau 10. Tambahan pertama tidak berfungsi sebagaimana mestinya dengan I + (I / 3)menggunakan divisi integer, yang berarti bahwa pecahan dibuang dan dengan demikian hasilnya tidak dibulatkan dengan benar.
Frozn

3

Java, 56 80 Bytes

Seperti yang ditunjukkan beberapa pengguna, solusi ini (seperti yang lainnya di java) tidak membulatkan data dengan benar. Jadi sekarang saya menghadirkan solusi yang sedikit lebih lama yang harus mengembalikan hasil yang benar

int[]h(int a){int[]b={a,Math.round(a+a/3f),a=Math.round(a*8f/9),++a};return b;}

atau versi 60 byte lamda

a->new int[]{a,Math.round(a+a/3f),a=Math.round(a*8f/9),++a}

Versi golf

int[]g(int a){int[]b={a,a+a/3,a*8/9,a*8/9+1};return b;}

dan ungolfed

int[] g(int a) {
        int[] b = { a, a + a / 3, a * 8 / 9, a * 8 / 9 + 1 };
        return b;
    }

atau 36 byte didefinisikan sebagai lambda

a->new int[]{a,a+a/3,a*8/9,a*8/9+1}


Tidak memiliki pembulatan yang dipersyaratkan oleh Pertanyaan.
Marv

1
Seperti @Marv menyebutkan pertanyaan ini tidak berfungsi dengan benar, misalnya untuk input 8 hasil yang diharapkan adalah [8,11,7,8] tetapi [8,10,7,8]
Frozn

mengapa downvote? saya memperbaikinya dan berfungsi dengan benar sekarang?
user902383

Maaf untuk downvote setelah Anda memperbaikinya. Downvote dikunci sekarang, jadi saya tidak dapat menghapusnya kecuali Anda membuat beberapa perubahan pada jawaban Anda (perubahan sepele apa pun sudah cukup)
edc65

@ edc65 ok, sudah selesai
user902383

2

Java, 64 byte

int[]f(int i){return new int[]{i,i+=i/3+0.5,i-=i/3-0.5,i+=1.5};}

Catatan

  • Ini memiliki building pembulatan yang diperlukan, tidak yakin apakah Anda bisa melakukannya lebih pendek jika dicampur dengan solusi @ user902383.

Tidak disatukan

int[] f(int i) {
    return new int[]{
            i, 
            i += i / 3 + 0.5, 
            i -= i / 3 - 0.5, 
            i += 1.5};
}

Output dengan i = 9

[9, 12, 8, 9]


Sama seperti dalam solusi user902383, ini tidak berfungsi dengan benar, misalnya untuk 8 yang diharapkan [8,11,7,8] tetapi [8,10,7,8], untuk 6 yang diharapkan [6,8,5,6] tetapi [6,8,6,7]
Frozn

3
@Frozn solusi ini tidak bekerja dengan baik juga, dan untuk kasus-kasus uji yang Anda berikan kembali hasil yang sama seperti saya berusia solusi ideone.com/LVK8FU
user902383

2

Gores, 33 byte

Naskah
Minta input, set auntuk input bulat, set bdan cuntuk perubahan masing-masing, lalu ucapkan keempat angka, dipisahkan dengan koma.


2

Java 8 lambda, 109 81 79 75 karakter

Karena ... Anda tahu ... bahkan Jawa bisa bermain golf ...

a->{int b=(int)(.5+a*4./3),c=(int)(.5+b*2./3);return new int[]{a,b,c,++c};}

Lambda tidak masuk kelas:

class C {  
   static int[] a(int a) {
        int b = (int) (.5 + a * 4. / 3),
            c = (int) (.5 + b * 2. / 3);
        return new int[]{a, b, c, ++c};
    }
}

Saya berasumsi saya diizinkan menggunakan long karena mereka juga merupakan tipe integer. Sedihnya, seseorang perlu membulatkan bilangan bulat dengan benar dan dengan demikian pemeran "pendek" tidak berfungsi. Dengan menggunakan long, kita tidak perlu mengembalikan hasil pembulatan ke int.

Memperbarui

Menggunakan + 0,5 kecil yang bagus dan melakukan trik setelahnya, kami menjaga pembulatan yang benar dan menghemat 2 karakter!

Trik ini juga tidak memerlukan penggunaan yang lama lagi sehingga kita dapat kembali ke pencukuran 4 karakter lagi.


Selamat datang di PPCG!
Erik the Outgolfer

Terima kasih :) Saya mengikuti pertanyaan-pertanyaan di sekitar sini untuk sementara waktu sekarang dan saya pikir ini mungkin pertanyaan yang bisa saya ikuti meskipun jawabannya lebih panjang dari yang saya harapkan.
Frozn

Saya akan "+1", berharap Anda akan menambahkan wajib "karena ... Anda tahu ... Jawa!"
Olivier Dulac

@Frozn Saya tidak yakin apakah Anda dapat menghapus a->{dan final }untuk -5 byte.
Erik the Outgolfer

@OlivierDulac Belum :)
Erik the Outgolfer

1

Mathematica - 21 byte

Baru saja mendapat Mathematica dari RPi saudara saya, jadi cobalah untuk bersenang-senang, dan cara apa yang lebih baik daripada tantangan PPCG.

{#,4#/3,8#/9,8#/9+1}&

Menentukan fungsi anonim. Cobalah seperti:

In[26]:= x:={#,4#/3,8#/9,8#/9+1}&                                             

In[27]:= x[9]                                                                 

Out[27]= {9, 12, 8, 9}

Apakah ini akan menghasilkan bilangan bulat, atau pecahan?
David

@ David integer, kecuali hasilnya non-integral, dalam hal ini pecahan.
Maltysen


1

Lua, 52 Bytes

Program ini mengambil angka dengan argumen baris perintah dan mengembalikan array yang sesuai. Program dalam lua secara teknis berfungsi, karena penerjemah akan selalu merangkumnya dalam suatu fungsi. Ini juga mekanik ini yang digunakan ketika Anda "memanggil" kode dalam file lain (pada dasarnya menggunakan loadfile/ dofile).

m=math.floor x=...z=m(x*8/9)return{x,m(x*4/3),z,z+1}

1

Sebenarnya, 21 byte

`;;3@/+;32/*;uk1Β½+β™‚β‰ˆ`

Program ini mendeklarasikan fungsi yang melakukan operasi yang diperlukan pada nilai tumpukan teratas.

Cobalah online! (ekstra .di akhir mengevaluasi fungsi dan mencetak hasilnya)

Penjelasan:

`;;3@/+;32/*;uk1Β½+β™‚β‰ˆ`
 ;;                    make two copies of x
   3@/+                divide by 3, add that to x to get y
       ;32/*           make a copy of y and multiply by 2/3 to get z
            ;u         make a copy of z and add one
              k        push stack as a list
               1Β½+     add 0.5 to each element
                  β™‚β‰ˆ   apply int() to each element (make integers from floats by flooring; this is equivalent to rounding half-up because of adding 0.5)

1

Mathcad, [tbd] byte

masukkan deskripsi gambar di sini


Mathcad codegolf byte equivalance belum ditentukan. Mengambil hitungan keyboard sebagai setara kasar, solusinya adalah sekitar 40 byte.



1

Pyke, 11 byte

D}[}3/bD)[h

Coba di sini!

            - implicit input()
D           - a,b = ^
 }          - b*=2
  [}3/bD)   - macro:
   }        -   tos*=2
    3/      -   tos/=3
      b     -   tos = round(tos)
       D    -   old_tos = tos = tos
            - macro
         [  - macro
          h - d +=1

1

Javascript, 50 byte

Saya mengonversi solusi java saya ke JavaScript dan membukanya sedikit.

var r=Math.round,g=a=>[a,r(a+a/3),a=r(a*8/9),++a]

1

C ++ 0x - 95 102 185 189 109 129 karakter

int * n(int p){static int a[3];a[0]=p;a[1]=round(p+(p/3));a[2]=round((a[1]/3)*2);a[3]=a[2]+1;return a;}
  • Ini membutuhkan header cmath agar berfungsi.

Merosot

#include <cmath>
int * ninePattern(int p) {
        static int a[3]; // pattern array
        a[0] = p; // sets first iteration
        a[1] = round(p + (p / 3)); // sets second iteration
        a[2] = round((a[1] / 3) * 2); // sets third iteration
        a[3] = a[2] + 1; // sets fourth iteration
        return a; // returns array
}

2
Bukan menjadi ahli C ++ tetapi Anda bisa mempersingkatnya dengan menggunakan kembali nilai yang sudah dihitung yang Anda miliki dalam array. Anda juga mungkin dapat menghapus beberapa spasi di antara) dan {tidak tahu seberapa ketat C ++.
Frozn

Apakah dua yang terakhir benar dalam versi saat ini? Karena saya baru saja melihat Anda menghitung p+(p/3)*(2/3)mana yang p+(2*p/9)bukan(p+(p/3))*(2/3)
Frozn

Ternyata itu adalah kesalahan saya. Saya menempatkan - 1 bukannya +1 untuk iterasi terakhir: P
InitializeSahib

0

Erlang, 80 byte

-module(f).
-export([f/1]).
f(X)->Y=X+(X/3),Z=trunc(Y*(2/3)),[X,trunc(Y),Z,Z+1].

Untuk menjalankan, simpan sebagai f.erl , kompilasi dan panggil fungsi. Ini akan mengembalikan daftar int:

fxk8y@fxk8y:/home/fxk8y/Dokumente/erlang/pcg# erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-    threads:10] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> c(f).
{ok,f}
2> f:f(9).
"\t\f\b\t"
3>

Perhatikan bahwa Erlang secara otomatis mengkonversi int ke ASCII chars jika Anda berada dalam kisaran nilai ASCII karena Erlang tidak memiliki tipe char . Memanggil fungsi dengan 100 memberi Anda hasil yang lebih baik [100,133,88,89] .

Tidak Disatukan:

-module(f).
-export([f/1]).

f(X) ->
  Y = X+(X/3),
  Z = trunc(Y*(2/3)),
  [X, trunc(Y), Z, Z+1].

0

Erlang, 46 byte

Jawaban terinspirasi oleh @ fxk8y (Saya tidak dapat mengirim komentar ke jawabannya)

F=fun(X)->Z=round(X*4/9),[X,Z*3,Z*2,Z*2+1]end.

Anda juga dapat melihat hasilnya dengan:

2> io:fwrite("~w~n", [F(9)]).                         
[9,12,8,9]
ok

0

Pyth, 20 byte

m.RdZ[Jc*4Q3Kc*2J3hK

Penjelasan:

            (Implicit print)
m           For each d in array, d =
.RdZ        Round d to zero decimal places
[           The array of
  J         The result of setting J to
    c       The float division of
      *4Q   Input * 4
      3     and 3
            ,
  K         The result of setting K to
    c       The float division of
      *2J   J * 2
      3     and 3
            , and
  hK        K + 1.
            (Implicit end array)

Tes di sini


0

Jolf, 17 byte

Ξβ€˜HΞ³+H/H3Ξ’ΟŽ/Ξ³3hΒ’

Menentukan fungsi Ώ. Dibutuhkan input secara implisit, sehingga juga berfungsi sebagai program lengkap. Coba di sini!


Jolf menjadi ESMin secara perlahan dikonfirmasi ??? : P
Downgoat

@Upgoat itu bahasa Yunani. Dan tengah malam lagi. : P
Conor O'Brien

> _> oh. Sangat menyesal jika saya membangunkan Anda> _> _> _>
Downgoat

@Upgoat belum tidur;)
Conor O'Brien

: | idk apakah itu hal baik yang saya lakukan membangunkan Anda atau hal buruk Anda masih terjaga
Downgoat

0

Mathematica, 51 byte

FoldList[#2@#&,{#,Round[4#/3]&,Round[2#/3]&,#+1&}]&

Fungsi anonim yang sesuai dengan versi posting saat ini (pada saat posting), yang menyiratkan pembulatan pada setiap langkah.

FoldListadalah operasi khas dalam pemrograman. Itu dipanggil sebagaiFoldList[f, list] dan menerapkan fungsi dua argumen fberulang kali untuk hasilnya (atau elemen pertama dari daftar di iterasi pertama), mengambil elemen berikutnya dari daftar sebagai argumen kedua.

Ungolfed: #2 @ # &adalah fungsi anonim yang menerapkan argumen kedua untuk yang pertama. Oleh karena itu, argumen daftar FoldListterdiri dari fungsi berturut-turut untuk diterapkan pada input.

FoldList[#2 @ # &,
  {#, (* note the absence of '&' here, 
         this '#' stands for the argument
         of the complete function and is 
         covered by the & at the end      *)
   Round[4 # / 3] &, (* anonymous function that rounds 4/3 of its input *)
   Round[2 # / 3] &, (* ditto, 2/3 *)
   # + 1 &           (* add one function *)
  }] &               (* and the '&' makes the entire 
                        thing an anonymous function,
                        whose argument is the '#' up
                        at the top.                  *)

Karena input bilangan bulat dan pembagiannya adalah 3, maka tidak akan pernah ada hasil seperti 4,5, oleh karena itu tidak perlu khawatir tentang aturan pembulatan ketika angka terakhir adalah 5: itu akan selalu jelas lebih dekat ke satu bilangan bulat, atau yang lain.


0

Dyalog APL , 33 byte

(⌽,{1+βŠƒβ΅})∘{⍡,⍨3÷⍨2Γ—βŠƒβ΅}(3÷⍨4βˆ˜Γ—),⊒


0

CJam, 21 byte

qi__3d/+mo_2d3/*i_)]`

Umpan balik diterima

Penjelasan

  • qi__ - Baca input sebagai integer dan duplikat dua kali
  • 3D/+mo - Bagi satu instance dari input dengan 3, lalu tambahkan ke instance kedua untuk membuat y
  • _2d3/*i - Gandakan y, lalu kalikan dengan .6
  • _)] `- Dupe, increment, wrap in array, cetak sebagai array (bukan kode karena` operator :()

Sunting: Lupa membuat tiga ganda pertama, sehingga program rusak. Tetap.


0

Aksioma, 59 byte

g(x)==round(x)::INT;f(x)==[x,a:=g(x+x/3.),b:=g(a*2./3),b+1]

uji

(3) -> [[i,f(i)] for i in [9,8,6,23,159]]
   (3)
   [[9,[9,12,8,9]], [8,[8,11,7,8]], [6,[6,8,5,6]], [23,[23,31,21,22]],
    [159,[159,212,141,142]]]
                                                      Type: List List Any


0

PHP, 67 byte

function f($x){return [$x,$y=round($x*4/3),$z=round($y*2/3),$z+1];}
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.