Betrachten Sie die folgende Zahlenfolge:
Sie zählt alle binären Brüche im Einheitsintervall auf .
(Um diese Herausforderung zu vereinfachen, ist das erste Element optional: Sie können es überspringen und berücksichtigen, dass die Sequenz mit 1/2 beginnt.)
Aufgabe
Schreiben Sie ein Programm (komplettes Programm oder eine Funktion), das ...
Wählen Sie eines dieser Verhaltensweisen:
- Eingabe n, Ausgabe n-tes Element der Sequenz (0-indiziert oder 1-indiziert);
- Eingabe n, Ausgabe der ersten n Elemente der Sequenz;
- Geben Sie nichts ein und geben Sie die unendliche Zahlenfolge aus, die Sie nacheinander abrufen können.
Regel
- Ihr Programm sollte mindestens die ersten 1000 Elemente unterstützen.
- Sie können Dezimalstellen oder Brüche (eingebaute, ganzzahlige Paare, Strings) nach Belieben ausgeben.
- Die Eingabe / Ausgabe als Binärziffern ist in dieser Frage nicht zulässig.
- Das ist Code-Golf , kürzeste Codes gewinnen;
- Standardlücken sind nicht erlaubt.
Testfälle
input output
1 1/2 0.5
2 1/4 0.25
3 3/4 0.75
4 1/8 0.125
10 5/16 0.3125
100 73/128 0.5703125
511 511/512 0.998046875
512 1/1024 0.0009765625
Diese Beispiele basieren auf einer mit 0 indizierten Sequenz, wobei die führende 0 enthalten ist. Sie müssten die Eingabe anpassen, um Ihre Lösung anzupassen.
Weiterlesen
- OEIS A006257
- Josephus-Problem: . (Ehemals M2216)
- 0, 1, 1, 3, 1, 3, 5, 7, 1, 3, 5, 7, 9, 11, 13, 15, 1, 3, 5, ...
- OEIS A062383
- : für , oder .
- 1, 2, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, ...
In A006257 (n) / A062383 (n) = (0, 0,1, 0,01, 0,11, 0,001, ...) werden alle binären Brüche im Einheitsintervall [0, 1) aufgelistet. - Fredrik Johansson, 14. August 2006
"1/2" "1/4" "1/8"...
take
später n Elemente daraus können.int
s, oderdouble
in einer Sprache / Implementierung, in derdouble
das IEEE binary64-Format verwendet wird ? Ich hoffe, Sie meinen nicht, dass Sie eine ASCII-Zeichenfolge analysieren müssen, wenn wir eine Ganzzahleingabe vornehmen möchten. Normale Integer-Typen sind in Sprachen wie C binär. Oder heißt das, dass die Eingabe / Ausgabe kein Array oder keine Zeichenfolge aus Integer- oder ASCII-Nullen / Einsen sein kann?Antworten:
Haskell , 25 Bytes
Probieren Sie es online!
Gibt Dezimalstellen mit einem Index ohne den anfänglichen Nullterm aus.
Addiert 0,5 zur Eingabe, halbiert dann, bis das Ergebnis unter 2 liegt, und subtrahiert dann 1. Bei Verwendung eines pointfree-Ausdrucks werden 1 Byte mehr gespeichert
quelle
Java 10,
6864 BytesVersuchen Sie es zuerst mit Code Golf!
Option 1: Finde das n- te Element (1-indiziert)
-4 Bytes dank @Kevin Cruijssen
Dies ist eine anonyme Methode, die den n- ten Term findet, indem das höchstwertige Bit aus entfernt wird n entfernt , es verdoppelt und eins addiert und dann durch die nächsthöhere Potenz von 2 dividiert wird.
Probieren Sie es online!
Code-Komplettlösung:
Wird bearbeitet, wenn es erforderlich ist, den endgültigen Wert zu drucken, anstatt ihn zurückzugeben.
quelle
{}
After-the-Loop- Antwort kann stattdessen eine sein;
. Sie können das Leerzeichen nach demreturn
; entfernen .2.0
kann sein2.
; Und die Veränderungn>>x!=1;x++
,1<<x
und1<<x+1
zun>>x++!=1;
,1<<x-1
,1<<x
bzw. speichert auch ein Byte. Versuchen Sie es online: 64 Bytes . Genieße deinen Aufenthalt!MathGolf ,
54 BytesProbieren Sie es online!
Wie es aussehen würde, wenn der Bediener richtig arbeitet
Probieren Sie es online!
Erläuterung
Ich habe meine Inspiration aus dieser Frage , um das Problem zu lösen. Ich glaube, meine "eigene" Lösung lag bei 10-12 Bytes.
Ich hatte vorgehabt, bei der Aufrundung auf die nächste Zweierpotenz die Zahl selbst zurückzugeben, wenn es sich um eine Zweierpotenz handelt. Aufgrund eines Fehlers wird jedoch auf die nächste Zweierpotenz gerundet (z. B. 4 -> 8 statt 4 -> 4) ). Dies muss später behoben werden, aber jetzt spart es mir ein Byte.
quelle
]
keinen anderen Zweck als das Formatieren der Ausgabe gibt, würde ich sagen, dass Sie es nicht in Ihre Byteanzahl aufnehmen müssen.Java 10,
8985706968 BytesPort von @Emigmas 05AB1E-Antwort , gibt also auch Dezimalzahlen auf unbestimmte Zeit aus.
-15 Bytes dank @Arnauld .
Probieren Sie es online aus.
Erläuterung:
quelle
Perl 6 , 19 Bytes
Probieren Sie es online!
quelle
Python 3 , 33 Bytes
Probieren Sie es online!
Gibt Dezimalstellen mit einem Index ohne den anfänglichen Nullterm aus.
quelle
Java (JDK 10) , 30 Byte
Probieren Sie es online!
Gibt das n zurück te Element in der Sequenz zurück.
Diese Antwort ist ursprünglich eine Folge von Golfspielen der Java-Antwort von TCFP . Am Ende sahen die Golfspiele nicht mehr wie die ursprüngliche Antwort aus (obwohl die verwendete Mathematik dieselbe ist), so dass ich mich entschied, die Golfspiele als separate Antwort zu veröffentlichen, anstatt einfach die Antwort des TCFP zu kommentieren. Wenn dir diese Antwort gefällt, stimme zu Sie auch der Antwort von TCFP zu ! ;-)
Intermediate Golfs waren:
quelle
05AB1E ,
118 Bytes3 Bytes gespart dank Kevin Cruijssen .
Probieren Sie es online!
Erläuterung
quelle
∞
(unendliche Liste ab 1):∞oεDÅÉs/}˜
[1,2,4,4,8,8,8,8,16,16,...,2**n]
ob ich die Primzahlen und eine Liste der richtigen indizierten Primzahlen verwenden sollte, gefolgt von einem/
... Aber das funktionierte nicht so gut. Gut, aber nicht8-bytes
gut. So etwas wie9LoDÅP)ζ
.Gelee , 9 Bytes
Probieren Sie es online!
quelle
PowerShell , 40 Byte
Probieren Sie es online!
Gibt die unendliche Folge als Dezimalwerte aus. Aufgrund von Spracheinschränkungen treten möglicherweise Präzisionsprobleme auf, die ersten 1000 Einträge können jedoch problemlos verarbeitet werden.
Beginnt mit dem Setzen
$i=2
und tritt dann in einefor
Schleife ein. Bei jeder Iteration konstruieren wir einen Bereich aus1..$i
und ziehen die ungeraden Werte mit heraus|?{$_%2}
. Diese werden in ihre eigene innere Schleife eingespeist, in der wir sie teilen, um die Dezimalstelle zu erhalten|%{$_/$i}
. Diese verbleiben in der Pipeline und werden ausgegeben, wenn die Pipeline nach jederfor
Iteration geleert wird. Jede Iteration wir einfach erhöht wird,$i
indem$i*=2
die nächste Go-Runde zu bekommen.quelle
Haskell,
3532 BytesEdit: -3 Bytes dank @ Delfad0r.
Dies ist eine unendliche Liste von ganzzahligen Paaren.
Probieren Sie es online!
quelle
Haskell , 40 Bytes
Probieren Sie es online!
Unendliche Folge als ganze Zahlenpaare (ab
(1,2)
).Ziemlich viel länger als @nimis Antwort , aber die Herangehensweise ist völlig anders, also habe ich beschlossen, es trotzdem zu posten.
Diese Lösung basiert auf der folgenden Beobachtung.
Beachten Sie, wie Sie zu der Sequenz zurückkehren, mit der Sie begonnen haben!
Die Lösung nutzt diese Tatsache (zusammen mit Haskells Faulheit), um die Sequenz zu berechnen
s
.quelle
Python 2 -
6866 Bytes-2 Bytes dank Kevin
Probieren Sie es online!
quelle
return 2*(n-a)
anreturn(n-a)*2
. Und Sie können ein zusätzliches Byte speichern, indem Sie Python 2 anstelle von 3 verwenden. Diesreturn
ist auch möglichprint
(mit Klammern).len
undbin
anstelle vonlog
.Python 3 ,
5351 Bytesn
.Probieren Sie es online!
quelle
def f(m=2,n=1):n<m and print(n/m)&f(m,n+2)or f(m+m)
R , 42 Bytes
Probieren Sie es online!
Denominator,Numerator
quelle
Schläger ,
9291 BytesProbieren Sie es online!
quelle
MATL , 8 Bytes
Probieren Sie es online!
Gibt Zähler und dann Nenner zurück. Verwendet die gleiche Methode wie meine R-Antwort , obwohl sie etwas effizienter ist.
Erklärung mit Eingabe
5
:quelle
Shakespeare-Programmiersprache , 426 Bytes
Probieren Sie es online!
Gibt die Sequenz unendlich als beide durch ein Leerzeichen getrennten Zahlen aus, wobei jedes Element durch eine neue Zeile getrennt ist.
quelle
You be twice the sum of a cat
Python 2 , 44 Bytes
Probieren Sie es online!
Die Funktion liefert ein Tupel von (Zähler, Nenner). Eine Eingabe von 0 wird nicht verarbeitet (optional).
quelle
return 2*n-m+1,m
kann seinprint-~n+n-m,m
, 2 Bytes zu sparen.Excel
4828 Bytes20 Bytes (!) Gespart dank tsh
= MOD (A1 + 0,5,2 ^ (INT (LOG (A1,2)))) / 2 ^ INT (LOG (A1,2))Nimmt den Wert in A1 an, die Ausgabe erfolgt dezimal. Wenn Sie möchten, dass die Ausgabe als Bruch ausgegeben wird, können Sie ein benutzerdefiniertes Format für die Ausgabezelle als "0 / ### 0" erstellen, das als Bruch angezeigt wird.
Erläuterung: Schwierig zu erklären, da eine Abkürzung verwendet wird, um zu dieser Formel zu gelangen. Grundsätzlich ist der Zähler eine Bitverschiebung nach links von der Eingabe, und der Nenner ist die nächste Zweierpotenz höher als die Zahleneingabe.
Ich habe ursprünglich mit in Excel integrierten Funktionen für BITLSHIFT und BITRSHIFT begonnen, aber sie verschieben die gesamten 48 Bits, was nicht das ist, was Sie wollen. Die Funktionen DEC2BIN (und BIN2DEC) sind auf -512 bis 511 (10 Bit) begrenzt, sodass dies nicht funktioniert. Stattdessen musste ich die Zahl mit einem Modul der ursprünglichen Zahl, dann mal zwei, neu aufbauen und dann 1 addieren (da die linke Ziffer vor einer Verschiebung immer 1 wäre).
Beispiele:
quelle
=(A1+0.5)/2^INT(LOG(A1,2))-1
?C ++,
977571 Bytes-26 Bytes dank tsh, ceilingcat, Zacharý
Testcode:
quelle
if(!i)return 0;
da für die Challenge keine 0 erforderlich ist.while
aber versuchenfor
.for(;exp;)
ist genauso wie,while(exp)
aber Sie können zwei weitere Anweisungen hinzufügen. Lieber?:
stattdessenif else
, was in den meisten Fällen kürzer wäre.(...)
Umgebung brauchstd-n-1
.C (gcc) 63 Bytes
Keine Eingabe, gibt eine unendliche Folge aus:
Probieren Sie es online!
quelle
JavaScript (ES6), 44 Byte
Probieren Sie es online!
quelle
Ruby , 42 Bytes
Probieren Sie es online!
Gibt ganzzahlige Paare unendlich aus, beginnend mit 1/2.
quelle
JavaScript (Node.js) , 30 Byte
Probieren Sie es online! 0-indiziert. Begann als Port meiner Batch-Antwort, konnte aber ein Vielfaches von berechnen12
quelle
Ruby , 31 Bytes
Probieren Sie es online!
quelle
> <> ,
1918 BytesVerwenden von xnors Idee , die von Jo King behoben wurde, -1 Byte, indem die Spiegel besser genutzt wurden, und weitere -2 Byte von Jo King, da dies
!
überflüssig war und;
nicht erforderlich ist.Probieren Sie es online!
quelle
-0.25
. Fix für die gleiche Anzahl von BytesWolfram Language (Mathematica) , 22 Byte
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 15 Byte
Probieren Sie es online!
Anonymes Präfix Lambda.
Vielen Dank an Adám für 4 Bytes und an Cows für 2 Bytes.
Wie:
quelle
C # (.NET Core) , 69 Byte
Probieren Sie es online!
Ungolfed:
quelle