Einen binären Pfad von einer Zahl ausgeben

22

Schreiben Sie für eine ganze Zahl n, die erfüllt n > 0, ihren Wert als nach rechts absteigenden Pfad auf der Grundlage ihrer Binärdarstellung.

Regeln

  • Das erste (höchstwertige) gesetzte Bit befindet sich immer in der oberen linken Ecke.
  • Wenn das nächste Bit gesetzt ist (a 1), zeichnen Sie ein Zeichen ("gefüllt") in der nächsten Zeile in der gleichen Spalte wie das vorherige Zeichen. Versuchen Sie, Leerzeichen ("leer") zu verwenden, aber jedes Zeichen kann verwendet werden, solange es immer dasselbe ist.
  • Wenn das nächste Bit nicht gesetzt ist (a 0), zeichnen Sie ein Zeichen ("gefüllt") in derselben Zeile unmittelbar rechts vom vorherigen Zeichen.
  • Ihr Code muss Zahlen mit mindestens 20 signifikanten Bits unterstützen.
  • Schreiben Sie ein vollständiges Programm, eine Funktion, ein Lambda usw., aber kein Snippet.
  • Keine führenden Leerzeichen (oder "leere" Zeichen) / Zeilen erlaubt
  • Beliebig viele Leerzeichen (oder "leere" Zeichen) / Zeilen zulässig
  • Es werden alle Arten von 1D-Eingaben akzeptiert: Zahl, Zeichenfolge, Array von Booleschen Werten usw. Die Reihenfolge der Bits bleibt jedoch unverändert.
  • Jede Art von visueller 2D-Ausgabe wird akzeptiert: Auf stdout, einer Zeichenfolge (wobei zwei unterschiedliche Werte für "gefüllt" und "leer" stehen), können Sie sogar eine Matrix ausgeben, wenn Sie möchten. Eine Liste von Zahlen scheint schwer mit der Regel "keine Überschriften-Leerzeichen" in Einklang zu bringen, aber ich bin offen dafür, wenn Sie eine Möglichkeit finden, sie zu verwenden. Hinweis: Wenn Sie eine Zeichenfolge drucken oder zurückgeben möchten, müssen die verwendeten Zeichen ASCII-Zeichen im Codepunktbereich [32-126] sein.
  • Standardlücken sind verboten.
  • Das ist Codegolf, also gewinnt der kürzeste Code.

Beispiele

Eingabe: 1

*

Eingabe: 2

**

Eingabe: 3

*
*

Eingabe: 4

***

Eingabe: 5

**
 *

Eingabe: 6

*
**

Eingabe: 7

*
*
*

Eingabe: 25

*
***
  *

Eingabe: 699050

**
 **
  **
   **
    **
     **
      **
       **
        **
         **

Eingabe: 1047552

*
*
*
*
*
*
*
*
*
***********

Eingabe: 525311

**********
         *
         *
         *
         *
         *
         *
         *
         *
         *
         *
Olivier Grégoire
quelle
Sandbox
Olivier Grégoire
Bedeutet "Zulässiges Eingabearray von Booleschen Werten" , dass die Eingabe in Form der Binärdarstellung der Zahl als Array zulässig ist?
Nit
3
@Nit Jede Art von 1D-Eingang. Wenn also die Zahl 5 ist, haben Sie möglicherweise ein Eingabearray ähnlich wie " [1,0,1]yes".
Olivier Grégoire
Wie kostenlos ist dieses Format wirklich? Ich möchte eine Zahl als die binären Ziffern nehmen mit den ersten 1 bis zum Ende bewegte, so da 9ist 1001ich meine Eingabe sein möchte 0011. Ist das in Ordnung?
Ton Hospel
Das erste Bit als 1erstes zu haben, ist Teil der Herausforderung, und das (Wieder-) Verschieben dieses Bits würde die Herausforderung trivialisieren. Ich fürchte, ich muss Ihnen nein sagen, @TonHospel. Sie können es jedoch aus Ihrer Eingabe im Programm entfernen.
Olivier Grégoire

