Construire une tornade

31

Selon moi, une tornade ressemble à ceci:

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

Cette tornade commence par la largeur n, et sur chaque ligne suivante, un caractère est supprimé à gauche ou à droite, selon l'entrée.

Contribution

L'entrée sera une liste d'une sorte de deux valeurs uniques (une chaîne de deux caractères uniques fonctionne aussi), et un entier positif facultatif pour indiquer la largeur de départ. Si l'entier facultatif n'est pas pris, la largeur de départ est supérieure de 1 à la longueur de la liste. Soit la largeur de départ n.

Comment faire une tornade

Dans mon exemple, je choisis ma liste pour contenir 1s et 0s, bien que vous puissiez choisir deux valeurs constantes distinctes ou une chaîne de deux caractères constants distincts.

La première ligne sera composée de caractères nnon blancs (vous pouvez choisir n'importe quel caractère cohérent; je choisis #pour mon exemple).

Ensuite, pour chaque numéro de la liste, si le numéro est 0, supprimez le caractère gauche et créez une nouvelle ligne; si c'est un 1, supprimez le bon caractère et créez une nouvelle ligne.

Ainsi, la tornade ci-dessus est la sortie de 8, [1, 0, 0, 0, 1, 0, 0].

Sortie

La sortie peut être une liste de chaînes, une liste de listes de caractères ou une chaîne multiligne. Les espaces de fin sur chaque ligne sont autorisés et un retour à la fin à la fin est autorisé.

Cas de test

Ces tests incluent la largeur de départ et les listes d'utilisation de 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]

Cas de test long

Règles

  • Des échappatoires standard s'appliquent
  • Le code le plus court en octets gagne!
  • Le fond n'a pas besoin d'être un espace (j'ai oublié de le préciser plus tôt).
  • Votre langue doit uniquement prendre en charge les nombres (largeurs) qu'elle peut gérer, mais si votre interprète a été réécrit avec une taille de nombre plus grande, elle doit théoriquement fonctionner.

Implémentation de référence

HyperNeutrino
la source
3
D'après vos exemples, il semble que le début sera toujours supérieur de 1 à la longueur de la liste. Pourrions-nous avoir un exemple où ce n'est pas le cas? La largeur de départ peut-elle être inférieure à la longueur de la liste?
Charlie
@CarlosAlejo Non ... Cela n'a pas de sens alors parce qu'alors vous n'aurez pas assez d'éléments à supprimer à la fin ...
HyperNeutrino
4
Les lunettes que @HyperNeutrino a utilisées pour voir sa première tornade: i.imgur.com/TzMm94a.png
Magic Octopus Urn
@MagicOctopusUrn ... lol
HyperNeutrino

Réponses:

9

V , 15 , 12 octets

ïÀé#òÙxHxG@"

Essayez-le en ligne!

lpour la droite, (est parfaitement logique, n'est-ce pas?) et >pour la gauche.

DJMcMayhem
la source
9

Python 2 , 66 59 octets

-7 octets grâce à Arnold Palmer

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

Essayez-le en ligne!

0enlever de la droite, 1enlever de la gauche

Barre
la source
1
ninja'd me: (((
Koishore Roy
Même ici mec: /
Arnold Palmer
Économisez 7 octets en remplaçant len(z)+1par xsi "entier positif facultatif" signifie que vous n'avez pas à l'utiliser. Le libellé de la question donne l'impression que ceci est autorisé car il dit "Si l'entier optionnel n'est pas pris" contre "Si l'entier optionnel n'est pas donné".
Arnold Palmer
6

vim, 85 82 octets

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>est 0x1B, <CR>est 0x0D, <C-v>est 0x16. Et <ESC>OHest une séquence multi-octets représentant la touche HOME.

L'entrée utilise acomme valeur "supprimer gauche" et bcomme valeur "supprimer droite".

" @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@"

Pas de lien TIO, malheureusement. Je ne pouvais pas le faire fonctionner sous V. Test en copiant le code dans tornado.vim (en remplaçant <ESC>, etc. par leurs octets réels) et en exécutant comme suit:

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

-3 octets en raison de la suggestion de Neil.

Rayon
la source
Ne pouvez-vous pas utiliser à la ^place de ␛OH?
Neil
@Neil ^passe au premier caractère non vierge. ␛OHva au premier caractère.
Ray
1
Ah, désolé, je voulais dire 0non ...
Neil
@Neil Dans ce cas, oui, je devrais le faire. Merci.
Ray
5

05AB1E , 11 9 octets

-2 octets grâce à Erik l'Outgolfer

0×=²v¨yú=

Supprimer de gauche: 1
Supprimer de droite:0

Essayez-le en ligne!

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
Riley
la source
0×ηsηOa tellement de potentiel mais je ne peux pas le comprendre sous 11 octets.
Magic Octopus Urn
Conservez cette dernière version et remplacez-la ðy×ìpar -2.
Erik the Outgolfer
4

Rétine , 30 28 octets

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

Essayez-le en ligne! Prend juste une chaîne de 0 et de 1 et calcule la largeur en fonction de la chaîne. Explication: La première étape prend la chaîne d'entrée et la duplique une fois pour chaque point limite, en insérant un #à ce point. La deuxième étape change ensuite tous les chiffres après le #plus de #s, créant le triangle. Le troisième stange supprime ensuite tous les autres et modifie les zéros en espaces, ce qui se traduit par «l'oscillation» du torndao.

Neil
la source
3

J, 32 octets

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

non golfé

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

Essayez-le en ligne!

Jonas
la source
19 octets ' #'#~0(,.#\.)@,+/\, où l'entrée est inversée à partir de l'échantillon puisque le défi vous permet de choisir les deux valeurs distinctes.
miles
@miles ty pour cela et votre autre commentaire. appréciez-les vraiment et continuez à les faire venir.
Jonah
3

R , 85 82 octets

3 octets économisés grâce à Giuseppe

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

Essayez-le en ligne!

Explication:

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
        )
  }
}
utilisateur2390246
la source
Je savais que faire une matrice n'était pas la meilleure option!
Giuseppe
1
82 octets - rasé {}et utilisé une nouvelle ligne littérale au lieu de'\n'
Giuseppe
3

