Numero de rotaciones

10

Tarea

Escriba una función o un programa para encontrar el número de rotaciones requeridas por una rueda para recorrer una distancia dada, dado su radio.

Reglas

La entrada puede ser 2 números racionales positivos y puede tomarse en cualquier formato conveniente.

Ambas entradas son de la misma unidad.

No debe haber ningún dígito 0-9 en su código.

La salida será un número entero (en caso de flotación, redondeado al infinito)

Este es el código de golf, por lo que el código más corto gana

Ejemplos

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
fuente
55
Probablemente debería agregar que los dígitos también están prohibidos en las opciones del compilador (o en cualquier otro lugar): si limita esta restricción al código solamente, con gcc podemos hacer algo como -DP=3.14en los indicadores del compilador, eso se definiría Pcomo una aproximación de pi, que probablemente sea no es lo que pretendías
Annyo

Respuestas:

6

MathGolf , 5 4 bytes

τ/╠ü

Pruébalo en línea!

Explicación

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

APL + WIN, 9 bytes

Solicitudes de radio seguido de distancia:

⌈⎕÷○r+r←⎕

Pruébalo en línea! Cortesía de Dyalog Classic.

Explicación:

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

⌈⎕÷ prompt for distance, divide by result above and take ceiling
Graham
fuente
⌈⎕÷○+⍨⎕Funciona para 7 bytes.
J. Sallé
@ J.Sallé Gracias, pero desafortunadamente mi antiguo intérprete APL + WIN no tiene el operador ⍨
Graham
4

Java 8, 32 30 bytes

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

Contiene no imprimible \u0002entre comillas simples.

Puerto de la respuesta Perl 6 de @jOKing .

Pruébalo en línea.

