Schreiben Sie ein Programm oder eine Funktion , die in positive ganze Zahlen nimmt a
, b
und c
, und druckt oder kehrt a/b
zu c
Dezimalstellen, mit den Operationen + - * /% [addieren, subtrahieren, multiplizieren, dividieren, modulieren] auf die positiven ganzen Zahlen: Sie können alle verwenden , die Ihre Sprache erlaubt, aber nicht auf Gleitkommazahlen. Der Bereich von a, b, c ist der Bereich, der für vorzeichenlose ganze Zahlen in Ihrer Sprache zulässig ist. Das Zahlenergebnis wird auf die letzte zu druckende Ziffer gekürzt (also nein round
).
Dies bedeutet, dass Sie teilnehmen können, wenn Ihre Sprache keinen Integer-Typ (nur Float) hat, indem Sie diese Float-Zahlen nur als positive Ganzzahlen verwenden. Der Schlüssel dieser Übung wäre, die Funktion zu schreiben, die die Ziffern in einer Gleitkommadivision findet, wobei nur die Operation + - * /% für [vorzeichenlose] Ganzzahlen verwendet wird.
Beispiele
print(1,2,1)
würde drucken0.5
print(1,2,2)
würde drucken0.50
print(13,7,27)
würde drucken1.857142857142857142857142857
print(2,3,1)
würde drucken0.6
print(4,5,7)
würde drucken0.8000000
print(4,5,1)
würde drucken0.8
print(9999,23,1)
würde drucken434.7
print(12345613,2321,89)
würde drucken, wenn Ihre Sprache 32 Bit ohne Vorzeichen hat5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466
Der kürzeste Code in Bytes gewinnt. Es tut mir leid, wenn dies nicht klar zu sein scheint ... Ich kann mich auch nicht an Sprachen und Wörter erinnern Testen Sie einige Eingaben, die sich von den vorgeschlagenen unterscheiden.
(1,2,0)
. Siehe meta.codegolf.stackexchange.com/a/5608/194(1,2,0)
?(1,2,0)
sollte es keine Rolle spielen, da0
es sich nicht um eine positive ganze Zahl handelt. Und ich würde es vorziehen, wenn c so bleibt, da ich es vorziehen würde, nicht daran denken zu müssen, ein anzufügen.
oder nichtAntworten:
05AB1E ,
17 13 11 1914 BytesEingabe in das Formular
b, a, c
.5 Bytes dank Grimy gespart .
Probieren Sie es online!
quelle
b,a,c
?‰`I°*¹÷I°+¦'.sJ
‰`¹+I°*¹÷¦'.sJ
Haskell, 87 Bytes
Anwendungsbeispiel:
(13#7)27
->"1.857142857142857142857142857"
.23 Bytes, um den
c==0
Fall zu behandeln und eine führende Null anstelle von Dingen wie zu verwenden.5
.Wie es funktioniert: multiplizieren
a
mit10^c
, dividieren durchb
, in eine Zeichenfolge verwandeln , teilen , wo das.
eingefügt werden muss, beide Teile mit einem.
dazwischen verbinden und die Kantenhüllen befestigen.quelle
Perl 6 ,
58 57 5548 BytesWas ziemlich ärgerlich ist, ist, dass es auf genau das gekürzt werden könnte, was
{($^a.FatRat/$^b).base(10,$^c)}
auf den nächsten Wert gerundet werden darf.Erläuterung:
quelle
(...).FatRat / 10**$x
Division eines Rational? Sie dürfen nur ganze Zahlen teilen.does Real
oderdoes Numeric
wäre das erlaubt? Was wäre, wenn ich die vorhandene Klasse erweitern würde, um diese Rollen zu entfernen?+-*/%
nur mit einfachen Integer-Typen. "Plain Integer" in Bezug auf die Funktionalität (vor allem: Integer Division) nicht der internen Darstellung. Glauben Sie, dass es erlaubt ist, eine Software-Gleitkomma-Bibliothek zu verwenden, die (trotz des Namens) nur Ganzzahlen für die interne Darstellung verwendet?Perl, 55 Bytes
Beinhaltet +3 für
-p
Geben Sie a und b in einer Zeile bei STDIN und c in der nächsten Zeile ein
division.pl
:das
$_/$&
ist ein bisschen umstritten. Eigentlich möchte ich dort eine Ganzzahldivision, aber Perl hat das nicht, ohne spezielle Module zu laden. Es ist also vorübergehend eine Nicht-Ganzzahl, die ich dann sofort abschneide (benutze|0
), damit ich die Ganzzahl erhalte, die eine Ganzzahldivision ergibt. Es könnte so umgeschrieben($_-$_%$&)/$&
werden, dass es nicht einmal vorübergehend einen nicht ganzzahligen Wert hat (intern wäre es jedoch immer noch ein Float).quelle
$-
, um es nur int zu machen? (Ich denke, es gibt strenge Grenzen für den Mix / Max-Wert, und ich bin sicher, Sie hätten es bereits in Betracht gezogen, aber es lohnt sich, es zu überprüfen!)use integer
$-
, gut zu wissen. Vielen Dank!JavaScript (ES6),
55-50Byte(a/b|0)
Führt eine Float-Division durch, wandelt sich aber sofort zu einer Ganzzahl. Bitte lassen Sie mich wissen, wenn dies nicht erlaubt ist.quelle
PHP, 187 Bytes
arbeitet mit Strings für den Zähler, die int-Werte größer als sein können
PHP_INT_MAX
Ich habe keine andere Chance als 13/7 auf 1.8571428571429 zu verkürzen und ich erreiche damit nicht den Testfall mit 27 Nachkommastellen
Auf diese Weise sind 36 Bytes nicht zulässig
quelle
Pyth -
2119181614 BytesWerde mal über das Eingabeformat schauen, das einen Haufen sparen kann.
Test Suite . (PS, die 27 endet nicht online, also habe ich stattdessen 10 gemacht).
quelle
0
es keine positive ganze Zahl ist (obwohl die op immer wieder Beispiele hinzufügtc=0
)JavaScript (ES6),
646259 Bytes2 Bytes gespart dank ETHproductions.
Die eingeschlossene Division ergibt immer eine ganze Zahl.
quelle
m
insgesamt noch funktionieren?f=(a,b,n,s)=>n+1?f((q=(a-a%b)/b,a%b*10),b,n-1,s?s+q:q+'.'):s
ist 60 Bytes.Java 7, 105 Bytes
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
divide
und nicht/
.int
Typ zum Speichern von Zahlenwerten. (Ist das nicht cool? BigInteger ist eine Zahlint[]
aus Ziffern. Wie {1,2,5} in Basis 10 ist 125. I Ich bin mir nicht sicher, auf welcher Basis die Ziffern von BigInteger tatsächlich liegen, aber ich würde vermuten, dass es mehr als 10 sind. "Ruby, 67 Bytes
wenn ich es zu einer Funktion mache, die obigen Testfälle auszuführen
quelle
->a,b,c{...}
indem Sie die Ellipsen durch Ihren Code ersetzen. (Die tatsächliche Zuweisung der Variablen ist aus Konsensgründen nicht erforderlich.)Schläger 203 Bytes
Ungolfed:
Verwendung:
Ausgabe:
Andere Methode (ungültige Antwort hier):
quelle
real->decimal-string
einreal
Wert als erstes Argument erwartet wird, ebenso eine/
Gleitkommadivision, die in dieser Aufgabe nicht zulässig ist. Also:real->decimal-string
runden ((f 1 6 7)
->0.1666667
) statt abschneiden.q, 196 Bytes
Zum Ausführen: Stellen Sie zuerst a, b, c ein.
quelle
Rust, 114 Bytes
Testcode:
quelle
PHP, 89 Bytes
Intdiv () ist in PHP 7 eingeführt, so dass es das erfordert. PHP 7.1 würde mir erlauben, die Liste () zu [] zu ändern und so 4 Bytes zu sparen.
verwenden wie:
quelle
$o.=intdiv($a=10*($a%$b),$b);
durch$o.=($a=10*($a%$b))/$b^0;
spart 4 Bytes.C #, 126 Bytes
Volles Programm mit Testfällen:
Integer Division ist implementiert. Zahlen jeder Größe können aufgrund des
BigInteger
Datentyps verwendet werden (der ImportSystem.Numerics
ist erforderlich). Der Digit-Count-Parameterc
ist auf 2 ^ 31-1 beschränkt, sollte jedoch mehr als genug Ziffern enthalten.quelle
Groovy (
787742 Bytes)Erläuterung
Eval.me(a+'.0g');
- Konvertieren von Integer-Eingabe in BigDecimal-Eingabe. In der groovigen BigDecimal-Notation ist dies die doppelte Notation mit einem angehängten G oder g. Ich hätte auch den Konstruktor verwenden können,new BigDecimal(it)
aber dadurch wurde ein Byte gespeichert..divide(b, n, 1)
- Mit n Genauigkeit durch b teilen, Rundungsmodus halbieren.Versuchen Sie es hier: https://groovyconsole.appspot.com/script/5177545091710976
quelle
Batch, 122 Bytes
quelle
Mathematica, 50 Bytes
Unbenannte Funktion von drei Argumenten (die geordnet
c
sinda
,b
um ein Byte irgendwo zu speichern), die eine Zeichenfolge zurückgeben. Es multiplizierta/b
mit10^c
, übernimmt die größte Ganzzahlfunktion, konvertiert dann in eine Zeichenfolge und fügt an der entsprechenden Stelle einen Dezimalpunkt ein. Schade, dass die Funktionsnamen nicht kürzer sind.quelle
Python 3, 62 Bytes
Probieren Sie es hier
* Hinweis : repl.it eine ältere verwendet ver von Python 3 , die alle Feldindizes erfordert angegeben werden, was bedeutet ,
"{:.{1}f}"
wird"{0:.{1}f}"
statt, so dass es 63 Bytes in repl.itWie benutzt man
Geben Sie alle drei Werte mit Leerzeichen dazwischen ein. Dh eine Eingabe von
1 2 1
würde ein Ergebnis von ergeben0.5
Erläuterung
input().split()
: Ruft Benutzereingaben ab und teilt sie in eine Liste mit dem Trennzeichen (Leerzeichen)a,b,c = map(int,XX)
: Ordnet die Variablen den vom Benutzer angegebenen Werten mit einem Int-Typ zu"{:.{1}f}".format(a/b,c)
: Formatiert einen String mit dem Divisionsergebnis und Ersatz angezeigt{1}
mitc
, um die Dezimalstelle der angezeigten Zeichenfolge festzulegenprint(XX)
: druckt die gelieferte Zeichenfolgequelle
Python 3 , 58 Bytes
Probieren Sie es online!
Dies ist auf die angegebene Anzahl von Dezimalstellen genau, solange
a * 10 ** c
es nicht zu groß ist.Ich habe versucht, Python 2 zu verkürzen
str(...)
,`...`
aber Python 2 fügtL
am Ende eine ein, wenn es zu groß ist, so dass es viel mehr Bytes kostet, danach zu suchen, als es wert ist.quelle
Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
Argumente werden in der
c a b
Reihenfolge akzeptiert .quelle
C 67 Bytes
Probieren Sie es online!
Einige Vorgängerversionen hatten, glaube ich, einen Fehler im Lesespeicher, der dem Programm zuzuordnen war ... Dank ceilingcat und für alle ...
quelle