Alle ASCII-Zeichen mit einer bestimmten Bitanzahl

30

(Titel mit Dank an @ChasBrown)

Sandkasten

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

  1. Angenommen, die Eingabe ist immer eine Ganzzahl (oder eine Zeichenfolgendarstellung einer Ganzzahl) zwischen 1 und einschließlich 6.
  2. Sie können ein Programm schreiben, um die Ergebnisse anzuzeigen, oder eine Funktion, um sie zurückzugeben.
  3. 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.
  4. Standardlücken wie gewohnt verboten.
  5. Dies ist Code Golf, so dass der kürzeste Code in jeder Sprache gewinnt.
ElPedro
quelle
Dürfen wir eine Liste der dezimalen ASCII-Werte zurückgeben / drucken oder müssen wir sie in Form von Zeichen (z. B. 63vs ?) haben?
Benjamin Urquhart
1
Muss die tatsächlichen Zeichen sein.
ElPedro
7
"Der gleiche Anführungszeichentyp muss für alle Eingaben verwendet werden" Python verwendet beispielsweise standardmäßig einfache Anführungszeichen ( ') 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.
Erik der Outgolfer
@EriktheOutgolfer Einverstanden. Deshalb dachte ich, es könnte interessant sein, das als zusätzliche Regel
einzuspielen
1
@ElPedro Ich war mir nicht sicher, was ich tun sollte, da es wahrscheinlich eine gute Idee ist, einige Anführungszeichen zu haben, da im ersten Beispiel ein Leerzeichen vorhanden ist, aber die üblichen Anführungszeichen erscheinen beide in der Ausgabe :) Bearbeiten: Verwenden Sie möglicherweise französische Guillemets ( « »)? : D
Flawr

Antworten:

29

8088-Assembly, IBM PC DOS, 35 30 29 Bytes

Maschinensprache:

be81 00ad 8afc b330 b108 d0c8 12dd e2fa 3afb 7504 b40e cd10 fec0 79ea c3

Auflistung:

BE 0081     MOV  SI, 081H   ; SI = memory address of command line string
AD          LODSW           ; AL = start ASCII value (init to 20H from space on cmd line)
8A FC       MOV  BH, AH     ; BH = target number of bits (in ASCII)
        CHR_LOOP:
B3 30       MOV  BL, '0'    ; BL = counter of bits, reset to ASCII zero
B1 08       MOV  CL, 8      ; loop through 8 bits of AL
        BIT_LOOP:
D0 C8       ROL  AL, 1      ; rotate LSB of AL into CF
12 DD       ADC  BL, CH     ; add CF to BL (CH is always 0) 
E2 FA       LOOP BIT_LOOP   ; loop to next bit
3A FB       CMP  BH, BL     ; is current char the target number of bits?
75 04       JNE  NO_DISP    ; if not, do not display
B4 0E       MOV  AH, 0EH    ; BIOS write char to screen function
CD 10       INT  10H        ; display ASCII char in AL (current char in loop)
        NO_DISP: 
FE C0       INC  AL         ; increment char to next ASCII value
79 EA       JNS  CHR_LOOP   ; if char <= 127, keep looping
C3          RET             ; return to DOS

Eigenständiges ausführbares PC-DOS-Programm, Eingabe der Nummer über die Befehlszeile. Die Ausgabe wird im Konsolenfenster angezeigt.

Bildbeschreibung hier eingeben

Laden Sie ABCT.COM (AsciiBitCounT) herunter und testen Sie es.

640 KB
quelle
8
Für einen Moment dachte ich, es steht "Download and test AT ABCT.COM", als hätten Sie eine Domain nur für diese Antwort registriert.
Sparr
14

CP-1610- Baugruppe ( Intellivision ), 20 DECLEs 1 = 25 Byte

Übernimmt N 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 .

                ROMW    10              ; use 10-bit ROM width
                ORG     $4800           ; map this program at $4800

                ;; ------------------------------------------------------------- ;;
                ;;  test code                                                    ;;
                ;; ------------------------------------------------------------- ;;
4800            EIS                     ; enable interrupts

4801            MVII    #$103,    R4    ; set the output buffer at $103 (8-bit RAM)
4803            MVII    #2,       R0    ; test with N = 2
4805            CALL    getChars        ; invoke our routine

4808            MVII    #$103,    R4    ; R4 = pointer into the output buffer
480A            MVII    #$215,    R5    ; R5 = backtab pointer

