Anzahl der Umdrehungen


10

Aufgabe

Schreiben Sie eine Funktion oder ein Programm, um die Anzahl der Umdrehungen zu ermitteln, die ein Rad aufgrund seines Radius benötigt, um eine bestimmte Strecke zurückzulegen.

Regeln

Die Eingabe kann aus 2 positiven rationalen Zahlen bestehen und in jedem geeigneten Format erfolgen.

Beide Eingänge sind von derselben Einheit.

Ihr Code darf keine Ziffern 0-9 enthalten.

Die Ausgabe ist eine Ganzzahl (im Fall von float rund bis unendlich)

Dies ist Code-Golf, also gewinnt der kürzeste Code

Beispiele

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

5
Sie sollten wahrscheinlich hinzufügen, dass Ziffern auch in Compiler-Optionen (oder anderswo) verboten sind: Wenn Sie diese Einschränkung nur auf Code beschränken, können wir mit gcc so etwas wie -DP=3.14in Compiler-Flags tun , die Pals Annäherung an pi definiert werden, was wahrscheinlich der Fall ist nicht das, was Sie beabsichtigt hatten
Annyo

Antworten:



4

APL + WIN, 9 Bytes

Eingabeaufforderung für den Radius gefolgt von der Entfernung:

⌈⎕÷○r+r←⎕

Probieren Sie es online aus! Mit freundlicher Genehmigung von Dyalog Classic

Erläuterung:

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

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

⌈⎕÷○+⍨⎕funktioniert für 7 Bytes.
J. Sallé

@ J.Sallé Danke, aber leider hat mein alter APL + WIN-Interpreter nicht den Operator ⍨
Graham

4

Java 8, 32 30 Bytes

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

Enthält \u0002zwischen den einzelnen Anführungszeichen nicht druckbare Zeichen .

Port von @jOKings Perl 6 Antwort .

Probieren Sie es online aus.


Ist das die Ziffer '1' in Ihrem Code? Ich denke, das ist vielleicht nicht erlaubt.
Ouflak

4
@ouflak Sieht aus wie es kann wie fixiert werden diese .
Erik der Outgolfer

@ouflak Woops, das war ein ziemlich dummer Fehler. Verwenden der nicht druckbaren, damit ich die Ziffer nicht benutze 2, und dann nur die Ziffer 1... Zum Glück hat Erik tatsächlich Recht, dass eine einfache negative Unär den gleichen Effekt hat wie +1(oft verwendet) Klammern loszuwerden, da das Negative und das Unäre eine höhere Priorität haben als die meisten anderen Operatoren).
Kevin Cruijssen

4

Perl 6 , 15 12 Bytes

-3 Bytes danke an Nwellnhof, der mich an Tau erinnert

