Generieren Sie die ersten n Spalten dieses Musters, wenn Sie eine Zahl n haben :
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################ ...
Die Höhe der Spalte bei (1-indiziert) n ist die Anzahl der nachfolgenden 0
Bits in der Binärdarstellung von n plus eins. Infolgedessen ist in der untersten Schicht jede Spalte ausgefüllt, in der zweiten Schicht jede zweite Spalte, in der dritten Schicht jede vierte Spalte usw.
Regeln
- Sie können mit jeder Standardmethode eingeben und ausgeben.
- Sie können davon ausgehen, dass die Eingabe eine ganze Zahl zwischen 1 und 999 einschließlich ist.
- Die Ausgabe kann beliebig viele Leerzeichen enthalten, solange das Muster intakt ist.
- Das Muster muss 1-indiziert sein und dasselbe Format haben wie hier gezeigt.
- Sie können anstelle von ein einzelnes Nicht-Leerzeichen verwenden, das Leerzeichen
#
jedoch nicht ändern.
Testfälle
1
#
2
#
##
3
#
###
4
#
# #
####
5
#
# #
#####
7
#
# # #
#######
32
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################
Einige größere Testfälle finden Sie hier .
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache.
#
?Antworten:
Python 2 , 54 Bytes
Probieren Sie es online!
Druckt mit vielen führenden Leerzeichen. Jede Zeile,
i
die abwärts zählt,n
wiederholt ein Muster von2**i-1
Leerzeichen, gefolgt von einem#
. Dieses Muster wird bis zur Breite des Lineals wiederholt, das die Eingabe istn
. Dazu multiplizieren Sie die Musterzeichenfolge mitn
und nehmen die erstenn
Zeichen mit[:n]
.Das Muster kann durch Formatieren von Zeichenfolgen für eine Alternative gleicher Länge erstellt werden.
Eine süße Aufschnittmethode ist länger.
quelle
Python 3 , 74 Bytes
Probieren Sie es online!
quelle
a=2**len(bin(n))
für 72 BytesV ,
17, 16 BytesProbieren Sie es online!
Hexdump:
Vielen Dank an @KritixiLithos für das Speichern eines Bytes!
Dieser Algorithmus ist schrecklich ineffizient, sollte aber theoretisch für jede Größeneingabe funktionieren.
Es funktioniert, indem die ersten n Iterationen des folgenden Musters generiert werden :
Und dann alle bis auf die ersten n Spalten abhacken . Als solches wird dies eine Tonne führenden Leerraums erzeugen, aber das OP sagte:
Erläuterung:
quelle
|
.JavaScript (ES6),
61-58Byte1 Byte dank @ETHProductions gespeichert, dann 2 weitere Bytes, als ich sah, dass ein beliebiges Zeichen verwendet werden könnte.
Eine rekursive Lösung.
Testfälle:
Code-Snippet anzeigen
Animation:
Code-Snippet anzeigen
quelle
c/2|0
umc>>1
ein Byte zu speichern.APL (Dyalog) , 21 Bytes
Probieren Sie es online!
'# '[
… `] Indexiere den String mit⎕
Eingabe abrufen⍳
dass viele i ntegers2⊥⍣¯1
konvertiere nach binär, benutze so viele Ziffern wie nötig (eine Zahl in jeder Spalte )⊖
umdrehen∨⍀
vertikale kumulative oder Reduktion0⍪
verketten Nullen an der Spitze⊖
auf den Kopf stellen (dh wieder auf den Kopf stellen)1+
add one (für 1-basierte Indizierung)quelle
Jelly ,
11 bis10 BytesProbieren Sie es online!
1 Byte, das nach dem OP gespeichert wurde, fügte eine Entspannung hinzu, die der Charakter nicht sein muss
#
.quelle
Oktave, 45 Bytes
Probieren Sie es auf Octave Online aus!
Anstelle von
'#'
Drucken'!'
.quelle
PHP , 139 Bytes
Probieren Sie es online!
quelle
Japt ,
2017 Bytes3 Bytes gespart dank @Shaggy und @ETHproductions
Probieren Sie es online!
Erläuterung:
Eingabe: 5
quelle
l
n&-n
, nur die letzten1
und alle nachfolgenden0
s in zu erfassenn
. IchC
8474 BytesUngolfed:
Testen Sie mit:
Erläuterung
Erneut benötigt die Rekursion in C weniger Zeichen als die Iteration, sodass die beiden Schleifen als die beiden rekursiven Aufrufe ausgedrückt werden.
Außerdem ist C eine großartige Sprache zum Spielen von Stichen mit Booleschen Ausdrücken, mit denen entschieden werden kann, ob ein Leerzeichen oder ein
#
durch den Ausdruck ausgedrückt werden soll32+3*!(i&m)
. Ein Leerzeichen hat den ASCII-Wert 32, das#
ist ASCII 35, daher wird ein Leerzeichen angezeigt, wenn eines der Bits in der Maske gesetzt isti
.quelle
int i,l,m
?Pyth , 15 Bytes
Versuch es!
Erläuterung
quelle
Python 2 , 47 Bytes
Probieren Sie es online!
quelle
JavaScript (ES8), 71 Byte
Die Funktion padStart () wurde in ECMAScript 2017 eingeführt!
Code-Snippet anzeigen
JavaScript (ES6), 77 Byte
Code-Snippet anzeigen
quelle
Mathematica, 69 Bytes
quelle
( WESRRMICGSE ): 237 Byte
In Ordung. Zeit zu erklären.
Ersetzen Sie zunächst jedes
COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1
durch einfaches[i]
für die Eingabe. Das Token zählt die Anzahl der Zellen, die eine Formel enthalten, ohne sich selbst einzuschließen, und fügt dann eine hinzu, um sich selbst einzuschließen. Da WESRRMICGSE eine Formel entsprechend der von Ihnen eingegebenen Eingabe zieht, führt dieses Token immer zur Eingabe.wir haben:
Das ist viel besser lesbar. Sie werden das
FLOOR(LOG([i],2),1)
Token häufig sehen, was einfach bedeutet, dass Sie die nächste Potenz von 2 nehmen, die kleiner ist als die[i]
Zahl von input ( ). zB:4->4, 5->4, 6->4, 7->4, 8->8 ...etc
. Ich werde das durch ersetzenGS[[i]]
besser. Wenn wir die if-Klausel auflösen, testen wir, ob die Zeile kleiner oder gleich ist
GS[[i]]+3
, da die Höhe aller Lineale der GS [[i]] + 1 entspricht. Dadurch werden die Zeilen ausgewählt, die der Höhe der entsprechen Herrscher.+1
für Zeilen mit einer Indizierung und+1
erneut für den WESRRMICGSE-Offset.Das
FALSE
Ergebnis ergibt eine leere Zelle ("") und ein echtes Ergebnis ergibtLEFT(REPT(REPT(" ",,FLOOR(POWER(2,LOG([i],2)-ROW()+2),1),1)-1) &"#",[i]),[i])
derzeit noch in Bearbeitung, bleiben Sie dran
quelle
Haskell ,
6462 BytesProbieren Sie es online! Beispiel Nutzung:
f 10
.quelle
k, 33 Bytes
Dies scheint nur in AWs Interpreter zu funktionieren .
Die oK-Version (die Sie online testen können) scheint einen Fehler zu haben, für den eine geringfügige Änderung erforderlich ist:
quelle
C #, 174 Bytes
Diese Methode hat zwei Parameter, eine Eingabe für die Länge des Lineals und eine Ausgabe, die das Lineal als Zeichenfolge darstellt.
Golf gespielt:
Eingerückt:
Probieren Sie es online!
quelle
Func<int, string>
Speichern Sie einige Bytes?Kohle ,
2723 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 4 Bytes durch Umschalten auf gespeichert
JumpTo
.quelle
JumpTo
(sorry)J, 38 Bytes
Nicht gut. Lmk wenn die Byteanzahl aus ist - ich bin auf meinem Handy.
quelle
3
Anfang ist eingegeben ...0|.@|:'#'#"0~1#.2~:/\i.#:@,]
Java (OpenJDK 8) , 91 Byte
Probieren Sie es online!
Ungolfed:
quelle
CJam, 34 Bytes
Meh.
quelle
C (gcc) , 70 Bytes
Probieren Sie es online!
quelle
n+~x
stattdessen vorn^x+1
Perl 5 , 60 + 1 (-n) = 61 Bytes
Probieren Sie es online!
quelle