480C  draw      MVI@    R4,       R0    ; read R0 from the buffer
480D            SLL     R0,       2     ; R0 *= 8
480E            SLL     R0
480F            BEQ     done            ; stop if it's zero

4811            ADDI    #7-256,   R0    ; draw it in white
4815            MVO@    R0,       R5

4816            B       draw            ; go on with the next entry

4818  done      DECR    R7              ; loop forever

                ;; ------------------------------------------------------------- ;;
                ;;  routine                                                      ;;
                ;; ------------------------------------------------------------- ;;
      getChars  PROC

4819            MVII    #32,      R1    ; start with R1 = 32

481B  @loop     MOVR    R1,       R3    ; copy R1 to R3
481C            CLRR    R2              ; clear R2
481D            SETC                    ; start with the carry set

481E  @count    ADCR    R2              ; add the carry to R2
481F            SARC    R3              ; shift R3 to the right (the least
                                        ; significant bit is put in the carry)
4820            BNEQ    @count          ; loop if R3 is not zero

4822            CMPR    R2,       R0    ; if R2 is equal to R0 ...
4823            BNEQ    @next

4825            MVO@    R1,       R4    ; ... write R1 to the output buffer

4826  @next     INCR    R1              ; advance to the next character
4827            CMPI    #127,     R1    ; and loop until 127 is reached
4829            BLT     @loop

482B            MVO@    R3,       R4    ; write NUL to mark the end of the output

482C            JR      R5              ; return

                ENDP

Ausgabe für N = 2

NB: Die öffnende Klammer ähnelt einer öffnenden eckigen Klammer in der Intellivision-Schriftart. Beide Zeichen sind jedoch unterschiedlich.

Ausgabe

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).

Arnauld
quelle
5
+1 nur, um (a) eine Lösung für die Intellivision zu sein, und (b) den ersten Intellivision-Code, den ich je gesehen habe.
Acht-Bit-Guru
3
@ Eight-BitGuru Das Codieren auf der Intellivision macht ziemlich viel Spaß. Und die heutigen Homebrew-Spiele sind in 16-Bit-ROM geschrieben, wodurch die volle Leistung der CPU freigeschaltet wird. :)
Arnauld
Beeindruckend! Ich hatte keine Ahnung, dass die Intellivision einen Framebuffer und einen eingebauten Zeichensatz hat. Mit Sicherheit viel weiter fortgeschritten als der Atari 2600. Sehr schön gemacht!
640 KB,
2
@gwaugh Das GROM (für Graphics ROM) enthält alle druckbaren ASCII-Zeichen und einige gängige grafische Formen. Unterhaltsame Tatsache: Es enthält auch ausführbaren Code, der nicht in das Haupt-ROM passte.
Arnauld
Definitiv weiter fortgeschritten als der 2600, aber wenn der Speicher ausreicht, hat Mattel nichts von den fortgeschrittenen Dingen preisgegeben, die sich im ROM verstecken, so dass Entwickler von Drittanbietern entweder auf reinen Maschinencode beschränkt waren oder die ausgefallenen Dinge selbst herausfinden mussten . Könnte apokryphen sein.
brhfl
11

Python 2 , 62 Bytes

lambda n:[chr(i)for i in range(32,127)if bin(i).count('1')==n]

Probieren Sie es online!

Lynn
quelle
1
sum(map(int,bin(i)[2:]))==nkann werden bin(i).count('1')==n, um 7 Bytes zu sparen.
mypetlion
9

05AB1E , 8 Bytes

žQʒÇbSOQ

Probieren Sie es online!

Erläuterung

žQ        # push the printable ascii characters
  ʒ       # filter, keep elements whose
   Ç      # character code
    b     # converted to binary
     SO   # has a digit sum
       Q  # equal to the input
Emigna
quelle
8

Perl 6 , 41 34 Bytes

{chrs grep *.base(2)%9==$_,^95+32}

Probieren Sie es online!

Anonymer Codeblock, der eine Zahl annimmt und eine Zeichenfolge gültiger Zeichen zurückgibt.

Erläuterung:

{                                }  # Anonymous code block taking a number
      grep                ,^95+32   # Filter from the range 32 to 126
           *.base(2)                # Where the binary of the digit
                    %9                # When parsed as a decimal modulo 9
                      ==$_            # Is equal to the input
 chrs                               # And convert the list of numbers to a string

nbndigitsum(n)(modb1)b(modb1)=1

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.

Scherzen
quelle
7

Gelee , 8 Bytes

ØṖOB§=ʋƇ

Probieren Sie es online!

