Wyjście ścieżki binarnej z liczby

22

Dla liczby całkowitej, nktóra spełnia n > 0, zapisz jej wartość jako ścieżkę malejącą w prawo na podstawie jej reprezentacji binarnej.

Zasady

  • Pierwszy (najbardziej znaczący) zestaw bitów znajduje się zawsze w lewym górnym rogu.
  • Gdy ustawiony jest następny bit (a 1), narysuj znak („wypełniony”) w następnym wierszu w tej samej kolumnie, co poprzedni narysowany znak. Spróbuj użyć spacji („pustych”) do wypełnienia, ale każda postać zrobi tak długo, jak zawsze będzie taka sama.
  • Gdy następny bit jest wyłączony (a 0), narysuj znak („wypełniony”) na tej samej linii natychmiast po prawej stronie poprzedniego narysowanego znaku.
  • Twój kod musi obsługiwać liczby o co najmniej 20 znaczących bitach.
  • Napisz pełny program, funkcję, lambda itp., Ale bez fragmentu.
  • Niedozwolone są spacje wiodące (lub „puste” znaki) / linie
  • Dowolna liczba końcowych spacji (lub „pustych” znaków) / linii jest dozwolona
  • Akceptowane są wszelkiego rodzaju dane wejściowe 1D: liczba, ciąg znaków, tablica wartości logicznych itp. Nie zmieniaj jednak kolejności bitów.
  • Akceptowane są wszelkie wizualne dane wyjściowe 2D: na standardowym odcinku (z dowolnymi dwoma odrębnymi wartościami reprezentującymi „wypełnione” i „puste”), możesz nawet wyprowadzić macierz, jeśli chcesz. Lista liczb wydaje się trudna do pogodzenia z zasadą „bez spacji nagłówkowych”, ale jestem otwarty na nią, jeśli znajdziesz sposób jej użycia. Uwaga: jeśli zdecydujesz się wydrukować lub zwrócić ciąg znaków, użyte znaki muszą być znakami ASCII w zakresie punktów kodowych [32-126].
  • Standardowe luki są zabronione.
  • To jest codegolf, więc wygrywa najkrótszy kod.

Przykłady

Wejście: 1

*

Wejście: 2

**

Wejście: 3

*
*

Wejście: 4

***

Wejście: 5

**
 *

Wejście: 6

*
**

Wejście: 7

*
*
*

Wejście: 25

*
***
  *

Dane wejściowe: 699050

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

Dane wejściowe: 1047552

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

Wejście: 525311

**********
         *
         *
         *
         *
         *
         *
         *
         *
         *
         *
Olivier Grégoire
źródło
Piaskownica
Olivier Grégoire
Czy „dozwolona tablica wprowadzania wartości logicznych” oznacza, że ​​przyjmowanie danych wejściowych w postaci binarnej reprezentacji liczby jako tablicy jest dozwolone?
Nit
3
@Nit Dowolne wejście 1D. Więc jeśli liczba wynosi 5, możesz mieć tablicę wejściową podobną do [1,0,1], tak.
Olivier Grégoire,
Jak więc naprawdę ten format jest darmowy? Chciałbym podjąć szereg jako cyfr binarnych z pierwszego 1 przeniesione do końca, więc skoro 9to 1001chciałbym być mój wkład 0011. Czy to w porządku?
Ton Hospel
Posiadanie pierwszego bitu jako 1pierwszego jest częścią wyzwania, a (ponowne) przeniesienie tego bitu byłoby trywializowaniem wyzwania, więc obawiam się, że muszę powiedzieć „nie”, @TonHospel. Możesz jednak usunąć go z danych wejściowych w programie.
Olivier Grégoire,

Odpowiedzi:

7

Galaretka , 8 bajtów

¬œṗ+\Ṭz0

Łącze monadyczne przyjmujące liczbę jako listę zer i jedynek (np. 13Jest [1,1,0,1]) zwraca listę list zer i jedynek, gdzie pierwsza lista jest pierwszym wierszem.

Wypróbuj online! lub zobacz sformatowany zestaw testów

W jaki sposób?

¬œṗ+\Ṭ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
źródło
11

MATL , 14 bajtów

J_iB^YsJ+'o-'&XG

