Etapy Falcon Heavy

43

Wybierz zestaw czterech bajtów bez zamiany (tj. Bez powtarzania bajtu) i niekoniecznie w określonej kolejności, z jednego z następujących czterech zestawów:

  1. Znaki dowolnego kodowania jednobajtowego
  2. Znaki Unicode z zakresu 00 – FF
  3. Podpisane liczby całkowite dziesiętne z zakresu −128–127
  4. Dziesiętne liczby całkowite bez znaku w zakresie 0–255

Cztery wybrane wartości (proszę podać, jakie są) będą prawidłowymi danymi wejściowymi. Musisz sparować każdą wartość z jednym z poniższych dzieł ASCII.

Biorąc pod uwagę (w jakikolwiek sposób) jedno z czterech prawidłowych danych wejściowych, odpowiedz (w dowolny sposób, nawet listę ciągów) odpowiadającą mu grafiką ASCII. Dodatkowa biała przestrzeń jest dozwolona ze wszystkich stron, o ile obraz znajduje się w jednym ciągłym obszarze 2D.

Pierwszy bajt:

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

Drugi bajt:

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

Trzeci bajt:

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

Czwarty bajt:

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

Co nowego w tym wyzwaniu złożoności sztuki Kołmogorowa ASCII?

  1. Możliwość wyboru prawidłowych danych wejściowych stanowi nowy aspekt wyzwania. Dane wejściowe są wyraźnie zbyt ograniczone, aby zakodować cały wynik, ale mogą zawierać wystarczającą ilość informacji, aby zasługiwać na uwagę.

  2. Wiele możliwych wyników ma wiele struktur, więc ponowne użycie kodu lub podobrazów jest możliwe zarówno w obrębie każdego obrazu, jak i między obrazami.

  3. Jest wystarczająco dużo duplikacji, że nawet języki, które nie są odpowiednio ukierunkowane na takie wyzwania, mają spore szanse na użycie sprytnego kodu zamiast na szeroką skalę kodowania.

Adám
źródło
2
db brzmi jak Aston Martin! AFAIK to roadster Tesli.
Level River St
1
@LevelRiverSt Bowie, nie Brown!
Adám
Czy dozwolone są wiodące / końcowe białe znaki, szczególnie po lewej?
Level River St
@LevelRiverSt Dzięki. Zapomniałem napisać, choć o tym myślałem.
Adám
1
Czy to naprawdę animacja ?
FantaC

Odpowiedzi:

41

JavaScript (ES6), 247 bajtów

RegPack'ed. Oczekuje 0 ... 3 jako danych wejściowych.

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]

Wypróbuj online!

Arnauld
źródło
16
BigFu!#?%$Rocket? Ale to tylko Falcon Heavy!
Adám,
16
@ Adám Zgadza się. Ale BFR.reduce() == FalconHeavy: p
Arnauld
To jest genialne. Przez chwilę chciałem poczekać, czy jest do tego wbudowany javascript ?! Potem przyszło mi do głowy ... +1!
rodolphito
Imponujące jak zawsze.
Weijun Zhou
"FRFRFRF" = "Fu!#?%$RocketFu!#?%$RocketFu!#?%$RocketFu!#"dobrze? Kocham tę odpowiedź bardziej niż cokolwiek lol.
Magic Octopus Urn
13

Węgiel drzewny , 67 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako liczbę 3-0. Wyjaśnienie:

Nθ

Wpisz liczbę.

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

Jeśli jest to 3, narysuj połowę wzmacniacza, a następnie odbij go, a następnie przejdź na koniec rakiety.

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

Jeśli nie jest to 0, narysuj lewą połowę przedniego zbiornika paliwa.

↓d/_¶ _\

Ale jeśli jest to 3, narysuj lewą połowę stożka nosa.

↓×⁴∨›²θ⁶

Narysuj lewą stronę rakiety.

¿‹¹θAA↑¶/_‖M

Narysuj odpowiednią podstawę rakiety, a następnie lustro, aby zakończyć.

Neil
źródło
Czy stworzyłeś Charcoalwłaśnie na ten konkurs?
nielsbot
@nielsbot Charcoal ma 7 miesięcy (patrz dziennik zatwierdzeń).
phyrfox
Żartowałem. Ale myślę, że rodzi to pytanie: czy gra w golfa, jeśli stworzysz język, aby rozwiązać problem? Gdzie jest granica?
nielsbot
1
@nielsbot Myślę, że liczy się to jako jedna ze standardowych luk .
Neil,
7

Czysty , 292 278 273 271 262 261 bajtów

-5 bajtów dzięki Adámowi

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]

Wypróbuj online!