Antworten:

7

Gelee , 8 Bytes

¬œṗ+\Ṭz0

Eine monadische Verbindung, die eine Zahl als Liste von Einsen und Nullen akzeptiert (z. B. 13ist[1,1,0,1] ), gibt eine Liste mit Einsen und Nullen zurück, wobei die erste Liste die erste Zeile ist.

Probieren Sie es online! oder sehen Sie sich eine formatierte Testsuite an

Wie?

¬œṗ+\Ṭz0 - Link: list L           e.g. [1,1,0,0,1,1,0,1] (i.e. 205)
¬        - logical NOT L               [0,0,1,1,0,0,1,0]
    \    - cumulative reduce L by:
   +     -   addition                  [1,2,2,2,3,4,4,5]
 œṗ      - partition @ truthy indices  [[1,2],[2],[2,3,4],[4,5]]
     Ṭ   - un-truth (vectorises)       [[1,1],[0,1],[0,1,1,1],[0,0,0,1,1]]
      z0 - transpose with filler 0     [[1,0,0,0],[1,1,1,0],[0,0,1,0],[0,0,1,1],[0,0,0,1]]
         -                        i.e.  1000
                                        1110
                                        0010
                                        0011
                                        0001
Jonathan Allan
quelle
11

MATL , 14 Bytes

J_iB^YsJ+'o-'&XG

Erzeugt eine grafische Ausgabe als Pfad, der an den Koordinaten (0,0) beginnt. Probieren Sie es bei MATL Online! Oder sehen Sie sich einige Offline-Beispiele an:

  • Eingabe 7:

    Bildbeschreibung hier eingeben

    Ausgabe:

    Bildbeschreibung hier eingeben

  • Eingabe 699050:

    Bildbeschreibung hier eingeben

    Ausgabe:

    Bildbeschreibung hier eingeben

Wenn Sie möchten, können Sie den Pfad als komplexe Koordinaten für 9 Bytes anzeigen :

J_iB^YsJ+

Probieren Sie es online!

Erläuterung

J_      % Push -1j (minus imaginary unit)
i       % Push input number
B       % Convert to binary. Gives an array of 0 and 1 digits
^       % Power, element-wise. A 0 digit gives 1, a 1 digit gives -1j
Ys      % Cumulative sum. Produces the path in the complex plane
J+      % Add 1j, element-wise. This makes the complex path start at 0
'o-'    % Push this string, which defines plot makers
&XG     % Plot
Luis Mendo
quelle
7

MATL , 10 Bytes

YsG~YsQ1Z?

Gibt ein Array von Binärziffern ein. Gibt eine Matrix aus.

Probieren Sie es online!

Erläuterung

Ys    % Implicit input: array of binary digits. Cumulative sum. This gives the
      % row coordinates
G     % Push input again
~     % Negate: change 0 to 1 and 1 to 0
Ys    % Cumulative sum
Q     % Add 1. This gives the column coordinates
1Z?   % Matrix containing 1 at those row and column coordinates and 0 otherwise.
      % Implicit display
Luis Mendo
quelle
6

Charcoal , 22 20 19 11 10 Bytes

F⮌S¿Iι↑*←*

Bisher nur meine zweite Antwort auf die Frage nach der Kohle.

Übernimmt die Eingabe als Binär-String (dh 699050als 10101010101010101010).

-9 Bytes dank @Neil, der vorschlägt, rückwärts zu schleifen.

Probieren Sie es online aus.

Erläuterung:

Lies STDIN als String in umgekehrter Reihenfolge:

Reverse(InputString())
⮌S

Durchlaufen Sie die Binärziffern als Zeichenfolgen ι:

For(Reverse(InputString()))
F⮌S

Wenn ιeine Zahl auf 1 zurückgesetzt wird, drucken Sie die *nach oben, andernfalls drucken Sie die *nach links.

