Estágios Falcon Heavy

43

Escolha um conjunto de quatro bytes sem substituição (ou seja, nenhum byte repetido) e não necessariamente em uma ordem específica, de qualquer um dos quatro conjuntos a seguir:

  1. Os caracteres de qualquer codificação de byte único
  2. Os caracteres Unicode no intervalo de 00 a FF
  3. Os números decimais assinados no intervalo −128–127
  4. Os números inteiros decimais não assinados no intervalo de 0 a 255

Os quatro valores que você escolheu (indique quais são) serão as entradas válidas. Você deve emparelhar cada valor com uma das obras de arte ASCII abaixo.

Dada (por qualquer meio) uma de suas quatro entradas válidas, responda (por qualquer meio, até mesmo a lista de strings) com a arte ASCII correspondente. Espaço em branco extra é permitido em todos os lados, desde que a imagem esteja lá em uma área 2D contígua.

Primeiro byte:

     /\
    /  \
   |    |
   |    |
   |    |
   |____|
    \__/
    |  |
    |  |
    |  |
    |  |
 /\ |  | /\
/  \|  |/  \
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
AAAAAAAAAAAA

Segundo byte:

  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 AAAA

Terceiro byte:

  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |__|
  /\

Quarto byte:

 db
_/\_
\__/
|  |
|  |
|  |
|__|
 /\

O que há de novo neste desafio de complexidade de arte ASCII Kolmogorov?

  1. A capacidade de selecionar entradas válidas apresenta um novo aspecto para o desafio. As entradas são claramente muito limitadas para codificar todo o resultado, mas podem levar informações suficientes para merecer atenção.

  2. As múltiplas saídas possíveis compartilham muita estrutura; portanto, a reutilização de código ou sub-imagens é possível tanto dentro de cada imagem quanto entre as imagens.

  3. Há duplicação suficiente para que mesmo idiomas que não sejam bem orientados para desafios como esse tenham uma boa chance de poder usar código inteligente, em vez de apenas codificar códigos extensivamente.

Adão
fonte
2
db soa como um Aston Martin! AFAIK é um Tesla Roadster.
Level River St
1
@LevelRiverSt Bowie, não Brown!
Adám 6/02/2018
O espaço em branco à esquerda / à direita é permitido, principalmente à esquerda?
Level River St
@LevelRiverSt Obrigado. Eu esqueci de escrever, apesar de pensar nisso.
Adám 07/02/19
1
Isso é realmente animação ?
FantaC 18/0218

Respostas:

41

JavaScript (ES6), 247 bytes

RegPack'ed. Espera 0 ... 3 como entrada.

n=>[...'BigFu!#?%$Rocket'].reduce((s,c)=>(x=s.split(c)).join(x.pop()),`oF#$!
FRFRFRF|??|$i$t$t$t$t%# t #
!t!BBB
uuceeeeeee%c%|?|
o#, db
_#_
iggg
|?|%#g|o|e%t%t%tkgttgttcu,o#%!
RRR|??|%ieF R|oo|
$
oo%
 ?__#/\\!/o\\uAAAAFo g
ti\\?/Bkkk`).split`,`[n]

Experimente online!

Arnauld
fonte
16
BigFu!#?%$Rocket? Mas isso é apenas Falcon Heavy!
Adám 07/02/18
16
@ Adám Isso mesmo. Mas BFR.reduce() == FalconHeavy: p
Arnauld 07/02
Isso é genialidade. Por um segundo eu fiquei tipo, espere o quê, tem um javascript embutido pra isso ?! Então voltei aos meus sentidos ... +1!
Rodolphito
Impressionante como sempre.
Weijun Zhou
"FRFRFRF" = "Fu!#?%$RocketFu!#?%$RocketFu!#?%$RocketFu!#"direito? Eu amo essa resposta mais do que qualquer coisa lol.
Magic Octopus Urn
13

Carvão , 67 bytes

NθF⁼³θ«PAA↑↑¹⁸↗²‖MM⁴±χ»¿θ«↙²↓⁴M↗__¶\_¶»↓d/_¶ _\↓×⁴∨›²θ⁶¿‹¹θAA↑¶/_‖M

Experimente online! Link é a versão detalhada do código. Recebe a entrada como um número 3-0. Explicação:

Nθ

Digite o número.

F⁼³θ«PAA↑↑¹⁸↗²‖MM⁴±χ»

Se for 3, puxe metade do booster, espelhe-o e vá para a ponta do foguete.

