(Titel mit Dank an @ChasBrown)
Der Hintergrund
Diese Herausforderung ist von einer Frage inspiriert, die ich kürzlich bei Puzzling Stack Exchange gepostet habe . Bitte folgen Sie dem Link, wenn Sie an der ursprünglichen Frage interessiert sind. Wenn nicht, dann werde ich Sie hier nicht mit den Details langweilen.
Die Fakten
Jedes druckbare Standard-ASCII-Zeichen hat einen Dezimalwert zwischen einschließlich 32 und 126. Diese können in ihre entsprechenden Binärzahlen im Bereich von 100000 bis einschließlich 1111110 konvertiert werden. Wenn Sie die Bits dieser Binärzahlen summieren, erhalten Sie immer eine ganze Zahl zwischen 1 und 6 einschließlich.
Die Herausforderung
Wenn eine ganze Zahl zwischen 1 und 6 als Eingabe angegeben wird, schreiben Sie ein Programm oder eine Funktion, die alle druckbaren Standard-ASCII-Zeichen in einem akzeptablen Format ausgibt, wobei die Summe der Bits ihres Binärwerts gleich der eingegebenen ganzen Zahl ist.
Die Beispiele / Testfälle
1 -> ' @'
2 -> '!"$(0ABDHP`'
3 -> '#%&)*,1248CEFIJLQRTXabdhp'
4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx'
5 -> '/7;=>OW[]^gkmnsuvyz|'
6 -> '?_ow{}~'
Eine ungolfed Python-Referenzimplementierung ist hier verfügbar (TIO) .
Die Regeln
- Angenommen, die Eingabe ist immer eine Ganzzahl (oder eine Zeichenfolgendarstellung einer Ganzzahl) zwischen 1 und einschließlich 6.
- Sie können ein Programm schreiben, um die Ergebnisse anzuzeigen, oder eine Funktion, um sie zurückzugeben.
- Die Ausgabe kann in jedem vernünftigen Format erfolgen, muss jedoch für alle Eingaben konsistent sein . Wenn Sie eine Zeichenfolge in Anführungszeichen ausgeben möchten, muss für alle Eingaben derselbe Anführungszeichentyp verwendet werden.
- Standardlücken wie gewohnt verboten.
- Dies ist Code Golf, so dass der kürzeste Code in jeder Sprache gewinnt.
63
vs?
) haben?'
) für die Zeichenfolgendarstellung einer Zeichenfolge, verwendet jedoch doppelte Anführungszeichen ("
), wenn die Zeichenfolge ein einfaches Anführungszeichen und keine doppelten Anführungszeichen enthält . Nicht, dass dieser spezielle Fall von Bedeutung wäre, da Sie wahrscheinlich besser die tatsächliche Zeichenfolge als deren Darstellung zurückgeben sollten und Sie trotzdem einfache Anführungszeichen in einer solchen Zeichenfolge für die Eingabe verwenden können, aber ich denke, dass es hier erwähnenswert ist.« »
)? : DAntworten:
8088-Assembly, IBM PC DOS,
353029 BytesMaschinensprache:
Auflistung:
Eigenständiges ausführbares PC-DOS-Programm, Eingabe der Nummer über die Befehlszeile. Die Ausgabe wird im Konsolenfenster angezeigt.
Laden Sie ABCT.COM (AsciiBitCounT) herunter und testen Sie es.
quelle
CP-1610- Baugruppe ( Intellivision ), 20 DECLEs 1 = 25 Byte
ÜbernimmtN in R0 und einen Zeiger auf den Ausgabepuffer in R4 . Schreibt alle übereinstimmenden Zeichen in den Puffer und markiert das Ende der Ergebnisse mit NUL .
Ausgabe für N = 2
NB: Die öffnende Klammer ähnelt einer öffnenden eckigen Klammer in der Intellivision-Schriftart. Beide Zeichen sind jedoch unterschiedlich.
Screenshot von jzIntv
1. Ein CP-1610-Opcode wird mit einem 10-Bit-Wert codiert, der als "DECLE" bezeichnet wird. Diese Routine ist 20 DECLE lang und beginnt bei 4819 USD und endet bei 482 USD (im Lieferumfang enthalten).
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
quelle
sum(map(int,bin(i)[2:]))==n
kann werdenbin(i).count('1')==n
, um 7 Bytes zu sparen.05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl 6 ,
4134 BytesProbieren Sie es online!
Anonymer Codeblock, der eine Zahl annimmt und eine Zeichenfolge gültiger Zeichen zurückgibt.
Erläuterung:
Wir können dies verwenden, um das Digitsum unserer Binärzahl zu erhalten, indem wir sie als Dezimalzahl analysieren und mit 9 modulieren. Dies ist gültig, da der von uns verwendete Zahlenbereich garantiert weniger als 9 Bits hat. Dies wird durch die automatische Umwandlung der Binärzeichenfolge in eine Dezimalzahl in Perl 6 in einem numerischen Kontext unterstützt.
quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 60 Byte
Mit Jo Kings Modulo-Trick
Probieren Sie es online!
JavaScript (Node.js) ,
70 bis69 ByteProbieren Sie es online!
Kommentiert
quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Ein Prädikat, das als Generator fungiert , Eingaben über seine Ausgabevariable entgegennimmt und jedes Zeichen über seine Eingabevariable erzeugt. Weil Brachylog.
quelle
Japt , 9 Bytes
Probieren Sie es aus oder testen Sie alle Eingaben
quelle
Excel (2016 oder höher), 76 Byte
Übernimmt die Eingabe von A1 und gibt sie in jeder Zelle aus, in die Sie diese Formel einfügen. Dies ist eine Matrixformel. Sie müssen also Ctrl+ Shift+ drücken, Enterum sie einzugeben. Das "2016 oder später" ist, weil es die
CONCAT
Funktion benötigt (der veralteteCONCATENATE
nimmt kein Array als Argument).quelle
C (Standardbibliothek),
7467 BytesVerwenden Sie nur Standard-Bibliotheksfunktionen. Danke an @gastropner für die Verbesserung von 74 auf 67 Bytes.
Probieren Sie es online!
quelle
f(1)
Fall zu gewinnen (weil der es++i
überspringt).R ,
7768 BytesAnnäherung mit for-Schleife
-9 Bytes dank Giuseppe
Probieren Sie es online!
Vorher:
R ,
78 6966 Bytes-12 Bytes dank Giuseppe
Wandelt die Zahlen 32 bis 126 in eine Bitmatrix um und summiert dann über die Zeilen, um herauszufinden, welche mit der eingegebenen Zahl übereinstimmen.
Probieren Sie es online!
quelle
intToBits(x)>0
stattas.single
|0
einen Fehler zu bekommen, und bin einfach davon ausgegangen, dass die Logikoperatoren nicht funktionieren würden.sapply
anstattmatrix
Java 10,
9897947067 Bytes-24 Bytes dank NahuelFouilleul .
Probieren Sie es online aus.
Erläuterung:
Enthält ein nicht druckbares Zeichen mit Unicode-Wert
127
.quelle
n.bitCount
. :)Java 8,
13171 Bytes-60 Bytes danke an alle in den Kommentaren
Gibt eine
java.util.stream.IntStream
der Codepunkte zurückProbieren Sie es online!
Mit HashSet 135 Bytes. Rückgabe a
Set<Object>
:Probieren Sie es online!
quelle
Long.toBinaryString(i)
kann seinLong.toString(i,2);
C # (Visual C # Interactive Compiler) , 86 Byte
Vielen Dank an @ExpiredData, dass Sie mir die Idee zur Verwendung gegeben haben
Sum()
! Wenn ich wieder auf meinen PC"0123456"
komme, ersetze ich die Zeichenfolge durch nicht druckbare Zeichen und spare drei Bytes.Probieren Sie es online!
quelle
Sum()
!Dyalog APL Extended,
2422 BytesProbieren Sie es online!
-2 Bytes dank ngn
Alternative 22 Bytes in der regulären Dyalog APL von ngn:
Probieren Sie es online!
quelle
(
ausdr)∘=
->⎕=
ausdr⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2
(⎕io ← 0)Python 2 , 69 Bytes
Probieren Sie es online!
quelle
Gaia , 10 Bytes
Probieren Sie es online!
quelle
J ,
3127 Bytes-4 Bytes dank Galen
Probieren Sie es online!
Ursprüngliche Antwort
Probieren Sie es online!
2#:@i.@^8:
erzeugt die Binärzahlen 0 bis 255 (2 ^ 8
ist 256)1#.
summiert jeden]=
Erzeugt eine binäre Maske, die anzeigt, wo die Summe der ursprünglichen Eingabe entsprichta.#~ mask
verwendet diese Binärmaske, um das vollständige ASCII-Alphabet von J zu filterna.
&(95{.32}.])
aber bevor Sie dies tun, nehmen Sie nur die Elemente 32 ... 126 aus dem Alphabet und der Maskequelle
[:u:32+[:I.]=1#.32#:@+i.@95
für 27 Bytesi.@95
Perl 5
-a
,5043 Bytes@NahuelFouilleul spart 7 Bytes
Probieren Sie es online!
quelle
"@F"
anstelle von$F[0]
%9
Trick von @JoKingK (ngn / k) , 20 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
Bewertet von rechts nach links:
quelle
6502 Assembly (NES), 22 Byte
Maschinensprache:
Versammlung:
Volles Programm . Getestet mit FCEUX 2.2.3, sollte auf jedem Standard-NES-Emulator funktionieren.
Inspiriert von Ryan Russells Antwort. Eingabe bei CPU-Adresse $ 60. Ausgabe in den Speicher der Picture Processing Unit der Konsole.
quelle
Wolfram Language (Mathematica) , 70 Byte
Probieren Sie es online!
quelle
PowerShell , 83 Byte
Probieren Sie es online!
Nimmt die Eingabe aus
$n
, erstellt eine Reihe von32
auf126
und zieht jene Zahlen , bei denen|?{}
: die Zahl,convert
edToString
in der Basis2
; umgewandeltt
oCharArray
;group
eingeteilt in0
s und1
s; den[1]
Index dieser Gruppierung nehmen; Nehmen Sie das.count
und überprüfen Sie,-eq
ob es mit unserer Eingangsnummer übereinstimmt$n
. Diese Zahlen werden dann alschar
-array geworfen und in der Pipeline belassen. Die Ausgabe erfolgt implizit mit Zeilenumbrüchen zwischen Elementen.quelle
Ruby , 48 Bytes
Probieren Sie es online!
quelle
Kohle , 10 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
PHP , 72 Bytes
Probieren Sie es online!
quelle
count_chars(decbin($x),1)[49]
kann nur seindecbin($x)%9
Rot , 92 Bytes
Probieren Sie es online!
quelle
Oktave mit Kommunikationspaket, 32 Bytes
Probieren Sie es online!
quelle
Faktor 94 Bytes
Probieren Sie es online!
quelle