Jumlah rotasi

10

Tugas

Tulis fungsi atau program untuk menemukan jumlah rotasi yang diperlukan oleh roda untuk menempuh jarak tertentu, dengan radiusnya.

Aturan

Input dapat berupa 2 angka rasional positif dan dapat diambil dalam format apa pun yang nyaman.

Kedua input memiliki unit yang sama.

Tidak boleh ada angka 0-9 dalam kode Anda.

Output akan berupa bilangan bulat (jika mengambang, bulat hingga tak terbatas)

Ini adalah kode-golf sehingga kode terpendek menang

Contohnya

distance radius  output
10       1       2
50       2       4
52.22    4       3
3.4      0.08    7
12.5663  0.9999  3
Vedant Kandoi
sumber
5
Anda mungkin harus menambahkan bahwa digit juga dilarang dalam opsi kompiler (atau di mana pun): jika Anda membatasi batasan ini hanya untuk kode, dengan gcc kita dapat melakukan sesuatu seperti -DP=3.14pada flag compiler, yang akan didefinisikan Psebagai perkiraan pi, yang mungkin merupakan bukan yang Anda maksud
Annyo

Jawaban:

6

MathGolf , 5 4 byte

τ/╠ü

Cobalah online!

Penjelasan

τ      Push tau (2*pi)
 /     Divide the first argument (total distance) by tau
  ╠    Reverse divide (computes (distance/tau)/radius)
   ü   Ceiling
maks
sumber
4

APL + WIN, 9 byte

Anjuran untuk radius diikuti oleh jarak:

⌈⎕÷○r+r←⎕

Cobalah online! Atas perkenan Dyalog Classic

Penjelasan:

○r+r←⎕ prompt for radius and double it and multiply by pie

⌈⎕÷ prompt for distance, divide by result above and take ceiling
Graham
sumber
⌈⎕÷○+⍨⎕bekerja selama 7 byte.
J. Sallé
@ J.Sallé Terima kasih tapi sayangnya penerjemah APL + WIN saya yang lama tidak memiliki operator ⍨
Graham
4

Java 8, 32 30 byte

a->b->-~(int)(a/b/Math.PI/'')

Berisi yang tidak dapat dicetak di \u0002antara tanda kutip tunggal.

Port of @jOKing 's Perl 6 menjawab .

Cobalah online.

Kevin Cruijssen
sumber
Apakah itu angka '1' dalam kode Anda? Saya pikir itu mungkin tidak diizinkan.
ouflak
4
@ouflak Sepertinya bisa diperbaiki seperti ini .
Erik the Outgolfer
@ouflak Woops, itu adalah kesalahan yang sangat bodoh .. Menggunakan yang tidak patut jadi saya tidak menggunakan digit 2, dan kemudian hanya menggunakan digit 1... Untungnya Erik memang benar bahwa unary negatif sederhana memiliki efek yang sama seperti +1(sering digunakan untuk menghilangkan tanda kurung karena negatif dan unary memiliki prioritas lebih tinggi daripada kebanyakan operator lain).
Kevin Cruijssen
4

Perl 6 , 15 12 byte

-3 byte tjanks untuk nwellnhof mengingatkan saya tentang tau

