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
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
yes".9
ist1001
ich meine Eingabe sein möchte0011
. Ist das in Ordnung?1
erstes 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.Antworten:
Gelee , 8 Bytes
Eine monadische Verbindung, die eine Zahl als Liste von Einsen und Nullen akzeptiert (z. B.
13
ist[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?
quelle
MATL , 14 Bytes
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
:Ausgabe:
Eingabe
699050
:Ausgabe:
Wenn Sie möchten, können Sie den Pfad als komplexe Koordinaten für 9 Bytes anzeigen :
Probieren Sie es online!
Erläuterung
quelle
MATL , 10 Bytes
Gibt ein Array von Binärziffern ein. Gibt eine Matrix aus.
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
1009981787366 BytesProbieren Sie es online!
Rekursive Version:
Python 2 ,
716967 BytesProbieren Sie es online!
quelle
Charcoal ,
2220191110 BytesBisher nur meine zweite Antwort auf die Frage nach der Kohle.
Übernimmt die Eingabe als Binär-String (dh
699050
als10101010101010101010
).-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:
Durchlaufen Sie die Binärziffern als Zeichenfolgen
ι
:Wenn
ι
eine Zahl auf 1 zurückgesetzt wird, drucken Sie die*
nach oben, andernfalls drucken Sie die*
nach links.quelle
{}
s entfernen .Base
kostet nur 1 byte da du das nicht brauchstCast
überhaupt:F⮌↨N²¿ι↑*←*
.-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).-a
Kurz 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-l
ist keine separate Option. (auch nur-h
um Hilfe zu / Beschreibungen von Kommandozeilenargumenten zu erhalten)C # (.NET Core) ,
155123120113101 Bytes32 Bytes wurden gespeichert, da die Eingabe als Array von Bits empfangen werden kann.
7 Bytes dank @auhmaan gespart.
Dank @KevinCruijssen 10 Bytes gespart.
Probieren Sie es online!
quelle
+new string(' ',c)+"*"
zu+"*".PadLeft(c)
(spart 7 Byte)?0
anstelle von*
:if(n[i++]<1){m+="*";c++;}
anif(n[i++]<1)m+=c++%1;
und"*".PadLeft(c);
an"0".PadLeft(c);
m+=
jetzt ein Ternär sein kann, wenn:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
's und die Verwendung des ternären Operators ist wirklich klug! Ich habe auch den Fall behoben699060
, indem ich einfachc
den Anfang auf eins gesetzt habe, habe ich das beim Überprüfen der Testfälle irgendwie übersehen.05AB1E ,
181714 BytesProbieren Sie es online!
Erläuterung
05AB1E Canvas Erklärung
quelle
γ€gć¸s>«1IÔ·ÌΛ
sollte 4 Bytes sparen.Python 2 , 59 Bytes
Probieren Sie es online!
Basierend auf der Lösung von TFeld .
quelle
Haskell , 65 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als Liste von Booleschen Werten.
Curry PAKCS, 70 Bytes
Port of the Haskell antwortet, aber da
<-
es in Curry nicht funktioniert, müssen wir eine Hilfsfunktion erstellenu
. Wir müssen auch ein Leerzeichen zwischenf
und 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).
quelle
Haskell ,
74706762 BytesProbieren 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 .
quelle
Emojicode , 251 Bytes
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:
quelle
JavaScript (ES6), 48 Byte
Gleiches E / A-Format und gleiche Logik wie in der nachfolgenden rekursiven Version.
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
0
für gefüllt und Platz für leer.Probieren Sie es online!
Kommentiert
quelle
Bash + GNU-Dienstprogramme, 38
Hier
^K
und hier^H
sind 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: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|tac
für zusätzliche 11 Bytes weitergeleitet werden.quelle
Batch, 113 Bytes
Nimmt eine Liste von Bits als Befehlszeilenargumente. Verwendung
+
statt*
weil*
hat eine besondere Bedeutung in%s:...=...%
Erweiterungen.quelle
Java 10,
100106 BytesNimmt ein Array von Booleschen Werten und gibt einen String zurück (
0
s sind leer,1
s 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:
quelle
{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 Byte
Probieren Sie es online!
int[]
int[][]
quelle
Haskell , 126 Bytes
Eingabe als Liste von Nullen und Einsen. Wandelt die Zahl in einen Versatz von um
x↦[1-x,x]
und berechnet die Teilsummen. Die endgültige Ausgabe erfolgt mit zwei verschachtelten Listenverständnissen.Probieren Sie es online!
quelle
R , 59 Bytes
Probieren Sie es online!
Nimmt die Eingabe als Array von Bits.
Gibt eine boolesche Matrix von
TRUE
undFALSE
für a*
bzw. azurü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.
quelle
APL + WIN, 65 oder 46 Bytes
Fordert zur Eingabe der Ganzzahl auf
oder für den numerischen Vektor der binären Darstellung der ganzen Zahl
vorausgesetzt, ich habe die Kommentare zu bestimmten Antworten richtig gelesen und die letztere Eingabe ist erlaubt.
quelle
Pyth, 23 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
Perl 5
-p
,5436 BytesProbieren Sie es online!
Schneiden Sie es weit nach unten, nachdem mir klar wurde, dass die Eingabe eine Bit-Zeichenfolge sein könnte.
quelle
SmileBASIC,
645957 BytesDas 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.
quelle
Ruby , 63 Bytes
Probieren Sie es online!
quelle
Japt ,
1917 BytesNimmt Eingaben als ein Array von Bits an, z. B.
[1,0,1]
Ausgaben"
anstelle von*
.Zwei Bytes weniger dank Oliver .
Probieren Sie es online!
quelle
SpT
durchTî
-î
ist ähnlich wiep
mit der Ausnahme, dass der Standardwert "" ist" "
. Außerdem gibt es eine Abkürzung fürq
:¬
î
, 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.Python 2, 113 Bytes
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:
quelle
TI-Basic (TI-84 Plus CE), 85 Byte
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 .
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 BytesDelvar
,[A]
* 5 = 12 BytesTI-Basic (TI-84 Plus CE), 56 Byte
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.
quelle
Pyth, 30 Bytes
Probieren Sie es online!
Verwendet
Python 3 Übersetzung:"
anstelle von*
.quelle
x 86.COM, 32 Byte
quelle
APL (Dyalog Classic) , 18 Byte
Probieren Sie es online!
quelle