Xây dựng một cơn lốc xoáy


31

Theo tôi, một cơn lốc xoáy trông như thế này:

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

Lốc xoáy này bắt đầu với chiều rộng nvà trên mỗi dòng tiếp theo, một ký tự được xóa khỏi bên trái hoặc bên phải, tùy thuộc vào đầu vào.

Đầu vào

Đầu vào sẽ là một danh sách một số loại của hai giá trị duy nhất (một chuỗi gồm hai ký tự duy nhất cũng hoạt động) và một số nguyên dương tùy chọn để chỉ ra chiều rộng bắt đầu. Nếu số nguyên tùy chọn không được lấy, thì chiều rộng bắt đầu lớn hơn 1 so với chiều dài của danh sách. Hãy để chiều rộng bắt đầu là n.

Cách làm cơn lốc xoáy

Trong ví dụ của tôi, tôi chọn danh sách của mình để chứa 1s và 0s, mặc dù bạn có thể chọn bất kỳ hai giá trị hằng khác biệt hoặc một chuỗi gồm hai ký tự hằng khác biệt.

Hàng đầu tiên sẽ bao gồm các nký tự không phải khoảng trắng (bạn có thể chọn bất kỳ ký tự nhất quán nào; tôi chọn #ví dụ của mình).

Sau đó, đối với mỗi số trong danh sách, nếu số đó là 0, loại bỏ ký tự bên trái và tạo một hàng mới; nếu đó là một 1, loại bỏ đúng ký tự và tạo một hàng mới.

Vì vậy, cơn lốc xoáy ở trên là đầu ra cho 8, [1, 0, 0, 0, 1, 0, 0].

Đầu ra

Đầu ra có thể là một danh sách các chuỗi, một danh sách các danh sách các ký tự hoặc một chuỗi nhiều dòng. Trailing khoảng trắng trên mỗi dòng được cho phép, và một dòng mới ở cuối được cho phép.

Các trường hợp thử nghiệm

Những testcase bao gồm chiều rộng bắt đầu và danh sách sử dụng 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]

Trường hợp thử nghiệm dài

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Mã ngắn nhất trong byte thắng!
  • Bối cảnh không phải là một khoảng trắng (tôi quên không xác định điều này sớm hơn).
  • Ngôn ngữ của bạn chỉ phải hỗ trợ các số (độ rộng) mà nó có thể xử lý, nhưng nếu trình thông dịch của bạn được viết lại với kích thước số lớn hơn, thì về mặt lý thuyết nó phải hoạt động.

Thực hiện tham khảo


3
Dường như từ các ví dụ của bạn rằng bắt đầu với sẽ luôn lớn hơn 1 so với độ dài của danh sách. Chúng ta có thể có một ví dụ mà điều này không phải vậy không? Chiều rộng bắt đầu có thể nhỏ hơn chiều dài của danh sách không?
Charlie

@CarlosAlejo Không ... Điều đó không có ý nghĩa gì vì sau đó bạn sẽ không có đủ yếu tố để loại bỏ vào cuối ...
HyperNeutrino

4
Chiếc kính mà @HyperNeutrino đã từng nhìn thấy cơn lốc xoáy đầu tiên của mình: i.imgur.com/TzMm94a.png
Bạch tuộc ma thuật Urn

@MagicOctopusUrn ... lol
HyperNeutrino

Câu trả lời:



9

Python 2 , 66 59 byte

-7 byte nhờ Arnold Palmer

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

Hãy thử trực tuyến!

0để loại bỏ từ bên phải, 1để loại bỏ từ bên trái


1
ninja'd me: (((
Koishore Roy 20/07/17

Người đàn ông tương tự ở đây: /
Arnold Palmer

