Baue einen Tornado


31

Ein Tornado sieht meiner Meinung nach so aus:

########
#######
 ######
  #####
   ####
   ###
    ##
     #

Dieser Tornado beginnt mit der Breite nund 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 1s und 0s 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 nNicht-Leerzeichen (Sie können ein beliebiges konsistentes Zeichen auswählen; ich wähle es #für mein Beispiel aus).

0Entfernen 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]

Langer Testfall

Regeln

  • Es gelten Standardlücken
  • Kürzester Code in Bytes gewinnt!
  • 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.

Referenzimplementierung


3
Aus Ihren Beispielen geht hervor, dass der Anfang mit 1 immer größer ist als die Länge der Liste. Könnten wir ein Beispiel haben, wo dies nicht so ist? Kann die Startbreite kleiner sein als die Länge der Liste?
Charlie

@CarlosAlejo Nein ... Das macht dann keinen Sinn, weil Sie dann nicht genug Elemente haben, um am Ende zu entfernen ...
HyperNeutrino

4
Die Brille, mit der @HyperNeutrino seinen ersten Tornado gesehen hat: i.imgur.com/TzMm94a.png
Magic Octopus Urn

@MagicOctopusUrn ... lol
HyperNeutrino

Antworten:



9

Python 2 , 66 59 Bytes

-7 Bytes dank Arnold Palmer

x,z=input()
for i in range(x):print' '*sum(z[:i])+'#'*(x-i)

Probieren Sie es online!

0von rechts 1entfernen, von links entfernen


1
Ich ninja'd: (((
Koishore Roy

Gleiche hier Mann: /
Arnold Palmer

Speichern 7 Bytes durch den Austausch len(z)+1mit , xwenn „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".
Arnold Palmer

6

vim, 85 82 bytes

o"cp:s/#/ <C-v><CR>0"cy$<ESC>"ayy7hR$/<ESC>"bdd:s/[][, ]\+/<C-v><CR>@/g<CR>ggAa#<C-v><ESC><ESC>^D@"^"cy$:2,$:norm D@"

<ESC>0x1B ist, <CR>ist 0x0D, <C-v>ist 0x16. Und <ESC>OHist eine Multibyte-Sequenz, die die HOME-Taste darstellt.

Die Eingabe verwendet aals Wert "Links entfernen" und bals Wert "Rechts entfernen".

" @a will remove from the left; @b will remove from the right.
o"cp:s/#/ <C-v><CR>0"cy$<ESC>"ayy
7hR$/<ESC>"bdd

" split the input into digestible chunks
:s/[][, ]\+/<C-v><CR>@/g<CR>
gg

" Create the first line
Aa#<C-v><ESC><ESC>
^D
@"^"cy$

" Create tornado
:2,$:norm D@"

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 :

$ echo '8, [b, a, a, a, b, a, a]' > a.txt
$ { cat tornado.vim; echo ':wq'; } | vim a.txt
$ cat a.txt

-3 Bytes aufgrund von Neils Vorschlag.


Kannst du nicht ^statt verwenden ␛OH?
Neil

@Neil ^geht zum ersten nicht leeren Zeichen. ␛OHgeht zum ersten Zeichen.
Ray

1
Ah, tut mir leid, ich meinte 0nicht ...
Neil

@ Neil In diesem Fall sollte ich das tun. Vielen Dank.
Ray

5

05AB1E , 11 9 Bytes

-2 Bytes dank Erik dem Outgolfer

0×=²v¨yú=

Von links 1
entfernen : Von rechts entfernen:0

Probieren Sie es online!

0×        # Make a string of n 0s
  =       # Print without popping
   ²v     # For each character in input (call it y):
     ¨    #   Remove the last character of the current string
      yú  #   Pad with y spaces
        = #   Print without popping

0×ηsηOhat so viel Potenzial, aber ich kann es nicht unter 11 Bytes herausfinden.
Magic Octopus Urn