ØṖ       printable ascii character list
  OB     to binary
    §    popcount
     =   equal to input?
      ʋƇ filter (implicitly output)
Zylviij
quelle
7

JavaScript (Node.js) , 60 Byte

Mit Jo Kings Modulo-Trick

n=>(g=x=>x>>7?'':Buffer(x.toString(2)%9-n?0:[x])+g(x+1))(32)

Probieren Sie es online!


JavaScript (Node.js) ,  70 bis  69 Byte

n=>(g=x=>x>>7?'':Buffer((h=x=>x&&x%2+h(x>>1))(x)-n?0:[x])+g(x+1))(32)

Probieren Sie es online!

Kommentiert

n => (              // n = input
  g = x =>          // g = recursive function, taking a byte x
    x >> 7 ?        //   if x = 128:
      ''            //     stop recursion and return an empty string
    :               //   else:
      Buffer(       //     create a Buffer:
        (h = x =>   //       h = recursive function taking a byte x
          x &&      //         stop if x = 0
          x % 2 +   //         otherwise, add the least significant bit
          h(x >> 1) //         and do a recursive call with floor(x / 2)
        )(x)        //       initial call to h
        - n ?       //       if the result is not equal to n:
          0         //         create an empty Buffer (coerced to an empty string)
        :           //       else:
          [x]       //         create a Buffer consisting of the character x
      ) +           //     end of Buffer()
      g(x + 1)      //     append the result of a recursive call to g with x + 1
)(32)               // initial call to g with x = 32
Arnauld
quelle
60 Bytes mit Jo's Modulo-Trick.
Shaggy
@ Shaggy Oh. Das ist schön.
Arnauld
6

Brachylog , 7 Bytes

∈Ṭ&ạhḃ+

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.

           The input variable (which is an element of the output)
∈          is an element of
 Ṭ         the string containing every printable ASCII character
  &        and the input
   ạh      converted to a codepoint
     ḃ     converted to a list of binary digits
      +    sums to
           the output variable (which is the input).
Nicht verwandte Zeichenfolge
quelle
5

Japt , 9 Bytes

;EƶXc¤è1

Probieren Sie es aus oder testen Sie alle Eingaben

;EƶXc¤è1     :Implicit input of integer U
;E            :Printable ASCII
  Æ           :Filter each X
   ¶          :Test U for equality with
    Xc        :  Character code of X
      ¤       :  To binary string
       è1     :  Count the 1s
Zottelig
quelle
5

Excel (2016 oder höher), 76 Byte

=CONCAT(IF(LEN(SUBSTITUTE(DEC2BIN(ROW(32:126)),0,))=A1,CHAR(ROW(32:126)),""))

Ü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 CONCATFunktion benötigt (der veraltete CONCATENATEnimmt kein Array als Argument).

Sophia Lechner
quelle
Ich mag das. Ich bin ein Lotus Notes und 123 Kerl, so funktioniert dies für mich :-)
ElPedro
5

C (Standardbibliothek), 74 67 Bytes

i;j;k;f(n){for(i=31;i<126;k||puts(&i))for(k=n,j=++i;j;j/=2)k-=j&1;}

Verwenden Sie nur Standard-Bibliotheksfunktionen. Danke an @gastropner für die Verbesserung von 74 auf 67 Bytes.

Probieren Sie es online!

Krista
quelle
1
67 Bytes
Gastropner
@gastropner das ist eine erstaunliche verbesserung! Vielen Dank!
Krista
1
Ich denke, Sie müssen bei Index 31 beginnen, um Platz in dem f(1)Fall zu gewinnen (weil der es ++iüberspringt).
LambdaBeta
@LambdaBeta Du hast absolut recht, danke!
Krista
5

R , 77 68 Bytes

Annäherung mit for-Schleife

-9 Bytes dank Giuseppe

n=scan();for(i in 32:126)if(sum(intToBits(i)>0)==n)cat(intToUtf8(i))

Probieren Sie es online!

Vorher:

R , 78 69 66 Bytes

-12 Bytes dank Giuseppe

a=32:126;cat(intToUtf8(a[colSums(sapply(a,intToBits)>0)==scan()]))

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!

Aaron Hayman
quelle
1
Verwenden Sie intToBits(x)>0stattas.single
Giuseppe
Schön, ich habe versucht, |0einen Fehler zu bekommen, und bin einfach davon ausgegangen, dass die Logikoperatoren nicht funktionieren würden.
Aaron Hayman
1
66 Bytes für den "vorherigen" Ansatz mit sapplyanstattmatrix
Giuseppe
4