Lưu 7 byte bằng cách thay thế len(z)+1bằng x"số nguyên dương tùy chọn" có nghĩa là bạn không phải sử dụng nó. Từ ngữ của câu hỏi làm cho nó nghe như thế này được cho phép vì nó nói "Nếu số nguyên tùy chọn không được lấy" so với "Nếu số nguyên tùy chọn không được đưa ra".
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>là 0x1B, <CR>0x0D, <C-v>là 0x16. Và <ESC>OHlà một chuỗi đa bào đại diện cho phím HOME.

Đầu vào sử dụng alàm giá trị "loại bỏ bên trái" và blàm giá trị "loại bỏ bên phải".

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

Không có liên kết TIO, thật không may. Tôi không thể làm cho nó hoạt động theo V. Kiểm tra bằng cách sao chép mã vào tornado.vim (thay thế <ESC>, v.v. bằng các byte thực tế của chúng) và chạy như sau:

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

-3 byte do đề xuất của Neil.


Bạn có thể không sử dụng ^thay thế ␛OH?
Neil

@Neil ^đi đến ký tự không trống đầu tiên. ␛OHđi đến nhân vật đầu tiên.
Ray

1
À, xin lỗi, ý tôi là tôi 0không ...
Neil

@Neil Trong trường hợp đó, vâng, tôi nên làm điều đó. Cảm ơn.
Ray

5

05AB1E , 11 9 byte

-2 byte nhờ Erik the Outgolfer

0×=²v¨yú=

Xóa từ trái: 1
Xóa từ phải:0

Hãy thử trực tuyến!

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ηOcó rất nhiều tiềm năng nhưng tôi không thể tìm ra nó dưới 11 byte.
Bạch tuộc ma thuật Urn

Giữ phiên bản sau và thay thế ðy×ìbằng -2.
Erik the Outgolfer 21/07/17

4

Võng mạc , 30 28 byte

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

Hãy thử trực tuyến! Chỉ cần một chuỗi 0 và 1 và tính chiều rộng dựa trên chuỗi. Giải thích: Giai đoạn đầu tiên lấy chuỗi đầu vào và sao chép nó một lần cho mỗi điểm biên, chèn một #điểm tại điểm đó. Giai đoạn thứ hai sau đó thay đổi tất cả các chữ số sau #nhiều #s hơn , tạo ra tam giác. Stange thứ ba sau đó xóa tất cả những cái còn lại và thay đổi các số không thành không gian dẫn đến "sự chao đảo" của torndao.


3

J, 32 byte

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

vô dụng

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

Hãy thử trực tuyến!


19 byte ' #'#~0(,.#\.)@,+/\, trong đó đầu vào được đảo ngược từ mẫu vì thử thách cho phép bạn chọn hai giá trị riêng biệt.
dặm

@miles ty cho điều này và bình luận khác của bạn. thực sự đánh giá cao họ và xin vui lòng giữ cho họ đến.
Giô-na


3

R , 85 82 byte

3 byte được lưu nhờ Giuseppe

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

Hãy thử trực tuyến!

Giải trình:

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

Tôi biết làm một ma trận không phải là lựa chọn tốt nhất!
Giuseppe

1
82 byte - đã loại bỏ {}và sử dụng một dòng mới thay vì'\n'
Giuseppe

3

Haskell, 50 byte

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

Hãy thử trực tuyến!

Nếu danh sách đầu vào có thể là danh sách các tên hàm, chúng ta có thể lưu một byte

Haskell, 49 byte

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

Ví dụ sử dụng : h 5 [g,f,f,g].

Hãy thử trực tuyến!

Làm thế nào nó hoạt động:

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

R , 116 109 102 byte

-5 byte nhờ user2390246 (và 2 cái khác tôi đã tự lưu)

Bị ruồng bỏ bởi người dùng2390246

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

Hãy thử trực tuyến!

Returns một chức năng vô danh mà mất nvà một vector lvới 0để loại bỏ từ cánh trái và 1để loại bỏ từ bên phải, và in kết quả cho giao diện điều khiển với các định dạng đúng.