Halten Sie die letztere Version und ersetzen ðy×ìmit für -2.
Erik der Outgolfer

4

Retina , 30 28 Bytes

.?
$`#$&$'¶
T`d`#`#.*
T`d` _

Probieren 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.


3

J, 32 Bytes

' #'#~[:(],.1+i.@-@#)0,(+/\@:-.)

ungolfed

' #'#~ [: ( ] ,. 1+i.@-@# )  0 , (+/\ @: -.)

Probieren Sie es online!


19 Bytes ' #'#~0(,.#\.)@,+/\, wobei die Eingabe vom Sample invertiert wird, da Sie bei der Abfrage die beiden unterschiedlichen Werte auswählen können.
Meilen

@ Meilen Ty für diesen und Ihren anderen Kommentar. schätze sie wirklich und bitte lass sie kommen.
Jonah


3

R , 85 82 Bytes

Dank Giuseppe 3 Bytes gespart

function(n,l)for(k in 1:n)cat(rep(" ",sum(c(0,l)[1:k])),rep("%",n-k+1),"
",sep="")

Probieren Sie es online!

Erläuterung:

function(n,l){
  for(k in 1:n){                      # Proceed line by line
    cat(                              # Concatenate...
        rep(" ",sum(c(0,l)[1:k])),    # ...required number of leading spaces,...
        rep("%",n-k+1),               # ...required number of tornado characters...
        "\n",                         # ...and a new line.
        sep=""                        # Join without spaces
        )
  }
}

Ich wusste, dass eine Matrix nicht die beste Option ist!
Giuseppe

1
82 Bytes - abgeschabt {}und stattdessen eine wörtliche Newline verwendet'\n'
Giuseppe

3

Haskell, 50 Bytes

h n=scanl(\s i->[(' ':),id]!!i$init s)$'#'<$[1..n]

Probieren Sie es online!

Wenn die Eingabeliste eine Liste von Funktionsnamen sein kann, können wir ein Byte speichern

Haskell, 49 Bytes

f=id
g=(' ':)
h n=scanl(flip id.init)$'#'<$[1..n]

Anwendungsbeispiel: h 5 [g,f,f,g].

Probieren Sie es online!

Wie es funktioniert:

           '#'<$[1..n]   -- build the first line of the tornado, i.e. n times '#'
scanl(    )              -- repeatedly apply the given function to the starting
                         -- value and the next element of the input list and
                         -- return a list of the intermediate results
  \s i->                 -- the function takes a string s and a number i
            init s       -- and first drops the last element of s
      [    ]!!i          -- and then picks and apply a funtion from the list
        (' ':)           --  i = 0:  prepend a space
        id               --  i = 1:  do nothing

2

Python 2, 58 57 Bytes

edit: 1 byte dank xnor gespeichert

l,a=input()
s="#"*l
for i in a+[0]:print s;s=" "*i+s[:-1]

Probieren Sie es online!

1 zum Entfernen von links, 0 zum Entfernen von rechts.


1
Ich denke man kann s=" "*i+s[:-1]mit links und rechts tauschen.
xnor

2

R , 116 109 102 Bytes

-5 Bytes dank user2390246 (und weitere 2 habe ich mir selbst gespart)

Vom User2390246 überfordert

function(n,l){k=cumsum
m=matrix(' ',n,n)
for(i in 1:n)m[k(c(1,!l))[i]:k(c(n,-l))[i],i]='#'
write(m,'',n,,'')}

Probieren Sie es online!

Returns eine anonyme Funktion , die nimmt nund einen Vektor lmit 0für von links entfernen und 1für von der rechten Seite zu entfernen, und druckt das Ergebnis Konsole mit der rechten Formatierung.


1
Sie können ein wenig bei der Berechnung des Zeilenendes sparen, da Sie wissen, dass die Anzahl der #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/66252
user2390246

@ user2390246 sehr schön! Ich habe es geschafft, ein weiteres Paar Bytes zu rasieren :)
Giuseppe