If(Cast(i)) Print(:Up,"*"); Else Print(:Left,"*");
¿Iι↑*←*
Kevin Cruijssen
quelle
1
Dies wäre halb so lang, wenn Sie die Zeichenfolge in umgekehrter Reihenfolge drucken würden, beginnend am Ende und bis zum Ende.
Neil
@Neil Ok, jetzt sollte es behoben sein. Vielen Dank! -8 Bytes
Kevin Cruijssen
1
Speichern Sie ein weiteres Byte, indem Sie das {}s entfernen .
Neil
1
Base kostet nur 1 byte da du das nicht brauchst Cast überhaupt: F⮌↨N²¿ι↑*←*.
Neil
1
@ KevinCruijssen Entschuldigen Sie die verspätete Antwort, aber um Ihre Fragen zu beantworten: Es gibt keine Umkehrung von -v, da Charcoal als Golfsprache konzipiert wurde und ich den ausführlichen Modus hinzugefügt habe, um das Schreiben und Verstehen zu vereinfachen. (Ich kann aber eine hinzufügen, wenn Sie wollen). -aKurz gesagt --ast, ich habe es hinzugefügt (das Format stammt übrigens aus PyTek), damit ich den prägnanten Code mit so wenig Aufwand wie möglich verstehen kann: P (und es wirklich hilfreich, wenn Sie die Argumentreihenfolge versehentlich durcheinander gebracht haben). Auch das -list keine separate Option. (auch nur -hum Hilfe zu / Beschreibungen von Kommandozeilenargumenten zu erhalten)
Nur ASCII
6

C # (.NET Core) , 155 123 120 113 101 Bytes

32 Bytes wurden gespeichert, da die Eingabe als Array von Bits empfangen werden kann.
7 Bytes dank @auhmaan gespart.
Dank @KevinCruijssen 10 Bytes gespart.

n=>{var m="";for(int i=0,c=1;i<n.Length;)m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);return m;}

Probieren Sie es online!

Ian H.
quelle
Können Sie sich nicht um die Änderung +new string(' ',c)+"*"zu +"*".PadLeft(c)(spart 7 Byte)?
Auhmaan
@auhmaan Du hast recht, danke!
Ian H.
-4 Bytes durch Drucken 0anstelle von *: if(n[i++]<1){m+="*";c++;}an if(n[i++]<1)m+=c++%1;und "*".PadLeft(c);an"0".PadLeft(c);
Kevin Cruijssen
Korrektur, es ist eigentlich -12 Bytes, weil m+=jetzt ein Ternär sein kann, wenn:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
Kevin Cruijssen
1
@KevinCruijssen Danke, die Verwendung von 0's und die Verwendung des ternären Operators ist wirklich klug! Ich habe auch den Fall behoben 699060, indem ich einfach cden Anfang auf eins gesetzt habe, habe ich das beim Überprüfen der Testfälle irgendwie übersehen.
Ian H.
5

05AB1E , 18 17 14 Bytes

γ€gć¸s>«1IÔ·ÌΛ

Probieren Sie es online!

Erläuterung

γ€g             # Push the input as the array as chuncks of consecutive elements, map with length
   ć¸s>«        # Increment each value except the first one
        1I      # Push 1 and the input       
          Ô     # Push connected uniquified input (first elements of each chunck of consecutive elements in the input)
           ·Ì   # Map each with 2 * a + 2
             Λ  # Draw canvas :-)
  • 3 Bytes dank @Emigna

05AB1E Canvas Erklärung

Kaldo
quelle
1
γ€gć¸s>«1IÔ·ÌΛsollte 4 Bytes sparen.
Emigna
@Emigna Genial, danke! Völlig vergessen, dass es eine a + 2 eingebaut o:
Kaldo
3

Haskell , 65 Bytes

f(a:b)|a="*":f b|(x:y)<-f b=('*':x):map(' ':)y
f[]=["*"]
f.tail

Probieren Sie es online!

Übernimmt die Eingabe als Liste von Booleschen Werten.

Curry PAKCS, 70 Bytes

