Bangun Tornado


31

Menurut saya, tornado terlihat seperti ini:

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

Tornado ini dimulai dengan lebar n, dan pada setiap baris berikutnya, karakter dihapus dari kiri atau kanan, tergantung pada input.

Memasukkan

Input akan berupa daftar semacam apa saja dari dua nilai unik (string dua karakter unik juga berfungsi), dan bilangan bulat positif opsional untuk menunjukkan lebar awal. Jika bilangan bulat opsional tidak diambil, maka lebar awal adalah 1 lebih besar dari panjang daftar. Biarkan lebar mulai menjadi n.

Cara membuat tornado

Dalam contoh saya, saya memilih daftar saya untuk mengandung 1s dan 0s, meskipun Anda dapat memilih dua nilai konstanta berbeda, atau string dari dua karakter konstanta berbeda.

Baris pertama akan terdiri dari nkarakter non-spasi putih (Anda dapat memilih karakter yang konsisten; Saya memilih #untuk contoh saya).

Kemudian, untuk setiap nomor dalam daftar, jika nomornya 0, hapus karakter kiri dan buat baris baru; jika a 1, hapus karakter yang tepat dan buat baris baru.

Jadi, tornado di atas adalah output untuk 8, [1, 0, 0, 0, 1, 0, 0].

Keluaran

Outputnya bisa berupa daftar string, daftar daftar karakter, atau string multiline. Trailing whitespace pada setiap baris diperbolehkan, dan baris tambahan trailing di akhir diperbolehkan.

Uji Kasus

Testcases ini termasuk lebar mulai dan daftar penggunaan 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]

Kasus uji panjang

Aturan

  • Celah standar berlaku
  • Kode terpendek dalam byte menang!
  • Latar belakang tidak harus berupa spasi (saya lupa menentukan ini sebelumnya).
  • Bahasa Anda hanya perlu mendukung angka (lebar) yang dapat ditangani, tetapi jika penerjemah Anda ditulis ulang dengan ukuran angka yang lebih besar, maka secara teoritis ia harus bekerja.

Implementasi Referensi


3
Tampaknya dari contoh Anda bahwa awal dengan selalu akan menjadi 1 lebih besar dari panjang daftar. Bisakah kita punya contoh di mana ini tidak begitu? Bisakah lebar awal kurang dari panjang daftar?
Charlie

@CarlosAlejo Tidak ... Itu tidak masuk akal kalau begitu karena Anda tidak akan memiliki cukup elemen untuk dihapus di akhir ...
HyperNeutrino

4
Kacamata yang digunakan @HyperNeutrino untuk melihat tornado pertamanya: i.imgur.com/TzMm94a.png
Magic Gurita Guci

@MagicOctopusUrn ... lol
HyperNeutrino

Jawaban:



9

Python 2 , 66 59 byte

-7 byte terima kasih kepada Arnold Palmer

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

Cobalah online!

0untuk menghapus dari kanan, 1untuk menghapus dari kiri


1
ninja'd saya: (((
Koishore Roy

Pria yang sama di sini: /
Arnold Palmer

Simpan 7 byte dengan mengganti len(z)+1dengan xjika "bilangan bulat positif opsional" berarti Anda tidak harus menggunakannya. Kata-kata dari pertanyaan membuatnya terdengar seperti ini diizinkan karena ia mengatakan "Jika bilangan bulat opsional tidak diambil" versus "Jika bilangan bulat opsional tidak diberikan".
Arnold Palmer

6

vim, 85 82 byte

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>adalah 0x1B, <CR>adalah 0x0D, <C-v>adalah 0x16. Dan <ESC>OHmerupakan urutan multibyte yang mewakili kunci HOME.

Input digunakan asebagai nilai "hapus kiri" dan bsebagai "hapus kanan".

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

Sayangnya, tidak ada tautan TIO. Saya tidak bisa membuatnya bekerja di bawah V. Uji dengan menyalin kode ke tornado.vim (mengganti <ESC>, dll dengan byte mereka yang sebenarnya) dan berjalan sebagai berikut:

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

-3 byte karena saran Neil.


Bisakah Anda tidak menggunakan ^bukan ␛OH?
Neil

@Neil ^pergi ke karakter non-kosong pertama. ␛OHpergi ke karakter pertama.
Ray

1
Ah, maaf, saya berarti 0aku tidak ...
Neil

@ Neil Dalam hal ini, ya, saya harus melakukan itu. Terima kasih.
Ray

5

05AB1E , 11 9 byte

-2 byte terima kasih kepada Erik the Outgolfer

0×=²v¨yú=

Hapus dari kiri: 1
Hapus dari kanan:0

Cobalah 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ηOmemiliki begitu banyak potensi tetapi saya tidak dapat menemukannya di bawah 11 byte.
Magic Gurita Guci