2

Japt , 14 13 Bytes

-1 Byte dank @ETH

å+ uP £X+QpV´

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 -RFlag, um die Ausgabe zu formatieren, indem sie mit Zeilenumbrüchen verbunden werden.

Erläuterung

å+ uP £X+QpYnV

Implizit: U= Eingabearray, V= Eingabenummer.

å+ uP

Reduzieren Sie kumulativ das Eingabearray ( å) mit der Zeichenfolgenverkettung ( +). Dies ergibt das Array jedes Zwischenwertes der Reduktion. Stellen Sie dem Array dann ueine leere Zeichenfolge ( P) voran.

£X+

Ordne £jeden Wert sich selbst zu ( X) verknüpft mit ...

QpV´

Das Anführungszeichen ( Q) wurde ( p) V--( ) Mal wiederholt . Dies verringert sich auch Vjedes Mal.


Gut Ich denke, Sie können ein Byte sparen, indem Sie YnVauf
ETHproductions 21.07.17

@ETHproductions Super, danke! Ich habe völlig vergessen, ++oder --in Japt zu verwenden.
Justin Mariner

2

ArnoldC , 3132 Bytes

ArnoldC hat keine Zeichenfolgenverkettungen, daher wird aus 8s ein Tornado erstellt, der mit 1s 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)

1ist links, jede andere Ziffer ist rechts (obwohl ich nicht empfehlen würde 0, da man damit nicht anfangen kann.)

Eingang: 1221122

Ausgabe:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

Golf Code:

