Bir Kasırga İnşa Et


31

Bana göre bir kasırga şöyle gözüküyor:

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

Bu kasırga genişlikle başlar nve sonraki her satırda, girişe bağlı olarak bir karakter sol veya sağdan kaldırılır.

Giriş

Girdi, iki benzersiz değerin bir tür listesi (iki benzersiz karakter dizesi de işe yarar) ve başlangıç ​​genişliğini belirtmek için isteğe bağlı bir pozitif tamsayı olacaktır. İsteğe bağlı tamsayı alınmazsa, başlangıç ​​genişliği listenin uzunluğundan 1 büyüktür. Başlangıç ​​genişliği olsun n.

Bir kasırga nasıl yapılır

Örneğimde, l 1ve 0s içerecek şekilde listemi seçiyorum , ancak iki farklı sabit değer veya herhangi iki farklı sabit karakterden oluşan bir dize seçebilirsiniz.

İlk satır nboşluk olmayan karakterlerden oluşacak ( herhangi bir tutarlı karakter seçebilirsiniz; örneğim #için seçiyorum ).

Sonra listedeki her numara için, eğer sayı ise 0, soldaki karakteri kaldırın ve yeni bir satır oluşturun; eğer a ise 1, doğru karakteri kaldırın ve yeni bir satır oluşturun.

Böylece, yukarıdaki kasırga için çıktı 8, [1, 0, 0, 0, 1, 0, 0].

Çıktı

Çıktı, dizgelerin bir listesi, karakter listelerinin bir listesi veya çok satırlı bir dize olabilir. Her satırdaki arkadaki boşluk boşluğuna izin verilir ve sondaki arkadaki yeni satıra izin verilir.

Test Kılıfları

Bu testler başlangıç ​​genişliğini ve kullanım listelerini içerir 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]

Uzun test çantası

kurallar

  • Standart boşluklar uygulanır
  • Bayt cinsinden en kısa kod kazanır!
  • Arka plan boşluk olmak zorunda değildir (bunu daha önce belirtmeyi unuttum).
  • Diliniz yalnızca kullanabileceği sayıları (genişlikleri) desteklemeli, ancak tercümanınız daha büyük bir boyutta yeniden yazılmışsa, teorik olarak çalışması gerekir.

Referans uygulaması


3
Örneklerinizden başlayarak her zaman listenin uzunluğundan 1 büyük olacak gibi görünüyor. Bunun olmadığı yerde bir örnek alabilir miyiz? Başlangıç ​​genişliği listenin uzunluğundan az olabilir mi?
Charlie

@CarlosAlejo Hayır ... Bu hiç mantıklı değil çünkü sonunda kaldırmanız için yeterli elemanınız olmayacak ...
HyperNeutrino 20:17

4
@HyperNeutrino'un ilk kasırgasını görmek için kullandığı gözlükler: i.imgur.com/TzMm94a.png
Magic Octopus Urn

@MagicOctopusUrn ... lol
HyperNeutrino,

Yanıtlar:



9

Python 2 , 66 59 bayt

Arnold Palmer sayesinde -7 bayt

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

Çevrimiçi deneyin!

0sağdan 1kaldırmak, soldan kaldırmak için


1
ninja'd beni: (((
Koishore Roy

Burada erkek: /
Arnold Palmer

Değiştirerek 7 bayt kaydet len(z)+1ile xeğer "isteğe bağlı pozitif tamsayı" yollarla Bunu kullanmak gerekmez. Sorunun ifadesi, "İsteğe bağlı tamsayı alınmazsa" ya da "isteğe bağlı tamsayı verilmezse" yazdığı için buna izin verilir.
Arnold Palmer

6

vim, 85 82 bayt

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, <CR>ise 0x0D, <C-v>0x16'dır. Ve <ESC>OHHOME tuşunu temsil eden çok baytlı bir dizidir.

Giriş a, "sola kaldır" değeri ve b"sağa kaldır" değeri olarak kullanır.

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

Maalesef TIO bağlantısı yok. V altında test edemedim. Tornado.vim kodunu kopyalayarak ( <ESC>gerçek baytlarla değiştirerek vb.) Ve aşağıdaki gibi çalıştırarak test edin :

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

Neil'in önerisi nedeniyle -3 bayt.


Kullanmak Can ^yerine ␛OH?
Neil,

@Neil ^, boş olmayan ilk karaktere gider. ␛OHilk karaktere gider.
Ray,

1
Ah, pardon, demek istediğim 0ben ...
Neil

@ Neil Bu durumda, evet, bunu yapmalıyım. Teşekkürler.
Ray,

5

05AB1E , 11 9 bayt

Outgolfer Erik sayesinde -2 bayt

0×=²v¨yú=

Soldan 1
kaldır: Sağdan kaldır:0

Çevrimiçi deneyin!

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ηOÇok fazla potansiyele sahip ama 11 baytın altında anlayamadım.
Magic Octopus Urn,

