Ein Tornado sieht meiner Meinung nach so aus:
########
#######
######
#####
####
###
##
#
Dieser Tornado beginnt mit der Breite n
und in jeder nächsten Zeile wird je nach Eingabe ein Zeichen von links oder rechts entfernt.
Eingang
Die Eingabe ist eine Liste von zwei beliebigen eindeutigen Werten (eine Zeichenfolge mit zwei eindeutigen Zeichen funktioniert auch) und eine optionale positive Ganzzahl zur Angabe der Startbreite. Wenn die optionale Ganzzahl nicht verwendet wird, ist die Startbreite 1 größer als die Länge der Liste. Die Startbreite sei n
.
Wie man einen Tornado macht
In meinem Beispiel wähle ich meine Liste so aus, dass sie 1
s und 0
s enthält. Sie können jedoch auch zwei unterschiedliche konstante Werte oder eine Zeichenfolge aus zwei unterschiedlichen konstanten Zeichen auswählen.
Die erste Zeile besteht aus n
Nicht-Leerzeichen (Sie können ein beliebiges konsistentes Zeichen auswählen; ich wähle es #
für mein Beispiel aus).
0
Entfernen Sie dann für jede Nummer in der Liste, wenn die Nummer ist , das linke Zeichen und erstellen Sie eine neue Zeile; Wenn dies der Fall ist 1
, entfernen Sie das richtige Zeichen und erstellen Sie eine neue Zeile.
Somit ist der obige Tornado die Ausgabe für 8, [1, 0, 0, 0, 1, 0, 0]
.
Ausgabe
Die Ausgabe kann eine Liste von Zeichenfolgen, eine Liste von Zeichenlisten oder eine mehrzeilige Zeichenfolge sein. Es ist zulässig, in jeder Zeile Leerzeichen nachzustellen und am Ende eine neue Zeile nachzustellen.
Testfälle
Diese Testfälle enthalten die Startbreite und Verwendungslisten von 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
Regeln
- Es gelten Standardlücken
- Kürzester Code in Bytes gewinnt! Code-Golf
- Hintergrund muss kein Leerzeichen sein (ich habe vergessen, dies vorher anzugeben).
- Ihre Sprache muss nur Zahlen (Breiten) unterstützen, die verarbeitet werden können. Wenn Ihr Dolmetscher jedoch mit einer größeren Zahl umgeschrieben wurde, muss dies theoretisch funktionieren.
Antworten:
V ,
15, 12 BytesProbieren Sie es online!
l
für rechts (macht durchaus Sinn, nicht wahr?) und>
für links.quelle
Python 2 ,
6659 Bytes-7 Bytes dank Arnold Palmer
Probieren Sie es online!
0
von rechts1
entfernen, von links entfernenquelle
len(z)+1
mit ,x
wenn „optional positive ganze Zahl“ bedeutet Sie müssen es nicht verwenden. Der Wortlaut der Frage lässt den Eindruck entstehen, dass dies zulässig ist, da dort steht "Wenn die optionale Ganzzahl nicht verwendet wird" im Vergleich zu "Wenn die optionale Ganzzahl nicht angegeben wird".vim,
8582 bytes<ESC>
0x1B ist,<CR>
ist0x0D
,<C-v>
ist 0x16. Und<ESC>OH
ist eine Multibyte-Sequenz, die die HOME-Taste darstellt.Die Eingabe verwendet
a
als Wert "Links entfernen" undb
als Wert "Rechts entfernen".Leider kein TIO-Link. Ich konnte es unter V nicht zum
<ESC>
Laufen bringen . Testen Sie es, indem Sie den Code in die Datei tornado.vim kopieren ( usw. durch die tatsächlichen Bytes ersetzen ) und wie folgt ausführen :-3 Bytes aufgrund von Neils Vorschlag.
quelle
^
statt verwenden␛OH
?^
geht zum ersten nicht leeren Zeichen.␛OH
geht zum ersten Zeichen.0
nicht ...05AB1E ,
119 Bytes-2 Bytes dank Erik dem Outgolfer
Von links
1
entfernen : Von rechts entfernen:
0
Probieren Sie es online!
quelle
0×ηsηO
hat so viel Potenzial, aber ich kann es nicht unter 11 Bytes herausfinden.ðy×ì
mityú
für -2.Retina ,
3028 BytesProbieren Sie es online! Nimmt nur eine Zeichenfolge von 0 und 1 und berechnet die Breite basierend auf der Zeichenfolge. Erläuterung: In der ersten Stufe wird die Eingabezeichenfolge einmal für jeden Grenzpunkt dupliziert und
#
an dieser Stelle ein eingefügt. In der zweiten Stufe werden dann alle Ziffern nach "#
to more#
s" geändert und das Dreieck erstellt. Der dritte Wert löscht dann alle verbleibenden Einsen und ändert die Nullen in Leerzeichen, was zum "Wackeln" des Torndao führt.quelle
J, 32 Bytes
ungolfed
Probieren Sie es online!
quelle
' #'#~0(,.#\.)@,+/\
, wobei die Eingabe vom Sample invertiert wird, da Sie bei der Abfrage die beiden unterschiedlichen Werte auswählen können.Perl, 43 Bytes
42 Byte Code + 1 für
-l
.Probieren Sie es online!
quelle
R ,
8582 BytesDank Giuseppe 3 Bytes gespart
Probieren Sie es online!
Erläuterung:
quelle
{}
und stattdessen eine wörtliche Newline verwendet'\n'
Haskell, 50 Bytes
Probieren Sie es online!
Wenn die Eingabeliste eine Liste von Funktionsnamen sein kann, können wir ein Byte speichern
Haskell, 49 Bytes
Anwendungsbeispiel:
h 5 [g,f,f,g]
.Probieren Sie es online!
Wie es funktioniert:
quelle
Python 2,
5857 Bytesedit: 1 byte dank xnor gespeichert
Probieren Sie es online!
1 zum Entfernen von links, 0 zum Entfernen von rechts.
quelle
s=" "*i+s[:-1]
mit links und rechts tauschen.R ,
116109102 Bytes-5 Bytes dank user2390246 (und weitere 2 habe ich mir selbst gespart)
Vom User2390246 überfordert
Probieren Sie es online!
Returns eine anonyme Funktion , die nimmt
n
und einen Vektorl
mit0
für von links entfernen und1
für von der rechten Seite zu entfernen, und druckt das Ergebnis Konsole mit der rechten Formatierung.quelle
#
s n-i + 1 ist: Probieren Sie es online aus! Zwar gibt es einen etwas besseren Ansatz ist , wenn Sie gerade Linie eher für Zeile gedruckt wird als Konstruktion eine Matrix: codegolf.stackexchange.com/a/133720/66252Japt ,
1413 Bytes-1 Byte dank @ETH
Eingabe ist das Array, dann die Größe. Array-Werte sind
""
oder" "
, die das Entfernen von rechts bzw. links darstellen. Verwendet"
anstelle von#
und gibt als Array von Zeichenfolgen zurück.Die Idee hier war, zuerst ein Array des linken Abstands für jede Zeile zu erstellen, daher die Eingabezeichenfolgen. Dann wird jeder Zeile das
"
s hinzugefügt, wobei die Menge von"
s jedes Mal um 1 verringert wird.Probieren Sie es online!
Diese verwenden alle das
-R
Flag, um die Ausgabe zu formatieren, indem sie mit Zeilenumbrüchen verbunden werden.Erläuterung
Implizit:
U
= Eingabearray,V
= Eingabenummer.Reduzieren Sie kumulativ das Eingabearray (
å
) mit der Zeichenfolgenverkettung (+
). Dies ergibt das Array jedes Zwischenwertes der Reduktion. Stellen Sie dem Array dannu
eine leere Zeichenfolge (P
) voran.Ordne
£
jeden Wert sich selbst zu (X
) verknüpft mit ...Das Anführungszeichen (
Q
) wurde (p
)V--
(V´
) Mal wiederholt . Dies verringert sich auchV
jedes Mal.quelle
YnV
aufV´
++
oder--
in Japt zu verwenden.ArnoldC , 3132 Bytes
ArnoldC hat keine Zeichenfolgenverkettungen, daher wird aus
8
s ein Tornado erstellt, der mit1
s ausgeblendet wird. ArnoldC unterstützt auch nur bis zu 16-Bit-Ganzzahlen, sodass bei Eingaben mit mehr als 7 Stellen ein Überlauf auftritt. (So wird es nur Mini-Tornados machen)1
ist links, jede andere Ziffer ist rechts (obwohl ich nicht empfehlen würde0
, da man damit nicht anfangen kann.)Eingang:
1221122
Ausgabe:
Golf Code:
Probieren Sie es online!
Ungolfed Code (5178 Bytes):
quelle
Haskell ,
6764 BytesDie Eingabe wird umgedreht:
0
bedeutet rechts1
entfernen und links entfernen:Probieren Sie es online!
"Ungolfed"
quelle
Java (OpenJDK 8) ,
138133 BytesProbieren Sie es online!
quelle
C
6863 BytesHierbei wird die dynamische Feldbreitenangabe in einer
printf()
Formatzeichenfolge verwendet. Die Funktion heißt so:quelle
int s=0;
unds;
vor das einfügenf(w,i)
. Wie soJavaScript (ES6), 64 Byte
Anonyme Funktion, die Parameter in der aktuellen Syntax (a) (b) verwendet. Im Array b steht eine leere Zeichenfolge für das Entfernen von rechts und ein Leerzeichen für das Entfernen von links.
Bei Verwendung von 1 und 0 wie in den Beispielen beträgt die Punktzahl 70
Prüfung
quelle
PowerShell , 53 Byte
Probieren Sie es online!
Übernimmt die Eingabe
$a
als optionale Ganzzahl und$b
als Array von1
und0
s. (Beachten Sie, dass mein Array von1
und0
aus der Herausforderung gespiegelt wird.) Konstruiert die Anfangszeile von#
und belässt diese in der Pipeline. Dann geht es weiter von0
bis$a
. Bei jeder Iteration geben wir eine möglicherweise inkrementierte Anzahl von Leerzeichen aus, gefolgt von einer vordekrementierten Anzahl von#
. Ja, dies wird am Ende eine leere, nachgestellte Zeile ausspucken, da wir uns$a
eher auf die Anzahl der Elemente in der Liste als auf diese beschränken.Alle einzelnen Zeichenfolgen verbleiben in der Pipeline, und die Ausgabe mit einem Zeilenumbruch als Trennzeichen wird bei Programmabschluss impliziert.
quelle
C #, 181 Bytes
Probieren Sie es online!
Voll / Formatierte Version:
quelle
Kohle , 17 Bytes
Probieren Sie es online! Der Link führt zur nächsten ausführlichen Version des Codes. Erläuterung:
Die erste Eingabe gibt die Anzahl der Schleifeniterationen an.
Da die Schleifenindizes standardmäßig nullindiziert sind, fügen wir hier eine hinzu, um die richtige Anzahl von
#
s zu erhalten.Ausgehend vom unteren Rand des Tornados und durch Aufarbeiten wird ein Byte gespeichert, aber dann müssen wir die zweite Eingabe umkehren, damit wir die aktuelle Ziffer indizieren können.
Wenn die aktuelle Ziffer a ist
1
, rücken Sie nach oben. Dadurch hat die vorherige Zeile#
am Ende ein Extra .Wenn die aktuelle Ziffer a ist
0
, gehen Sie nach oben und links. Dadurch hat die vorherige Zeile#
am Anfang ein Extra .quelle
C # , 159 Bytes
Erläuterung
Probieren Sie es online!
quelle
PHP, 136 Bytes
Speichern Sie in einer PHP-Datei und testen Sie mit
php file.php 8 '1,0,0,0,1,0,0'
. Ausgabe:Leider ist es die halbe Arbeit, die Eingabe vorzubereiten.
Eine andere Version (158 Bytes), die
str_repeat
anstelle vonprintf
und ... ausgerechnet Folgendes verwendetgoto
:quelle