Java 10, 98 97 94 70 67 Bytes

n->{for(var c='';c-->31;)if(n.bitCount(c)==n)System.out.print(c);}

-24 Bytes dank NahuelFouilleul .

Probieren Sie es online aus.

Erläuterung:

Enthält ein nicht druckbares Zeichen mit Unicode-Wert 127.

n->{                         // Method with Integer parameter and no return-type
  for(var c='';c-->31;)     //  Loop character `c` in the range ['~', ' '] / (127,31):
    if(n.bitCount(c)         //   If the amount of 1-bits in the two's complement binary
                             //   representation of the current characters
                    ==n)     //   equals the input:
      System.out.print(c);}  //    Print the current character
Kevin Cruijssen
quelle
1
-24bytes mit Long.bitCount
Nahuel Fouilleul
@NahuelFouilleul Ah, ich vergesse immer das in Java eingebaute! Vielen Dank. Und 3 weitere Bytes können mit gespeichert werden n.bitCount. :)
Kevin Cruijssen
Ja, Java schlägt JavaScript noch einmal! Ich liebe diese Charakterherausforderungen: P
Olivier Grégoire
4

Java 8, 131 71 Bytes

-60 Bytes danke an alle in den Kommentaren

Gibt eine java.util.stream.IntStreamder Codepunkte zurück

n->java.util.stream.IntStream.range(32,127).filter(i->n.bitCount(i)==n)

Probieren Sie es online!

Mit HashSet 135 Bytes. Rückgabe a Set<Object>:

n->new java.util.HashSet(){{for(int i=31;i++<126;add(Long.toBinaryString(i).chars().map(c->c-48).sum()==n?(char)i+"":""),remove(""));}}

Probieren Sie es online!

Benjamin Urquhart
quelle
128 Bytes
Abgelaufene Daten
1
Statischer Zugriff aus nicht statischem Kontext Vielen Dank.
Benjamin Urquhart
Long.toBinaryString(i)kann seinLong.toString(i,2);
Kevin Cruijssen
1
@ KevinCruijssen das ist, was mein erster Kommentar tut
Abgelaufene Daten
1
@ KevinCruijssen Du hast recht. Hier ist die feste Version: (noch) 71 Bytes . Und ja, ich habe deine Version gesehen, die ich vor weniger als 10 Minuten hochgeladen habe;)
Olivier Grégoire
4

C # (Visual C # Interactive Compiler) , 86 Byte

n=>Enumerable.Range(32,95).Where(x=>"0123456".Sum(g=>x>>g-48&1)==n).Select(x=>(char)x)

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!

Verkörperung der Ignoranz
quelle
@ExpiredData Danke für die Idee zu verwenden Sum()!
Verkörperung der Ignoranz
4

Dyalog APL Extended, 24 22 Bytes

ucs a⌿⍨⎕=+⌿2a32126

Probieren Sie es online!

-2 Bytes dank ngn

Alternative 22 Bytes in der regulären Dyalog APL von ngn:

ucs 32+⍸⎕=32↓+/↑,⍳72

Probieren Sie es online!

dzaima
quelle
(ausdr )∘=-> ⎕=ausdr
ngn
ohne verlängert: ⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2(⎕io ← 0)
ngn
3

Python 2 , 69 Bytes

lambda n:[chr(i)for i in range(32,127)if sum(map(int,bin(i)[2:]))==n]

Probieren Sie es online!

Neil
quelle
1
Genau das habe ich bekommen, als ich meine Ref-Implementierung spielte. +1
ElPedro
3

Gaia , 10 Bytes

₵R⟪¤cbΣ=⟫⁇

Probieren Sie es online!

		| implicit input, n
₵R		| push printable ascii
  ⟪	⟫⁇	| filter the list where:
   ¤cbΣ		| the sum of the code point in binary
       =	| is equal to n
Giuseppe
quelle
3

J , 31 27 Bytes

-4 Bytes dank Galen

[:u:32+[:I.]=1#.32#:@+i.@95

Probieren Sie es online!

Ursprüngliche Antwort

a.#~&(95{.32}.])]=1#.2#:@i.@^8:

Probieren Sie es online!

  • 2#:@i.@^8:erzeugt die Binärzahlen 0 bis 255 ( 2 ^ 8ist 256)
  • 1#. summiert jeden
  • ]= Erzeugt eine binäre Maske, die anzeigt, wo die Summe der ursprünglichen Eingabe entspricht
  • a.#~ mask verwendet diese Binärmaske, um das vollständige ASCII-Alphabet von J zu filtern a.
  • &(95{.32}.]) aber bevor Sie dies tun, nehmen Sie nur die Elemente 32 ... 126 aus dem Alphabet und der Maske