¿θ«↙²↓⁴M↗__¶\_¶»

Se não for 0, puxe a metade esquerda do tanque de combustível dianteiro.

↓d/_¶ _\

Mas se for 3, desenhe metade esquerda do cone do nariz.

↓×⁴∨›²θ⁶

Desenhe o lado esquerdo do foguete.

¿‹¹θAA↑¶/_‖M

Desenhe a base apropriada do foguete e espelhe para finalizar.

Neil
fonte
Você criou Charcoalapenas para este concurso?
Nielsbot 08/02
O @nielsbot Charcoal tem 7 meses (consulte o log de confirmação).
Phyrfox
Eu estava brincando. Mas acho que isso levanta a questão: será o golfe se você criar um idioma para resolver o problema? Onde fica o limite?
Nielsbot
1
@nielsbot Acho que isso conta como uma das brechas padrão .
Neil
7

Limpo , 292 278 273 271 262 261 bytes

-5 bytes graças a Adám

import StdEnv,Text
e=[k,k,k,"|__|",m]
l=repeatn
o="\\__/"
n="/  \\"
m="/\\"
u="|    |"
s="AAAA"
k="|  |"
?z=[m,n,u,u,u,"|____|",o:z]

\i=[cjustify 12[c\\c<-:q]\\q<-[?[k,k,k,k,m+" "+k+" "+m,n+k+n,k+k+k:l 18(k+k+k)]++[s+s+s],?(l 24k++[s]),?e,["db","_/\\_",o:e]]!!i]

Experimente online!

Uma função lambda, mapeando os Intvalores 0..3para as imagens na ordem listada no OP.

Furioso
fonte
1
287
Adám 07/02/19
@ Adám Obrigado! Eu era capaz de aplicar isso, mas só o vi depois que o
reduzi
Por que existem dois trechos?
Erik the Outgolfer
@EriktheOutgolfer o segundo é o lambda. O primeiro é o código do qual depende. Eu não os coloco no mesmo snippet porque não consigo multilinar uma atribuição no snippet.
Οurous 07/02
5

Python 2 , 292 290 284 282 281 bytes

i,j,d,e,x,y=input()," "," /\\ ","/  \\","|  |","\__/"
f=i<1
l,m,n,p,q,s=3*f*j,j*(i<3),d*f,e*f,x*f,j*(i>0)
print"\n".join(([l+j+d,l+j+e]+[l+"|    |"]*3+[l+"|____|",l+j+y],[" db\n_/\_",y])[i>2]+([l+j+x]*4+[n+s+x+n,p+s+x+p]+[q+s+x+q]*18+[s+"A"*(4,12)[f]],[m+x]*3+[m+"|__|",m+d])[i>1])

Experimente online!

Pega um número inteiro de 0 a 3 como entrada e usa a indexação de lista (1 ou 0) para criar cada saída.

-2 para um par de colchetes desnecessários.

-6 removendo uma atribuição de variável que foi usada apenas uma vez.

-2 para outra variável de uso único.

-1 com uma dica de @Rod

ElPedro
fonte
1
Os n, pe qas variáveis são desnecessárias também (-2 bytes cada). " db"e "_/\_"será associado "\n"mais tarde, você pode transformar os dois em " db\n_/\_"para salvar outro byte. Você pode (provavelmente) mover o +y, de cada elemento, fora da lista (e remover o const também) algo como(...)[i>2]+["\__/"]
Rod
@ Rod Obrigado pela dica \ n. Eu senti falta disso. Não tenho certeza sobre n, peq. Eles são usados ​​duas vezes cada, um de cada lado do foguete principal para definir se os boosters são necessários ou não. Em geral, y, em um caso, precisa de nova linha antes dele e, no outro, de alguns outros caracteres. Provavelmente poderia se beneficiar de uma reescrita completa para ser honesto. Sinta-se à vontade para tirar algumas idéias e usá-las para postar sua própria resposta.
ElPedro
5

Rubi , 234 212 205 bytes

->n{y=*"| "
h=%w{/ /\ }+["|  "]*3+%w{|__ \\_}+y*3
t=%w{|_ /}
[h+["| ","/\\ | ","/  \\| ",*["|  || "]*18,?A*6],h+y*21<<?A*2,h+t,%w{d _/ \\_}+y*3+t][n].map{|a|a.rjust(6," ")+a.reverse.tr("\\\\/d","/\\\\b")}}

Experimente online!