u(a:b)=('*':a):map(' ':)b
f(a:b)|a="*":f b|1>0=u$f b
f[]=["*"]
f .tail

Port of the Haskell antwortet, aber da <-es in Curry nicht funktioniert, müssen wir eine Hilfsfunktion erstellen u. Wir müssen auch ein Leerzeichen zwischen fund einfügen. einfügen, damit Curry es als Komposition und nicht als Punkt parst.

Dies funktioniert auch in MCC Curry, jedoch nicht in Sloth Curry (das einzige von TIO unterstützte Programm).

Weizen-Assistent
quelle
3

Haskell , 74 70 67 62 Bytes

tail.("\n"%)
s%(x:r)=([1..x]>>s)++'*':(s++[' '|x<1])%r
s%[]=""

Probieren Sie es online!Nimmt eine Liste von Nullen und Einsen als Eingabe und gibt einen durch Zeilenumbrüche getrennten String zurück.

Inspiriert von xnors Antwort .

Laikoni
quelle
1
@ user56656 Du bist wieder dran :)
Laikoni
3

Emojicode , 251 Bytes

🐖🎅🏿🍇🍦b🔡🐕2🍦c🔤*🔤🍮e🔤🔤🍮y🔤🔤🍦k🍡b🔂i k🍇🍊😛🔡i🔤1🔤🍇🍊😛y e🍇🍉🍓🍇😀y🍉🍮y🔤🔤🍮y🍪e c🍪🍉🍓🍇🍮y🍪y c🍪🍮e🍪🔤 🔤 e🍪🍉🍉😀y🍉

Probieren Sie es online!

Dies ist definitiv keine Golf-Lösung, aber es gibt keine Person, die Emoji-Code als Golfsprache ansieht. Als ich mich jedoch den Schrecken der Emoji-Code-Syntax unterzog, um mir diese Monstrosität einer Sprache beizubringen, war ich angenehm überrascht, wie mächtig und effizient sie sein kann 😀

Erklärung:

🐋 🚂 🍇    👴 Define Class
🐖🎅🏿🍇    👴 Define Method
🍦b🔡🐕2    👴Convert Input integer to binary string
🍦c🔤*🔤    👴 asterisk string
🍮e🔤🔤    👴 Spacing string
🍮y🔤🔤    👴 output string
🍦k🍡b    👴 translate to iteratable
🔂i k🍇    👴 for-in loop to iterate over each digit 
🍊😛🔡i🔤1🔤🍇    👴 if digit is 1:
🍊😛y e🍇🍉    👴 don't print initial newline
🍓🍇😀y🍉    👴 print spaces + asterisks
🍮y🔤🔤    👴 reset output string
🍮y🍪e c🍪🍉    👴 add correct number of spaces and one asterisk
🍓🍇    👴 if digit is 0:
🍮y🍪y c🍪    👴 add an asterisk to the output string
🍮e🍪🔤 🔤 e🍪    👴 add another space to the space string
🍉🍉
😀y    👴 print one last output string
🍉🍉
🏁🍇    👴 Start Program
 🎅🏿 699050    👴 Call Method
🍉
X1M4L
quelle
2

JavaScript (ES6), 48 Byte

Gleiches E / A-Format und gleiche Logik wie in der nachfolgenden rekursiven Version.

a=>a.map((n,i)=>n?i&&p+0:+(p+=' '),p=`
`).join``

Probieren Sie es online!

Oder 42 Bytes, wenn dieses Format akzeptabel ist.


Rekursive Version, 56 Bytes

Übernimmt die Eingabe als Array von Ganzzahlen (0 oder 1). Verwendet 0für gefüllt und Platz für leer.

f=([n,...a],p=`
`,x=0)=>1/n?(n?x+0:+(p+=' '))+f(a,p,p):a

Probieren Sie es online!

Kommentiert