IT'S SHOWTIME
HEY CHRISTMAS TREE d
YOU SET US UP 0
HEY CHRISTMAS TREE e
YOU SET US UP 0
HEY CHRISTMAS TREE m
YOU SET US UP 0
GET YOUR ASS TO MARS m
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
HEY CHRISTMAS TREE l
YOU SET US UP 0
GET YOUR ASS TO MARS l
DO IT NOW g m
DO IT NOW h l m
YOU HAVE BEEN TERMINATED
LISTEN TO ME VERY CAREFULLY g
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE m
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE i
YOU SET US UP 2
HEY CHRISTMAS TREE n
YOU SET US UP m
STICK AROUND n
GET TO THE CHOPPER n
HERE IS MY INVITATION n
HE HAD TO SPLIT 10
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE n
GET TO THE CHOPPER i
HERE IS MY INVITATION i
GET UP 1
ENOUGH TALK
YOU HAVE NO RESPECT FOR LOGIC
CHILL
I'LL BE BACK i
HASTA LA VISTA, BABY
LISTEN TO ME VERY CAREFULLY h
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE l
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE m
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE o
YOU SET US UP -2
GET TO THE CHOPPER o
HERE IS MY INVITATION o
GET UP l
ENOUGH TALK
HEY CHRISTMAS TREE k
YOU SET US UP 1
STICK AROUND o
GET TO THE CHOPPER k
HERE IS MY INVITATION k
YOU'RE FIRED 10
ENOUGH TALK
GET TO THE CHOPPER o
HERE IS MY INVITATION o
GET DOWN 1
ENOUGH TALK
CHILL
HEY CHRISTMAS TREE p
YOU SET US UP 0
HEY CHRISTMAS TREE f
YOU SET US UP 0
HEY CHRISTMAS TREE i
YOU SET US UP 0
HEY CHRISTMAS TREE q
YOU SET US UP l
HEY CHRISTMAS TREE d
YOU SET US UP 0
HEY CHRISTMAS TREE e
YOU SET US UP 1
HEY CHRISTMAS TREE a
YOU SET US UP 0
HEY CHRISTMAS TREE b
YOU SET US UP 0
HEY CHRISTMAS TREE c
YOU SET US UP l
STICK AROUND q
GET TO THE CHOPPER i
HERE IS MY INVITATION 0
ENOUGH TALK
GET TO THE CHOPPER a
HERE IS MY INVITATION d
ENOUGH TALK
GET TO THE CHOPPER b
HERE IS MY INVITATION e
ENOUGH TALK
GET TO THE CHOPPER c
HERE IS MY INVITATION l
ENOUGH TALK
STICK AROUND c
BECAUSE I'M GOING TO SAY PLEASE a
GET TO THE CHOPPER i
HERE IS MY INVITATION i
GET UP 1
YOU'RE FIRED 10
ENOUGH TALK
GET TO THE CHOPPER a
HERE IS MY INVITATION a
GET DOWN 1
ENOUGH TALK
BULLSHIT
GET TO THE CHOPPER f
HERE IS MY INVITATION b
LET OFF SOME STEAM BENNET c
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE f
GET TO THE CHOPPER i
HERE IS MY INVITATION i
GET UP 1
YOU'RE FIRED 10
ENOUGH TALK
BULLSHIT
GET TO THE CHOPPER i
HERE IS MY INVITATION i
GET UP 8
YOU'RE FIRED 10
ENOUGH TALK
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE NO RESPECT FOR LOGIC
GET TO THE CHOPPER c
HERE IS MY INVITATION c
GET DOWN 1
ENOUGH TALK
CHILL
GET TO THE CHOPPER i
HERE IS MY INVITATION i
HE HAD TO SPLIT 10
ENOUGH TALK
TALK TO THE HAND i
GET TO THE CHOPPER q
HERE IS MY INVITATION q
GET DOWN 1
ENOUGH TALK
GET TO THE CHOPPER p
HERE IS MY INVITATION m
HE HAD TO SPLIT k
I LET HIM GO 10
ENOUGH TALK
GET TO THE CHOPPER k
HERE IS MY INVITATION k
HE HAD TO SPLIT 10
ENOUGH TALK
GET TO THE CHOPPER f
HERE IS MY INVITATION p
YOU ARE NOT YOU YOU ARE ME 1
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE f
GET TO THE CHOPPER d
HERE IS MY INVITATION d
GET UP 1
ENOUGH TALK
BULLSHIT
GET TO THE CHOPPER e
HERE IS MY INVITATION e
GET UP 1
ENOUGH TALK
YOU HAVE NO RESPECT FOR LOGIC
CHILL
I'LL BE BACK i
HASTA LA VISTA, BABY

Probieren Sie es online!

Ungolfed Code (5178 Bytes):

IT'S SHOWTIME
    HEY CHRISTMAS TREE left
        YOU SET US UP 0
    HEY CHRISTMAS TREE right
        YOU SET US UP 0
    HEY CHRISTMAS TREE input
        YOU SET US UP 0
        GET YOUR ASS TO MARS input
        DO IT NOW
        I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
    HEY CHRISTMAS TREE width
    YOU SET US UP 0
    GET YOUR ASS TO MARS width
    DO IT NOW calcwidth input
    DO IT NOW buildline width input
YOU HAVE BEEN TERMINATED

LISTEN TO ME VERY CAREFULLY calcwidth
    I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE input
    GIVE THESE PEOPLE AIR
    HEY CHRISTMAS TREE result
    YOU SET US UP 2
    HEY CHRISTMAS TREE calc
    YOU SET US UP input
    STICK AROUND calc
        GET TO THE CHOPPER calc
        HERE IS MY INVITATION calc
        HE HAD TO SPLIT 10
        ENOUGH TALK
        BECAUSE I'M GOING TO SAY PLEASE calc
            GET TO THE CHOPPER result
        HERE IS MY INVITATION result
        GET UP 1
        ENOUGH TALK
    YOU HAVE NO RESPECT FOR LOGIC
    CHILL
    I'LL BE BACK result
HASTA LA VISTA, BABY