Leva um número inteiro de 0 a 3. Constrói uma matriz das metades esquerdas de cada fase, indexa e depois preenche e reflete cada linha. Todo o preenchimento é da mesma largura, portanto, as últimas fases têm espaços em branco à esquerda. Retorna uma matriz de seqüências de caracteres.

-2 bytes: declare ycomo uma matriz imediatamente, em vez de precisar *[y]mais tarde.

-5 bytes: substitua x="\\"por t=%w{_| \\}.

-5 bytes: menos desreferenciamento, mais adição de matriz.

-1 bytes: h+y*21+[?A*2]-> h+y*21<<?A*2na fase 1.

-3 bytes: A especificação permite a omissão de *$/ingressar no resultado.

-4 bytes: ["b","\\_","_/"]-> %w{b \\_ _/}na fase 3.

-2 bytes: use também a %wnotação na matriz principal.

-7 bytes: use em rjustvez de preenchimento manual (isso também significa gerar o lado esquerdo e espelhá-lo, em vez de começar pelo lado direito)

Ungolfed:

->n{
  y=*"| "                                            # Same as y=[" |"]
  h=%w{/ /\ }+["|  "]*3+%w{|__ \\_}+y*3              # Head for phases 0-2
  t=%w{|_ /}                                         # Tail for phases 2,3
  [
    h+["| ","/\\ | ","/  \\| ",*["|  || "]*18,?A*6], # Phase 0
    h+y*21<<?A*2,                                    # Phase 1
    h+t,                                             # Phase 2
    %w{d _/ \\_}+y*3+t                               # Phase 3
  ][n].map{|a|                                       # Choose phase
    a.rjust(6," ") +                                 # Pad left to width 6
    a.reverse.tr("\\\\/d","/\\\\b")                  # Add mirror (right side)
  }
}
benj2240
fonte
2

SOGL V0.12 , 90 bytes

┐∙2╚;+ƨA+.1>?jj■|_ /√+}R
3<?'».1>⌡9R"    kΓC+SA}‘03ž}.‽'⁴R╬³2±6«ž}.3=?4R╬³"XƧ⁸│\׀2⁴‘4n10žP}╬³

Experimente aqui!

Entradas 0/1/2/3 correspondentes aos bytes 1/2/3/4

dzaima
fonte
2

Ruby , 209 183 bytes

->n{z=[a=' /\\ ',b='/  \\']+['|    |']*3+%w{|____| \__/}+[c='|  |']*24+[?A*n]
n>4&&z[10..-n/6]=n>8?[c,a+c+a,b+c+b]+[c*3]*18:['|__|',a]
n==5&&z[0,6]=%w{db _/\_}
z.map{|i|i.center(12)}}

Experimente online!

Entradas necessárias da seguinte maneira:

Centre core + upper stage + fairing: 4
As above + boosters : 12
Upper stage + fairing: 6
Upper stage without fairing 5

A idéia é pegar o centre core + upper stage + fairingpadrão e modificá-lo para as outras saídas.

Comentado

->n{
  #z = array of parts for centre core + upper stage + fairing, with n A's at the bottom
  z=[a=' /\\ ',b='/  \\']+['|    |']*3+%w{|____| \__/}+[c='|  |']*24+[?A*n]

  #if n not 4, z from element 10 to the last [10..-1] or last but one [10..-2] =
  n>4&&z[10..-n/6]=
    n>8?[c,a+c+a,b+c+b]+[c*3]*18:   #centre core + boosters#
    ['|__|',a]                      #upper stage engine
  n==5&&z[0,6]=%w{db _/\_}        #if n==5, replace first 6 elements with unfaired payload
  z.map{|i|i.center(12)}          #pad each element of array to 12 characters
}                                 #return array of strings (format allowed by question)
Level River St
fonte
A primeira resposta para fazer uso não trivial da entrada! Muito agradável.
precisa saber é
1

Vermelho , 333 bytes

f: func[g][t:{    }b:{ /\ }c:{/  \}d:{   |}e:{|}j:{\__/}k:{|  |}a:{AAAA}h:[1[t b]1[t c]3[d t e]1[d{____}e]1[t j]]z:[3[t k]1[t{|__|}]1[t b]]r: func[w][foreach[i v]w[loop i[print rejoin v]]]switch g[1 do[r h r[4[t k]1[b k b]1[c k c]18[k k k]]r[1[a a a]]]2 do[r h r[24[t k]]r[1[t a]]]3 do[r h r z]4 do[r[1[t{ db}]1[t{_/\_}]1[t j]]r z]]]

Experimente online!

