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

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


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.


¿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).


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

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


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

ċ/π/Ǔ




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!



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


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.







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.


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!


¿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.


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


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


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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.