Dla liczby całkowitej, n
któ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
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
, tak.9
to1001
chciałbym być mój wkład0011
. Czy to w porządku?1
pierwszego 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.Odpowiedzi:
Galaretka , 8 bajtów
Łącze monadyczne przyjmujące liczbę jako listę zer i jedynek (np.
13
Jest[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?
źródło
MATL , 14 bajtów
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
:Wydajność:
Wejście
699050
:Wydajność:
Jeśli wolisz, możesz zobaczyć ścieżkę jako złożone współrzędne dla 9 bajtów :
Wypróbuj online!
Wyjaśnienie
źródło
MATL , 10 bajtów
Wprowadza tablicę cyfr binarnych. Wysyła macierz.
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
1009981787366 bajtówWypróbuj online!
Wersja rekurencyjna:
Python 2 ,
716967 bajtówWypróbuj online!
źródło
Węgiel drzewny ,
2220191110 bajtówJak dotąd tylko moja druga odpowiedź na węgiel drzewny.
Pobiera dane wejściowe jako ciąg binarny (tj.
699050
Jako10101010101010101010
).-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:
Pętla nad cyframi binarnymi jako ciągami
ι
:Jeśli
ι
rzut z powrotem na liczbę to 1, wydrukuj w*
górę, w przeciwnym razie wydrukuj*
w lewo.źródło
{}
s.Base
kosztuje tylko 1 bajt, jak nie trzebaCast
w ogóle:F⮌↨N²¿ι↑*←*
.-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).-a
jest 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-l
jest to osobna opcja. (rób też, aby-h
uzyskać pomoc dotyczącą / opisów argumentów wiersza poleceń)C # (.NET Core) ,
155123120113101 bajtówZapisano 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.
Wypróbuj online!
źródło
+new string(' ',c)+"*"
na+"*".PadLeft(c)
(oszczędność 7 bajtów)?0
zamiast*
:if(n[i++]<1){m+="*";c++;}
doif(n[i++]<1)m+=c++%1;
i"*".PadLeft(c);
do"0".PadLeft(c);
m+=
może być teraz trójskładnikiem-jeśli:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
i korzystanie z operatora trójskładnikowego jest naprawdę sprytne! Naprawiłem też przypadek699060
, ponieważ po prostu ustawiającc
jeden na początku, trochę to przeoczyłem podczas sprawdzania przypadków testowych.05AB1E ,
181714 bajtówWypróbuj online!
Wyjaśnienie
05AB1E objaśnienie kanwy
źródło
γ€gć¸s>«1IÔ·ÌΛ
powinien zaoszczędzić 4 bajty.Python 2 , 59 bajtów
Wypróbuj online!
Oparty na rozwiązaniu TFeld .
źródło
Haskell , 65 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę wartości logicznych.
Curry PAKCS, 70 bajtów
Odpowiedź portu Haskell, ale ponieważ
<-
nie działa w Curry, musimy włączyć funkcję pomocnikau
. Musimy również dodać spację międzyf
i.
, 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).
źródło
Haskell ,
74706762 bajtówWypróbuj online! Pobiera na wejściu listę zer i jedynek i zwraca ciąg rozdzielany znakiem nowej linii.
Zainspirowany odpowiedzią xnor .
źródło
Emojicode , 251 bajtów
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:
źródło
JavaScript (ES6), 48 bajtów
Ten sam format we / wy i taka sama logika, jak w poniższej wersji rekurencyjnej.
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
0
wypełnienia i miejsca na puste.Wypróbuj online!
Skomentował
źródło
Narzędzia Bash + GNU, 38
Tu
^K
i^H
są 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: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|tac
dodatkowych 11 bajtów.źródło
Partia, 113 bajtów
Pobiera listę bitów jako argumenty wiersza polecenia. Używa
+
zamiast*
ponieważ*
ma specjalne znaczenie w%s:...=...%
rozszerzeniach.źródło
Java 10,
100106 bajtówPobiera tablicę booleanów i zwraca ciąg znaków (
0
s są puste,1
s 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:
źródło
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 bajty
Wypróbuj online!
int[]
int[][]
źródło
Haskell , 126 bajtów
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!
źródło
R , 59 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako tablicę bitów.
Zwraca wartość logiczną macierzy
TRUE
iFALSE
reprezentują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.
źródło
APL + WIN, 65 lub 46 bajtów
Monituje o wprowadzenie liczby całkowitej
lub dla wektora liczbowego reprezentacji binarnej liczby całkowitej
zakładając, że poprawnie przeczytałem komentarze do niektórych odpowiedzi, a te drugie dane są dozwolone.
źródło
Pyth, 23 bajty
Wypróbuj tutaj
Wyjaśnienie
źródło
Perl 5
-p
,5436 bajtówWypróbuj online!
Obetnij to znacznie, gdy zdałem sobie sprawę, że dane wejściowe mogą być nieco ciągiem znaków.
źródło
SmileBASIC,
645957 bajtówSprawdzany 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.
źródło
Rubinowy , 63 bajty
Wypróbuj online!
źródło
Japt ,
1917 bajtówPobiera 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!
źródło
SpT
zTî
-î
jest podobna dop
, oprócz tego, że do wartości domyślnych" "
. Istnieje również skrót doq
:¬
î
, 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.Python 2, 113 bajtów
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:
źródło
TI-Basic (TI-84 Plus CE), 85 bajtów
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 .
Prompt
,L
* 6 (nowalinia) * 121
* 5→
* 7X
* 5Y
* 5sum(
,L
* 5{
,Ans
* 2,,
* 5-
,+
* 3,dim(
* 3,(
* 4For(
,I
* 3,2
,not(
,End
= 73 bajtówDelvar
,[A]
* 5 = 12 bajtówTI-Basic (TI-84 Plus CE), 56 bajtów
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.
źródło
Pyth, 30 bajtów
Wypróbuj online!
Używa
Tłumaczenie Python 3:"
zamiast*
.źródło
x86 .COM, 32 bajty
źródło
APL (Dyalog Classic) , 18 bajtów
Wypróbuj online!
źródło