Haskell, 50 octets

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

Essayez-le en ligne!

Si la liste d'entrée peut être une liste de noms de fonctions, nous pouvons enregistrer un octet

Haskell, 49 octets

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

Exemple d'utilisation: h 5 [g,f,f,g].

Essayez-le en ligne!

Comment ça marche:

           '#'<$[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
nimi
la source
2

Python 2, 58 57 octets

edit: sauvé 1 octet grâce à xnor

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

Essayez-le en ligne!

1 pour retirer de la gauche, 0 pour retirer de la droite.

CensoredUsername
la source
1
Je pense que vous pouvez faire s=" "*i+s[:-1]avec la gauche et la droite permutées.
xnor
2

R , 116 109 102 octets

-5 octets grâce à user2390246 (et 2 autres je me suis sauvé)

Outgolfed par user2390246

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,,'')}

Essayez-le en ligne!

Renvoie une fonction anonyme qui prend net un vecteur lavec 0pour supprimer de la gauche et 1pour supprimer de la droite, et imprime le résultat sur la console avec la mise en forme de droite.

Giuseppe
la source
1
Vous pouvez économiser un peu en calculant la fin de la ligne car vous savez que le nombre de #s sera n-i + 1: Essayez-le en ligne! Bien qu'il y ait une approche légèrement meilleure si vous imprimez simplement ligne par ligne plutôt que de construire une matrice: codegolf.stackexchange.com/a/133720/66252
user2390246
@ user2390246 très sympa! J'ai également réussi à raser une autre paire d'octets :)
Giuseppe
2

Japt , 14 13 octets

-1 octet grâce à @ETH

å+ uP £X+QpV´

L'entrée est le tableau, puis la taille. Les valeurs de tableau sont ""ou " ", qui représentent la suppression de la droite ou de la gauche, respectivement. Utilise à la "place de #et renvoie un tableau de chaînes.

L'idée ici était de créer d'abord un tableau du remplissage gauche pour chaque ligne, d'où les chaînes d'entrée. Ensuite, chaque ligne obtient le "s ajouté, en utilisant le fait que le nombre de "s diminue de 1 à chaque fois.

Essayez-le en ligne!

Tous utilisent le -Rdrapeau pour formater la sortie en la joignant à des retours à la ligne.

Explication

å+ uP £X+QpYnV

Implicite: U= tableau d'entrée, V= numéro d'entrée.

å+ uP

Réduisez cumulativement le tableau d'entrée ( å) avec la concaténation de chaînes ( +). Il en résulte le tableau de chaque valeur intermédiaire de la réduction. Ensuite, ajoutez ( u) une chaîne vide ( P) au tableau.

£X+

Mappez £chaque valeur à elle-même ( X) concaténée avec ...

QpV´

Le caractère guillemet ( Q) a été répété ( p) V--( ) fois. Cela diminue également à Vchaque fois.

Justin Mariner
la source
Bon. Je pense que vous pouvez enregistrer un octet en changeant YnVà
ETHproductions
@ETHproductions Génial, merci! J'ai totalement oublié d'utiliser ++ou --dans Japt.
Justin Mariner
2

ArnoldC , 3132 octets

ArnoldC n'a pas de concaténations de chaînes, donc cela crée une tornade à partir de 8 s et utilise 1s pour l'espacer. ArnoldC ne prend également en charge que des entiers jusqu'à 16 bits, de sorte qu'il déborde avec une entrée de plus de 7 chiffres. (Donc ça ne fera que des mini-tornades)