Kevin Cruijssen
fuente
¿Es ese el dígito '1' en su código? Creo que eso podría no estar permitido.
ouflak
44
Las apariencias @ouflak como se puede fijar como este .
Erik the Outgolfer
@ouflak Woops, fue un error bastante estúpido ... Usar el no imprimible para no usar el dígito 2, y luego solo usar el dígito 1... Afortunadamente, Erik tiene razón en que un simple unario negativo tiene el mismo efecto que +1(usado a menudo para deshacerse del paréntesis ya que lo negativo y lo unario tienen mayor prioridad que la mayoría de los otros operadores
Kevin Cruijssen
4

Perl 6 , 15 12 bytes

-3 bytes tjanks a nwellnhof recordándome sobre tau

*/*/τ+|$+!$

Pruébalo en línea!

Anónimo Cualquier lambda que use la fórmula (a/b/tau).floor+1. Tau es dos veces pi. Las dos variables anónimas $se obligan al número 0, que se utiliza para poner el número en el piso +|0(bit a bit o 0) y agregar uno +!$(más no cero).

Jo King
fuente
No debe haber ningún dígito 0-9 en su código.
Tito el
@Titus No puedo creer que haya olvidado eso. Gracias, arreglado!
Jo King
¿También se permiten dígitos en exponentes?
ouflak
3

Python 2 , 47 45 44 43 bytes

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

Pruébalo en línea!


  • -2 bytes, gracias a flawr
  • -1 byte, gracias a Jonathan Allan
TFeld
fuente
Dado que se ha garantizado que las entradas son (estrictamente) positivas y racionales, nunca llegamos al límite de requerir un número exacto de rotaciones, por lo que creo que podemos hacer l/(r+r)//pi+l/ly guardar un byte.
Jonathan Allan
@JonathanAllan Gracias :)
TFeld
2

C, 46 bytes

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

Soy nuevo en PPCG, por lo que no estoy seguro de si tengo que contar otras partes en el conteo de bytes, como el

include <math.h>

necesario para la función ceil, que aumentará el recuento a 64 bytes

bznein
fuente
Bienvenido a PPCG! Esta es una buena primera respuesta. Sí, debe contar #includey similares para el total de bytes. Siempre se agradece un enlace a un conjunto de pruebas en línea, aquí hay uno que puede incorporar libremente a su publicación: tio.run/…
OOBalance
@OOBalance Los dígitos no están permitidos en el código para este desafío;)
Annyo
@ Annyo Sabía que estaba olvidando algo :(
OOBalance
2

Catholicon , 8 bytes

ċ//ĊǓĊ`Ė

Explicación:

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

Nueva versión (pi incorporado hizo un byte, parámetros de división intercambiados), 5 bytes

ċ/π/Ǔ
Okx
fuente
2

J , 10 9 bytes

>.@%o.@+:

Pruébalo en línea!

Galen Ivanov
fuente
1
+1 por uso elegante del gancho diádico
Jonás
@ Jonás ¡Gracias!
Galen Ivanov
2

MathGolf , 6 5 bytes

∞/π/ü

Semi-puerto del comentario de @flawr en Python 2 .
Toma la entrada en el orden radius distance.

-1 byte porque ceilse acaba de agregar el builtin, reemplazando el floor+1.

Pruébalo en línea .

Explicación:

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

C (gcc) , 45 47 45 bytes

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

Una aproximación razonable de pi es 355/113. Dado que la circunferencia C = 2 * r * PI, en lugar de pi podemos usar tau, que por supuesto es ~ 710/113. 710 tiene los factores convenientes 2 * 5 * 71, que se expresa de forma compacta como 'G' * '\n'. Agregamos uno ( r/r) para forzar el redondeo al infinito.

Editar: Mi truco fue demasiado inteligente para su propio bien: por supuesto, falló si la distancia era un múltiplo de la circunferencia.

Pruébalo en línea!

gastropner
fuente
2

R , 39 32 bytes

-7 bytes Gracias a Giuseppe

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

Pruébalo en línea!

Siento que esto definitivamente se podría jugar al golf, pero ahora soy un poco vago para hacer algo al respecto

Sumner18
fuente
2

min , 16 bytes

/ tau / ceil int

Toma la distancia y el radio puestos en la pila en ese orden. Luego se divide por tau, redondea y hace int.

Panda0nEarth
fuente
1

Haskell, 25 bytes

f d r=ceiling(d/(r+r)/pi)
memorándum
fuente
Puede definir un operador en (!)lugar de fusarlo en ceiling$lugar de lo ceiling(..)que le ahorra 3 bytes: ¡ Pruébelo en línea!
ბიმო
1

Lua , 61 58 57 49 bytes

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

Pruébalo en línea!

Gracias a KirillL. -8 bytes.

ouflak
fuente
No sé mucho Lua (así que tal vez aún sea demasiado largo), pero parece ser más corto como una función: 49 bytes
Kirill L.
@ KirillL., Todavía estoy aprendiendo las reglas aquí. El desafío del OP es bastante abierto en la entrada. Entonces mi pregunta es, ¿tendríamos que contar su llamada al programa () contra el recuento de bytes? Si no, tu definitivamente se afeita una buena parte.
ouflak el
Un estilo de presentación bastante común aquí es una función anónima (para que no tengamos que contar el nombre, a menos que sea recursivo), que se obtiene por su valor de retorno. La sección de pie de página con llamadas a funciones e impresión real en la consola se usa básicamente para visualizar los resultados y no cuenta para su puntaje. Por cierto, puede agregar más de los ejemplos de prueba del OP al pie de página, para que puedan verse cómodamente de una vez. ¡Tenga en cuenta que, en algunos casos, un programa completo puede llegar a ser más golfista!
Kirill L.
1

Tcl , 50 bytes

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

Pruébalo en línea!


Tcl , 53 bytes

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

Pruébalo en línea!

¡La falta de una constante o función pi me hace perder la competencia de golf!

sergiol
fuente
¿Necesito eliminar el .0 al final de cada salida? ¡Me haría consumir más bytes!
sergiol
1
[incr i]es bastante inteligente pero creo que puedes usarlo $d/$do en su $r/$rlugar.
David
¡Ahorré algunos bytes gracias a la idea de @ david!
sergiol
1

PowerShell, 53 52 51 bytes

-1 byte gracias a @mazzy
-1 byte después de darme cuenta de que no necesito un punto y coma después del param()bloque

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

Pruébalo en línea!

Toma datos de dos parámetros de línea de comandos, distancia -dy radio -r.

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

JavaScript (nodo de Babel), 23 bytes

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

Pruébalo en línea!

Igor Sowinski
fuente
2
No debe haber ningún dígito 0-9 en su código.
Dennis
0

Clojure , 50 bytes

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

Una función anónima que acepta dos enteros ay bcomo argumentos: la distancia y el radio de la rueda, respectivamente.

Pruébalo en línea!

(count " ")2a2πb

TheGreatGeek
fuente
0

TI-Basic (serie 83), 12 bytes

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

Toma la entrada como una lista de radio y distancia en Ans: por ejemplo {0.9999:12.5663:prgmX,.

e^(ΔList(ln(Anstomará la razón de esas distancias y la min(convertirá en un número. Luego dividimos por Tmax, que es un parámetro gráfico que es igual a 2π por defecto. Finalmente, -int(-toma el techo.

Misha Lavrov
fuente