Bei einer Dezimalzahl in Form von <float>, <precision>
zeichnen Sie die grafische Darstellung des Dezimalteils (dh des Bruchs) des Gleitkommas. Beispiele:
Eingang:
6.75, 4
Ausgang:6||| 7 ----
6.75
(erste Zahl von der Eingabe) ist die zu erklärende Zahl,4
(die zweite Zahl von der Eingabe) ist die Anzahl der Striche unter den Rohren. Ist6
der Boden 6,75,7
ist die Decke6.75
. Die Anzahl der Rohre ist diedecimal part of first input number * second input number
.Eingang:
10.5, 6
Ausgang:10||| 11 ------
Eingang:
20.16, 12
Ausgang20|| 21 ------------
.16
Tatsächlich dauert 1,92 Pfeifen, aber da ich 1,92 Pfeifen nicht zeichnen kann, decke ich es auf 2.Eingang:
1.1, 12
Ausgang:1| 2 ------------
.1
beträgt in diesem Fall 1,2 Rohre, es ist also auf 1 Rohr ausgelegt.Auch ein Randfall. Eingabe:
5, 4
(dh die Zahl ist eine Ganzzahl), Ausgabe:5 6 ----
- Die Zahl, die zu erklären ist, ist der positive Schwimmer, der nur durch Ihre Sprachfähigkeiten begrenzt wird.
- Die Genauigkeitszahl ist eine gerade Ganzzahl, die größer als 2 ist (dh die erforderliche Mindestgenauigkeit beträgt 4). Es kann auch beliebig groß sein.
- > = n.5 Pipes werden auf n + 1 aufgerundet (dh 1.5 wird auf 2 gerundet und 2.5 wird auf 3 gerundet). <n.5 Rohre werden auf n gerundet (dh 1.4 wird auf 1 gerundet und 2.4 wird auf 2 gerundet).
- Wenn es für Ihre Sprache praktischer wäre, können Sie die Eingabe als Array verwenden, z
[6.75, 4]
. Wenn Sie die Eingabe in umgekehrter Reihenfolge vornehmen[4, 6.75]
, geben Sie dies bitte in Ihrer Antwort an.
5.0 4
: Zeichnet es von5
bis6
oder von4
bis5
oder ist dies akzeptabel? Eingabe1.25 2
: Hat es 0 oder 1|
s und warum (dh was ist die Rundungsregel)? Muss die erste Zahl in der Eingabe positiv sein? Was ist seine maximale Präzision und Größe? Muss die zweite Zahl in der Eingabe positiv sein? Wenn es negativ ist, ziehen wir rückwärts?Antworten:
CJam, 32 Bytes
Nimmt die Genauigkeit zuerst und die Dezimalsekunde, getrennt durch ein Leerzeichen.
Führen Sie alle Testfälle aus.
Erläuterung
quelle
Mathematica, 119 Bytes
Ich habe versucht ... Testen:
quelle
Japt,
4746 BytesNur ein Haufen Hinzufügen und Wiederholen.
Probieren Sie es online aus
quelle
(U-Uf)
ist das gleiche wieU%1
, zwei Bytes zu sparen.Java,
253206181 BytesDank @Kenney 47 Byte gespart, indem Bedingungen und Variablen, die einmal verwendet wurden, eingefügt und redundante Variablen aussortiert wurden.
Dank @Kenney konnten erneut 25 Byte gespart werden, indem 2 Schleifen mit ternären Operatoren eingefügt wurden.
Reine Saitenmanipulation:
Inline-Loop-Version (181 Byte):
Version mit 4 Schleifen (206 Bytes):
Ungolfed-Version:
Arbeitsbeispiel hier bei ideone.com . Das vollständige Programm akzeptiert die STDIN-Eingabe als
<float>,<precision>
.HINWEIS: Javas
Math.round(float)
Runden verwendenRoundingMode.HALF_UP
standardmäßig verwendet. Dies ist das erforderliche Verhalten des OP.Die Ausgabe der bereitgestellten Testfälle stimmte nicht mit der Ausgabe des OP überein.
quelle
a
(nie benutzt), können Sie bei 233. Einstellung Sie einen anderen 23 retten konnte bei 210 Bytes zu erhalten: Ersetzenq.length()
mitb
spart 13:int g=(int)f, b=(""+g).length(), c=b, i=0;
. Inkrementieren der Iterator in dem Zustand derfor
spart 6 und inliningd
(einmal verwendet) spart 4:int c = b; for(;i++<b;)h+=" "; for(;i++<=b+p;)h+="-"; for(i=c;i<c+Math.round((f-g)*p);i++)q+="|"; for(;i++<p+b;)q+=" ";
.\n
b
obsolet geworden als gut ;-) Sie können noch speichern 1 Byte in der zweiten für:for(;i++<=c+p;)
. Sie könnten die Datei mit Unix-Zeilenenden unter Windows speichern, aber leider erlaubt Java keine mehrzeiligen Zeichenfolgen .for(;i<c+p;)h+=i++<c?" ":"-";for(i=c;i<p+c;)q+=i++<c+Math.round((f-g)*p)?"|":" ";
Javascript ES6,
105104 Bytes1 Byte gespart dank, ähm, wie tippst du überhaupt??
quelle
(f,p)=>(i=f|0)+("|"[r="repeat"](j=(f-i)*p+.5|0)+" "[r](p-j))+(i+1)+("\n"+i).replace(/\d/g," ")+"-"[r](p)
\n
eine aktuelle Newline ersetzen . Und stellen Sie sicher, dass Sie es in Schablonenstrings einwickeln.Haskell, 113 Bytes
Anwendungsbeispiel:
properFraction
Teilt die Dezimalzahl in Ganzzahl und Bruchteil. Die Ausgabe ist eine Liste der Teile (Anfangsnummer, Striche, Leerzeichen, ...), die zu einer einzelnen Zeichenfolge (Via>>=id
) verkettet sind .quelle
main
Wrapper für ein volles Programm).MATL , 49 Bytes
Verwendet Release 6.0.0 der Sprache / des Compilers. Läuft auf Matlab oder Octave.
Nimmt Zahlen in der gleichen Reihenfolge wie bei der Challenge.
Beispiele
Erläuterung
quelle
Perl, 90 Bytes
Erwartet Eingaben als Befehlszeilenargumente. In einer Datei speichern (sprich
90.pl
) und ausführen alsperl 90.pl 6.75 4
Mit Kommentaren
quelle
Stackgoat ,
3127 BytesÄhnlich wie bei den meisten anderen Antworten. Ich werde sehen, ob ich mehr Golf spielen kann. Die Eingabe kann durch Kommas, Leerzeichen oder fast alles getrennt sein.
Nicht konkurrierend, da Stackgoat nach dieser Herausforderung hergestellt wurde
Erläuterung
quelle
Lua, 157 Bytes
Lange, aber keine kürzere Lösung finden
Ungolfed
Sie können lua online testen , die folgenden Testfälle könnten hilfreich sein :)
quelle
C,
233231 BytesUngolfed:
quelle
Python 3,
116108 Bytestrinket.io Link
Vielen Dank an Seeq für das Speichern einiger Zeichen.
Erste Version:
Ungolfed-Version:
quelle
;
. Du verwendest es nurh
einmal, also solltest du es auch einbinden. Sollte ein paar Zeichen sparen.h
ist schwieriger. Damit die Verkettung undlen
Funktion in den letzten beiden Zeilen funktioniert,l
muss eine Zeichenfolge sein, die also durch ersetzt werdenh
müsstestr(int(l)+1)
. Die Einstellungh
vor dem Konvertierenl
speichert einige Zeichen.