토네이도 건설


31

저에 따르면 토네이도는 다음과 같습니다.

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

이 토네이도는 width로 시작하고 n다음 줄마다 입력에 따라 왼쪽 또는 오른쪽에서 문자가 제거됩니다.

입력

입력은 두 가지 고유 한 값 (두 고유 한 문자의 문자열도 작동)의 목록이며 시작 너비를 나타내는 선택적 양의 정수입니다. 선택적 정수를 사용하지 않으면 시작 너비가 목록의 길이보다 1 더 큽니다. 시작 너비를로 둡니다 n.

토네이도 만드는 법

내 예에서는 1s와 0s 를 포함하도록 내 목록을 선택 하지만 두 개의 고유 상수 값 또는 두 개의 고유 상수 문자 문자열을 선택할 수 있습니다.

첫 번째 행은 n공백 이 아닌 문자 로 구성됩니다 (일관된 문자를 선택할 수 있습니다; #예를 위해 선택 합니다).

그런 다음 목록의 각 숫자에 대해 숫자가 인 경우 0왼쪽 문자를 제거하고 새 행을 작성하십시오. 인 경우 1올바른 문자를 제거하고 새 행을 작성하십시오.

따라서 위의 토네이도가에 대한 출력입니다 8, [1, 0, 0, 0, 1, 0, 0].

산출

출력은 문자열 목록, 문자 목록 또는 여러 줄 문자열 일 수 있습니다. 각 줄의 후행 공백이 허용되고 끝에있는 후행 줄 바꿈이 허용됩니다.

테스트 사례

이 테스트 케이스에는 시작 너비와의 사용 목록이 포함 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]

긴 테스트 케이스

규칙

  • 표준 허점 적용
  • 바이트 단위의 최단 코드가 승리합니다!
  • 배경은 공백 일 필요는 없습니다 (이전에 지정하는 것을 잊었습니다).
  • 귀하의 언어는 처리 할 수있는 숫자 (너비) 만 지원해야하지만, 통역사가 더 큰 숫자로 다시 작성된 경우 이론적으로 작동해야합니다.

참조 구현


3
귀하의 예에서 시작은 항상 목록의 길이보다 1 더 큰 것 같습니다. 그렇지 않은 예를 들어 주시겠습니까? 시작 너비가 목록의 길이보다 작을 수 있습니까?
Charlie

@CarlosAlejo 아니오 ... 그렇다면 말이되지 않을만큼 충분한 요소가 없기 때문에 이해가되지 않습니다 ...
HyperNeutrino

4
@HyperNeutrino가 그의 첫 번째 토네이도를 보는 데 사용한 안경 : i.imgur.com/TzMm94a.png
Magic Octopus Urn

@MagicOctopusUrn ... lol
HyperNeutrino

답변:



9

파이썬 2 , 66 59 바이트

Arnold Palmer 덕분에 -7 바이트

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

온라인으로 사용해보십시오!

0오른쪽에서 1제거하고 왼쪽에서 제거


1
ninja'd me : (((
Koishore Roy

여기에 남자 : /
아놀드 파머

"선택적 양의 정수"가이를 사용하지 않아도되는 경우 로 대체 len(z)+1하여 7 바이트를 절약하십시오 x. 질문의 문구는 "선택적 정수가 취해지지 않은 경우"대 "선택적 정수가 주어지지 않은 경우"라고되므로 이것이 허용되는 것처럼 들린다.
아놀드 팔머

6

vim, 85 82 바이트

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>이다 0x0D, <C-v>0 * 16입니다. 그리고 <ESC>OH홈 키를 나타내는 멀티 바이트 시퀀스입니다.

입력은 a"왼쪽 제거"값과 b"오른쪽 제거"값으로 사용됩니다.

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

불행히도 TIO 링크가 없습니다. 코드를 tornado.vim에 복사 <ESC>하고 (실제 바이트와 함께 등을 대체하여 ) 다음과 같이 실행 하여 V에서 테스트를 수행 할 수 없었습니다 .

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

Neil의 제안으로 인해 -3 바이트.


^대신 사용할 수 없습니까 ␛OH?
Neil

@Neil ^은 공백이 아닌 첫 번째 문자로 이동합니다. ␛OH첫 번째 문자로 이동합니다.
Ray

1
아, 미안, 난 의미 0나는 ...하지 않았다

@Neil 그 경우에는 그렇습니다. 감사.
Ray

5

05AB1E , 11 9 바이트

Outgolfer Erik 덕분에 -2 바이트

0×=²v¨yú=

왼쪽에서 제거 : 1
오른쪽에서 제거 :0

온라인으로 사용해보십시오!

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많은 잠재력을 가지고 있지만 11 바이트 미만에서는 이해할 수 없습니다.
매직 문어 Urn

후자의 버전을 유지하고 교체 ðy×ì대한 -2.
Outgolfer Erik