Funkcja lambda, mapująca Intwartości 0..3na obrazy w kolejności podanej w OP.

Obrzydliwe
źródło
1
287
Adám,
@ Adám Thanks! Byłem w stanie to zastosować, ale zobaczyłem to dopiero po dalszym skróceniu - wciąż oszczędzam bajty :)
Οurous
Dlaczego są dwa fragmenty?
Erik the Outgolfer
@EriktheOutgolfer drugim jest lambda. Pierwszy to kod, od którego zależy. Nie umieszczam ich w tym samym fragmencie, ponieważ nie mogę multilinować przypisania do fragmentu.
Οurous
5

Python 2 , 292 290 284 282 281 bajtów

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

Wypróbuj online!

Pobiera na wejściu liczbę całkowitą od 0 do 3 i używa indeksowania list (1 lub 0) do zbudowania każdego wyjścia.

-2 dla niepotrzebnej pary wsporników.

-6 poprzez usunięcie przypisania zmiennej, które zostało użyte tylko raz.

-2 dla innej zmiennej jednorazowego użytku.

-1 z końcówką @Rod

ElPedro
źródło
1
Te n, poraz qzmiennych są też zbędne (-2 bajtów każdy). " db"i "_/\_"zostanie dołączony "\n"później, możesz zmienić oba w, " db\n_/\_"aby zapisać kolejny bajt. Możesz (prawdopodobnie) przenieść +yz każdego elementu poza listę (i usunąć również const) coś w stylu(...)[i>2]+["\__/"]
Rod
@Rod Dzięki za \ n wskazówkę. Tęskniłem za tym. Nie jestem jednak pewien co do n, p i q. Używa się ich dwukrotnie, po jednej stronie głównej rakiety, aby określić, czy boostery są potrzebne, czy nie. Podobnie y w jednym przypadku potrzebuje nowej linii przed nim, aw drugim przypadku kilku innych znaków. Szczerze mówiąc, prawdopodobnie skorzystałby z kompletnego przepisania. Zachęcamy do wzięcia z niego wszelkich pomysłów i wykorzystania ich do opublikowania własnej odpowiedzi.
ElPedro,
5

Rubinowy , 234 212 205 bajtów

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

Wypróbuj online!

Przyjmuje liczbę całkowitą 0-3. Tworzy tablicę lewych połówek każdej fazy, indeksuje, a następnie wstawia i odzwierciedla każdy rząd. Wszystkie wypełnienia mają tę samą szerokość, więc te ostatnie fazy mają wiodące białe znaki. Zwraca tablicę ciągów.

-2 bajty: Zadeklaruj yjako tablicę od razu zamiast potrzebować *[y]później.

-5 bajtów: Wymienić x="\\"z t=%w{_| \\}.

-5 bajtów: mniej dereferencji, więcej dodawania tablic.

-1 bajtów: h+y*21+[?A*2]-> h+y*21<<?A*2w fazie 1.

-3 bajty: specyfikacja pozwala pominąć *$/dołączenie do wyniku.

-4 bajty: ["b","\\_","_/"]-> %w{b \\_ _/}w fazie 3.

-2 bajty: użyj %wnotacji również w tablicy head.

-7 bajtów: Użyj rjustzamiast ręcznego wypełniania (oznacza to również generowanie lewej strony i tworzenie jej kopii lustrzanej zamiast rozpoczynania od prawej strony)

Nie golfowany:

->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
źródło
2

SOGL V0.12 , 90 bajtów

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

Wypróbuj tutaj!

Wprowadza 0/1/2/3 odpowiednio do bajtów 1/2/3/4

dzaima
źródło
2

Rubinowy , 209 183 bajtów

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

Wypróbuj online!

Wymagane dane wejściowe, jak następuje:

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

Chodzi o to, aby przyjąć centre core + upper stage + fairingjako domyślny i zmodyfikować go dla innych wyjść.

Skomentował

->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
źródło
Pierwsza odpowiedź na nietrywialne wykorzystanie danych wejściowych! Bardzo dobrze.
benj2240
1

Czerwony , 333 bajty

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

Wypróbuj online!

Pobiera 1 - 4 jako dane wejściowe

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 bajtów

Zrobiłem eksperyment z funkcją Rebola compress, kompresując ciąg wszystkich 4 etapów i drukując odpowiednią jego część po dekompresji:

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 Iwanow
źródło
1

Jstx , 124 bajty

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

Wyjaśnienie

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

Wypróbuj online!

Quantum64
źródło
0

C (brzęk) , 421 408 bajtów

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

Wypróbuj online!

GPS
źródło
383 bajty
ceilingcat