Generuje wyjście graficzne jako ścieżkę rozpoczynającą się od współrzędnych (0,0). Wypróbuj w MATL Online! Lub zobacz kilka przykładów offline poniżej:

  • Wejście 7:

    enter image description here

    Wydajność:

    enter image description here

  • Wejście 699050:

    enter image description here

    Wydajność:

    enter image description here

Jeśli wolisz, możesz zobaczyć ścieżkę jako złożone współrzędne dla 9 bajtów :

J_iB^YsJ+

Wypróbuj online!

Wyjaśnienie

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
źródło
7

MATL , 10 bajtów

YsG~YsQ1Z?

Wprowadza tablicę cyfr binarnych. Wysyła macierz.

Wypróbuj online!

Wyjaśnienie

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
źródło
6

Python 2 , 100 99 81 78 73 66 bajtów

a='';x=0
for c in input():a+=('\n'+' '*x)*c+'*';x+=1-c
print a[1:]

Wypróbuj online!

Wersja rekurencyjna:

Python 2 , 71 69 67 bajtów

f=lambda n,x=0:n and('\n'[:x]+' '*x)*n[0]+'*'+f(n[1:],x+1-n[0])or''

Wypróbuj online!

TFeld
źródło
6

Węgiel drzewny , 22 20 19 11 10 bajtów

F⮌S¿Iι↑*←*

Jak dotąd tylko moja druga odpowiedź na węgiel drzewny.

Pobiera dane wejściowe jako ciąg binarny (tj. 699050Jako 10101010101010101010).

-9 bajtów dzięki @Neil sugerującemu zapętlenie do tyłu.

Wypróbuj online.

Wyjaśnienie:

Czytaj STDIN jako ciąg w odwrotnej kolejności:

Reverse(InputString())
⮌S

Pętla nad cyframi binarnymi jako ciągami ι:

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

Jeśli ιrzut z powrotem na liczbę to 1, wydrukuj w *górę, w przeciwnym razie wydrukuj *w lewo.

If(Cast(i)) Print(:Up,"*"); Else Print(:Left,"*");
¿Iι↑*←*
Kevin Cruijssen
źródło
1
Byłoby to o połowę krótsze, gdyby wydrukować sznurek w odwrotnej kolejności, zaczynając od końca i pracując w górę i w lewo.
Neil,
@Neil Ok, teraz należy to naprawić. Dzięki! -8 bajtów
Kevin Cruijssen
1
Zapisz kolejny bajt, usuwając {}s.
Neil,
1
Basekosztuje tylko 1 bajt, jak nie trzeba Castw ogóle: F⮌↨N²¿ι↑*←*.
Neil,
1
@KevinCruijssen Przepraszam za późną odpowiedź, ale aby odpowiedzieć na twoje pytania: nie ma odwrotności -v, ponieważ Węgiel drzewny został zaprojektowany jako język golfowy, a ja dodałem tryb gadatliwy, aby ułatwić pisanie i rozumienie. (Mogę dodać, jeśli chcesz). -ajest krótki --ast, dodałem go (format wzięty z PyTek btw), aby pomóc mi zrozumieć zwięzły kod przy jak najmniejszym wysiłku: P (i to naprawdę pomaga, gdy przypadkowo pomieszałeś porządek argumentów). Ponadto nie -ljest to osobna opcja. (rób też, aby -huzyskać pomoc dotyczącą / opisów argumentów wiersza poleceń)
tylko ASCII,
6

C # (.NET Core) , 155 123 120 113 101 bajtów

Zapisano 32 bajty, ponieważ dane wejściowe można odbierać jako tablicę bitów.
Zaoszczędź 7 bajtów dzięki @auhmaan.
Zaoszczędź 10 bajtów dzięki @KevinCruijssen.

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;}

Wypróbuj online!

Ian H.
źródło
Nie można zmienić +new string(' ',c)+"*"na +"*".PadLeft(c)(oszczędność 7 bajtów)?
auhmaan
@auhmaan Masz rację, dzięki!
Ian H.
-4 bajty, drukując 0zamiast *: if(n[i++]<1){m+="*";c++;}do if(n[i++]<1)m+=c++%1;i "*".PadLeft(c);do"0".PadLeft(c);
Kevin Cruijssen
Korekta, w rzeczywistości jest to -12 bajtów, ponieważ m+=może być teraz trójskładnikiem-jeśli:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
Kevin Cruijssen
1
@KevinCruijssen Dzięki, używanie 0i korzystanie z operatora trójskładnikowego jest naprawdę sprytne! Naprawiłem też przypadek 699060, ponieważ po prostu ustawiając cjeden na początku, trochę to przeoczyłem podczas sprawdzania przypadków testowych.
Ian H.
5