4

망막 , 30 28 바이트

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

온라인으로 사용해보십시오! 0과 1의 문자열 만 취하고 문자열을 기준으로 너비를 계산합니다. 설명 : 첫 번째 단계는 입력 문자열을 가져 와서 각 지점에 대해 한 번 복제 #하여 해당 지점에 a 를 삽입합니다 . 그런 다음 두 번째 단계는의 뒤에있는 모든 숫자를 s #이상으로 변경 #하여 삼각형을 만듭니다. 그런 다음 세 번째 단계는 나머지 모든 항목을 삭제하고 0을 공백으로 변경하여 torndao의 "흔들림"을 발생시킵니다.


3

J, 32 바이트

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

언 골프

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

온라인으로 사용해보십시오!


' #'#~0(,.#\.)@,+/\챌린지에서 두 개의 고유 한 값을 선택할 수 있으므로 19 바이트 ( 입력이 샘플에서 반전 됨).
마일

이것과 당신의 다른 의견에 대한 @ 마일리지 ty. 정말로 감사하고 계속 오십시오.
Jonah


3

R , 85 82 바이트

주세페 덕분에 3 바이트 절약

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

온라인으로 사용해보십시오!

설명:

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

매트릭스를 만드는 것이 최선의 선택이 아니라는 것을 알고있었습니다!
Giuseppe

1
82 바이트 - {}대신 면도 하고 리터럴 줄 바꿈을 사용'\n'
Giuseppe

3

하스켈, 50 바이트

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

온라인으로 사용해보십시오!

입력 목록이 함수 이름의 목록 일 수 있다면 바이트를 저장할 수 있습니다

하스켈, 49 바이트

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

사용 예 : h 5 [g,f,f,g].

온라인으로 사용해보십시오!

작동 방식 :

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

user2390246 덕분에 -5 바이트 (그리고 다른 2 개는 저를 구했습니다)

사용자가 발송 함

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

온라인으로 사용해보십시오!

반환합니다 익명 함수 n와 벡터 l0왼쪽에서 제거하고 1오른쪽에서 제거와 인쇄 권리 서식 콘솔에 결과를.


1
#s 의 개수 가 n-i + 1 임을 알 수 있으므로 줄 끝을 계산하는 데 약간의 시간을 절약 할 수 있습니다 . 온라인으로 시도하십시오! 매트릭스를 구성하는 대신 한 줄 씩만
user2390246

@ user2390246 아주 좋은! 나는 또한 다른 바이트 쌍을 면도 할 수 있었다 :)
Giuseppe

2

apt , 14 13 바이트

@ETH 덕분에 -1 바이트

å+ uP £X+QpV´

입력은 배열이고 크기입니다. 배열 값은 ""또는 " "이며, 각각 오른쪽 또는 왼쪽에서 제거를 나타냅니다. 문자열 "대신 #배열을 사용 하여 반환합니다.

여기서 아이디어는 먼저 각 줄에 대해 왼쪽 패딩 배열을 작성하여 입력 문자열을 만드는 것이 었습니다. 그런 다음 "s의 양이 "매번 1 씩 감소 한다는 사실을 사용하여 각 줄에 s가 추가 됩니다.

온라인으로 사용해보십시오!

이들은 모두 -R플래그를 사용하여 출력을 개행과 결합하여 출력을 형식화합니다.

설명

å+ uP £X+QpYnV

암시 적 : U= 입력 배열, V= 입력 번호.

å+ uP

å문자열 연결 ( +)을 사용하여 입력 배열 ( )을 누적 적으로 줄 입니다. 이는 감소의 각 중간 값의 배열을 초래합니다. 그런 다음 u빈 문자열 ( P)을 배열 앞에 추가합니다 ( ) .

£X+

다음에 연결된 £각 값을 자체 ( X)에 매핑 합니다 .

QpV´

따옴표 ( Q)가 반복 ( p) V--( ) 회 반복 되었습니다. 이것은 또한 V매번 감소 합니다.


좋아요 다음으로 변경 YnV하여 바이트를 절약 할 수 있다고 생각합니다.
ETHproductions

@ETHproductions 굉장합니다, 감사합니다! 나는 Japt를 사용 ++하거나 사용하는 것을 완전히 잊었습니다 --.
Justin Mariner

2

ArnoldC , 3132 바이트

ArnoldC에는 문자열 연결이 없으므로 토네이도를 만들고 8s를 사용 1하여 간격을 둡니다. ArnoldC는 최대 16 비트 정수만 지원하므로 7 자리보다 긴 입력으로 오버플로합니다. (그래서 미니 토네이도 만 만들 것입니다)

1왼쪽에 있으면 다른 숫자가 맞습니다 (권장 0하지는 않더라도 시작할 수 없으므로 권장 하지는 않습니다).

입력: 1221122

산출:

88888888
18888888
18888881
18888811
11888811
11188811
11188111
11181111

골프 코드 :

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

온라인으로 사용해보십시오!

ungolfed 코드 (5178 바이트) :

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

불행히도,이 대답은 입력을 너무 많이 제한하고 허용되지 않는 방식 (공백이 아닌 배경 사용)으로 출력을 수정하기 때문에 유효하지 않다고 생각합니다. 죄송합니다!
HyperNeutrino

@HyperNeutrino Fair, ArnoldC에서 얻을 수있는만큼 좋습니다.
TemporalWolf

운이 없었어. 시간과 노력을 낭비하여 죄송하지만 챌린지 사양에 따라 유효하지 않으므로 삭제해야합니다. 당신은 이것이 잘못된 선택이고 공동체가 무엇을해야할지 결정할 수 있다고 메타에게 물어볼 수 있습니다 . 감사합니다 :)
HyperNeutrino

1
@HyperNeutrino 나는 확신하지 않습니다 ArnoldC는 자동으로 유효하지 않습니다 : ArnoldC가 지원하는 유효한 모든 정수 범위에서 작동하며 더 작은 공간을 사용하여 "유용하지 않습니다". ArnoldC에 대한 32 비트 지원으로 쓴 경우 내 대답 그 정밀도에서 변화없이 작동합니다. 이 규칙은 패딩 문자에 대한 요구 사항이나 달성 가능한 최소 높이 토네이도를 지정하지 않습니다. 하지만 원한다면 메타에 대한 질문을하겠습니다.
TemporalWolf

1
네가 옳아. 충분히 공정하고 계속하십시오. 나는 잘못 판단했다. 좋은 답변 :)
HyperNeutrino

1

하스켈 , 67 64 바이트

입력이 뒤집 힙니다. 0오른쪽을 1제거하고 왼쪽을 제거합니다.

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

온라인으로 사용해보십시오!

"언 골프 드"

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


1

C, 68 63 바이트

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

printf()형식 문자열 에서 동적 필드 너비 사양을 사용합니다. 이 함수는 다음과 같이 호출됩니다.

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

를 제거 int s=0;하고 s;앞에 넣어 5 바이트를 절약하십시오 f(w,i). 그래서처럼
MD XF

1

자바 스크립트 (ES6), 64 바이트

커리 구문 (a) (b)에서 매개 변수를 취하는 익명 함수. b 배열에서 빈 문자열은 오른쪽에서 제거를 나타내고 공백은 왼쪽에서 제거를 나타냅니다.

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

예제에서와 같이 1과 0을 사용하면 점수는 70입니다.

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

테스트

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 바이트

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

온라인으로 사용해보십시오!

입력 $a을 선택적 정수 $b로, 10s 의 배열로 사용합니다 . ( 1과의 배열은 0챌린지에서 플립 플롭됩니다.) 초기 줄을 구성 #하고 파이프 라인에 그 줄을 남겨 둡니다. 그런 다음에서 0로 반복 합니다 $a. 반복 할 때마다 가능한 증가 된 수의 공백이 출력되고 그 뒤에 미리 감소 된 수의가 생성 #됩니다. 예, 이것은 $a목록의 항목 수보다 반복되기 때문에 끝에 빈 줄 바꿈 줄이 생깁니다 .

모든 개별 문자열은 파이프 라인에 남겨지고 프로그램 완료시 그 사이에 개행 구분 기호가있는 출력이 암시됩니다.


0

C #, 181 바이트

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

온라인으로 사용해보십시오!

풀 / 포맷 버전 :

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

, 17 바이트

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

온라인으로 사용해보십시오! 가장 가까운 상세 버전의 코드로 연결됩니다. 설명:

FN«

첫 번째 입력은 루프 반복 횟수를 제공합니다.

P×#⁺¹ι

루프 인덱스는 기본적으로 인덱스가 0이 아니므로 여기에 하나를 추가하여 올바른 수를 얻습니다 #.

¿I§⮌ηι

토네이도의 맨 아래부터 시작하여 작업하면 바이트가 절약되지만 현재 숫자를 인덱싱 할 수 있도록 두 번째 입력을 반대로해야합니다.

현재 숫자가 인 경우 1위로 이동하십시오. 이로 인해 이전 행 #의 끝에 추가 항목 이 생깁니다.

현재 숫자가이면 0위와 왼쪽으로 이동하십시오. 이렇게하면 #시작시 이전 행에 추가 항목 이 생깁니다.


0

C # , 159 바이트

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

설명

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

온라인으로 사용해보십시오!


0

PHP, 136 바이트

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

PHP 파일로 저장하고로 테스트하십시오 php file.php 8 '1,0,0,0,1,0,0'. 산출:

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

아아, 입력을 준비하는 것은 작업의 절반입니다.

and ... str_repeat대신에 다른 버전 (158 바이트) 사용 :printfgoto

$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;}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.