Diberikan angka kuadrat positif sebagai input. Keluarkan jumlah nilai antara input dan kuadrat tertinggi berikutnya.
Contoh
Input: 1
Output: 2
Alasan: Angka 2 dan 3 adalah antara 1 dan 4, kotak tertinggi berikutnya
Input: 4
Output: 4
Alasan: Angka 5, 6, 7, 8 adalah antara 4 dan 9
Jawaban:
Jelly , 2 byte
Cobalah online!
Port jawaban Mathematica saya (ambil akar kuadrat, lalu gandakan). Ini terbatas pada input yang dapat direpresentasikan secara tepat sebagai angka titik-mengambang. Jika itu masalah, solusi tiga-byte
ƽḤ
berfungsi untuk kuadrat sewenang-wenang (yang diposting Dennis pertama tetapi kemudian dihapus).sumber
Brain-Flak ,
38, 22 byteCobalah online!
Saya sangat bangga dengan jawaban ini. IMO, salah satu golf terbaik saya.
Bagaimana cara kerjanya?
Seperti yang ditunjukkan oleh banyak pengguna lain, jawabannya adalah sqrt (n) * 2 . Namun, menghitung akar kuadrat dalam brain-flak sangat tidak trivial. Karena kita tahu input akan selalu berbentuk kotak, kita dapat mengoptimalkan. Jadi kami menulis satu loop yang mengurangi
dari input, dan lacak berapa kali itu berjalan. Begitu mencapai 0, jawabannya hanyalah angka terakhir yang kita kurangi dikurangi satu.
Awalnya, saya telah mendorong penghitung ke tumpukan lainnya. Namun, kita dapat menggunakan tumpukan utama itu sendiri sebagai penghitung, dengan meningkatkan ketinggian tumpukan.
Dalam python-y pseudocode, ini pada dasarnya adalah algoritma berikut:
sumber
Mathematica, 8 byte
Cobalah online! (Menggunakan Matematika.)
Perbedaan antara n 2 dan (n + 1) 2 selalu 2n + 1 tetapi kami hanya ingin nilai di antara mereka tidak termasuk kedua ujungnya, yaitu 2n .
Ini berpotensi disingkat menjadi
2#^.5&
tergantung pada persyaratan presisi.sumber
Julia 0,5 , 8 byte
Cobalah online!
sumber
dc, 5
Cobalah online .
Sebelumnya saya salah membaca pertanyaan. Versi ini berfungsi untuk input bilangan bulat positif apa pun, bukan hanya kuadrat sempurna:
dc, 12
Cobalah online .
sumber
Jelly ,
76 byteSaya melewatkan peringatan "input akan menjadi persegi", tetapi ini akan bekerja untuk semua bilangan bulat non-negatif ... Martin Ender sudah memberikan solusi 2 byte .
Tautan monadik yang mengembalikan hitungan.
Cobalah online!
sumber
Japt ,
53 byteCobalah online!
Akar kuadrat dari input, lalu kalikan dengan 2.
sumber
Brain-Flak , 20 byte
Berteriaklah untuk jawaban DJMcMayhem yang luar biasa (albiet sedikit lebih lama) di sini
Cobalah online!
Penjelasan
Kode ini berfungsi dengan menghitung mundur dari angka kuadrat dengan kenaikan ganjil. Karena setiap kotak adalah jumlah angka ganjil berturut-turut, ini akan mencapai 0 dalam n 1/2 langkah. Kuncinya di sini adalah kita benar-benar melacak langkah-langkah kita dalam bilangan genap dan menggunakan statis
()
untuk mengimbanginya ke bilangan ganjil yang sesuai. Karena jawabannya 2n 1/2 , angka genap ini akan menjadi jawaban kami. Jadi ketika kita mencapai 0 kita menghapus nol dan jawaban kita ada di tumpukan.sumber
Mathematica, 17 byte
Cobalah online!
sumber
Oktaf ,
2510 byteCobalah online!
Disimpan 15 byte dengan menggunakan pendekatan Martin yang jauh lebih baik. Rentang terdiri dari
2*sqrt(n)
elemen. Fungsi tidak persis seperti itu: Mengalikan2
dengan akar input.sumber
Jelly , 7 byte
Cobalah online!
Penjelasan:
sumber
Python 3 , 16 byte
Cobalah online!
sumber
Ohm , 2 byte
Cobalah online!
sumber
JavaScript ES6, 10 byte
Cobalah online!
Math.sqrt
cukup lama itu sebabnya kami gunakan**.5
sumber
TI-Basic, 3 byte
Pendekatan paling sederhana ...
sumber
05AB1E , 2 byte
Cobalah online!
Port lain dari pengajuan Martin Ender ...
sumber
Tambahkan ++ ,
2220 byteCobalah online!
Apakah Anda ingin tahu cara kerjanya? Yah, jangan takut! Saya di sini untuk mendidik Anda!
sumber
MATL (
87 byte)Saya yakin ini dapat dikurangi secara signifikan (sunting: terima kasih Luis), tetapi solusi naif adalah:
Cobalah online!
Penjelasan:
sumber
2^
denganU
(dan ini berfungsi dalam versi 20.1.1 , yang merupakan yang terbaru pada saat tantangan, sehingga jawaban itu akan memenuhi syarat bahkan oleh standar lama kita)Pari / GP , 9 byte
Cobalah online!
sumber
PHP , 44 byte
Cobalah online!
sumber
Alice , 10 byte
Cobalah online!
Penjelasan
Sekali lagi, menghitung 2 sqrt (n) . Tata letak menghemat dua byte dari solusi standar:
Rincian kode, tidak termasuk pengalihan IP:
sumber
Pergi , 56 byte
Cobalah online!
sumber
QBIC ,
199 byteDisimpan banyak dengan menyalin pendekatan @ MartinEnder.
Sayangnya, tidak ada tautan TIO untuk QBIC.
Penjelasan
sumber
Sebenarnya , 3 byte
Cobalah online!
sumber
05AB1E ,
43 byteDicoret 4 masih 4: c
Cobalah online!
sumber
Retina , 21 byte
Cobalah online! Penjelasan: Bekerja dengan mengambil akar kuadrat dari nomor berdasarkan pada pemecah nomor segitiga @ MartinEnder. Setelah mencocokkan angka kuadrat,
$1
adalah perbedaan antara angka kuadrat dan angka kuadrat sebelumnya, secara unary. Kami ingin perbedaan berikutnya, tetapi eksklusif, yaitu hanya 1 lagi. Untuk mencapai ini, kami menghitung jumlah string null di$1
.sumber
T-SQL, 22 byte
Input adalah melalui tabel yang sudah ada sebelumnya, sesuai standar kami .
sumber
Java (OpenJDK 9) / JShell, 17 byte
Cobalah online!
Catatan: Ini perlu
import java.util.function.*;
masuk keIntFunction<T>
Java 8 atau Java 9, tetapijava.util.function
paket diimpor secara default di JShell.sumber
Haskell, 9 byte
Cobalah online
Input dan output akan diperlakukan sebagai nilai Float.
sumber
Noether, 7 byte
Coba di sini!
Sama seperti setiap jawaban lainnya: menghasilkan dua kali akar kuadrat.
sumber