İkinci versiyonu saklayın ve -2 ðy×ìile değiştirin .
Outgolfer Erik,

4

Retina , 30 28 bayt

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

Çevrimiçi deneyin! Yalnızca bir 0s ve 1s dizesini alır ve dizeye dayanarak genişliği hesaplar. Açıklama: İlk aşama girdi dizesini alır ve her bir sınır noktası için bir kez kopyalar #ve o noktaya bir tane ekler . İkinci aşama daha sonra tüm rakamlar sonra değişiklikleri #daha #üçgen oluşturma, s. Üçüncü aşama daha sonra kalanları siler ve sıfırları kasırganın "sallanmasına" neden olan boşluklara değiştirir.


3

J, 32 bayt

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

ungolfed

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

Çevrimiçi deneyin!


' #'#~0(,.#\.)@,+/\Zorluk iki farklı değeri seçmenize izin verdiği için girişin numuneden ters çevrildiği 19 bayt .
mil:

@miles ty bu ve diğer yorumunuz için ty. gerçekten onları takdir ediyorum ve lütfen gelmelerini sağlayın.
Jonah


3

R , 85 82 bayt

Giuseppe sayesinde 3 bayt kurtarıldı

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

Çevrimiçi deneyin!

Açıklama:

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

Bir matris yapmanın en iyi seçenek olmadığını biliyordum!
Giuseppe

1
82 bytes - tıraş oldu {}ve yerine birebir yeni hattını kullandı'\n'
Giuseppe

3

Haskell, 50 bayt

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

Çevrimiçi deneyin!

Girdi listesi, işlev isimlerinin bir listesi olabilirse, bir bayt kaydedebiliriz.

Haskell, 49 bayt

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

Kullanım örneği: h 5 [g,f,f,g] .

Çevrimiçi deneyin!

Nasıl çalışır:

           '#'<$[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 bayt

düzenleme: kaydedilmiş 1 bayt xnor sayesinde

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

Çevrimiçi deneyin!

Soldan kaldırmak için 1, sağdan kaldırmak için 0.


1
s=" "*i+s[:-1]Sol ve sağ takas yapabileceğini düşünüyorum .
xnor

2

R , 116 109 102 bayt

User2390246 sayesinde -5 bayt (ve kendimi kaydettim başka 2)

User2390246 tarafından Outgolfed

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

Çevrimiçi deneyin!

Soldan kaldırmak ve sağdan kaldırmak için alan nve bir vektör lalan anonim bir işlev döndürür ve sonucu doğru biçimlendirme ile konsola yazdırır.01


1
Satır sonunu hesaplamada bir miktar tasarruf sağlayabilirsiniz, çünkü #s sayısının n-i + 1 olacağını biliyorsunuz : Çevrimiçi deneyin! Bir matris oluşturmak yerine satır satır basarsanız
user2390246

@ user2390246 çok hoş! Ben de başka bir bayt çiftini traş etmeyi başardım :)
Giuseppe

2

Japt , 14 13 bayt

@ETH sayesinde -1 bayt

å+ uP £X+QpV´

Giriş, diziden sonra boyuttur. Dizi değerleridir ""veya " "sırasıyla, sağdan kaldırma veya sola temsil hangi. Kullanımları"Bunun yerine# ve bir dizi dizge olarak döner.

Buradaki fikir ilk önce her satır için sol dolguyu bir dizi oluşturmaktı, bu nedenle giriş dizeleriydi. Ardından, her satır "s miktarının "her seferinde 1 azalması gerçeğini kullanarak eklenir .

Çevrimiçi deneyin!

Bunların tümü -R, çıktıyı yeni satırlara ekleyerek biçimlendirmek için bayrağı kullanır.

açıklama

å+ uP £X+QpYnV

Kapalı: U= giriş dizisi, V= giriş numarası.

å+ uP

Girdi dizisini ( å), dize bitiştirme ( +) ile kümülatif olarak azaltın . Bu, azaltmanın her bir ara değerinin dizisiyle sonuçlanır. Ardından, diziye uboş bir dize ( P) hazırlayın.

£X+

Harita £kendisine her değeri ( Xile birleştirilmiş) ...

QpV´

Alıntı karakteri ( Q) again ( p) V--( ) kezdir. Bu aynı zamanda Vher seferinde azalır .


İyi bir. Sana değiştirerek byte kurtarabilir miyiz YnViçin
ETHproductions

@ETHproductions Harika, teşekkürler! Japt içinde ++ya da kullanmayı tamamen unuttum --.
Justin Mariner

2

ArnoldC , 3132 bayt

ArnoldC sicim bitiştirmelerine sahip değildir, bu yüzden bu 8s dışında bir kasırga oluşturur ve 1boşluk bırakmak için s kullanır . ArnoldC ayrıca yalnızca 16-bit tam sayılara kadar destekler, bu nedenle 7 basamaktan daha uzun girişlerle taşar. (Yani sadece mini kasırga yapacak)