*/*/τ+|$+!$

Cobalah online!

Anonim Apapun lambda yang menggunakan formula (a/b/tau).floor+1. Tau dua kali pi. Dua variabel anonim $dipaksa untuk nomor 0, yang digunakan untuk lantai nomor +|0(bitwise atau 0) dan tambahkan satu +!$(ditambah bukan nol).

Jo King
sumber
Tidak boleh ada angka 0-9 dalam kode Anda.
Titus
@Itus saya tidak percaya saya lupa itu. Terima kasih sudah diperbaiki!
Jo King
Apakah angka dalam eksponen juga diperbolehkan?
ouflak
3

Python 2 , 47 45 44 43 byte

lambda l,r:l/(r+r)//math.pi+l/l
import math

Cobalah online!


  • -2 byte, terima kasih kepada flawr
  • -1 byte, terima kasih kepada Jonathan Allan
TFeld
sumber
Karena input telah dijamin baik (benar-benar) positif dan rasional, kami tidak pernah mencapai kasus tepi yang membutuhkan jumlah rotasi yang tepat, jadi saya pikir kami dapat melakukan l/(r+r)//pi+l/ldan menghemat satu byte.
Jonathan Allan
@JonathanAllan Terima kasih :)
TFeld
2

Ruby , 29 byte

->l,r{(l/Math::PI/r+=r).ceil}

Cobalah online!

GB
sumber
2

C, 46 byte

f(float a,float b){return ceil(a/(b+b)/M_PI);}

Saya baru untuk PPCG, jadi saya tidak yakin apakah saya harus menghitung bagian lain dalam jumlah byte, seperti

include <math.h>

diperlukan untuk fungsi ceil, yang akan naik hitungan menjadi 64 byte

bznein
sumber
Selamat datang di PPCG! Ini jawaban pertama yang bagus. Ya, Anda perlu menghitung #includedan sejenisnya terhadap total byte Anda. Tautan ke test suite online selalu dihargai, inilah yang Anda bebas untuk memasukkannya ke dalam posting Anda: tio.run/…
OOBalance
@OOBalance Digit tidak diperbolehkan dalam kode untuk tantangan ini;)
Annyo
@Annyo aku tahu aku lupa sesuatu :(
OOBalance
2

Catholicon , 8 byte

ċ//ĊǓĊ`Ė

Penjelasan:

  /ĊǓĊ    divide the first input by the doubled second input
 /    `Ė  divide that by pi
ċ         ceil

Versi baru (pi builtin dibuat satu byte, parameter pembagian bertukar), 5 byte

ċ/π/Ǔ
Okx
sumber
2

J , 10 9 byte

>.@%o.@+:

Cobalah online!

Galen Ivanov
sumber
1
+1 untuk penggunaan kait diad yang elegan
Jonah
@Jonah Terima kasih!
Galen Ivanov
2

MathGolf , 6 5 byte

∞/π/ü

Semi-port dari komentar Python 2 @ flawr .
Mengambil input dalam urutan radius distance.

-1 byte karena ceilbuiltin baru saja ditambahkan, menggantikan floor+1.

Cobalah online .

Penjelasan:

        # Double the first (implicit) input
 /       # Divide the second (implicit) input by it
  π/     # Divide it by PI
    ü    # Ceil (and output implicitly)
Kevin Cruijssen
sumber
2

C (gcc) , 45 47 45 byte

f(d,r,R)float d,r;{R=ceil(d/r/'G'/'\n'*'q');}

Perkiraan pi yang masuk akal adalah 355/113. Karena keliling C = 2 * r * PI, kita bisa bukannya pi menggunakan tau, yang tentu saja ~ 710/113. 710 kebetulan memiliki faktor nyaman 2 * 5 * 71, yang secara ringkas dinyatakan sebagai 'G' * '\n'. Kami menambahkan satu ( r/r) untuk memaksa pembulatan hingga tak terbatas.

Sunting: Trik saya terlalu pintar untuk kebaikannya sendiri: tentu saja membuatnya gagal jika jaraknya kelipatan dari kelilingnya.

Cobalah online!

gastropner
sumber
2

R , 39 32 byte

-7 byte Berkat Giuseppe

function(d,r)ceiling(d/(r+r)/pi)

Cobalah online!

Saya merasa ini pasti golf, tapi saya agak malas sekarang untuk melakukan apa-apa

Sumner18
sumber
2

min , 16 byte

/ tau / ceil int

Mengambil jarak dan jari-jari diletakkan di tumpukan dalam urutan itu. Kemudian membaginya dengan tau, bulat, dan membuat int.

Panda0nEarth
sumber
1

JavaScript (Babel Node) , 25 byte

-2 byte menggunakan @ flawr comment = D. -1 dari @Kevin. -7 dari @Shaggy

a=>b=>-~(a/(b+b)/Math.PI)

Cobalah online!

Luis felipe De jesus Munoz
sumber
Hanya a=>b=>Math.ceil(a/(b+b)/Math.PI)32 byte. :)
Kevin Cruijssen
25 byte
Shaggy
1

Haskell, 25 byte

f d r=ceiling(d/(r+r)/pi)
memo
sumber
Anda dapat menetapkan operator (!)alih-alih fdan menggunakan ceiling$alih-alih ceiling(..)yang menghemat 3 byte: Coba online!
ბიმო
1

Lua , 61 58 57 49 byte

function(s,r)return math.ceil(s/(r+r)/math.pi)end

Cobalah online!

Terima kasih untuk KirillL. -8 byte.

ouflak
sumber
Saya tidak tahu banyak Lua (jadi mungkin masih terlalu lama), tetapi tampaknya lebih pendek sebagai fungsi: 49 byte
Kirill L.
@ KirillL., Saya masih belajar aturan di sini. Tantangan OP cukup terbuka pada input. Jadi pertanyaan saya adalah, apakah kita harus menghitung panggilan program Anda () terhadap jumlah byte? Jika tidak, Anda pasti memotong sepotong yang bagus.
ouflak
Gaya penyerahan yang cukup umum di sini adalah fungsi anonim (sehingga kita tidak perlu menghitung nama, kecuali itu bersifat rekursif), yang ditampilkan berdasarkan nilai baliknya. Bagian footer dengan panggilan fungsi dan pencetakan aktual ke konsol pada dasarnya digunakan untuk memvisualisasikan hasil dan tidak diperhitungkan dalam skor Anda. BTW, Anda dapat menambahkan lebih banyak contoh uji OP ke footer, sehingga dapat dengan mudah dilihat sekaligus. Perhatikan bahwa dalam beberapa kasus program penuh sebenarnya bisa berubah menjadi golfier!
Kirill L.
1

Tcl , 50 byte

proc N d\ r {expr ceil($d/(($r+$r)*acos(-$r/$r)))}

Cobalah online!


Tcl , 53 byte

proc N d\ r {expr ceil($d/(($r+$r)*acos(-[incr i])))}

Cobalah online!

Kurangnya konstanta pi atau fungsi membuat saya kehilangan kompetisi golf!

sergiol
sumber
Apakah saya perlu menghapus .0 di akhir setiap output? Itu akan membuat saya mengkonsumsi lebih banyak byte!
sergiol
1
[incr i]cukup pintar tapi saya pikir Anda bisa menggunakan $d/$datau $r/$rsebaliknya.
david
Menyimpan beberapa byte berkat ide @ david!
sergiol
1

PowerShell, 53 52 51 byte

-1 byte terima kasih kepada @mazzy
-1 byte setelah saya menyadari saya tidak perlu titik koma setelah param()blok

param($d,$r)($a=[math])::ceiling($d/($r+$r)/$a::pi)

Cobalah online!

Mengambil input dari dua parameter baris perintah, jarak -ddan jari-jari -r.

Gabriel Mills
sumber
? param($d,$r);($a=[math])::ceiling($d/($r+$r)/$a::pi)
mazzy
0

JavaScript (Babel Node), 23 byte

s=>r=>-~(s/2/r/Math.PI)

Cobalah online!

Igor Sowinski
sumber
2
Tidak boleh ada angka 0-9 dalam kode Anda.
Dennis
0

Clojure , 50 byte

(fn[a b](int(Math/ceil(/ a Math/PI(count"  ")b))))

Fungsi anonim yang menerima dua bilangan bulat adan bsebagai argumen: jarak dan jari-jari roda masing-masing.

Cobalah online!

(count " ")2a2πb

TheGreatGeek
sumber
0

TI-Basic (83 series), 12 byte

-int(-Tmax⁻¹min(e^(ΔList(ln(Ans

Mengambil input sebagai daftar radius dan jarak di Ans: misalnya {0.9999:12.5663:prgmX,.

e^(ΔList(ln(Ansakan mengambil rasio jarak tersebut, dan min(mengubahnya menjadi angka. Kemudian kita bagi dengan Tmax, yang merupakan parameter grafik yang sama dengan 2π secara default. Akhirnya, -int(-ambil plafon.

Misha Lavrov
sumber