05AB1E , 18 17 14 bajtów

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

Wypróbuj online!

Wyjaśnienie

γ€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 bajty dzięki @Emigna

05AB1E objaśnienie kanwy

Kaldo
źródło
1
γ€gć¸s>«1IÔ·ÌΛpowinien zaoszczędzić 4 bajty.
Emigna,
@Emigna Brilliant, dzięki! Całkowicie zapomniałem, że było wbudowane a + 2 o:
Kaldo
3

Haskell , 65 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako listę wartości logicznych.

Curry PAKCS, 70 bajtów

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

Odpowiedź portu Haskell, ale ponieważ <-nie działa w Curry, musimy włączyć funkcję pomocnika u. Musimy również dodać spację między fi. , aby Curry przeanalizował ją raczej jako kompozycję niż kropkę.

Działa to również w MCC Curry, ale nie działa w Sloth Curry (który jest jedynym obsługiwanym przez TIO).

Kreator pszenicy
źródło
3

Haskell , 74 70 67 62 bajtów

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

Wypróbuj online! Pobiera na wejściu listę zer i jedynek i zwraca ciąg rozdzielany znakiem nowej linii.

Zainspirowany odpowiedzią xnor .

Laikoni
źródło
1
Trochę przyjacielskiej konkurencji .
Kreator pszenicy,
1
@ user56656 Twoja kolej ponownie :)
Laikoni,
3

Emojicode , 251 bajtów

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

Wypróbuj online!

To zdecydowanie nie jest rozwiązanie do gry w golfa, ale nie ma osoby, która uważa kod Emoji za język golfa. Jednak w trakcie poddawania się okropnościom, które są składnią kodu emoji, w celu nauczenia się tej potworności języka, byłem mile zaskoczony tym, jak potężny i wydajny może być 😀

Wyjaśnienie:

🐋 🚂 🍇    👴 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
źródło
2

JavaScript (ES6), 48 bajtów

Ten sam format we / wy i taka sama logika, jak w poniższej wersji rekurencyjnej.

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

Wypróbuj online!

Lub 42 bajty, jeśli ten format jest akceptowalny.


Wersja rekurencyjna, 56 bajtów

Pobiera dane wejściowe jako tablicę liczb całkowitych (0 lub 1). Używa 0wypełnienia i miejsca na puste.

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

Wypróbuj online!

Skomentował

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
źródło
2

Narzędzia Bash + GNU, 38

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

Tu ^Ki ^Hsą dosłowne pionowy-Tab i kontroli Backspace znaków. Nie wyświetlają się one dobrze w przeglądarkach, więc ten skrypt można odtworzyć w następujący sposób:

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

Uruchom w terminalu. Wejście odbywa się przez STDIN.

Ta odpowiedź może zbytnio rozszerzyć specyfikację - w rzeczywistości nie ma wiodących znaków w każdym wierszu wyniku - całe pozycjonowanie odbywa się za pomocą znaków kontrolnych. Jeśli jest to zbyt duży odcinek, dane wyjściowe można przesłać do |col -x|tacdodatkowych 11 bajtów.

Cyfrowa trauma
źródło
2

Partia, 113 bajtów

@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

Pobiera listę bitów jako argumenty wiersza polecenia. Używa +zamiast *ponieważ *ma specjalne znaczenie w %s:...=...%rozszerzeniach.

Neil
źródło
2

Java 10, 100 106 bajtów

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);}

Pobiera tablicę booleanów i zwraca ciąg znaków ( 0s są puste, 1s są wypełnione). Wypróbuj online tutaj .

Podziękowania dla Oliviera Grégoire'a za to, że pomógł mi trochę pograć w golfa i ostrzegł mnie, że mój format wyjściowy nie był zgodny ze specyfikacją.