Simpan versi yang terakhir dan ganti ðy×ìdengan -2.
Erik the Outgolfer

4

Retina , 30 28 byte

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

Cobalah online! Hanya mengambil string 0s dan 1s dan menghitung lebar berdasarkan string. Penjelasan: Tahap pertama mengambil string input dan menduplikasinya sekali untuk setiap titik batas, menyisipkan #pada titik itu. Tahap kedua kemudian mengubah semua digit setelah #ke lebih banyak #, menciptakan segitiga. Stange ketiga kemudian menghapus semua yang tersisa dan mengubah nol menjadi spasi yang menghasilkan "goyangan" torndao.


3

J, 32 byte

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

ungolfed

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

Cobalah online!


19 byte ' #'#~0(,.#\.)@,+/\, di mana input dibalik dari sampel karena tantangan memungkinkan Anda untuk memilih dua nilai yang berbeda.
mil

@miles ty untuk ini dan komentar Anda yang lain. sangat menghargai mereka dan tolong tetap datang.
Jonah


3

R , 85 82 byte

3 byte disimpan berkat Giuseppe

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

Cobalah online!

Penjelasan:

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

Saya tahu membuat matriks bukanlah pilihan terbaik!
Giuseppe

1
82 byte - mencukur habis {}dan menggunakan baris baru literal alih-alih'\n'
Giuseppe

3

Haskell, 50 byte

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

Cobalah online!

Jika daftar input dapat berupa daftar nama fungsi, kita dapat menyimpan satu byte

Haskell, 49 byte

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

Contoh penggunaan: h 5 [g,f,f,g].

Cobalah online!

Bagaimana itu bekerja:

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

sunting: disimpan 1 byte berkat xnor

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

Cobalah online!

1 untuk menghapus dari kiri, 0 untuk menghapus dari kanan.


1
Saya pikir Anda dapat melakukan s=" "*i+s[:-1]dengan bertukar kiri dan kanan.
xnor

2

R , 116 109 102 byte

-5 byte terima kasih kepada user2390246 (dan 2 lainnya saya simpan sendiri)

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

Cobalah online!

Mengembalikan fungsi anonim yang mengambil ndan vektor ldengan 0untuk menghapus dari kiri dan 1untuk menghapus dari kanan, dan mencetak hasilnya ke konsol dengan pemformatan kanan.


1
Anda dapat menghemat sedikit dalam menghitung akhir baris karena Anda tahu jumlah #s akan n-i +1: Cobalah secara online! Meskipun ada pendekatan yang sedikit lebih baik jika Anda hanya mencetak baris demi baris daripada membangun matriks: codegolf.stackexchange.com/a/133720/66252
user2390246

@ user2390246 sangat bagus! Saya berhasil mencukur sepasang byte lain juga :)
Giuseppe

2

Japt , 14 13 byte

-1 byte terima kasih kepada @ETH

å+ uP £X+QpV´

Input adalah array, lalu ukuran. Nilai array adalah ""atau " ", yang masing-masing mewakili penghapusan dari kanan atau kiri. Menggunakan "alih-alih #dan kembali sebagai array string.

Idenya di sini adalah untuk pertama-tama membuat array dari padding kiri untuk setiap baris, karenanya string input. Kemudian, setiap baris mendapatkan "s, menggunakan fakta bahwa jumlah" s berkurang 1 setiap kali.

Cobalah online!

Ini semua menggunakan -Rbendera untuk memformat output dengan bergabung dengan baris baru.

Penjelasan

å+ uP £X+QpYnV

Tersirat: U= array input, V= jumlah input.

å+ uP

Secara kumulatif mengurangi array input ( å) dengan rangkaian string ( +). Ini menghasilkan array dari masing-masing nilai tengah reduksi. Kemudian, tambahkan ( u) string kosong ( P) ke array.

£X+

Memetakan £setiap nilai untuk dirinya sendiri ( X) disatukan dengan ...

QpV´

Karakter kutipan ( Q) diulang ( p) V--( ) kali. Ini juga mengurangi Vsetiap kali.


Bagus Saya pikir Anda dapat menyimpan byte dengan mengubah YnVke
ETHproduk

@ EHProduk Hebat, terima kasih! Saya benar-benar lupa tentang menggunakan ++atau --di Japt.
Justin Mariner

2

ArnoldC , 3132 byte

ArnoldC tidak memiliki rangkaian string, jadi ini membangun tornado dari 8s dan menggunakan 1s untuk mengeluarkannya. ArnoldC juga hanya mendukung bilangan bulat 16-bit, sehingga meluap dengan input lebih dari 7 digit. (Jadi itu hanya akan membuat tornado mini)