Toma 1 - 4 como entrada

f: func [ g ] [
    t: {    }
    b: { /\ }
    c: {/  \}
    d: {   |}
    e: {|}
    j: {\__/}
    k: {|  |}
    a: {AAAA} 
    h: [1 [t b] 1 [t c] 3 [d t e] 1 [d {____} e ] 1 [t j]]
    z: [3 [t k] 1 [t {|__|}] 1 [t b]]
    r: func [ w ] [
        foreach [ i v ] w [
            loop i [print rejoin v]]]
    switch g [
        1 do [r h r [4 [t k] 1 [b k b] 1 [c k c] 18 [k k k]] r [1 [a a a]]]
        2 do [r h r [24 [t k]] r [1 [t a]]]
        3 do [r h r z]
        4 do [r [ 1 [t { db}] 1 [t {_/\_}] 1 [t j] ] r z]
    ]
]

Rebol , 258 bytes

Fiz um experimento com a compressfunção de Rebol , comprimindo uma sequência de todos os 4 estágios e imprimindo a parte correspondente após a descompressão:

f: func[n][o:[[1 374][374 196][570 74][644 37]]
b: decompress debase{eJzjUgAB/RguMKWgAGbUgDg1OFnxQABmKcTEx+uDGTVQOZwM/RgwA2QTyBYQG2wbiAHDw5vjiAS4IEEOCwGoWmQKGsaQAIYE4eAhqeMFSCICGZKSxBWvHxPPBVYKDzkoAVamHwMAjkWmoKkCAAA=}
repeat i o/(n)/2[prin b/(i + o/(n)/1)]]

 f 3
  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |__|
  /\
Galen Ivanov
fonte
1

Jstx , 124 bytes

↕t▌ÇÇÉÇ~éÇÇÇÇÇÇÇÉΘçK↑ε♀▄ü╙Çz⌡"#ße┐é+\òEhZ█╣S♪[ƒuø>!f♪K▌;0♂9☺}ås══½☻eP▌◙&£óZß:&╝af$V≈-wº[√D(♪╘Pφó√ò▲¶>å⌡◘├^∟z◘αßj◙÷»|æ⌠┼øk&£b

Explicação

↕t▌ÇÇÉÇ~éÇÇÇÇÇÇÇÉΘçK↑ε♀▄ü╙Çz⌡"#ße┐é+\òEhZ█╣S♪[ƒuø>!f♪K▌;0♂9☺}ås══½☻eP▌◙&£óZß:&╝af$V≈-wº[√D(♪╘Pφó√ò▲¶>å⌡◘├^∟z◘αßj◙÷»|æ⌠┼ # Push literal      /\\n    /  \\n   |    |\n   |    |\n   |    |\n   |____|\n    \__/\n    |  |\n    |  |\n    |  |\n    |  |\n /\ |  | /\\n/  \|  |/  \\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\nAAAAAAAAAAAA0\n  /\\n /  \\n|    |\n|    |\n|    |\n|____|\n \__/\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n AAAA0\n  /\\n /  \\n|    |\n|    |\n|    |\n|____|\n \__/\n |  |\n |  |\n |  |\n |__|\n  /\0\n db\n_/\_\n\__/\n|  |\n|  |\n|  |\n|__|\n /\
ø                                                                                                                       # Push literal 0
k                                                                                                                       # Push a list of strings obtained by splitting the second stack value with the first stack value.
&                                                                                                                       # Swap the top two stack values.
£b                                                                                                                      # Push the value in the list of the second stack value at the index of the first stack value.

Experimente online!

Quantum64
fonte
0

C (clang) , 421 408 bytes

r,d,i;f(t){char *s="    ",*e="\n",*l[]={" /\\ ","/  \\","|    |","|____|","\\__/","|  |","AAAA","|__|"," /\\ ","_/\\_","\n"," db","|  ||  ||  |"},*p[]={"VABU3C1DVE8FFF1G","VABU3C1DVE4F1RYAFAKBFBKZ9MM1YGGG","VABU3C1DVE3F1HI","VLJE3F1HI"},*a="",*b,*c=e,*q=p[t];for(r=1;d=*q++;r=(d/48&&57/d)?d-48:r,c=(d/89&&90/d)?e+90-d:c,a=(d/82&&86/d)?s+86-d:a)if(d/65&&77/d)for(b=l[d-65],i=0;i<r;i++)printf("%s%s%s",a,b,c);}

Experimente online!

GPS
fonte
383 bytes
ceilingcat 31/07