Wersja bez golfa:

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
źródło
Grałem w 5 bajtów:{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
Olivier Grégoire
Co więcej:{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Olivier Grégoire
Chociaż nie drukujesz w pierwszym wierszu, ale w drugim. Z wyzwania: „Żadne spacje wiodące (lub„ puste ”znaki) / linie nie są dozwolone”
Olivier Grégoire,
@ OlivierGrégoire Thanks. Edytowałem.
OOBalance,
2

Java (JDK 10) , 83 bajty

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;}

Wypróbuj online!

  • Obsługuje maksymalnie 20 bitów.
  • Wprowadź jako int[]
  • Dane wyjściowe jako int[][]
Olivier Grégoire
źródło
1

Haskell , 126 bajtów

(#)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]]

Wprowadź jako listę zer i jedynek. Przekształca liczbę na przesunięcie x↦[1-x,x]i oblicza sumy częściowe. Ostateczne dane wyjściowe są wykonywane za pomocą dwóch zagnieżdżonych list.

Wypróbuj online!

Angs
źródło
1

R , 59 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako tablicę bitów.

Zwraca wartość logiczną macierzy TRUEi FALSEreprezentujących odpowiednio a *i a .

W stopce jest także kilka elementów do wydrukowania matrycy odpowiadającej powyższej specyfikacji, co ułatwia testowanie.

Giuseppe
źródło
1

APL + WIN, 65 lub 46 bajtów

Monituje o wprowadzenie liczby całkowitej

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

lub dla wektora liczbowego reprezentacji binarnej liczby całkowitej

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

zakładając, że poprawnie przeczytałem komentarze do niektórych odpowiedzi, a te drugie dane są dozwolone.

Graham
źródło
1

Pyth, 23 bajty

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

Wypróbuj tutaj

Wyjaśnienie

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

źródło
1

Perl 5 -p , 54 36 bajtów

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

Wypróbuj online!

Obetnij to znacznie, gdy zdałem sobie sprawę, że dane wejściowe mogą być nieco ciągiem znaków.

Xcali
źródło
1

SmileBASIC, 64 59 57 bajtów

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

Sprawdzany jest najwyższy bit (bit znaku), a jeśli wynosi 1, pozycja X wzrasta. Jeśli bit znaku jest mniejszy niż pozycja X (to znaczy bit znaku wynosi 0, a X nie jest 0), pozycja Y wzrasta.

Pierwszy ruch zawsze będzie przebiegał poziomo, więc ruch Y jest blokowany aż do pierwszego ruchu X. Zapewnia to, że pozycja Y nie wzrośnie podczas wiodących 0 bitów.

Następnie N przesuwa się w lewo i to się powtarza, aż N osiągnie 0.

12Me21
źródło
1

Japt , 19 17 bajtów

Ë?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.

Pobiera dane wejściowe jako tablicę bitów, na przykład dane [1,0,1]wyjściowe "zamiast *.
Ogolił dwa bajty dzięki Oliverowi .

Wypróbuj online!

Gnida
źródło
Niezłe. Można wymienić SpTz - îjest podobna do p, oprócz tego, że do wartości domyślnych " ". Istnieje również skrót do q :¬
Oliver
@Oliver Dzięki, nie wiedziałem o î, na pewno bardzo przydatny. Często sprawdzam szanse na skorzystanie ze skrótów, ale wciąż zawsze brakuje niektórych z nich, dziękuję bardzo za pomoc.
Nit,
1

Python 2, 113 bajtów

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)

Nie jestem pewien, czy ten się liczy (wyświetla tablicę każdej z linii), ale jeśli tak, to zmienię liczbę bajtów na 103:

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
źródło
1

TI-Basic (TI-84 Plus CE), 85 bajtów

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]

Monituje o listę boolowską, zwraca macierz 0 i 1.

Przechodzi przez listę, zwiększając X, jeśli następny „bit” ma wartość 0, w przeciwnym razie zmieniając Y, a następnie dodając 1 do macierzy w tym miejscu i zwraca macierz na końcu.

TI-Basic to tokenizowany język .

  • 1 bajt: Prompt , L* 6 (nowalinia) * 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 bajtów
  • 2 bajtów: Delvar , [A]* 5 = 12 bajtów
  • Łącznie: 85 bajtów

TI-Basic (TI-84 Plus CE), 56 bajtów

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

Te same procesy, co powyżej, ale z wykorzystaniem grafiki (ograniczonej wielkością ekranu: 10 wierszy, 26 kolumn, a więc maksymalnie 10 1s i 25 0s) bez dodawania do matrycy.

pizzapanty184
źródło
1

Pyth, 30 bajtów

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

Wypróbuj online!

Używa "zamiast* .

Tłumaczenie Python 3:
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
źródło
1

x86 .COM, 32 bajty

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
źródło