1 est à gauche, tout autre chiffre est à droite (bien que je ne recommanderais pas 0 , car vous ne pouvez pas commencer par cela.)

Contribution: 1221122

Sortie:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

Code de golf:

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

Essayez-le en ligne!

Code non golfé (5178 octets):

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
TemporalWolf
la source
Malheureusement, je ne pense pas que cette réponse soit valide car elle restreint trop l'entrée et modifie la sortie d'une manière qui n'est pas autorisée (en utilisant un arrière-plan non blanc). Désolé!
HyperNeutrino
@HyperNeutrino Assez juste, c'est aussi bon que vous pouvez obtenir d'ArnoldC.
TemporalWolf
C'est malheureux. Désolé de perdre votre temps et vos efforts, mais je pense que vous devrez le supprimer car il n'est pas valide selon les spécifications du défi. Vous pouvez demander à Meta si vous pensez que ce n'est pas le bon choix et que la communauté peut décider quoi faire. Merci :)
HyperNeutrino
1
@HyperNeutrino Je ne suis pas convaincu ArnoldC est automatiquement invalide: il fonctionne pour toute la gamme d'entiers valides pris en charge par ArnoldC, et ne "l'abuse" pas en utilisant un espace plus petit: Si vous avez écrit en support 32 bits pour ArnoldC, ma réponse fonctionnerait sans changement à cette précision. Les règles ne spécifient aucune exigence de remplissage des caractères, ni de tornade de hauteur minimale qui doit être réalisable. Mais je vais ouvrir une question sur les méta si vous préférez.
TemporalWolf
1
Tu as raison. Très bien, continuez; J'ai mal jugé.
Bonne
1

Haskell , 67 64 octets

L'entrée est inversée: 0signifie supprimer à droite et 1supprimer à gauche:

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

Essayez-le en ligne!

"Ungolfed"

f n = zipWith (\x y-> replicate y ' ' ++ replicate (n-x) '#') [0..] . scanl (+) 0
ბიმო
la source
1

C, 68 63 octets

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

Cela utilise la spécification de largeur de champ dynamique dans une printf()chaîne de format. La fonction est appelée comme ceci:

#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});
}
cmaster
la source
Économisez 5 octets en supprimant int s=0;et en plaçant s;avant le f(w,i). Comme ça
MD XF
1

JavaScript (ES6), 64 octets

Fonction anonyme prenant des paramètres dans la syntaxe de curry (a) (b). Dans le tableau b, une chaîne vide représente la suppression de la droite et un espace représente la suppression de la gauche.

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

En utilisant 1 et 0 comme dans les exemples, le score est de 70

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

Tester

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>

edc65
la source
0

PowerShell , 53 octets

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

Essayez-le en ligne!

Prend l'entrée $acomme entier facultatif et $bcomme tableau de 1et 0s. (Notez que mon tableau de 1et 0est inversé à partir de celui du défi.) Construit la ligne initiale de #et la laisse sur le pipeline. Boucle ensuite de 0à$a . A chaque itération, nous sortons un nombre d'espaces éventuellement incrémenté, suivi d'un nombre pré-décrémenté de #. Oui, cela va cracher un retour à la ligne vierge à la fin, car nous bouclons jusqu'à$a plutôt que le nombre d'éléments dans la liste.

Toutes les chaînes individuelles sont laissées sur le pipeline et la sortie avec un séparateur de nouvelle ligne entre elles est implicite à la fin du programme.

AdmBorkBork
la source
0

C #, 181 octets

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;}

Essayez-le en ligne!

Version complète / formatée:

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();
    }
}
TheLethalCoder
la source
0

Fusain , 17 octets

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

Essayez-le en ligne! Le lien est vers la version verbeuse la plus proche du code. Explication:

FN«

La première entrée donne le nombre d'itérations de boucle.

P×#⁺¹ι

Étant donné que les indices de boucle par défaut sont indexés à zéro, nous en ajoutons un ici pour obtenir le nombre correct de #s.

¿I§⮌ηι

En partant du bas de la tornade et en remontant, vous économisez un octet, mais nous devons ensuite inverser la deuxième entrée afin d'indexer le chiffre actuel.

Si le chiffre actuel est un 1, remontez. Cela fait que la ligne précédente a un supplément #à la fin.

Si le chiffre actuel est un 0, déplacez-vous vers le haut et vers la gauche. Cela fait que la ligne précédente a un supplément# au début.

Neil
la source
0

C # , 159 octets

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);}))

Explication

 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
                    }));

Essayez-le en ligne!


la source
0

PHP, 136 octets

$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);}

Enregistrez dans un fichier php et testez avec php file.php 8 '1,0,0,0,1,0,0'. Sortie:

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

Hélas, préparer l'entrée est la moitié du travail.

Une autre version (158 octets) utilisant str_repeatau lieu de printfet ... gotode toutes choses:

$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;}
Le pont Nord
la source