*/*/τ+|$+!$

Probieren Sie es online aus!

Anonym Welches Lambda auch immer, das die Formel verwendet (a/b/tau).floor+1. Tau ist zweimal pi. Die beiden anonymen Variablen $werden zu der Zahl gezwungen, mit der 0die Zahl +|0(bitweise oder 0) aufgeschlüsselt und eins +!$(plus nicht Null) addiert wird .


Ihr Code darf keine Ziffern 0-9 enthalten.
Titus

@Titus Ich kann nicht glauben, dass ich das vergessen habe. Danke, behoben!
Jo King

Sind auch Ziffern in Exponenten erlaubt?
Ouflak

3

Python 2 , 47 45 44 43 Bytes

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

Probieren Sie es online aus!


  • -2 Bytes dank Fehler
  • -1 Byte, danke an Jonathan Allan

Da die Eingaben garantiert sowohl (streng) positiv als auch rational sind, haben wir nie den Rand erreicht, dass eine genaue Anzahl von Umdrehungen erforderlich ist. Ich denke, wir können l/(r+r)//pi+l/lein Byte erstellen und speichern.
Jonathan Allan

@ JonathanAllan Danke :)
TFeld




2

C 46 Bytes

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

Ich bin neu in PPCG, daher bin ich mir nicht sicher, ob ich andere Teile in der Byteanzahl zählen muss, wie z

include <math.h>

Wird für die Ceil-Funktion benötigt, wodurch die Anzahl auf 64 Byte erhöht wird


Willkommen bei PPCG! Dies ist eine schöne erste Antwort. Ja, Sie müssen für #includeIhre Bytesumme zählen und dergleichen. Ein Link zu einer Online-Testsuite ist immer willkommen.
OOBalance

@OOBalance Ziffern sind im Code für diese Herausforderung nicht erlaubt;)
Annyo

@ Annyo Ich wusste, ich habe etwas vergessen :(
OOBalance

2

Catholicon , 8 Bytes

ċ//ĊǓĊ`Ė

Erläuterung:

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

Neue Version (pi eingebaut aus einem Byte, Teilungsparameter vertauscht), 5 Bytes

ċ/π/Ǔ




2

C (gcc) , 45 47 45 Bytes

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

Eine vernünftige Annäherung an pi ist 355/113. Da der Umfang C = 2 * r * PI ist, können wir anstelle von pi tau verwenden, was dann natürlich ~ 710/113 ist. 710 hat zufällig die geeigneten Faktoren 2 * 5 * 71, die kompakt ausgedrückt werden als 'G' * '\n'. Wir fügen eins ( r/r) hinzu, um das Runden auf unendlich zu erzwingen.

Bearbeiten: Mein Trick war zu klug für sein eigenes Wohl: Es hat natürlich dazu geführt, dass es fehlgeschlagen ist, wenn der Abstand ein Vielfaches des Umfangs war.

Probieren Sie es online aus!



2

R , 39 32 Bytes

-7 Bytes Danke an Giuseppe

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

Probieren Sie es online aus!

Ich habe das Gefühl, dass dies definitiv Golf sein könnte, aber ich bin im Moment ein bisschen faul, etwas dagegen zu unternehmen


2

min , 16 Bytes

/ tau / ceil int

Nimmt den Abstand und den Radius, die in dieser Reihenfolge auf den Stapel gelegt wurden. Dann dividiert durch Tau, rundet und macht int.







1

Lua , 61 58 57 49 Bytes

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

Probieren Sie es online aus!

Danke an KirillL. -8 Bytes.


Ich weiß nicht viel Lua (also ist es vielleicht noch zu lang), aber es scheint als Funktion kürzer zu sein: 49 Bytes
Kirill L.

@KirillL., Ich lerne hier immer noch die Regeln. Die Herausforderung des OP ist in Bezug auf die Eingabe ziemlich offen. Meine Frage ist also, müssten wir Ihren Programmaufruf () gegen die Byteanzahl zählen? Wenn nicht, rasieren Sie sich definitiv ein schönes Stück ab.
Ouflak

Ein weit verbreiteter Übermittlungsstil ist hier eine anonyme Funktion (damit wir den Namen nicht zählen müssen, es sei denn, er ist rekursiv), die anhand ihres Rückgabewerts ausgegeben wird. Der Fußzeilenbereich mit Funktionsaufrufen und dem tatsächlichen Drucken auf der Konsole wird dann im Wesentlichen zur Visualisierung der Ergebnisse verwendet und zählt nicht für Ihre Punktzahl. Übrigens können Sie der Fußzeile weitere Testbeispiele des OP hinzufügen, damit diese bequem auf einmal angezeigt werden können. Beachten Sie, dass sich in einigen Fällen ein vollständiges Programm tatsächlich als Golfspieler herausstellen kann!
Kirill L.


1

Tcl , 50 Bytes

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

Probieren Sie es online aus!


Tcl , 53 Bytes

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

Probieren Sie es online aus!

Das Fehlen einer Pi-Konstante oder -Funktion führt dazu, dass ich den Golfwettbewerb verliere!


Muss ich die .0 am Ende jeder Ausgabe entfernen? Es würde mich dazu bringen, mehr Bytes zu verbrauchen!
Sergiol

1
[incr i]ist ziemlich klug, aber ich denke, Sie können $d/$doder $r/$rstattdessen verwenden.
David

Dank der Idee von @ david wurden einige Bytes gespeichert!
Sergiol

1

PowerShell, 53 52 51 Byte

-1 Byte dank @mazzy
-1 Byte, nachdem mir klar wurde, dass ich nach dem param()Block kein Semikolon benötige

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

Probieren Sie es online aus!

Übernimmt Eingaben von zwei Befehlszeilenparametern, Abstand -dund Radius -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))))

Eine anonyme Funktion, die zwei Ganzzahlen aund bals Argumente akzeptiert : den Abstand bzw. den Radius.

Probieren Sie es online aus!

(count " ")2ein2πb


0

TI-Basic (Serie 83), 12 Byte

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

Nimmt die Eingabe als Liste von Radius und Entfernung in Ans: zum Beispiel {0.9999:12.5663:prgmX.

e^(ΔList(ln(Ansnimmt das Verhältnis dieser Entfernungen und min(wandelt dies in eine Zahl um. Dann dividieren wir durch Tmax, was ein Grafikparameter ist, der standardmäßig 2π entspricht. Schließlich -int(-nimmt die Decke.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.