Сокол Тяжелые стадии


43

Выберите набор из четырех байтов без замены (т.е. без повторения байта), и необязательно в каком-либо конкретном порядке, из любого из следующих четырех наборов:

  1. Символы любой однобайтовой кодировки
  2. Символы Юникода в диапазоне от 00 до FF
  3. Десятичные целые числа со знаком в диапазоне −128–127
  4. Десятичные целые числа без знака в диапазоне 0–255

Четыре значения, которые вы выбрали (пожалуйста, укажите, какие они), будут действительными входными данными. Вы должны связать каждое значение с одной из следующих работ ASCII.

Получив (любым способом) один из ваших четырех допустимых входных данных, ответьте (любым способом, даже списком строк) с соответствующим искусством ASCII. Допускается дополнительное свободное пространство со всех сторон, если изображение находится в одной смежной 2D-области.

Первый байт:

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

Второй байт:

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

Третий байт:

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

Четвертый байт:

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

Что нового в этом ASCII искусстве Колмогорова сложный вызов?

  1. Возможность выбора допустимых входных данных представляет новый аспект проблемы. Входные данные явно слишком ограничены, чтобы кодировать весь результат, но могут нести достаточно информации, чтобы заслуживать внимания.

  2. Множество возможных выходов имеют общую структуру, поэтому повторное использование кода или подизображений возможно как внутри каждого изображения, так и между изображениями.

  3. Дублирования достаточно, чтобы даже языки, которые плохо приспособлены к таким вызовам, имели реальную возможность использовать умный код, а не просто жестко кодировать строки.


2
дб звучит как Астон Мартин! AFAIK это родстер Тесла.
Уровень Река St

1
@LevelRiverSt Боуи, а не Браун!
Адам

Разрешены ли пробелы в начале / конце, особенно слева?
Уровень Река St

@LevelRiverSt Спасибо. Я забыл написать это, хотя я думал об этом.
Адам

1
Это действительно анимация ?
FantaC

Ответы:


41

JavaScript (ES6), 247 байт

RegPack'ed. Ожидает 0 ... 3 в качестве ввода.

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]

Попробуйте онлайн!


16
BigFu!#?%$Rocket? Но это просто Falcon Heavy!
Адам

16
@ Adám Точно. Но BFR.reduce() == FalconHeavy: р
Арно

Это гений. На секунду я как бы подождал, вот для этого есть встроенный javascript ?! Тогда я пришел в себя ... +1!
Rodolphito

Впечатляет как всегда.
Вейцзюнь Чжоу

"FRFRFRF" = "Fu!#?%$RocketFu!#?%$RocketFu!#?%$RocketFu!#"правильно? Я люблю этот ответ больше всего на свете.
Волшебная Урна Осьминога

13

Древесный уголь , 67 байт

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

Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как число 3-0. Объяснение:

Nθ

Введите число.

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

Если это 3, возьмите половину ракеты-носителя, затем отразите ее, затем двигайтесь к вершине ракеты.

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

Если это не 0, нарисуйте левую половину переднего топливного бака.

↓d/_¶ _\

Но если это 3, нарисуйте левую половину конуса носа.

↓×⁴∨›²θ⁶

Нарисуйте левую сторону ракеты.

¿‹¹θAA↑¶/_‖M

Нарисуйте соответствующую базу ракеты, а затем зеркало, чтобы закончить.


Вы создали Charcoalтолько для этого конкурса?
Nielsbot

@nielsbot Древесному углю 7 месяцев (см. журнал коммитов).
phyrfox

Я пошутил. Но я думаю, что возникает вопрос: игра в гольф, если вы создаете язык для решения проблемы? Где граница?
nielsbot

1
@nielsbot Я думаю, это считается одной из стандартных лазеек .
Нил

7

Чистый , 292 278 273 271 262 261 байт

-5 байт благодаря Адаму

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]

Попробуйте онлайн!

Лямбда-функция, отображающая Intзначения 0..3в изображения в порядке, указанном в ОП.



@ Adám Спасибо! Я смог применить это, но я увидел это только после того, как сократил его еще больше - по-прежнему
сохраняя

Почему два фрагмента?
Эрик Outgolfer

@EriktheOutgolfer второй лямбда. Первый - это код, от которого он зависит. Я не помещаю их в один и тот же фрагмент, потому что не могу выполнить многострочное задание в этом фрагменте.
Οurous

5

Python 2 , 292 290 284 282 281 байт

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

Попробуйте онлайн!

Принимает в качестве входных данных целое число от 0 до 3 и использует индексирование списка (1 или 0) для построения каждого вывода.

-2 за ненужную пару скобок.

-6 путем удаления назначения переменной, которое использовалось только один раз.

-2 для другой одноразовой переменной.

-1 с подсказкой от @Rod


1
В n, pи qпеременные являются ненужными тоже (-2 байт каждый). " db"и "_/\_"будут объединены "\n"позже, вы можете превратить оба, " db\n_/\_"чтобы сохранить еще один байт. Вы можете (вероятно) переместить +yиз каждого элемента из списка (и удалить также константу) что-то вроде(...)[i>2]+["\__/"]
Rod

@Rod Спасибо за совет \ n. Я скучал по этому. Не уверен насчет n, p и q. Они используются дважды каждый, по одной с каждой стороны главной ракеты, чтобы определить, нужны ли усилители или нет. Simailarly y в одном случае требует новой строки перед ним, а в другом случае некоторые другие символы. Возможно, выиграет от полного переписывания, если честно. Не стесняйтесь брать любые идеи и использовать их, чтобы опубликовать свой собственный ответ.
ElPedro

5

Рубин , 234 212 205 байт

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

Попробуйте онлайн!

Принимает целое число 0-3. Создает массив левых половин каждой фазы, индексирует, затем дополняет и отображает каждую строку. Все отступы имеют одинаковую ширину, поэтому последние фазы имеют первые пробелы. Возвращает массив строк.

-2 байта: объявить yкак массив сразу, а не *[y]позже.

-5 байт: заменить x="\\"на t=%w{_| \\}.

-5 байт: меньше разыменований, больше массивов.

-1 байт: h+y*21+[?A*2]-> h+y*21<<?A*2в фазе 1.

-3 байта: спецификация позволяет пропустить *$/присоединение к результату.

-4 байта: ["b","\\_","_/"]-> %w{b \\_ _/}в фазе 3.

-2 байта: используйте %wобозначения в массиве заголовков.

-7 байт: использовать rjustвместо заполнения вручную (это также означает создание левой стороны и ее зеркальное отражение вместо запуска с правой стороны)

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

Рубин , 209 183 байта

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

Попробуйте онлайн!

Требуются следующие данные:

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

Идея состоит в том, чтобы взять значение centre core + upper stage + fairingпо умолчанию и изменить его для других выходных данных.

комментарии

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

Первый ответ сделать нетривиальное использование ввода! Очень хорошо.
benj2240

1

Красный , 333 байта

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

Попробуйте онлайн!

Принимает 1 - 4 в качестве ввода

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

Реболь , 258 байт

Я провел эксперимент с compressфункцией Ребола , сжав строку всех 4-х этапов и распечатав соответствующую часть после декомпрессии:

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 байта

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

объяснение

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

Попробуйте онлайн!


0

С (лязг) , 421 408 байт

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

Попробуйте онлайн!


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.