1dibiarkan, digit lainnya benar (walaupun saya tidak akan merekomendasikan 0, karena Anda tidak dapat memulai dengan itu.)

Memasukkan: 1221122

Keluaran:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

Kode 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

Cobalah online!

Kode tidak dikunci (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

Sayangnya, saya tidak berpikir jawaban ini valid karena membatasi input terlalu banyak dan memodifikasi output dengan cara yang tidak diizinkan (menggunakan latar belakang non-spasi putih). Maaf!
HyperNeutrino

@HyperNeutrino Cukup adil, ini sebagus yang Anda bisa dapatkan dari ArnoldC.
TemporalWolf

Sangat disayangkan. Maaf karena membuang-buang waktu dan tenaga Anda, tetapi saya yakin Anda harus menghapus ini karena tidak sesuai dengan spesifikasi tantangan. Anda bisa bertanya di Meta jika Anda yakin bahwa ini adalah pilihan yang salah dan komunitas dapat memutuskan di sana apa yang harus dilakukan. Terima kasih :)
HyperNeutrino

1
@HyperNeutrino Saya tidak yakin ArnoldC secara otomatis tidak valid: ia bekerja untuk seluruh jajaran bilangan bulat yang valid yang didukung oleh ArnoldC, dan tidak "menyalahgunakannya" dengan menggunakan ruang yang lebih kecil: Jika Anda menulis dalam dukungan 32 bit untuk ArnoldC, jawaban saya akan bekerja tanpa perubahan pada presisi itu. Aturan menentukan tidak ada persyaratan untuk karakter padding, atau tornado tinggi minimum yang harus dicapai. Tapi saya akan membuka pertanyaan tentang meta jika Anda mau.
TemporalWolf

1
Kamu benar. Cukup adil, teruskan; Saya salah menilai. Jawaban yang bagus :)
HyperNeutrino

1

Haskell , 67 64 byte

Input dibalik: 0berarti hapus ke kanan, dan 1hapus ke kiri:

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

Cobalah online!

"Tidak Diundang"

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


1

C, 68 63 byte

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

Ini menggunakan spesifikasi lebar bidang dinamis dalam printf()string format. Fungsi ini dinamakan seperti ini:

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

Simpan 5 byte dengan menghapus int s=0;dan meletakkan s;sebelum f(w,i). Seperti itu
MD XF

1

JavaScript (ES6), 64 byte

Fungsi anonim mengambil parameter dalam sintaks currying (a) (b). Dalam b array, string kosong mewakili penghapusan dari kanan dan spasi mewakili penghapusan dari kiri.

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

Menggunakan 1 dan 0 seperti pada contoh skornya adalah 70

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

Uji

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}

Cobalah online!

Mengambil input $asebagai bilangan bulat opsional dan $bsebagai array dari 1dan 0s. (Perhatikan bahwa array saya dari 1dan 0flip-flop dari tantangan.) Membangun garis awal #dan membiarkannya pada pipa. Kemudian loop dari 0ke $a. Setiap iterasi, kami menghasilkan jumlah ruang yang mungkin bertambah, diikuti oleh jumlah pra-pengurangan #. Ya, ini akan memuntahkan baris baru yang kosong di bagian akhir, karena kami akan melanjutkan$a jumlah item dalam daftar.

Semua string individu ditinggalkan pada pipa dan output dengan pemisah baris baru di antara mereka secara implisit pada penyelesaian program.


0

C #, 181 byte

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

Cobalah online!

Versi Lengkap / Diformat:

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

Arang , 17 byte

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

Cobalah online! Tautan adalah ke versi kode verbose terdekat. Penjelasan:

FN«

Input pertama memberikan jumlah iterasi loop.

P×#⁺¹ι

Karena indeks loop default ke indeks-nol, kami menambahkan satu di sini untuk mendapatkan jumlah #s yang benar.

¿I§⮌ηι

Mulai dari bagian bawah tornado dan bekerja menghemat satu byte, tetapi kemudian kita perlu membalikkan input kedua sehingga kita dapat mengindeks digit saat ini.

Jika digit saat ini adalah 1, naikkan. Ini membuat baris sebelumnya memiliki ekstra #di akhir.

Jika digit saat ini adalah 0, pindah ke atas dan ke kiri. Ini membuat baris sebelumnya memiliki ekstra #di awal.


0

C # , 159 byte

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

Penjelasan

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

Cobalah online!


0

PHP, 136 byte

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

Simpan dalam file php dan uji dengan php file.php 8 '1,0,0,0,1,0,0'. Keluaran:

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

Sayangnya, menyiapkan input sudah setengah dari pekerjaan.

Versi lain (158 byte) menggunakan str_repeatalih-alih printfdan ... gotodari semua hal:

$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;}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.