f = (               // f = recursive function taking:
  [n, ...a],        //   n = current bit; a[] = remaining bits
  p = `\n`,         //   p = padding string, initialized to a linefeed
  x = 0             //   x = 0 on the 1st iteration / equal to p after that
) =>                //
  1 / n ?           // if n is defined:
    ( n ?           //   if n = 1:
        x + 0       //     append x + 0 --> either the integer 0 on the first iteration
                    //                      or the padding string followed by a '0'
      :             //   else:
        +(          //     append the integer 0 (whitespace coerced to a number)
          p += ' '  //     and append a space to the padding string
        )           //
    ) + f(a, p, p)  //   append the result of a recursive call with x = p
  :                 // else:
    a               //   append the empty array a[], forcing coercion to a string
Arnauld
quelle
2

Bash + GNU-Dienstprogramme, 38

dc -e?2op|sed 's/\B1/^K^H*/g;s/[10]/*/g'

Hier ^Kund hier ^Hsind buchstäblich Steuerzeichen für vertikale Tabulatoren und die Rücktaste. Diese werden in Browsern nicht gut wiedergegeben, daher kann dieses Skript wie folgt neu erstellt werden:

base64 -d <<< ZGMgLWU/Mm9wfHNlZCAncy9cQjEvCwgqL2c7cy9bMTBdLyovZyc= > binpath.sh

Führen Sie in einem Terminal. Die Eingabe erfolgt über STDIN.

Diese Antwort kann die Spezifikationen zu weit ausdehnen - es gibt tatsächlich keine führenden Zeichen in jeder Ausgabezeile - alle Positionierungen erfolgen mit Steuerzeichen. Wenn dies zu lang ist, kann die Ausgabe |col -x|tacfür zusätzliche 11 Bytes weitergeleitet werden.

Digitales Trauma
quelle
2

Batch, 113 Bytes

@set s=
:l
@shift
@if %1.==0. set s=%s%+&goto l
@echo %s%+
@if not %s%.==. set s=%s:+= %
@if %1.==1. goto l

Nimmt eine Liste von Bits als Befehlszeilenargumente. Verwendung +statt *weil *hat eine besondere Bedeutung in %s:...=...%Erweiterungen.

Neil
quelle
2

Java 10, 100 106 Bytes

b->{var s="";int i=0,j;for(var c:b){if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}return s.substring(1);}

Nimmt ein Array von Booleschen Werten und gibt einen String zurück ( 0s sind leer, 1s sind gefüllt). Probieren Sie es hier online aus .

Dank an Olivier Grégoire, der mir geholfen hat, ein bisschen mehr Golf zu spielen, und mich darauf aufmerksam gemacht hat, dass mein Ausgabeformat nicht den Spezifikationen entsprach.

Ungolfed-Version:

