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 .
sumber
Jawaban:
MarioLANG,
659621591582556543516458418401352308369 bytepembulatan 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
yang merupakan konversi yang sedikit dimodifikasi dari divisi brainfuck
yang mengambil input
dan mengembalikanmu
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)
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
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.
sumber
Emotinomicon 99 byte, 33 karakter
Penjelasan:
sumber
MATL, 14 byte
Cobalah secara Online
Cukup sederhana,
v
menggabungkan tumpukan ke dalam array.Xo
mengkonversi ke tipe data integer, dan semua operasi sesudahnya adalah operasi integer.sumber
Cheddar , 27 byte
$0
variabel dengan input. Cheddar bukan bahasa golf Β― \ _ (γ) _ / Β―, juga ini tidak bersaing karena fungsi input Cheddar dibuat setelah tantangan ini.Tidak Disatukan:
sumber
Java,
86828485 karakterHuruf yang
d
ditempatkan tepat setelah bilangan bulat membuat bilangan bulat adouble
.Tidak Disatukan:
Tanpa kelas (
class c{}
panjangnya 8 karakter), ukurannya menjadi 76 karakter:Versi yang lebih akurat dalam 110 karakter (118 dengan enum) - ia menggunakan
float
s karena tidak ada yang punya ruang untuk castingMath#round(double)
:sumber
I + (I / 3)
menggunakan divisi integer, yang berarti bahwa pecahan dibuang dan dengan demikian hasilnya tidak dibulatkan dengan benar.Java,
5680 BytesSeperti 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
atau versi 60 byte lamda
Versi golfdan ungolfed
atau 36 byte didefinisikan sebagai lambda
sumber
Java, 64 byte
Catatan
Tidak disatukan
Output dengan i = 9
sumber
Gores, 33 byte
Minta input, set
a
untuk input bulat, setb
danc
untuk perubahan masing-masing, lalu ucapkan keempat angka, dipisahkan dengan koma.sumber
Java 8 lambda,
109817975 karakterKarena ... Anda tahu ... bahkan Jawa bisa bermain golf ...
Lambda tidak masuk kelas:
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.
sumber
a->{
dan final}
untuk -5 byte.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.
Menentukan fungsi anonim. Cobalah seperti:
sumber
Python 3, 45 byte
Lihat kode ini berjalan di ideone.com
sumber
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
).sumber
Sebenarnya, 21 byte
Program ini mendeklarasikan fungsi yang melakukan operasi yang diperlukan pada nilai tumpukan teratas.
Cobalah online! (ekstra
.
di akhir mengevaluasi fungsi dan mencetak hasilnya)Penjelasan:
sumber
Mathcad, [tbd] byte
Mathcad codegolf byte equivalance belum ditentukan. Mengambil hitungan keyboard sebagai setara kasar, solusinya adalah sekitar 40 byte.
sumber
05AB1E , 15 byte
Kode:
Menggunakan pengodean CP-1252 . Cobalah online! .
sumber
Pyke, 11 byte
Coba di sini!
sumber
Javascript, 50 byte
Saya mengonversi solusi java saya ke JavaScript dan membukanya sedikit.
sumber
C ++ 0x -
95102185189109129 karakterMerosot
sumber
p+(p/3)*(2/3)
mana yangp+(2*p/9)
bukan(p+(p/3))*(2/3)
Erlang, 80 byte
Untuk menjalankan, simpan sebagai f.erl , kompilasi dan panggil fungsi. Ini akan mengembalikan daftar int:
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:
sumber
Erlang, 46 byte
Jawaban terinspirasi oleh @ fxk8y (Saya tidak dapat mengirim komentar ke jawabannya)
Anda juga dapat melihat hasilnya dengan:
sumber
Pyth, 20 byte
Penjelasan:
Tes di sini
sumber
Jolf, 17 byte
Menentukan fungsi
Ξ
. Dibutuhkan input secara implisit, sehingga juga berfungsi sebagai program lengkap. Coba di sini!sumber
Mathematica, 51 byte
Fungsi anonim yang sesuai dengan versi posting saat ini (pada saat posting), yang menyiratkan pembulatan pada setiap langkah.
FoldList
adalah operasi khas dalam pemrograman. Itu dipanggil sebagaiFoldList[f, list]
dan menerapkan fungsi dua argumenf
berulang 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 daftarFoldList
terdiri dari fungsi berturut-turut untuk diterapkan pada input.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.sumber
Dyalog APL , 33 byte
sumber
Desmos, 37 byte
Cobalah secara online
Yay untuk bahasa yang tidak konvensional!
sumber
CJam, 21 byte
Umpan balik diterima
Penjelasan
qi__
- Baca input sebagai integer dan duplikat dua kali3D/+mo
- Bagi satu instance dari input dengan 3, lalu tambahkan ke instance kedua untuk membuat y_2d3/*i
- Gandakan y, lalu kalikan dengan .6Sunting: Lupa membuat tiga ganda pertama, sehingga program rusak. Tetap.
sumber
Aksioma, 59 byte
uji
sumber
PHP, 60 Bytes
Cobalah online!
sumber
PHP, 67 byte
sumber