Количество оборотов


10

задача

Напишите функцию или программу, чтобы найти число оборотов, необходимое колесу для перемещения на заданное расстояние с учетом его радиуса.

правила

Ввод может быть 2 положительными рациональными числами и может быть взят в любом удобном формате.

Оба входа имеют одинаковую единицу.

В вашем коде не должно быть цифр 0-9.

Вывод будет целым числом (в случае с плавающей точкой, округлением до бесконечности)

Это код-гольф, поэтому выигрывает самый короткий код

Примеры

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

5
Вы, вероятно, должны добавить, что цифры также запрещены в опциях компилятора (или где-либо еще): если вы ограничите это ограничение только кодом, с помощью gcc мы можем сделать что-то вроде -DP=3.14флагов компилятора, что определит Pкак приближение числа pi, что, вероятно, не то, что вы хотели
— Annyo

Ответы:



4

APL + WIN, 9 байт

Запрашивает радиус с последующим расстоянием:

⌈⎕÷○r+r←⎕

Попробуйте онлайн! Предоставлено Dyalog Classic

Объяснение:

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

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

⌈⎕÷○+⍨⎕работает на 7 байтов.
— J. Sallé

@ J.Sallé Спасибо, но, к сожалению, мой древний интерпретатор APL + WIN не имеет оператора
— Грэм

4

Java 8, 32 30 байт

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

Содержит непечатные \u0002между одинарные кавычки.

Порт @jOKing 's Perl 6 ответа .

Попробуйте онлайн.


Это цифра «1» в вашем коде? Я думаю, что это может быть запрещено.
— ouflak

4
@ouflak Похоже, это можно исправить вот так .
— Эрик Outgolfer

@ouflak Woops, это была довольно глупая ошибка .. Использование непечатаемого текста, поэтому я не использую цифру 2, а затем просто использую цифру 1... К счастью, Эрик действительно прав, что простой отрицательный унарный имеет тот же эффект, что и +1(часто используется избавиться от скобок, поскольку отрицательные и унарные имеют более высокий приоритет, чем большинство других операторов).
— Кевин Круйссен

4

Perl 6 , 15 12 байт

-3 байта tjanks в nwellnhof, напоминающие мне о тау