b -> { // lambda taking an array of booleans as argument
    var s = ""; // the output String
    int i = 0,  // the number of "empty" characters to output
    j;          // iterator variable for outputting the "empty" characters
    for(var c : b) { // iterate over the boolean array (the binary digits)
        if(c) // if it's a '1'
            for(s += "\n", // output a newline
            j = i; j-- > 0;) s += 0; // output the "empty" characters
        else // if it's a '0'
            ++i; // move one to the right on the next line
        s += 1; // output the "filled" character
    }
    return s.substring(1); // output the constructed String, minus the leading newline
}
OOBalance
quelle
Ich spielte 5 Bytes Golf:{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
Olivier Grégoire
Noch weiter:{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Olivier Grégoire
Sie drucken jedoch nicht in der ersten, sondern in der zweiten Zeile. Aus der Herausforderung: "Keine führenden Leerzeichen (oder" leere "Zeichen) / Zeilen erlaubt"
Olivier Grégoire
@ OlivierGrégoire Danke. Ich habe bearbeitet.
OOBalance
2

Java (JDK 10) , 83 Byte

a->{int m[][]=new int[20][20],r=0,i=0;for(int b:a)m[r+=i<1?0:b][i++-r]=1;return m;}

Probieren Sie es online!

  • Unterstützt maximal 20 Bits.
  • Eingabe als int[]
  • Ausgabe als int[][]
Olivier Grégoire
quelle
1

Haskell , 126 Bytes

(#)n=maximum.map(!!n)
f l|s<-scanl1(zipWith(+))$(\a->[1-a,a])<$>l=unlines[[last$' ':['#'|elem[x,y]s]|x<-[0..0#s]]|y<-[1..1#s]]

Eingabe als Liste von Nullen und Einsen. Wandelt die Zahl in einen Versatz von umx↦[1-x,x] und berechnet die Teilsummen. Die endgültige Ausgabe erfolgt mit zwei verschachtelten Listenverständnissen.

Probieren Sie es online!

Angs
quelle
1

R , 59 Bytes

function(n,x=sum(n|1))matrix(1:x^2%in%cumsum((n-1)%%x+1),x)

Probieren Sie es online!

Nimmt die Eingabe als Array von Bits.

Gibt eine boolesche Matrix von TRUEund FALSEfür a *bzw. a zurück.

Außerdem befinden sich in der Fußzeile einige Informationen zum Drucken einer Matrix, die den obigen Angaben entspricht, um das Testen zu vereinfachen.

Giuseppe
quelle
1

APL + WIN, 65 oder 46 Bytes

Fordert zur Eingabe der Ganzzahl auf

n←+/i←((1+⌊2⍟n)⍴2)⊤n←⎕⋄m←(n,n)⍴' '⋄m[⊂[2](+\i),[1.1]1++\~i]←'*'⋄m

oder für den numerischen Vektor der binären Darstellung der ganzen Zahl

m←(2⍴+/n←⎕)⍴' '⋄m[⊂[2](+\i),[1.1]1++\~i]←'*'⋄m

vorausgesetzt, ich habe die Kommentare zu bestimmten Antworten richtig gelesen und die letztere Eingabe ist erlaubt.

Graham
quelle
1

Pyth, 23 Bytes

p\*VtQINp+b*Zd.?=hZ)p\*

Probieren Sie es hier aus

Erläuterung

p\*VtQINp+b*Zd.?=hZ)p\*
p\*                       Print the leading *.
   VtQ                    For each bit (excluding the leading 1)...
      IN      .?   )      ... If the bit is set...
        p+b*Zd            ... Print a newline and a bunch of spaces...
                =hZ       ... Otherwise, increase the count of spaces...
                    p\*   ... Then print the next *.

quelle
1

Perl 5 -p , 54 36 Bytes

s/./$&?"
".$"x$i.1:++$i&&1/ge;s/.//s

Probieren Sie es online!

Schneiden Sie es weit nach unten, nachdem mir klar wurde, dass die Eingabe eine Bit-Zeichenfolge sein könnte.

Xcali
quelle
1

SmileBASIC, 64 59 57 Bytes

INPUT N@L
GPSET X,Y
B=N<0X=X+B
Y=Y+(X>B)N=N<<1ON!N GOTO@L

Das höchste Bit (Vorzeichenbit) wird geprüft, und wenn es 1 ist, erhöht sich die X-Position. Wenn das Vorzeichenbit kleiner als die X-Position ist (das heißt, das Vorzeichenbit ist 0 und X ist nicht 0), erhöht sich die Y-Position.

Die erste Bewegung ist immer horizontal, sodass die Y-Bewegung bis nach der ersten X-Bewegung blockiert ist. Dies stellt sicher, dass sich die Y-Position während der führenden 0-Bits nicht erhöht.

Dann wird N nach links verschoben und dies wiederholt sich, bis N 0 erreicht.

12Me21
quelle
1

Japt , 19 17 Bytes

Ë?R+Tî +QT©Qìx
Ë?                 // Map over the input and if the current value is 1:
  R+               // Return a new line and
    Tî +           // a space repeated T (with initial value 0) times and
        Q          // a \".
         :         // If the current value is 0:
          °T       // Increment T
            ©Q     // and return \".
              Ã    // When all of that is done,
               ¬   // turn the array into a string
                x  // and trim it, removing the excess new line at the start.

Nimmt Eingaben als ein Array von Bits an, z. B. [1,0,1]Ausgaben "anstelle von *.
Zwei Bytes weniger dank Oliver .

Probieren Sie es online!

Nit
quelle
Schön. Sie können ersetzen SpTdurch - îist ähnlich wie pmit der Ausnahme, dass der Standardwert "" ist " ". Außerdem gibt es eine Abkürzung für q :¬
Oliver
@ Oliver Danke, das wusste ich nicht î, sicherlich sehr praktisch. Ich überprüfe oft, ob die Verknüpfungen verwendet werden können, aber ich vermisse immer noch einige davon. Vielen Dank für Ihre Hilfe.
Nit
1

Python 2, 113 Bytes

def f(a):
 o='*';r=[o]
 for i in bin(a)[3:]:
  if'0'<i:r+=[' '*len(r[-1][1:])]
  r[-1]+=o
 print'\n'.join(r)

Ich bin mir nicht sicher, ob dies zählt (es gibt ein Array von jeder der Zeilen aus), aber wenn ja, werde ich meine Byteanzahl auf 103 ändern:

def f(a):
 o='*';r=[o]
 for i in bin(a)[3:]:
  if'0'<i:r+=[' '*len(r[-1][1:])]
  r[-1]+=o
 print r
sonrad10
quelle
1

TI-Basic (TI-84 Plus CE), 85 Byte

Prompt L
1→X
1→Y
DelVar [A]
sum(LL
{Ans,1-Ans+dim(LL→dim([A]
1→[A](Y,X
For(I,2,dim(LL
Y+LL(I→Y
X+not(LL(I→X
1→[A](Y,X
End
[A]

Fordert zur Eingabe einer Booleschen Liste auf und gibt eine Matrix von 0 und 1 zurück.

Durchläuft die Liste, inkrementiert X, wenn das nächste 'Bit' 0 ist, ändert Y andernfalls, fügt der Matrix an dieser Stelle eine 1 hinzu und gibt die Matrix am Ende zurück.

TI-Basic ist eine Token-Sprache .

  • 1 Byte: Prompt , L* 6, (Neuer - Zeile) * 12, 1* 5, * 7, X* 5, Y* 5, sum(, L* 5, {, Ans* 2, ,* 5, -, +* 3, dim(* 3, (* 4, For(, I* 3, 2, not(, End= 73 Bytes
  • 2 Bytes Delvar , [A]* 5 = 12 Bytes
  • Gesamt: 85 Bytes

TI-Basic (TI-84 Plus CE), 56 Byte

Prompt L
1→X
1→Y
Output(Y,X,"*
For(I,2,dim(LL
Y+LL(I→Y
X+not(LL(I→X
Output(Y,X,"*
End

Dieselben Vorgänge wie oben, jedoch mit grafischer Ausgabe (begrenzt durch die Bildschirmgröße: 10 Zeilen, 26 Spalten, also maximal 10 1s und 25 0s), anstatt einer Matrix hinzuzufügen.

Pizzapants184
quelle
1

Pyth, 30 Bytes

JZFG.BQIsGIJk)p+*ZdN.?pN=hZ)=J

Probieren Sie es online!

Verwendet " anstelle von *.

Python 3 Übersetzung:
Q=eval(input())
Z=0
J=Z
for G in "{0:b}".format(Q):
    if int(G):
        if J:
            print()
        print(Z*' '+'"',end='')
    else:
        print('"',end='')
        Z+=1
    J=Q
hakr14
quelle
1

x 86.COM, 32 Byte

00h: 66 D1 E6 66 0F BD CE BF 24 AD 8E DF 41 66 0F A3 
10h: CE 19 DB 81 E3 9E 00 8D 79 02 C6 05 2A E2 EE C3 

fun:
shl esi, 1
bsr ecx, esi
mov di, $ad24
mov ds, di
inc cx
lab2:
bt esi, ecx
sbb bx,bx
and bx,158
lea di,[di+2+bx]
mov [di],byte '*'
lab1:loop lab2
ret  
l4m2
quelle