1
Bạn có thể tiết kiệm một chút khi tính toán kết thúc dòng vì bạn biết số #s sẽ là n-i + 1: Hãy thử trực tuyến! Mặc dù có một cách tiếp cận tốt hơn một chút nếu bạn chỉ in từng dòng thay vì xây dựng một ma trận: codegolf.stackexchange.com/a/133720/66252
user2390246 21/07/17

@ user2390246 rất hay! Tôi cũng đã quản lý để loại bỏ một cặp byte khác :)
Giuseppe

2

Japt , 14 13 byte

-1 byte nhờ @ETH

å+ uP £X+QpV´

Đầu vào là mảng, sau đó là kích thước. Các giá trị mảng tương ứng ""hoặc " "đại diện cho việc loại bỏ từ bên phải hoặc bên trái. Sử dụng "thay vì #và trả về như một chuỗi các chuỗi.

Ý tưởng ở đây là đầu tiên tạo ra một mảng của phần đệm bên trái cho mỗi dòng, do đó là các chuỗi đầu vào. Sau đó, mỗi dòng được "thêm s, sử dụng thực tế là lượng "s giảm đi 1 mỗi lần.

Hãy thử trực tuyến!

Tất cả đều sử dụng -Rcờ để định dạng đầu ra bằng cách nối nó với dòng mới.

Giải trình

å+ uP £X+QpYnV

Ngụ ý: U= mảng đầu vào, V= số đầu vào.

å+ uP

Tích lũy giảm mảng đầu vào ( å) với nối chuỗi ( +). Điều này dẫn đến mảng của mỗi giá trị trung gian giảm. Sau đó, thêm ( u) một chuỗi rỗng ( P) vào mảng.

£X+

Ánh xạ £từng giá trị vào chính nó ( X) được nối với ...

QpV´

Ký tự trích dẫn ( Q) lặp lại ( p) V--( ) lần. Điều này cũng giảm dần Vmỗi lần.


Tốt một. Tôi nghĩ bạn có thể tiết kiệm một byte bằng cách thay đổi YnVthành
ETHproductions

@ETHproductions Tuyệt vời, cảm ơn! Tôi hoàn toàn quên mất việc sử dụng ++hoặc --trong Japt.
Justin Mariner

2

ArnoldC , 3132 byte

ArnoldC không có các chuỗi nối, do đó, điều này tạo ra một cơn lốc xoáy 8và sử dụng 1s để loại bỏ nó. ArnoldC cũng chỉ hỗ trợ số nguyên tối đa 16 bit, do đó, nó tràn ra với đầu vào dài hơn 7 chữ số. (Vì vậy, nó sẽ chỉ tạo ra những cơn lốc xoáy nhỏ)

1là bên trái, bất kỳ chữ số nào khác đều đúng (mặc dù tôi không khuyến nghị 0, vì bạn không thể bắt đầu với điều đó.)

Đầu vào: 1221122

Đầu ra:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

Mã đánh gôn:

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

Hãy thử trực tuyến!

Mã không mã hóa (5178 byte):

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

Thật không may, tôi không nghĩ câu trả lời này là hợp lệ vì nó hạn chế đầu vào quá nhiều và sửa đổi đầu ra theo cách không được phép (sử dụng nền không phải khoảng trắng). Lấy làm tiếc!
HyperNeutrino

@HyperNeutrino Hội chợ đủ rồi, điều này tốt như bạn có thể nhận được từ ArnoldC.
TemporalWolf

Thật không may. Xin lỗi để lãng phí thời gian và công sức của bạn, nhưng tôi tin rằng bạn sẽ phải xóa điều này vì nó không hợp lệ bởi các thông số kỹ thuật thách thức. Bạn có thể hỏi trên Meta nếu bạn tin rằng đây là lựa chọn sai và cộng đồng có thể quyết định phải làm gì. Cảm ơn :)
HyperNeutrino

