Bei einer gegebenen Anordnung positiver Ganzzahlen in der Basis 10 wird n > 0
deren Darstellung einer binären Wand ausgegeben.
Wie funktioniert das?
- Wandle jede Zahl in ihre Binärdarstellung um.
- Füllen Sie die Darstellung mit führenden Nullen auf die Länge der längsten auf, dh
1, 2
->1, 10
->01, 10
. - Erstellen Sie eine Wand, an der die
1
s Steine sind und0
s Steine fehlen.
Eine Wand ist ein Zeichenblock, in dem jedes druckbare Zeichen einen Baustein darstellt und ein Leerzeichen ( 32
) einen fehlenden Baustein darstellt . Sie können ein beliebiges Zeichen für den Baustein auswählen. Es muss nicht über die gesamte Wand verteilt sein, solange es sich nicht um ein Leerzeichen handelt. Das fehlende Backstein-Zeichen muss ein Leerzeichen sein. Für das folgende Beispiel habe ich *
die Steine verwendet.
Beispiel
Eingang:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Ausgabe:
**** *** ** * * **
Regeln
- Die Eingabe muss in Basis 10 erfolgen, wenn Ihre Sprache andere Basen akzeptiert, dürfen Sie diese nicht verwenden.
- Führende und nachfolgende neue Zeilen sind erlaubt.
- Die Eingabe kann als Liste von ganzen Zahlen, getrennten Argumenten oder in einem angemessenen Format erfolgen.
- Die Ausgabe kann in jedem vernünftigen Format erfolgen: durch neue Zeilen getrennte Zeichenfolge, Array von Zeilen, 2D-Array usw.
- Standardlücken sind nicht zulässig.
Testfälle
Beachten Sie, dass im ersten Testfall alle Ebenen am Ende einen leeren Stein haben.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
Dies ist Codegolf, also gewinnt der kürzeste Code!
[[1, " ", 1, " "], ...]
Antworten:
MATL , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
42*
oder so etwas ...100
oder eine andere Zahl eingebaut ist ?J , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
#:
deshalb schlägt das Jelly.Gelee , 9 Bytes
Probieren Sie es online!
EDIT: WIE J JELLY UNMÖGLICH BEAT> _ <
quelle
Oktave, 22 Bytes
Probieren Sie es online aus
Erläuterung:
Dank Luis Mendo einige Bytes gespart! Außerdem habe ich nicht bemerkt, dass ich auswählen konnte, mit welchem Charakter die Mauer gebaut werden soll, nicht nur
*
.Oder mit
de2bi
:Erläuterung:
Das Folgende funktioniert auf TIO, für 7 Bytes mehr:
Probieren Sie es hier aus
quelle
Python 3 ,
88 84 71 7472 BytesEin Lambda, das eine Liste von Zeichenfolgen zurückgibt, die jede Zeile darstellen.
Probieren Sie es online! (Link zur durch Newline getrennten Version)
Erläuterung
lambda n:
- Erstellt ein (anonymes) Lambda mit einem Parametern
. Gibt implizit zurück.[...]
- Erstellt ein Listenverständnis.bin(x)[2:]
- Ruft die binären Darstellungen der Zahlen ab..replace(*'0 ')
- Ersetzt alle Vorkommen0
durch ein Leerzeichen..rjust(len(bin(max(n)))-2)
- Füllt die binären Darstellungen mit der Länge der längsten auf.for x in n
- Durchläuftn
mit der Variablenx
.Änderungsprotokoll
-
1- 3 Bytes dank @Rod,-(...)+2
=2-(...)
, Verwendung vonrjust()
bin()
Stattdessen wurde eine Version mit hinzugefügt , die ungültig war, da sie für1
und nicht funktionierte2
.Behebung des obigen Fehlers mitformat()
.Der Rückgabetyp wurde in die Liste der Zeichenfolgen geändert, da dies vom OP zugelassen wurde.
Es wurde ein weiterer Fehler behoben, bei dem @Rod verwendet
rjust()
und zurückgeschaltet hatbin()
, der entdeckt und behoben wurde.quelle
JavaScript (ES6),
8179 ByteEs wurden 2 Byte gespeichert, indem Zahlen anstelle von Zeichen für die Bausteine verwendet wurden, wie von Rick Hitchcock vorgeschlagen
Gibt ein 2D-Array mit 1 für die Bausteine zurück.
Testfälle
Code-Snippet anzeigen
quelle
Haskell ,
767574 BytesProbieren Sie es online!
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
quelle
b0ð:í.Bí»
für 9 Bytes.Rubin,
6359 Bytes-4 Bytes mit Hilfe von Alexis Andersen
Probieren Sie es online!
quelle
n.max.to_s(2).size
mit ersetzen,('%b'%n.max).size
und Sie müssen das1
mit eigentlich nicht ersetzen*
R 87
88BytesWandblöcke vertreten durch
8
, weil, gut viele acht.Probieren Sie es online!
Die Eingabe-Integer-Liste wird in ein Array von Bits konvertiert, die von nachfolgenden 0-Bits abgeschnitten und umgekehrt werden.
Das reduzierte Array wird dann unter Verwendung
write
einer Spaltenbreite ausgegeben, die bestimmt wurde, als das Array zugeschnitten wurde.ifelse()
ist die einzige IF-Option, die bei Vektoren leider funktioniert.quelle
1
anstatt""
für die Ausgabedatei verwenden könnenwrite
.Python 2 , 77 Bytes
Probieren Sie es online!
quelle
APL (Dyalog) ,
30222014 Bytes6 Bytes gespart dank @ Adám
Probieren Sie es online!
(setzt voraus
⎕IO←0
, dass dies auf vielen Rechnern Standard ist)Dies nimmt Eingaben als Array und gibt eine Matrix mit
*
s unds zurück.
Erläuterung
quelle
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 Bytes
Verwendet
1
für das Ziegelsteinstück, setzt voraus, dass die Eingabe von der Tabelle stammt@
Ungolfed, mit einer Erklärung
quelle
Mathematica, 40 Bytes
Ziegel sind 1s
Mathematica, 48 Bytes
Ziegel sind #
quelle
//.
. (/.
bedeutet "einmal ersetzen",//.
bedeutet "den Austausch fortsetzen, bis sich das Ding nicht mehr ändert".)C # (.NET Core) ,
112 + 18 = 130,86 + 41 = 127 ByteProbieren Sie es online!
Die Byteanzahl umfasst 41 Bytes von
using System.Linq;using C=System.Convert;
. Verwendet1
als Zeichen für die Wand. Trotzdem ist das auch für C # viel zu lang ...quelle
namespace System.Linq{}
, um einige Bytes zu speichern. Ista.Max()
garantiert wahr (ich bin mir sicher, dass ich mit binary: P nicht der klügste bin)? Würden Sieclass Convert{}
keine Bytes speichern?using System.Linq;using C=System.Convert;
zur Byteanzahl hinzugefügt habe , da diese beidenusing
Anweisungen für die Kompilierung des Codes benötigt werden.Retina , 63 Bytes
Probieren Sie es online! Erläuterung:
In Unary konvertieren und Suffix a
<
.In Binärdatei konvertieren.
Wenn alle
<
s links angekommen sind, löschen Sie sie alle.Fügen Sie ein Leerzeichen vor allen
<
S ein, die bereits links angekommen sind.Bewegen Sie alle
<
s einen Schritt nach links. Spülen und wiederholen.quelle
PowerShell , 100 Byte
Probieren Sie es online!
Es
convert
ist so schmerzhaft, in PowerShell binär zu sein. Plus.length
y Anrufe an-replace
die0
mit Leerzeichen und einem langen.padLeft()
Anruf, um sie alle gleich zu machen.length
, alles summiert sich zu einer langen Einreichung.Golfvorschläge unter 100 sind willkommen.
quelle
PHP, 84 Bytes
Glücklicherweise wandelt die Bit-Operation das
log
Ergebnis in int um. float würde hier nicht funktionieren.Probieren Sie es online aus .
quelle
Clojure, 185 Bytes
Ungolfed-Version:
Anonyme Funktion, die das Argument als Liste aufnimmt. Liefert die Zeilen als Liste.
Ich wette, die anderen Antworten zu lesen, könnte kleiner sein.
clojure.string/replace
braucht eine obszöne Menge an Zeichen, um zu schreiben ..quelle
Japt ,
3330 BytesProbieren Sie es online!
3 Bytes gespart dank gespart @Justin Mariner
Erläuterung
quelle
-R
Flag (nicht zur Byte-Anzahl hinzugefügt) verwenden, um die Ausgabe mit Zeilenumbrüchen anzuzeigen: hier .Python 3 ,
92-90BytesProbieren Sie es online!
Gibt eine Liste von Zeilen zurück. Wenn Sie sie aufeinander stapeln, werden sie tatsächlich richtig ausgerichtet.
Die Panne
Wandelt das Array im Wesentlichen in Binär um und ersetzt dann alle Nullen durch Leerzeichen.
N
Die Anzahl der Leerzeichen wird vor jeder Zeile hinzugefügt, in derN = [length of longest line] - [length of line]
.-1 bytes
Vielen Dank an Herrn XoderProbieren Sie es online!
quelle
'0',' '
durch*'0 '
.Japt , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
z3 z
. Nicht sicher, warumy y
es dort nicht funktioniert, ich werde es später untersuchen ...Java 7,
13010888 Bytes22 dank @TheLethalCoder gespeichert 20 dank @Xanderhall gespeichert
Ungolfed:
quelle
i
umb[i]
, um ein Byte zu speichern. Du kannst die Ausgabe mit1
's behalten , also brauchst du das nicht.replace('1','*')
. Verwenden Sie stattdessen Java 8 und kompilieren Sie es in ein Lambda, um Bytes zu sparen. Wenn Sie dies nicht möchten, wirdint[]b
ein Byte gespeichert.i++
ausgewertet undi
dann inkrementiert (wohingegen++i
das Gegenteil der Fall ist), so dass Sie diei++
aus derfor
Schleife bewegen undb[i++]
stattdessen verwenden können. Oh, und während wir gerade dabei sind, haben Sie nur eine Linie in Ihrer Schleife, sodass die Klammern nicht benötigt werden.for(int x:i)
Sie können auchLong.toBinaryString
anstelle der Integer-Version 3 Byte speichern.Python 2, 217 Bytes
Nach 2 Stunden Codierung habe ich entschieden, dass dies eine schlechte Idee ist
Verwendung in Ubuntu
Installieren Sie numpy
Erstellen Sie eine Datei mit dem Namen
i
mit Eingabe im Format14 4 6 2
Lauf
quelle
8. ,
232254250 ByteCode
Ungolfed-Version mit Kommentaren
Diese Wörter müssen nacheinander aufgerufen werden (siehe Beispiel)
Verwendung und Beispiele
Oder klarer
quelle
Pyth, 16 Bytes
Probieren Sie es hier aus. Achten Sie auf das nachgestellte Leerzeichen.
quelle
Excel VBA,
170161 BytesGolf gespielt
Anonyme VBE-Direktfensterfunktion, die die Eingabe des Formats
1 2 3 .. n
aus dem Bereich übernimmt[A1]
und die entsprechende Binärwand über den Bereich an das VBE-Direktfenster ausgibt[B1,C1,2:2]
Formatiert:
Ungolfed
Vollständige
Sub
Routine, die die Eingabe des Formats übernimmtArray(1, 2, 3...)
und die entsprechende Binärwand über den Bereich an das VBE-Direktfenster ausgibt[A1,B1,2:2]
quelle
Holzkohle , 20 Bytes
Probieren Sie es online!Link ist eine ausführliche Version des Codes. Konvertiert manuell jede eingegebene Zahl in eine Binärdatei, druckt sie jedoch in der Reihenfolge von rechts nach links. Ich nehme die Eingabe als Newline-terminierte Zeichenfolge, da Charcoal keine gute Möglichkeit hat, Listen einzugeben, da ich sonst so etwas schreiben würde, was derzeit leider 21 Bytes benötigt:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Diese Version vektorisiert über das Eingabearray, obwohl die Ausgabe in
-
s fest codiert ist, wodurch ein Byte gespart wird.quelle