LISTEN TO ME VERY CAREFULLY buildline
    I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE width
    I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE input
    GIVE THESE PEOPLE AIR

    HEY CHRISTMAS TREE ctr
        YOU SET US UP -2
        GET TO THE CHOPPER ctr
            HERE IS MY INVITATION ctr
            GET UP width
        ENOUGH TALK
    HEY CHRISTMAS TREE mask
        YOU SET US UP 1
        STICK AROUND ctr
            GET TO THE CHOPPER mask
                HERE IS MY INVITATION mask
                YOU'RE FIRED 10
            ENOUGH TALK
            GET TO THE CHOPPER ctr
                HERE IS MY INVITATION ctr
                GET DOWN 1
            ENOUGH TALK
        CHILL
    HEY CHRISTMAS TREE digit
        YOU SET US UP 0
    HEY CHRISTMAS TREE decider
        YOU SET US UP 0
    HEY CHRISTMAS TREE result
        YOU SET US UP 0
    HEY CHRISTMAS TREE lines
        YOU SET US UP width
    HEY CHRISTMAS TREE left
        YOU SET US UP 0
    HEY CHRISTMAS TREE right
        YOU SET US UP 1
    HEY CHRISTMAS TREE leftcounter
        YOU SET US UP 0
    HEY CHRISTMAS TREE rightcounter
        YOU SET US UP 0
    HEY CHRISTMAS TREE widthcounter
    YOU SET US UP width
    STICK AROUND lines
        GET TO THE CHOPPER result
            HERE IS MY INVITATION 0
        ENOUGH TALK
        GET TO THE CHOPPER leftcounter
            HERE IS MY INVITATION left
        ENOUGH TALK
        GET TO THE CHOPPER rightcounter
            HERE IS MY INVITATION right
        ENOUGH TALK
        GET TO THE CHOPPER widthcounter
            HERE IS MY INVITATION width
        ENOUGH TALK
        STICK AROUND widthcounter
            BECAUSE I'M GOING TO SAY PLEASE leftcounter
                GET TO THE CHOPPER result
                    HERE IS MY INVITATION result
                    GET UP 1
                    YOU'RE FIRED 10
                ENOUGH TALK
                GET TO THE CHOPPER leftcounter
                    HERE IS MY INVITATION leftcounter
                    GET DOWN 1
                ENOUGH TALK
            BULLSHIT
                GET TO THE CHOPPER decider
                    HERE IS MY INVITATION rightcounter
                    LET OFF SOME STEAM BENNET widthcounter
                ENOUGH TALK
                BECAUSE I'M GOING TO SAY PLEASE decider
                    GET TO THE CHOPPER result
                        HERE IS MY INVITATION result
                        GET UP 1
                        YOU'RE FIRED 10
                    ENOUGH TALK
                BULLSHIT
                    GET TO THE CHOPPER result
                        HERE IS MY INVITATION result
                        GET UP 8
                        YOU'RE FIRED 10
                    ENOUGH TALK
                YOU HAVE NO RESPECT FOR LOGIC
            YOU HAVE NO RESPECT FOR LOGIC

            GET TO THE CHOPPER widthcounter
                HERE IS MY INVITATION widthcounter
                GET DOWN 1
            ENOUGH TALK
        CHILL
        GET TO THE CHOPPER result
            HERE IS MY INVITATION result
            HE HAD TO SPLIT 10
        ENOUGH TALK
        TALK TO THE HAND result
        GET TO THE CHOPPER lines
            HERE IS MY INVITATION lines
            GET DOWN 1
        ENOUGH TALK
        GET TO THE CHOPPER digit
            HERE IS MY INVITATION input
            HE HAD TO SPLIT mask
            I LET HIM GO 10
        ENOUGH TALK
        GET TO THE CHOPPER mask
            HERE IS MY INVITATION mask
            HE HAD TO SPLIT 10
        ENOUGH TALK
        GET TO THE CHOPPER decider
            HERE IS MY INVITATION digit
            YOU ARE NOT YOU YOU ARE ME 1
        ENOUGH TALK
        BECAUSE I'M GOING TO SAY PLEASE decider
            GET TO THE CHOPPER left
                HERE IS MY INVITATION left
                GET UP 1
            ENOUGH TALK
        BULLSHIT
            GET TO THE CHOPPER right
                HERE IS MY INVITATION right
                GET UP 1
            ENOUGH TALK
        YOU HAVE NO RESPECT FOR LOGIC
    CHILL
    I'LL BE BACK result