1
@HyperNeutrino Tôi không bị giam giữ ArnoldC tự động không hợp lệ: nó hoạt động cho toàn bộ phạm vi số nguyên hợp lệ được ArnoldC hỗ trợ và không "lạm dụng" nó bằng cách sử dụng khoảng trắng nhỏ hơn: Nếu bạn đã viết hỗ trợ 32 bit cho ArnoldC, câu trả lời của tôi sẽ làm việc mà không thay đổi ở độ chính xác đó. Các quy tắc xác định không có yêu cầu đối với các ký tự đệm, cũng như cơn lốc có chiều cao tối thiểu phải đạt được. Nhưng tôi sẽ mở một câu hỏi về meta nếu bạn thích.
TemporalWolf

1
Bạn đúng. Đủ công bằng, tiếp tục; Tôi đánh giá sai. Câu trả lời hay :)
HyperNeutrino

1

Haskell , 67 64 byte

Đầu vào được lật: 0có nghĩa là loại bỏ bên phải và 1loại bỏ bên trái:

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

Hãy thử trực tuyến!

"Bị đánh cắp"

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

Điều này sử dụng đặc tả độ rộng trường động trong printf()chuỗi định dạng. Hàm được gọi như thế này:

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

Lưu 5 byte bằng cách loại bỏ int s=0;và đặt s;trước f(w,i). Giống như vậy
MD XF

1

JavaScript (ES6), 64 byte

Hàm ẩn danh lấy tham số trong cú pháp currying (a) (b). Trong mảng b, một chuỗi rỗng biểu thị việc xóa từ bên phải và một khoảng trắng biểu thị việc xóa từ bên trái.

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

Sử dụng 1 và 0 như trong các ví dụ, điểm số là 70

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

Kiểm tra

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}

Hãy thử trực tuyến!

Lấy đầu vào $alà số nguyên tùy chọn và $blà mảng của 10s. (Lưu ý rằng mảng của tôi 10được lật từ thử thách.) Xây dựng đường ban đầu #và rời khỏi đường ống. Sau đó vòng từ 0đến $a. Mỗi lần lặp, chúng tôi đưa ra một số lượng không gian có thể tăng lên, theo sau là số lượng giảm dần #. Có, điều này sẽ tạo ra một dòng mới trống ở cuối, vì chúng tôi đang lặp lại $athay vì số lượng các mục trong danh sách.

Tất cả các chuỗi riêng lẻ được để lại trên đường ống và đầu ra với một dấu phân cách dòng mới giữa chúng được ẩn khi hoàn thành chương trình.


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

Hãy thử trực tuyến!

Phiên bản đầy đủ / định dạng:

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

Than , 17 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài gần nhất của mã. Giải trình:

FN«

Đầu vào đầu tiên cho số lần lặp lặp.

P×#⁺¹ι

Vì các chỉ số vòng lặp mặc định là không có chỉ mục, chúng tôi thêm một ở đây để có được số #s chính xác .

¿I§⮌ηι

Bắt đầu từ đáy của cơn lốc xoáy và làm việc lên sẽ tiết kiệm được một byte, nhưng sau đó chúng ta cần đảo ngược đầu vào thứ hai để có thể lập chỉ mục cho chữ số hiện tại.

Nếu chữ số hiện tại là a 1, di chuyển lên. Điều này làm cho hàng trước có thêm một #phần cuối.

Nếu chữ số hiện tại là a 0, di chuyển lên và sang trái. Điều này làm cho hàng trước có thêm một #lúc bắt đầu.


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

Giải trình

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

Hãy thử trực tuyến!


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

Lưu trong một tập tin php và kiểm tra với php file.php 8 '1,0,0,0,1,0,0'. Đầu ra:

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

Than ôi, chuẩn bị đầu vào là một nửa của công việc.

Một phiên bản khác (158 byte) sử dụng str_repeatthay vì printfvà ... gotocủa tất cả mọi thứ:

$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;}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.