... Ah sorry, kein Popcorn hier, nur POPCNT.
Schreiben Sie das kürzeste Programm oder die kürzeste Funktion, die eine Zahl aufnimmt, nund geben Sie alle Ganzzahlen von 0 bis 2 n - 1 in aufsteigender Reihenfolge der Anzahl von 1 Bits in der binären Darstellung der Zahlen aus (Popcount) aus. Duplikate sind nicht erlaubt.
Die Reihenfolge der Nummern mit demselben Popcount ist implementierungsspezifisch.
Beispielsweise sind für n = 3alle diese Ausgaben gültig:
0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7
Das Eingabe- und Ausgabeformat ist implementierungsdefiniert, um die Verwendung von Sprachfeatures zu ermöglichen, um den Code weiter zu verbessern. Die Ausgabe unterliegt einigen Einschränkungen:
- Die Zahlen müssen im Dezimalformat ausgegeben werden.
Die Ausgabe muss ein angemessenes Trennzeichen zwischen den Zahlen enthalten (nachstehendes Trennzeichen zulässig, jedoch nicht führend).
Zeilenvorschub (
\n), Register (\t), Raum,,,.,;,|,-,_,/ist durchaus sinnvoll Separator. Ich mag keine zusätzlichen Leerzeichen für hübsches Drucken, benutze aber keine Buchstaben oder Ziffern als Trennzeichen.- Die Zahlen und Separatoren können durch umgeben sein
[ ],{ }oder jede Anordnung oder Liste Notation. - Drucken Sie nichts anderes, als oben angegeben.
Bonus
Multiplizieren Sie Ihre Punktzahl mit 0,5 wenn Ihre Lösung die Zahl im Handumdrehen erzeugen kann. Der Sinn dieses Bonus ist, dass, wenn Sie Ihre Drucklösung direkt in einen Generator umwandeln, der Generator nur höchstens O (n) Speicher verwendet, wobei n die oben definierte Anzahl von Bits ist. (Sie müssen Ihre Lösung nicht unbedingt auf Generator umstellen). Beachten Sie, dass, während ich n <= 28 auferlege, der zum Speichern aller Zahlen benötigte Speicher immer noch exponentiell wächst und eine naive Sortierlösung mindestens 4 GB Speicher bei n = 28 belegen würde.
Bitte erläutern Sie kurz, wie Ihre Lösung funktioniert, bevor Sie diesen Bonus in Anspruch nehmen.