Số vòng quay


10

Bài tập

Viết hàm hoặc chương trình để tìm số vòng quay cần thiết của một bánh xe để đi được một khoảng cách nhất định, với bán kính của nó.

Quy tắc

Đầu vào có thể là 2 số hữu tỷ dương và có thể được lấy ở bất kỳ định dạng thuận tiện nào.

Cả hai đầu vào là cùng một đơn vị.

Không được có bất kỳ chữ số 0-9 nào trong mã của bạn.

Đầu ra sẽ là một số nguyên (trong trường hợp nổi, tròn đến vô cùng)

Đây là môn đánh gôn nên mã ngắn nhất sẽ thắng

Ví dụ

distance radius  output
10       1       2
50       2       4
52.22    4       3
3.4      0.08    7
12.5663  0.9999  3

5
Có lẽ bạn nên thêm các chữ số đó cũng bị cấm trong các tùy chọn trình biên dịch (hoặc bất cứ nơi nào khác): nếu bạn giới hạn ràng buộc này chỉ với mã, với gcc, chúng ta có thể làm một cái gì đó giống như -DP=3.14trong các cờ biên dịch, có thể định nghĩa Plà xấp xỉ pi, có lẽ là không phải những gì bạn dự định
Annyo

Câu trả lời:



4

APL + THẮNG, 9 byte

Nhắc bán kính theo sau khoảng cách:

⌈⎕÷○r+r←⎕

Hãy thử trực tuyến! Lịch sự của Dyalog Classic

Giải trình:

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

⌈⎕÷ prompt for distance, divide by result above and take ceiling

⌈⎕÷○+⍨⎕hoạt động trong 7 byte.
J. Sallé

@ J.Sallé Cảm ơn nhưng thật không may, thông dịch viên APL + WIN cổ của tôi không có nhà điều hành
Graham

4

Java 8, 32 30 byte

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

Chứa không thể in \u0002giữa các dấu ngoặc đơn.

Cổng của câu trả lời Perl 6 của @jOKing .

Hãy thử trực tuyến.


Đó có phải là chữ số '1' trong mã của bạn không? Tôi nghĩ rằng có thể không được phép.
ngerak

4
@urdyak Hình như nó có thể được sửa như thế này .
Erik the Outgolfer

@ouflak Woops, đó là một sai lầm khá ngớ ngẩn .. Sử dụng chưa in ra vì vậy tôi không sử dụng các chữ số 2, và sau đó chỉ cần sử dụng chữ số 1... May mắn Erik thực sự là đúng rằng một âm đơn giản nhất nguyên có tác dụng tương tự như +1(thường được sử dụng để thoát khỏi dấu ngoặc đơn vì phủ định và đơn nguyên có quyền ưu tiên cao hơn hầu hết các toán tử khác).
Kevin Cruijssen

4

Perl 6 , 15 12 byte

-3 byte tjanks để nwellnhof nhắc nhở tôi về tau