*/*/τ+|$+!$

Попробуйте онлайн!

Аноним Любая лямбда, которая использует формулу (a/b/tau).floor+1. Тау два раза пи. Две анонимные переменные $приводятся к числу 0, которое используется для получения числа +|0(поразрядно или 0) и добавления одного +!$(плюс не ноль).


В вашем коде не должно быть цифр 0-9.
— Тит

@ Не могу поверить, что я забыл это. Спасибо, исправлено!
— Джо Кинг

Разрешены ли цифры в показателях?
— ouflak

3

Python 2 , 47 45 44 43 байта

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

Попробуйте онлайн!


  • -2 байта, благодаря flawr
  • -1 байт, спасибо Джонатану Аллану

Поскольку входные данные гарантированно являются (строго) положительными и рациональными, мы никогда не сталкиваемся с крайним случаем, когда требуется точное число вращений, поэтому я думаю, что мы можем сделать l/(r+r)//pi+l/lи сохранить байт.
— Джонатан Аллан

@JonathanAllan Спасибо :)
— TFeld




2

C, 46 байтов

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

Я новичок в PPCG, поэтому я не уверен, нужно ли мне подсчитывать другие части в числе байтов, такие как

include <math.h>

необходим для функции ceil, которая увеличит счет до 64 байтов


Добро пожаловать в PPCG! Это хороший первый ответ. Да, вам нужно посчитать #includeи т. Д. К общему количеству байтов. Всегда приветствуется ссылка на набор онлайн-тестов, вот что вы можете бесплатно добавить
— OOBalance

@OOBalance Цифры не допускаются в коде для этого вызова;)
— Annyo

@Annyo Я знал, что что-то забыл :(
— OOBalance

2

Католик , 8 байт

ċ//ĊǓĊ`Ė

Объяснение:

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

Новая версия (пи встроил один байт, параметры деления поменялись местами), 5 байт

ċ/π/Ǔ



2

MathGolf , 6 5 байт

∞/π/ü

Полупорт порта комментария @flawr 's Python 2 .
Принимает ввод в порядке radius distance.

-1 байт, потому ceilчто только что был добавлен встроенный, заменив floor+1.

Попробуйте онлайн .

Объяснение:

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

2

C (gcc) , 45 47 45 байтов

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

Разумное приближение к пи 355/113. Поскольку окружность C = 2 * r * PI, мы можем вместо числа pi использовать тау, что тогда, конечно, ~ 710/113. 710 имеет удобные коэффициенты 2 * 5 * 71, которые кратко выражаются как'G' * '\n' . Мы добавляем один ( r/r) для округления до бесконечности.

Редактировать: мой трюк был слишком умен для своего блага: он, конечно, заставил его потерпеть неудачу, если расстояние было кратно окружности.

Попробуйте онлайн!



2

Р , 39 32 байта

-7 байт благодаря Джузеппе

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

Попробуйте онлайн!

Я чувствую, что это определенно можно сыграть в гольф, но сейчас я немного ленив, чтобы что-то с этим сделать


2

мин , 16 байт

/ tau / ceil int

Берет расстояние и радиус, помещенные в стек в указанном порядке. Затем делит на тау, округляет и делает int.







1

Луа , 61 58 57 49 байт

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

Попробуйте онлайн!

Спасибо Кириллу. -8 байт.


Я не знаю много Lua (так что, может быть, он все еще слишком длинный), но, как представляется, он как функция короче: 49 байтов
— Кирилл Л.

@KirillL., Я все еще изучаю правила здесь. Задача ОП довольно открыта для ввода. Поэтому мой вопрос заключается в том, должны ли мы считать ваш программный вызов () по счетчику байтов? Если нет, то вы определенно сбрите хороший кусок.
— ouflak

Весьма распространенным стилем представления здесь является анонимная функция (так что нам не нужно считать имя, если она не является рекурсивной), которая выводит по возвращаемому значению. Раздел нижнего колонтитула с вызовами функций и фактической печатью на консоль затем в основном используется для визуализации результатов и не учитывается при подсчете очков. Кстати, вы можете добавить больше тестовых примеров OP в нижний колонтитул, чтобы их можно было удобно просматривать сразу. Обратите внимание, что в некоторых случаях полная программа может оказаться более удачной!
— Кирилл Л.


1

Tcl , 50 байт

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

Попробуйте онлайн!


Tcl , 53 байта

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

Попробуйте онлайн!

Отсутствие константы пи или функции заставляет меня проиграть в соревнованиях по гольфу!


Нужно ли удалять .0 в конце каждого выхода? Это заставило бы меня потреблять больше байтов!
— sergiol

1
[incr i]довольно умно, но я думаю, что вы можете использовать $d/$dили $r/$rвместо.
— Дэвид

Сохранено несколько байтов благодаря идее @ david!
— sergiol

1

PowerShell, 53 52 51 байт

-1 байт благодаря @mazzy
-1 байт после того, как я понял, что мне не нужна точка с запятой после param()блока

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

Попробуйте онлайн!

Принимает данные из двух параметров командной строки, расстояния -dи радиуса -r.


? param($d,$r);($a=[math])::ceiling($d/($r+$r)/$a::pi)
— Маззи


0

Clojure , 50 байтов

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

Анонимная функция, которая принимает два целых числа aиb в качестве аргументов: расстояние и радиус колеса, соответственно.

Попробуйте онлайн!

(count " ")оценивает 2, поэтому эта функция реализует⌈a2πб⌉,


0

TI-Basic (серия 83), 12 байт

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

Принимает ввод как список радиуса и расстояния в Ans: например {0.9999:12.5663:prgmX,.

e^(ΔList(ln(Ansвозьмет соотношение этих расстояний и min(превратит это в число. Затем мы делим на Tmax, что является графическим параметром, который по умолчанию равен 2π. Наконец-то -int(-берет потолок.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.