Jona
quelle
[:u:32+[:I.]=1#.32#:@+i.@95für 27 Bytes
Galen Ivanov
Danke Galen. Bis Sie tun könnteni.@95
Jonah
3

Perl 5 -a , 50 43 Bytes

@NahuelFouilleul spart 7 Bytes

map{$_=chr;unpack('B*')%9-"@F"||say}32..126

Probieren Sie es online!

Xcali
quelle
könnte ein Byte speichern mit "@F"anstelle von$F[0]
Nahuel Fouilleul
48 Bytes
Nahuel Fouilleul
1
43 Bytes mit %9Trick von @JoKing
Nahuel Fouilleul
3

K (ngn / k) , 20 Bytes

Lösung:

`c$32+&(+/2\32+!95)=

Probieren Sie es online!

Erläuterung:

Bewertet von rechts nach links:

`c$32+&(+/2\32+!95)= / the solution
                   = / equals?
       (          )  / do this together
               !95   / range 0..94
            32+      / add 32, so range 32..126
          2\         / break into base-2
        +/           / sum up
      &              / indices where true
   32+               / add 32
`c$                  / cast to character
Streetster
quelle
3

6502 Assembly (NES), 22 Byte

Maschinensprache:

a0 1f a6 60 c8 98 30 fb ca 0a b0 fc d0 fb e8 d0 f1 8c 07 20 f0 ec

Versammlung:

    ldy #$1f ; Y holds the current character code
NextCharacter:
    ldx $60 ; load parameter into X
    iny
    tya
    bmi (NextCharacter + 1) ; exit at char 128, #$60 is the return opcode

CountBits:
    dex
Continue:
    asl
    bcs CountBits
    bne Continue

CompareBitCount:
    inx ; fixes off-by-one error and sets Z flag if bit count matches
    bne NextCharacter
    sty $2007
    beq NextCharacter ; always branches

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.

negative sieben
quelle
2
Hallo und willkommen bei PPCG. Gibt es eine Möglichkeit, Ihre Lösung zu überprüfen, abgesehen vom Erstellen einer Cartridge, dh eines (Online-) Emulators oder einer Spezifikation?
Jonathan Frech
@ JonathanFrech Ich habe ein vollständiges Programm hinzugefügt, das zusammengestellt und lokal ausgeführt werden kann. Soweit ich weiß, ist die NES-Umgebung für Codegolf nicht wirklich standardisiert.
negative sieben
2

PowerShell , 83 Byte

param($n)[char[]](32..126|?{([convert]::ToString($_,2)|% t*y|group)[1].count-eq$n})

Probieren Sie es online!

Nimmt die Eingabe aus $n, erstellt eine Reihe von 32auf 126und zieht jene Zahlen , bei denen |?{}: die Zahl, converted ToStringin der Basis 2; umgewandelt toCharArra y; groupeingeteilt in 0s und 1s; den [1]Index dieser Gruppierung nehmen; Nehmen Sie das .countund überprüfen Sie, -eqob es mit unserer Eingangsnummer übereinstimmt $n. Diese Zahlen werden dann als char-array geworfen und in der Pipeline belassen. Die Ausgabe erfolgt implizit mit Zeilenumbrüchen zwischen Elementen.

AdmBorkBork
quelle
2

Kohle , 10 Bytes

Φγ⁼Σ↨℅ι²Iθ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

 γ          Predefined ASCII characters
Φ           Filtered by
      ι     Current character's
     ℅      ASCII code
    ↨       Converted to base
       ²    Literal 2
   Σ        Summed
  ⁼         Equals
         θ  First input
        I   Cast to integer
            Implicitly printed
Neil
quelle
2

PHP , 72 Bytes

for($x=31;$x++<126;)echo$argn==count_chars(decbin($x),1)[49]?chr($x):'';

Probieren Sie es online!

Russ G
quelle
1
count_chars(decbin($x),1)[49]kann nur seindecbin($x)%9
Jo King
2

Faktor 94 Bytes

: f ( n -- n s ) 94 [0,b] [ 32 + 2 >base [ 49 = ] count over = ] filter [ 32 + ] map >string ;

Probieren Sie es online!

Galen Ivanov
quelle
Das ist eine beeindruckende Menge an notwendigen Leerzeichen
Unrelated String
1
@Unabhängiger String ja, das ist :)
Galen Ivanov