HASTA LA VISTA, BABY

Leider glaube ich nicht, dass diese Antwort gültig ist, da sie die Eingabe zu stark einschränkt und die Ausgabe auf eine Weise modifiziert, die nicht zulässig ist (mit einem Hintergrund ohne Leerzeichen). Es tut uns leid!
HyperNeutrino

@HyperNeutrino Fair genug, das ist so gut wie du es von ArnoldC bekommen kannst.
TemporalWolf

Das ist bedauerlich. Es tut mir leid, dass Sie Ihre Zeit und Mühe verschwenden müssen, aber ich glaube, Sie müssen dies löschen, da es nach den Herausforderungsspezifikationen ungültig ist. Sie können bei Meta nachfragen, ob Sie der Meinung sind, dass dies die falsche Wahl ist, und die Community kann dort entscheiden, was zu tun ist. Vielen Dank :)
HyperNeutrino

1
@HyperNeutrino Ich bin nicht überzeugt, dass ArnoldC automatisch ungültig ist: Es funktioniert für den gesamten Bereich gültiger Ganzzahlen, die von ArnoldC unterstützt werden, und "missbraucht" es nicht durch Verwendung eines kleineren Leerzeichens: Wenn Sie in 32-Bit-Unterstützung für ArnoldC geschrieben haben, ist meine Antwort würde mit dieser Präzision ohne Veränderung funktionieren. In den Regeln ist weder das Auffüllen von Zeichen noch der Mindesthöhen-Tornado festgelegt, der erreichbar sein muss. Aber ich werde eine Frage zu Meta öffnen, wenn Sie es vorziehen.
TemporalWolf

1
Du hast recht. Fair genug, weitermachen; Ich habe falsch eingeschätzt. Schöne Antwort :)
HyperNeutrino

1

Haskell , 67 64 Bytes

Die Eingabe wird umgedreht: 0bedeutet rechts 1entfernen und links entfernen:

f n=zipWith(\x y->(' '<$[1..y])++('#'<$[1..n-x]))[0..].scanl(+)0

Probieren Sie es online!

"Ungolfed"

f n = zipWith (\x y-> replicate y ' ' ++ replicate (n-x) '#') [0..] . scanl (+) 0


1

C 68 63 Bytes

s;f(w,i)int*i;{for(;w;s+=!*i++)printf("%*s%0*d\n",s,"",w--,0);}

Hierbei wird die dynamische Feldbreitenangabe in einer printf()Formatzeichenfolge verwendet. Die Funktion heißt so:

#include <stdio.h>

s;f(w,i)int*i;{for(;w;s+=!*i++)printf("%*s%0*d\n",s,"",w--,0);}

int main() {
    f(8, (int[]){1, 0, 0, 0, 1, 0, 0});
}

Sparen Sie 5 Bytes, indem Sie das entfernen int s=0;und s;vor das einfügen f(w,i). Wie so
MD XF

1

