Intro:
Ich erinnere mich, als ich ein Kind war, bekam ich einen Taschenrechner und drückte weiter auf den +
Knopf, um zu sehen, wie hoch ich zählen konnte. Jetzt programmiere ich gerne und entwickle für iOS.
Zählen ist sowohl für Menschen als auch für Computer eine grundlegende Fähigkeit. Ohne sie kann der Rest der Mathematik nicht durchgeführt werden. Es wird einfach getan, indem man bei beginnt 1
und es wiederholt hinzufügt 1
.
Die Herausforderung:
Dies ist nur eine einfache Herausforderung. Ich möchte, dass Ihr Programm von dem druckt 1
, was Integer
es benötigt. Ich werde jedoch eine Wendung hineinwerfen, da das Zählen von Dezimalstellen ein bisschen langweilig ist:
Die Zählung kann nicht zur Basis 10 gehören, sondern muss sich als binär erweisen.
Wenn Sie also mit 32-Bit-Ganzzahlen bis 5 zählen, sieht das folgendermaßen aus:
0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5
Es ist ein Computer. Sie wissen am besten, was binär ist. Ihre Eingabe kann entweder eine 32-Bit- oder eine 64-Bit-Ganzzahl sein. Es liegt wirklich an Ihnen. Wenn Sie jedoch 32-Bit-Ganzzahlen verwenden, muss Ihre Ausgabe aus 32-Bit-Ganzzahlen in Binärform bestehen . Wenn Sie 64-Bit-Ganzzahlen verwenden, muss Ihre Ausgabe aus 64-Bit-Ganzzahlen in Binärform bestehen .
Beispieleingabe:
eine 32-Bit-Ganzzahl, 5
Beispielausgabe:
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
Wertung:
Ihre Punktzahl entspricht der Anzahl der Bytes, die Ihr Code enthält. Da dies Code Golf ist, gewinnt die niedrigste Punktzahl.
Bonuspunkte:
Wenn Sie in der Ausgabe anzeigen, dass es sich bei der Zahl um eine Zahl zur Basis 10 handelt (z. B. ist die Zahl 0000 0000 0000 0000 0000 0000 0000 0001
in Binärzahl gleich der Zahl zur Basis 10 1
), multiplizieren Sie Ihre Punktzahl mit 0.8
.
Wenn Sie 4 Stellen der Ausgabe wie ich gruppieren, multiplizieren Sie Ihre Punktzahl mit 0.8
(erneut). Dies ist nicht erforderlich.
Nicht aufrunden und nicht abrunden. Ihre Punktzahl ist eine Gleitkommazahl.
int
z. B. Python 3 )?Antworten:
APL, 10 Zeichen
Ein weiterer in APL. Angenommen
⎕IO←1
(Standardeinstellung). Keine Bonuspunkte. Liest die Nummer vom Eingabegerät. Wenn Ihre APL 64-Bit-Ganzzahlen anstelle von 32-Bit-Ganzzahlen verwendet, ersetzen Sie 32 nach Bedarf durch 64.Beachten Sie, dass APL transparent in Gleitkommazahlen konvertiert, wenn der Bereich einer Ganzzahl überschritten wird. Es ist schwierig, genau zu sagen, mit welcher Ganzzahlgröße APL arbeitet.
Erläuterung
quelle
JavaScript ( ES6 ) 56.8 (71 * 0.8)
32-Bit-Version, da JavaScript keine 64-Bit-Genauigkeit unterstützt (höchstens 53 Bit bei Verwendung von Gleitkommadoppelwerten)
Ohne Gruppierung
Mit Gruppierung - Punktzahl 60.16 (94 * .64)
Test in jedem Browser (ES5)
quelle
Pyth, 18 × 0,8 × 0,8 = 11,52 Bytes
Beispielausgabe:
quelle
Pyth, 19 * 0,8 * 0,8 = 12,16 Bytes
Beispielausgabe für Eingabe 5:
Demonstration.
quelle
Python 2, 48 * 0,8 = 38,4
Konvertiert eine Zahl in eine Binärzahl, konvertiert sie mithilfe der Zeichenfolgenformatierung in eine Binärzahl mit 32 Stellen und gibt dann auch die Dezimalzahl für den Bonus aus. Verwendet eine
exec
Schleife zum Inkrementieren von1
zum Eingabewert.quelle
OverflowError: repeated string is too long
. Ich bin mir nicht sicher, ob das eine Beschränkung nur für meine Maschine ist.CJam, 13,44 (21 × 0,64)
Probieren Sie es online aus.
quelle
APL, 23,68 (37 × .8 × .8)
quelle
KDB (Q), 50 × 0,8 × 0,8 = 32
Ich bin ein bisschen traurig über meine Einsendung :( Es sollte einen besseren Weg geben, dies zu tun!
Erläuterung
Prüfung
quelle
k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
Common Lisp, 96.0
Ergebnis:
(* 150 .8 .8)
Beispiel
Aufruf der Funktion mit 10:
Erläuterung
(format()"~39,'0b ~:*~d" #b101010101010)
gibt:Die Zwischenzeichenfolge (ein Array) wird geändert, um ein Leerzeichen an die folgenden auf Null basierenden Indizes zu setzen: 4 9 14 19 24 29 34. Anschließend wird sie gedruckt.
Beachten Sie, dass das anscheinend unkomplizierte
(format t"~39,'0,' ,4:b ~:*~d" #b101010101010)
Format nicht das tut, was wir wollen. Es druckt:(die Polsterung ist nicht nach 4 gruppiert)
quelle
Rubin, 28 (35 * 0,8)
quelle
C 97 × 0,8 × 0,8 = 62,08
Beispielausgabe für Eingabe "5":
Ich könnte ein weiteres Leerzeichen hinzufügen, um die Dezimalzahlen von den Binärzahlen zu trennen, aber technisch erfordert das Problem es nicht, denke ich?EDIT: Danke, CL!quelle
x%-4-1
mitx%-4-2
dem Raum zwischen den binären und dezimal ohne zusätzliche Byte Kosten hinzuzufügen. (Dies würde auch das zusätzliche Leerzeichen am Anfang jeder ZeileOktave, 23 Zeichen
Beispielausgabe für Eingabe 5:
quelle
MatLab, 19 Bytes
MatLab hat einen eingebauten Dezimal-Binär-Konverter und druckt das Ergebnis automatisch aus.
quelle
Julia, 42 Bytes
Dies ist etwas kürzer ohne die Boni.
Dadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl annimmt und die Binärdarstellung jeder Zahl von 1 bis n ausgibt , wobei jede mit Nullen bis 64 Zeichen aufgefüllt bleibt.
Mit Boni sind 78 Bytes * 0,8 * 0,8 = 49,92
Dadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl annimmt und die Binärdarstellung wie zuvor ausgibt. Diesmal wird sie in 4er-Gruppen aufgeteilt, wobei die Zahl zur Basis 10 am Ende gehört.
quelle
Common Lisp, Punktzahl: 64.0
100 Bytes * 0,8 * 0,8
Ich bin ziemlich zufrieden mit meiner Punktzahl, aber ich bin trotzdem der Meinung, dass es eine Möglichkeit geben sollte, meinen Code ein wenig zu vereinfachen.
Ausgabe
Code
Erläuterung
Wie in der Antwort von coredump beschrieben , die Formatzeichenfolge
gibt base2-Zahlen aus, aber es scheint keine Möglichkeit zu geben, die Gruppierung auch richtig zu machen. Daher zwinge ich den String in eine Liste und iteriere darüber, indem ich 4er-Gruppen mit diesem Format-String auswähle:
"~ {~ a ~ a ~ a ~ a ~} ~ a ~%"
Nach jeder 4er-Gruppe wird ein Leerzeichen angezeigt, und nach der letzten Gruppe wird die base10-Nummer gedruckt.
Ohne Gruppierung (60x0,8 => 48,0)
Dies verwendet ~: *, um das (einzelne) Formatargument erneut zu verarbeiten.
quelle
PHP, 51,84 (81 × .8 × .8)
32-Bit-Version, da PHP unter Windows auf nur 32-Bit beschränkt ist, unabhängig davon, ob das Betriebssystem 64-Bit ist.
Nimmt ein Befehlszeilenargument an.
quelle
CoffeeScript, 60,8 (76 × .8)
32-Bit-Version für aus den oben genannten Gründen , da CoffeeScript bis auf JavaScript kompiliert wird.
Mit der Gruppierung wird es etwas länger: 64,64 (101 × .8 × .8)
quelle
Haskell, 56 Bytes
Verwendung:
Ersetzen Sie für 64-Bit die
32
durch64
. Jede andere Nummer funktioniert auch.quelle
J, 20 Bytes
Probenein- und ausgabe:
quelle
Swift: 98,56 (154 * 0,8 * 0,8)
quelle
Ruby, 64 Bit
70 * 0,8 * 0,8 = 44,8 Byte (geteilt, dezimal)
51 * 0,8 = 40,8 Bytes (dezimal)
67 * 0,8 = 53,6 Byte (geteilt)
44 Bytes (keine Boni)
quelle
05AB1E ,
1311 Bytes-2 Bytes dank @ Mr.Xcoder .
Ausgaben ohne Leerzeichen oder laufende Nummer.
Probieren Sie es online aus.
Erläuterung:
quelle
Lb32jsäð0:»
arbeitet für 11 Bytesj
, damit es die richtige Länge wird.