Implementieren Sie einen Divisionsalgorithmus in Ihrer bevorzugten Sprache, der die Ganzzahldivision handhabt. Es muss nur mit positiven Zahlen umgehen - aber mit Bonuspunkten, wenn es auch mit negativer Division und Division mit gemischten Vorzeichen umgehen kann. Die Ergebnisse werden für Teilergebnisse abgerundet.
Das Programm kann nicht enthalten /
, \
, div
oder ähnliche Operatoren. Es muss eine Routine sein, die die nativen Teilungsfähigkeiten der Sprache nicht nutzt.
Sie müssen nur bis zu 32-Bit-Division behandeln. Die wiederholte Subtraktion ist nicht zulässig.
Eingang
Nehmen Sie zwei Eingaben auf stdin, die durch neue Zeilen oder Leerzeichen voneinander getrennt sind (Ihre Wahl)
740
2
Ausgabe
In diesem Fall wäre die Ausgabe 370
.
Die Lösung, die die kürzeste ist, gewinnt.
quelle
740,2
auch für die eingabe erlaubt? dh durch Komma getrennt?Antworten:
Python - 73 Zeichen
Kommagetrennte Eingabe, z
740,2
quelle
JavaScript, 61
Dies macht eine Zeichenkette zur Länge des Dividenden
,,,,,,
(6) und teilt sich auf den Divisor,,,
(3), was zu einem Array der Länge 3: führt['', '', '']
, von dessen Länge ich dann eine subtrahiere. Auf jeden Fall nicht die schnellste, aber hoffentlich trotzdem interessant!quelle
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
JavaScript - 36 Zeichen
quelle
alert
mitp
Ihnen einige zusätzliche Zeichen Netz. :)Mathematica: 34 Zeichen
Löst symbolisch die Gleichung (xa == b)
quelle
Solve[x#==#2]&@@Input[]
Python - 72 Zeichen
Übernimmt kommagetrennte Eingaben, zB 740,2
quelle
Python, 37
Schritt 1. In Unary konvertieren.
Schritt 2. Algorithmus der unären Division.
quelle
Python - 41 Zeichen
Kommagetrennte Eingabe, z
740,2
quelle
Python, 70
Etwas Verrücktes, was ich mir gerade gedacht habe (mit kommagetrennter Eingabe):
Wenn Sie kleine Schwimmergenauigkeitsfehler akzeptieren, kann die
round
Funktion gelöscht werden.quelle
Yabasic - 17 Zeichen
quelle
PHP - 82 Zeichen (fehlerhaft)
Dies ist jedoch eine sehr einfache Lösung - sie verarbeitet keine Brüche oder andere Vorzeichen (würde in eine Endlosschleife springen). Ich werde hier nicht ins Detail gehen, es ist ziemlich einfach.
Die Eingabe erfolgt in stdin, getrennt durch eine neue Zeile.
PHP - 141 Zeichen (voll)
Ein- und Ausgabe wie zuvor.
Ja, das ist fast doppelt so groß wie das vorherige, aber es:
Neuformatierung und Erläuterung:
quelle
Ruby 1.9, 28 Zeichen
Restliche Teilung, 21 Zeichen
Stichprobe:
Für Ruby 1.8:
quelle
('a'*a+'b').split('a'*b).size-1
drei Zeichen größer sein.APL (6)
/
ist hier keine Teilung, aberfoldr
. dhF/a b c
ista F (b F c)
. Wenn ich nicht verwenden kann,foldr
weil es aufgerufen wird/
, kann es in 9 Zeichen erfolgen:Erläuterung:
⎕
:input()
⍟⎕
:map(log, input())
-/⍟⎕
:foldr1(sub, map(log, input()))
*-/⍟⎕
:exp(foldr1(sub, map(log, input())))
⌊*-/⍟⎕
:floor(exp(foldr1(sub, map(log, input()))))
quelle
PHP, 55 Zeichen
Ausgabe (740/2): http://codepad.viper-7.com/ucTlcq
quelle
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
Verwenden Sie einfach ein Komma anstelle eines Leerzeichens, um Zahlen zu trennen.Scala 77
quelle
Haskell, 96 Zeichen
Die Eingabe erfolgt in einer einzelnen Zeile.
Der Code sucht einfach nach der Antwort, indem er den Divisor nimmt
d
und mit allen ganzen Zahlen multipliziertn >= 0
. Seim
die Dividende. Die größten
davonn * d <= m
wird ausgewählt, um die Antwort zu sein. Der Code wählt tatsächlich am wenigstenn
das ausn * d > m
und subtrahiert 1 davon, weil ich das erste Element von einer solchen Liste nehmen kann. Im anderen Fall müsste ich das letzte nehmen, aber es ist harte Arbeit, das letzte Element von einer unendlichen Liste zu nehmen. Nun, die Liste kann als endlich erwiesen werden, aber Haskell weiß es nicht besser, wenn er den Filter ausführt, und filtert daher unbegrenzt weiter.quelle
Common Lisp, 42 Zeichen
Akzeptiert durch Leerzeichen oder Zeilen getrennte Eingaben
quelle
Bash,
7264 ZeichenEine unendliche Anzahl von Zeilenumbrüchen ausgeben, das erste x nehmen, alle in eine Datei mit dem Namen f einfügen und dann die Größe von f in Blöcken mit der Größe von y abrufen. Manatworks Rat befolgt, um acht Charaktere zu rasieren.
quelle
read x y
. Mit ein paar mehr Leerzeichen entfernt kann auf 64 Zeichen reduziert werden: pastebin.com/Y3SfSXWkPython - 45 Zeichen
Übernimmt kommagetrennte Eingaben, zB 740,2
quelle
Python, 94 Zeichen
Eine rekursive binäre Suche:
quelle
Python, 148
Andere Lösungen mögen kurz sein, aber sind sie webbasiert ?
Hier ist eine elegante, zeitlich konstante Lösung, die die Kraft der CLOUD nutzt.
Habe ich erwähnt, dass es auch Haskell verwendet?
quelle
Python, 46 Bytes
Niemand hatte die langweilige Subtraktionslösung veröffentlicht, also konnte ich nicht widerstehen, es zu tun.
quelle
Smalltalk , Squeak 4.x Geschmack
Definiere diese binäre Nachricht in Integer:
Nach dem Golfen ist dieser Quotient immer noch lang (88 Zeichen):
Aber es ist vernünftigerweise schnell:
-> 127 ms auf meinem bescheidenen mac mini (8 MOp / s)
Im Vergleich zur regulären Aufteilung:
-> 31 ms, es ist nur 4 mal langsamer
Ich zähle die Zeichen nicht, um stdin zu lesen oder stdout zu schreiben, Squeak wurde nicht für Skripte entwickelt.
Natürlich mehr dumme wiederholte Subtraktion
oder einfach blöde Aufzählung
könnte auch funktionieren, ist aber nicht wirklich interessant
quelle
quelle
DC: 26 Zeichen
Ich gebe zu, dass es nicht die schnellste Lösung ist.
quelle
Python 54
Übernimmt kommagetrennte Eingaben.
Wörter, weil Markdown mit einer Liste gefolgt von Code stirbt ?:
quelle
Q, 46
.
quelle
Referenz: http://www.forums.hscripts.com/viewtopic.php?f=13&t=1358
quelle
Python, 40 Zeichen
quelle
Python, 37
Erstellt eine Zeichenfolge der Länge
x
('0'*x
) und verwendet erweitertes Slicing, um jedesy
Zeichen beginnend mit dem Index auszuwähleny-1
. Gibt die Länge der resultierenden Zeichenfolge aus.Wie bei Gnibbler werden auch hier durch Kommas getrennte Eingaben verwendet. Das Entfernen kostet
9
Zeichen:quelle
Retina 0.7.3, 33 Bytes (nicht konkurrierend)
Die Sprache ist neuer als die Herausforderung. Nimmt die durch Leerzeichen getrennte Eingabe zuerst mit dem Divisor auf. Das Teilen durch Null ist undefiniert.
Probieren Sie es online aus
quelle