1kaldıysa, başka bir rakam doğrudur (tavsiye etmememe rağmen 0, bununla başlayamazsınız.)

Giriş: 1221122

Çıktı:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

Golf kodu:

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

Çevrimiçi deneyin!

Ungolfed kod (5178 bayt):

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

Ne yazık ki, bu cevabın geçerli olduğunu sanmıyorum, çünkü girişi çok fazla kısıtlıyor ve çıktıyı izin verilmeyen bir şekilde (boşluksuz bir arka plan kullanarak) değiştiriyor. Üzgünüm!
HyperNeutrino,

@HyperNeutrino Fuarı yeterince, bu ArnoldC'dan alabildiğin kadar iyi.
TemporalWolf

Bu talihsizlik. Zamanınızı ve çabanızı boşa harcadığım için üzgünüm, ancak meydan okuma şartnamesinde geçersiz olduğu için bunu silmek zorunda kalacağınıza inanıyorum. Bunun yanlış bir seçim olduğuna ve toplumun ne yapılacağına karar verebileceğine inanıp duymadığınızı Meta'ya sorabilirsiniz . Thanks :)
HyperNeutrino

1
@HyperNeutrino Ben ikna olmadım ArnoldC otomatik olarak geçersiz: ArnoldC tarafından desteklenen tüm geçerli tamsayılar için çalışıyor ve daha küçük bir alan kullanarak "kötüye kullanmıyor": ArnoldC için 32 bit desteğinde yazdıysanız, cevabım Bu hassasiyette değişiklik olmadan çalışırdı. Kurallar, doldurma karakterleri için herhangi bir gereksinim veya ulaşılması gereken asgari yükseklik kasırgasını belirtmez. Ama eğer istersen metada bir soru açacağım.
TemporalWolf

1
Haklısın. Yeterince adil, devam et; Yanlış değerlendirdim. Güzel cevap :)
HyperNeutrino,

1

Haskell , 67 64 bayt

Giriş saygısız: 0sağ 1kaldır ve sola kaldır anlamına gelir :

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

Çevrimiçi deneyin!

"Ungolfed"

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


1

C, 68 63 bayt

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

Bu, bir printf()format dizesindeki dinamik alan genişliği spesifikasyonunu kullanır . İşlev şöyle denir:

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

Çıkararak 5 bayt tasarruf int s=0;ve koyarak s;önce f(w,i). Öyle
MD XF

1

JavaScript (ES6), 64 bayt

Körme sözdiziminde (a) (b) parametrelerini alarak adsız işlev. B dizisinde boş bir dize sağdan kaldırmayı ve boşluk bırakmayı soldan temsil eder.

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

Örneklerde olduğu gibi 1 ve 0 kullanıldığında puan 70

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

Ölçek

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 bayt

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

Çevrimiçi deneyin!

$aİsteğe bağlı tamsayı olarak girdi alır ve$b dizisi olarak 1ve 0s. (Not benim dizi olduğunu 1ve 0bir flip-flopped meydan en.) Başlangıçtaki çizgisini oluşturur #ve yapraklar boru hattı üzerinde olduğunu. Daha sonra döngüler 0için $a. Her yinelemede, önceden azaltılmış bir sayı izleyen, muhtemelen artırılmış sayıda boşluklar çıkarırız #. Evet, sonunda sonunda boş bir yeni hat açacak,$a listedeki öğe sayısından ziyade bir .

Tüm ayrı dizgiler boru hattında bırakılır ve çıktılar arasında aralarında yeni bir satır ayırıcı bulunur ve program tamamlanır.


0

C #, 181 bayt

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

Çevrimiçi deneyin!

Tam / Biçimli Sürüm:

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

Kömür , 17 bayt

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

Çevrimiçi deneyin! Link, kodun en yakın ayrıntılı versiyonuna. Açıklama:

FN«

İlk giriş, döngü yineleme sayısını verir.

P×#⁺¹ι

Döngü endeksleri varsayılan olarak sıfır indeksli olduğundan, doğru #s sayısını almak için buraya bir tane ekleriz .

¿I§⮌ηι

Kasırganın dibinden başlamak ve çalışmak bir bayttan tasarruf sağlar, ancak o zaman mevcut haneyi indeksleyebilmek için ikinci girişi tersine çevirmemiz gerekir.

Geçerli hane a ise 1, yukarı hareket ettirin. Bu, önceki satırın #sonunda bir ekstraya sahip olmasını sağlar .

Geçerli hane a ise 0, yukarı ve sola hareket ettirin. Bu, önceki satırın #başlangıçta fazladan olmasını sağlar .


0

C # , 159 bayt

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

açıklama

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

Çevrimiçi deneyin!


0

PHP, 136 bayt

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

Bir php dosyasına kaydedin ve ile test edin php file.php 8 '1,0,0,0,1,0,0'. Çıktı:

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

Ne yazık ki, girişi hazırlamak işin yarısı.

Her şeyi str_repeatyerine printfve ... kullanarak başka bir sürüm (158 bayt) 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;}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.