Selamat datang di penggiling.
Tugas Anda adalah membuat batu besar menjadi batu kecil dengan menggilingnya.
Ambil input batu besar n > 3
dan giling.
Lanjutkan untuk menggiling batu dengan membuangnya ke penggiling sampai ukuran semua batu 2
.
batu selalu digiling menjadi sama rata. Jika hasil penggilingan aneh, ambil hasil - 1.
Cetak output masing-masing penggilingan saat Anda melanjutkan.
Contohnya
memasukkan: 5
keluaran: 22
Hasilnya adalah dua batu ukuran 2
memasukkan: 50
keluaran:
2424 //two rocks of size 24
12121212 //four rocks of size 12
66666666 //8 rocks of size 6
2222222222222222
hasilnya adalah 16 batu ukuran 2
memasukkan: 30
keluaran:
1414
6666
22222222
hasilnya adalah 8 batu ukuran 2
Ini adalah kode-golf sehingga kode terpendek menang! Selamat bersenang-senang dan semoga berhasil!
code-golf
math
arithmetic
jacksonecac
sumber
sumber
Jawaban:
TSQL,
6159 byteCobalah
sumber
SAPI,
297291 byteCobalah online!
Kode mencetak setiap angka pada barisnya sendiri, dan memisahkan iterasi dengan baris baru tambahan. Ini juga mencetak iterasi pertama dengan sendirinya, diikuti oleh baris baru. Jadi input 5 akan memberikan output yang terlihat seperti
5 2 2
kecuali dengan baris baru, bukan spasi. Contoh output untuk50
diberikan di bawah ini.Pohon penjelasan:
Output sampel untuk input 50:
sumber
05AB1E ,
1211 byteCobalah online!
Penjelasan
sumber
Python 2,
5553 byteBagi dengan 4 dan shift kiri oleh 1 untuk mendapatkan divisi khusus
sumber
Haskell,
75 71 60 5047 byteCobalah online! Sunting: Karena output sekarang diizinkan menjadi daftar termasuk input,
1013 byte dapat disimpan.Pemakaian:
Versi 60 byte asli:
Cobalah online! Terima kasih kepada Christian Sievers karena menunjukkan formula yang lebih pendek.
Pemakaian:
sumber
z<-2*div n 4
.JavaScript (ES6)
645957 Bytessumber
f=
tetapi hanya untuk demoPython 2,
4847 bytesumber
s=s/4*2
akan bekerja untuk menghemat 1 byte.Java, 85 byte
Menguji dan tidak berkhianat
Catatan: Saya tidak tahu mengapa, Ideone terus memberikan kesalahan internal, jadi mengujinya adalah masalah. Untuk mengujinya, cukup salin / tempel dan jalankan di IDE Java standar Anda. (Ini berfungsi di sana, saya memastikannya;))
sumber
n=n/4*2
tipuanmu. :)C #,
888683 byteDisimpan 3 byte berkat Skorm
Menyimpan byte lain dengan mengubah
while
kefor
loop yang menyertakan deklarasi variabelDisimpan 1 byte berkat Yodle
Fungsi anonim yang mengembalikan string yang terdiri dari hasil masing-masing penggilingan.
Program penuh dengan metode ungolfed dan uji kasus [sebelum edit terakhir!]:
sumber
for(i=0;i++<c;)
for (i = 0; i++ < c;)
n=>{var r="";for(int i,c=2;n>2;c*=2,r+="\n")for(i=0,n=n/4*2;i++<c;)r+=n;return r;}
CJam , 21 byte
Cobalah online! (Sebagai suite uji.)
Penjelasan
sumber
Pyth,
181613 byte*
\n
adalahpenjelasan baris baru :
Coba di sini
sumber
MATL , 13 byte
Cobalah online!
sumber
PHP,
726764 byteMengambil argumen dari baris perintah. Jalankan dengan
-r
.sumber
Jelly ,
13 1211 byteTryItOnline!
Catatan: OP menyatakan bahwa input mungkin juga dalam output.
Bagaimana?
Versi tanpa input ditampilkan untuk 12 byte:
:4Ḥḟ0x2µÐĿḊG
sumber
Perl,
403530 + 1 = 31 byteJalankan dengan
-n
bendera-4 byte terima kasih kepada @Dada
Cobalah online!
Perl secara otomatis membaca input ke dalam variabel
$_
ketika-n
diatur.$.
adalah variabel khusus yang diset1
pada awal program oleh penerjemah, jadi saya dapat menggunakannya sebagai basis untuk penggandaan. Setiap iterasi dariwhile
loop, bit-bergeser$_
ke bawah dan melakukan logika AND terhadap yang negatif itu sendiri dikurangi satu untuk membatalkan bit yang.sumber
perl -nE 'say$_ x($.*=2)while$_=$_>>1&~1'
(mungkin ini bisa golf lebih jauh, saya tidak menghabiskan banyak waktu di atasnya).PowerShell 3+,
5854 byteTerima kasih TimmyD karena telah menyelamatkan saya 4 byte!
Slightly Ungolfed (pemformatan)
Penjelasan
Saya menggunakan pembagian yang sama dengan 4 kali lipat dengan 2 trik seperti banyak jawaban lainnya, tetapi saya mengalami masalah. PowerShell mengonversi angka menjadi floating point jika diperlukan selama pembagian, dan untuk bermain golf itu menjengkelkan karena
$v/4*2
menjadi sesuatu yang tidak disukai[int]($v/4)*2
. Saya berhasil menggunakan bitshifting untuk divisi dengan-shr
.Untuk menghitung berapa kali untuk mencetak iterasi saya hanya mengambil
(2^$i)-1
yang berfungsi dengan baik dan memiliki efek tambahan meninggalkan nilai input. Mencoba untuk hanya mengalikan dengan 2 itu bermasalah karena mulai dari 0 membuatnya sulit untuk meningkatkan nilai hanya dengan$i*=2
dan mulai dari 1 memerlukan terlalu banyak koreksi untuk mendapatkan angka yang benar.Karena PowerShell tidak memiliki operator untuk itu, dan saya ingin menghindarinya
[Math]::Pow()
, saya mengandalkan bitshifting lagi untuk kekuatan 2 saya.sumber
Python 2, 47 Bytes
Karena OP mengatakan bahwa array 1D yang memasukkan input baik-baik saja saya telah datang dengan fungsi rekursif ini, yang sayangnya hanya terkait dengan pemenang Python saat ini.
sumber
f=lambda r,n=1:[r]*n+(r>3and f(r/4*2,n*2)or[])
untuk 46Perl, 47 byte
Tidak ada opsi baris perintah, kali ini (tidak biasa untuk Perl). Gagasan dasarnya adalah karena semua batu pada langkah tertentu memiliki ukuran yang sama, kami hanya merekam ukuran (dalam
$a
) dan nomor (dalam$_
), daripada mencatat seluruh daftar. Saya tidak bisa menemukan cara untuk menyingkirkan ruang (atau+
) setelahsay
; Anda dapat memindahkan2*
tetapi tidak akan diuraikan dengan benar jika diikuti oleh tanda kurung buka.Saya tidak bisa menahan perasaan bahwa ini tidak bisa diperbaiki, tetapi saya tidak bisa melihat caranya.
sumber
die
jelas terasa kurang optimal. Tapi kita masih perlu cara untuk memeriksa apakah kita perlu berhenti atau tidak -> solusi adalah dengan menggunakan sementara bukanfor
:while$a>1
. Tetapi kita perlu menemukan pengganti untuk$_
: variabel unit mana pun dapat melakukannya: ganti1<<$_
oleh1<<++$x
. Jadi sekarang$_
bebas untuk digunakan, kita dapat menggunakan-n
dan mengganti setiap$a
dengan$_
, dan instruksi pertama menjadi$_>>=1
. Karena kita sudah-n
,$.
sudah diatur, jadi kita bisa ganti1<<++$l
dengan$.*=2
.perl -nE '$_>>=1;say 2*($_>>=1)x($.*=2)while$_>1'
(39 byte). Kemudian perhatikan bahwa$_>>=1
dilakukan dua kali, sehingga kita dapat mencoba untuk menyingkirkan satu (yang pertama). Mencoba menyingkirkannya, saya dapatsay$_ x($.*=2)while($_>>=1)/2>1
(menempatkan keduanya dalamwhile
kondisi). Tetapi hasilnya salah ($_
bisa ganjil), dan mencoba memastikan itu genap, saya berakhir denganwhile$_=$_>>1&~1
. Jadi kodenya sekarangsay$_ x($.*=2)while($_=$_>>1&~1)
.Vim
6154 byteTryItOnline!
Tidak dapat dicetak:
Untungnya vim otomatis terpotong pada x / 2.
sumber
JavaScript,
71635958 BytesYah, saya datang dengan solusi javascript ini. Benar-benar baru dalam bermain golf, tetapi saya menganggap ini tantangan yang menyenangkan
Disimpan 4 byte berkat saran Titus menggunakan for for loop.
dasar tanpa serigala:
Versi golf
Saya terbuka untuk saran bagaimana memperbaikinya / belajar golf
input tester
Tampilkan cuplikan kode
sumber
for
lingkaran:for(o=i=30;i>2;console.log(...)){...}
. Dan dengan menggabungkan dua tugas penggilingan menjadi satu, Anda dapat menghapus kawat gigi:i=i/4<<1;
(-5). Tidak yakin apakahi=i/4*2;
akan melakukan hal yang sama.BASH, 81 byte
sumber
Swift, 84 Bytes
Tidak disatukan
sumber
Befunge, 45 byte
Cobalah online!
Penjelasan
sumber
Javascript, 106 byte
Golf kode pertama, kupikir aku harus mencobanya. (Tidak terlalu bagus).
Tidak dijinakkan:
sumber