Falcon Heavy étapes


43

Choisissez un ensemble de quatre octets sans remplacement (c'est-à-dire sans octet répété), et pas nécessairement dans un ordre particulier, dans l'un des quatre ensembles suivants:

  1. Les caractères d'un codage sur un seul octet
  2. Les caractères Unicode dans la plage 00 – FF
  3. Les entiers décimaux signés compris entre −128 et 127
  4. Les entiers décimaux non signés dans la plage 0–255

Les quatre valeurs que vous avez choisies (veuillez préciser lesquelles) sont les entrées valides. Vous devez associer chaque valeur à l'une des illustrations ASCII ci-dessous.

Étant donné (par n'importe quel moyen) l'une de vos quatre entrées valides, répondez (par n'importe quel moyen, même à une liste de chaînes) avec l'art correspondant ASCII. Un espace blanc supplémentaire est autorisé sur tous les côtés, à condition que l'image soit dans une zone 2D contiguë.

Premier octet:

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

Deuxième octet:

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

Troisième octet:

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

Quatrième octet:

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

Qu'y a-t-il de nouveau dans ce défi de complexité d'art de Kolmogorov art ASCII?

  1. La possibilité de sélectionner des entrées valides présente un nouvel aspect du défi. Les entrées sont clairement trop limitées pour coder l'intégralité du résultat, mais peuvent contenir suffisamment d'informations pour mériter votre attention.

  2. Les multiples sorties possibles partagent beaucoup de structure, ce qui permet de réutiliser du code ou des sous-images à la fois dans chaque image et entre les images.

  3. Il y a suffisamment de duplication pour que même les langues qui ne sont pas bien préparées à faire face à des défis comme celui-ci aient de bonnes chances de pouvoir utiliser un code intelligent plutôt que de simplement coder de manière rigoureuse.


2
db ressemble à une Aston Martin! Autant que je sache, c'est un Tesla Roadster.
Level River St

1
@LevelRiverSt Bowie, pas Brown!
Adám

Les espaces de début et de fin sont-ils autorisés, en particulier à gauche?
Level River St

@ NivelRiverSt Merci. J'ai oublié de l'écrire, même si j'y ai pensé.
Adám

1
Est-ce vraiment une animation ?
FantaC

Réponses:


41

JavaScript (ES6), 247 octets

RegPack'ed. Attend 0 ... 3 en entrée.

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]

Essayez-le en ligne!


16
BigFu!#?%$Rocket? Mais ce n'est que Falcon Heavy!
Adám

16
@ Adám C'est vrai. Mais BFR.reduce() == FalconHeavy: p
Arnauld

C'est du génie. Pendant une seconde, j'ai eu envie d'attendre quoi, il y a un JavaScript intégré pour ça?! Puis je suis revenu à mes sens ... +1!
Rodolphito

Impressionnant comme toujours.
Weijun Zhou

"FRFRFRF" = "Fu!#?%$RocketFu!#?%$RocketFu!#?%$RocketFu!#"droite? J'adore cette réponse plus que tout lol.
Urne magique Octopus

13

Charbon de bois , 67 octets

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

Essayez-le en ligne! Le lien est vers la version verbeuse du code. Prend la saisie sous la forme d'un numéro 3-0. Explication:

Nθ

Entrez le numéro.

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

S'il est 3, dessinez la moitié de l'amplificateur, répliquez-le en miroir, puis déplacez-vous vers l'extrémité de la fusée.

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

Si ce n'est pas 0, dessinez la moitié gauche du réservoir de carburant avant.

↓d/_¶ _\

Mais si c'est 3, dessinez la moitié gauche du cône de nez.

↓×⁴∨›²θ⁶

Dessinez le côté gauche de la fusée.

¿‹¹θAA↑¶/_‖M

Dessinez la base appropriée de la fusée, puis effectuez un miroir pour terminer.


Avez-vous créé Charcoaljuste pour ce concours?
Nielsbot

@nielsbot Charcoal a 7 mois (voir le journal de validation).
Phyrfox

Je plaisantais. Mais je suppose que cela soulève la question suivante: est-ce que jouer au golf si vous créez un langage pour résoudre le problème? Où est la limite?
Nielsbot

1
@nielsbot Je pense que cela compte comme l'une des échappatoires standard .
Neil

7

Propre , 292 278 273 271 262 261 octets

-5 octets grâce à Adam

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]

Essayez-le en ligne!

Une fonction lambda, mappant les Intvaleurs 0..3sur les images dans l'ordre indiqué dans l'OP.



@ Adám Merci! J'ai pu l'appliquer, mais je ne l'ai vu que lorsque je l'avais encore raccourci
j'économise

Euh, pourquoi y a-t-il deux extraits?
Erik the Outgolfer

@EriktheOutgolfer le second est le lambda. Le premier est le code dont il dépend. Je ne les mets pas dans le même extrait car je ne peux pas multiligne une affectation dans l'extrait.
urous

5

Python 2 , 292 290 284 282 281 octets

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

Essayez-le en ligne!

Prend un entier compris entre 0 et 3 en tant qu'entrée et utilise l'indexation par liste (1 ou 0) pour générer chaque sortie.

-2 pour une paire de crochets inutile.

-6 en supprimant une affectation de variable qui n'a été utilisée qu'une fois.

-2 pour une autre variable à usage unique.

-1 avec un conseil de @Rod


1
Les variables n, pet qsont également inutiles (-2 octets chacune). " db"et "_/\_"sera rejoint avec "\n"plus tard, vous pouvez transformer les deux en " db\n_/\_"pour enregistrer un autre octet. Vous pouvez (probablement) déplacer le +y, de chaque élément, hors de la liste (et supprimer le const aussi) quelque chose comme(...)[i>2]+["\__/"]
Rod

@Rod Merci pour la \ n astuce. J'ai raté celui-là. Pas sûr de n, p et q cependant. Ils sont utilisés deux fois chacun, un de chaque côté de la fusée principale pour définir si les propulseurs sont nécessaires ou non. De la même manière, dans un cas, il faut une nouvelle ligne avant celle-ci et dans l'autre cas, d'autres caractères. Pourrait être honnête, pourrait probablement bénéficier d’une réécriture complète. N'hésitez pas à prendre des idées et à les utiliser pour poster votre propre réponse.
ElPedro

5

Ruby , 234 212 205 octets

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

Essayez-le en ligne!

Prend un entier 0-3. Construit un tableau des moitiés de gauche de chaque phase, indexe, puis insère et reflète chaque ligne. Tous les rembourrages ont la même largeur, de sorte que les derniers espaces sont précédés de blancs. Retourne un tableau de chaînes.

-2 octets: Déclarer ycomme un tableau tout de suite au lieu d'avoir besoin de *[y]plus tard.

-5 octets: remplacer x="\\"par t=%w{_| \\}.

-5 octets: moins de déréférencement, plus d'ajout de tableau.

-1 octets: h+y*21+[?A*2]-> h+y*21<<?A*2en phase 1.

-3 octets: La spécification permet l'omission de *$/joindre le résultat.

-4 octets: ["b","\\_","_/"]-> %w{b \\_ _/}en phase 3.

-2 octets: Utilisez également la %wnotation dans le tableau principal.

-7 octets: à utiliser à la rjustplace du remplissage manuel (cela signifie également générer le côté gauche et le mettre en miroir au lieu de commencer par le côté droit)

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

2

SOGL V0.12 , 90 octets

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

Essayez-le ici!

Entrées 0/1/2/3 correspondant aux octets 1/2/3/4


2

Ruby , 209 183 octets

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

Essayez-le en ligne!

Entrées requises comme suit:

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

L'idée est de prendre le centre core + upper stage + fairingpar défaut et de le modifier pour les autres sorties.

Commenté

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

La première réponse pour faire un usage non trivial de l'entrée! Très agréable.
benj2240

1

Rouge , 333 octets

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]]]

Essayez-le en ligne!

Prend 1 à 4 en entrée

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 octets

J'ai fait une expérience avec la compressfonction de Rebol , compressant une chaîne de toutes les 4 étapes et en imprimant la partie correspondante après décompression:

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
  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |__|
  /\

1

Jstx , 124 octets

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

Explication

↕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.

Essayez-le en ligne!


0

C (clang) , 421 408 octets

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

Essayez-le en ligne!


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.