JavaScript (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.

a=>b=>b.reduce((t,v)=>t+'\n'+(a.pop(),p+=v)+a,a=Array(a+1),p='')

Bei Verwendung von 1 und 0 wie in den Beispielen beträgt die Punktzahl 70

a=>b=>b.reduce((t,v)=>t+'\n'+(a.pop(),v?p:p+=' ')+a,a=Array(a+1),p='')

Prüfung

F=
a=>b=>b.reduce((t,v)=>t+'\n'+(a.pop(),p+=v)+a,a=Array(a+1),p='')

function update() {
  var b=B.value.match(/\d/g)
  
  if (b) {
    b=b.map(v=>+v?'':' ')
    O.textContent = F(b.length+1)(b)
  }
  else
    O.textContent = 'invalid input'
}

update()
  
Input B (0 and 1) <input id=B value='1001' oninput='update()'>
<pre id=O></pre>


0

PowerShell , 53 Byte

param($a,$b)"#"*$a;0..$a|%{" "*($i+=$b[$_])+"#"*--$a}

Probieren Sie es online!

Übernimmt die Eingabe $aals optionale Ganzzahl und $bals Array von 1und 0s. (Beachten Sie, dass mein Array von 1und 0aus der Herausforderung gespiegelt wird.) Konstruiert die Anfangszeile von #und belässt diese in der Pipeline. Dann geht es weiter von 0bis $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 $aeher 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.


0

C #, 181 Bytes

n=>a=>{var r=new string[n];r[0]=new string('#',n);for(int i=1,p;i<n;++i){r[i]=r[i-1];p=a[i-1]?r[i].LastIndexOf('#'):r[i].IndexOf('#');r[i]=r[i].Remove(p,1).Insert(p," ");}return r;}

Probieren Sie es online!

Voll / Formatierte Version:

class P
{
    static void Main()
    {
        System.Func<int, System.Func<bool[], string[]>> f = n => a =>
        {
            var r=new string[n];
            r[0]=new string('#',n);

            for (int i = 1, p; i < n; ++i)
            {
                r[i] = r[i - 1];
                p = a[i - 1] ? r[i].LastIndexOf('#') : r[i].IndexOf('#');
                r[i] = r[i].Remove(p, 1).Insert(p, " ");
            }

            return r;
        };

        System.Console.WriteLine(string.Join("\n", f(5)(new[] { true, false, false, true })));

        System.Console.ReadLine();
    }
}

0

Kohle , 17 Bytes

FN«P×#⁺¹ι¿I§⮌ηι↑↖

Probieren Sie es online! Der Link führt zur nächsten ausführlichen Version des Codes. Erläuterung:

FN«

Die erste Eingabe gibt die Anzahl der Schleifeniterationen an.

P×#⁺¹ι

Da die Schleifenindizes standardmäßig nullindiziert sind, fügen wir hier eine hinzu, um die richtige Anzahl von #s zu erhalten.

¿I§⮌ηι

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 .


0

C # , 159 Bytes

using System.Linq;n=>a=>new[]{new string('#',n)}.Concat(a.Select((_,i)=>{var s=a.Take(i+1).Count(j=>j==0);var h=n-i-1;return new string('#',h).PadLeft(s+h);}))

Erläuterung

 new[] { new string('#', n) }                //start with n number of hashes
                .Concat(                     //append...
                    a.Select((_, i) =>       //    map each element of array
                    {
                        var s = a.Take(i + 1).Count(j => j == 0);  // count the number of 0's up to, and including, this point
                        var h = n - i - 1;                         // number of hashes for this step
                        return new string('#', h).PadLeft(s + h);  // number of hashes padded left with number of 0s
                    }));

Probieren Sie es online!


0

PHP, 136 Bytes

$b=explode(',',end($argv));$a=$argc==3?$argv[1]:count($b)+1;$c=0;for(;$a;--$a){printf("% {$c}s%'#{$a}s\n",'','');$c+=!array_shift($b);}

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_repeatanstelle von printfund ... ausgerechnet Folgendes verwendet goto:

$b=explode(',',end($argv));$a=$argc==3?$argv[1]:count($b)+1;$c=0;z:
echo str_repeat(' ',$c).str_repeat('#',$a)."\n";while(--$a){$c+=!array_shift($b);goto z;}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.