*/*/τ+|$+!$

Hãy thử trực tuyến!

Vô danh Bất cứ điều gì lambda sử dụng công thức (a/b/tau).floor+1. Tàu là hai lần pi. Hai biến ẩn danh $được ép buộc với số 0, được sử dụng để chia số +|0(bitwise hoặc 0) và thêm một biến +!$(cộng không bằng 0).


Không được có bất kỳ chữ số 0-9 nào trong mã của bạn.
Tít

@Titus Tôi không thể tin rằng tôi đã quên điều đó. Cảm ơn, đã sửa!
Jo King

Các chữ số trong số mũ cũng được cho phép?
ngerak

3

Python 2 , 47 45 44 43 byte

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

Hãy thử trực tuyến!


  • -2 byte, nhờ flawr
  • -1 byte, nhờ Jonathan Allan

Vì các yếu tố đầu vào đã được đảm bảo là cả hai (hoàn toàn) tích cực và hợp lý, chúng tôi không bao giờ gặp phải trường hợp yêu cầu số vòng quay chính xác, vì vậy tôi nghĩ rằng chúng tôi có thể làm l/(r+r)//pi+l/lvà lưu một byte.
Jonathan Allan





2

C, 46 byte

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

Tôi mới sử dụng PPCG, vì vậy tôi không chắc chắn tôi phải đếm các phần khác trong số byte, chẳng hạn như

include <math.h>

cần thiết cho chức năng trần, sẽ tăng số lượng lên 64 byte


Chào mừng đến với PPCG! Đây là một câu trả lời đầu tiên tốt đẹp. Có, bạn cần phải đếm #includevà tương tự đối với tổng byte của bạn. Liên kết đến bộ kiểm tra trực tuyến luôn được đánh giá cao, đây là một liên kết bạn có thể tự do kết hợp vào bài đăng của mình: tio.run/ mẹo
OOBalance

@OOBalance Chữ số không được phép trong mã cho thử thách này;)
Annyo

@Annyo Tôi biết mình đã quên một điều gì đó :(
OOBalance

2

Catholicon , 8 byte

ċ//ĊǓĊ`Ė

Giải trình:

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

Phiên bản mới (pi dựng sẵn một byte, tham số chia đổi), 5 byte

ċ/π/Ǔ




2

C (gcc) , 45 47 45 byte

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

Một xấp xỉ hợp lý của pi là 355/113. Vì chu vi C = 2 * r * PI, chúng ta có thể thay vì pi sử dụng tau, điều đó dĩ nhiên là ~ 710/113. 710 xảy ra có các yếu tố thuận tiện 2 * 5 * 71, được thể hiện nhỏ gọn như 'G' * '\n'. Chúng ta thêm một ( r/r) để buộc làm tròn đến vô cùng.

Chỉnh sửa: Thủ thuật của tôi quá thông minh vì lợi ích của chính nó: tất nhiên nó đã làm cho nó thất bại nếu khoảng cách là bội số của chu vi.

Hãy thử trực tuyến!



2

R , 39 32 byte

-7 byte Nhờ Giuseppe

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

Hãy thử trực tuyến!

Tôi cảm thấy như điều này chắc chắn có thể được chơi gôn, nhưng tôi hơi lười biếng để làm bất cứ điều gì về nó


2

tối thiểu 16 byte

/ tau / ceil int

Lấy khoảng cách và bán kính đặt trên ngăn xếp theo thứ tự đó. Sau đó chia cho tau, làm tròn và làm cho int.







1

Lua , 61 58 57 49 byte

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

Hãy thử trực tuyến!

Cảm ơn KirillL. -8 byte.


Tôi không biết nhiều về Lua (vì vậy có lẽ nó vẫn còn quá dài), nhưng nó dường như ngắn hơn dưới dạng hàm: 49 byte
Kirill L.

@KirillL., Tôi vẫn đang học các quy tắc ở đây. Thách thức của OP khá mở đối với đầu vào. Vì vậy, câu hỏi của tôi là, chúng ta sẽ phải đếm cuộc gọi chương trình của bạn () so với số byte? Nếu không, bạn chắc chắn sẽ loại bỏ một đoạn tốt đẹp.
ngerak

Một kiểu đệ trình khá phổ biến ở đây là một hàm ẩn danh (để chúng ta không phải đếm tên, trừ khi nó được đệ quy), xuất ra theo giá trị trả về của nó. Phần chân trang với các lệnh gọi chức năng và in thực tế đến bàn điều khiển về cơ bản được sử dụng để trực quan hóa kết quả và không được tính vào điểm số của bạn. BTW, bạn có thể thêm nhiều ví dụ thử nghiệm của OP vào chân trang, để chúng có thể được xem một cách thuận tiện cùng một lúc. Lưu ý rằng trong một số trường hợp, một chương trình đầy đủ thực sự có thể trở thành golfer!
Kirill L.


1

Tcl , 50 byte

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

Hãy thử trực tuyến!


Tcl , 53 byte

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

Hãy thử trực tuyến!

Thiếu một hằng số pi hoặc chức năng làm cho tôi thua cuộc thi golf!


Tôi có cần xóa 0 ở cuối mỗi đầu ra không? Nó sẽ làm cho tôi tiêu thụ nhiều byte hơn!
sergiol

1
[incr i]là khá thông minh nhưng tôi nghĩ bạn có thể sử dụng $d/$dhoặc $r/$rthay vào đó.
david

Đã lưu một số byte nhờ ý tưởng của @ david!
sergiol

1

PowerShell, 53 52 51 byte

-1 byte nhờ @mazzy
-1 byte sau khi tôi nhận ra mình không cần dấu chấm phẩy sau param()khối

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

Hãy thử trực tuyến!

Lấy đầu vào từ hai tham số dòng lệnh, khoảng cách -dvà bán kính -r.


? param($d,$r);($a=[math])::ceiling($d/($r+$r)/$a::pi)
mê mẩn


0

Clojure , 50 byte

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

Một hàm ẩn danh chấp nhận hai số nguyên ablàm đối số: khoảng cách và bán kính của bánh xe, tương ứng.

Hãy thử trực tuyến!

(count " ")2một2πb


0

TI-Basic (sê-ri 83), 12 byte

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

Lấy đầu vào dưới dạng danh sách bán kính và khoảng cách trong Ans: ví dụ : {0.9999:12.5663:prgmX.

e^(ΔList(ln(Anssẽ lấy tỷ lệ của những khoảng cách đó, và min(biến nó thành một con số. Sau đó, chúng tôi chia cho Tmax, đó là một tham số đồ thị bằng 2π theo mặc định. Cuối cùng, -int(-lấy trần.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.