Сокіл Важкі стадії


43

Виберіть набір з чотирьох байтів без заміни (тобто жодного байта не повторюється), а не обов'язково в будь-якому конкретному порядку з будь-якого з наступних чотирьох наборів:

  1. Символи будь-якого одного байтового кодування
  2. Символи Unicode в діапазоні 00 – FF
  3. Підписані десяткові цілі числа в діапазоні −128–127
  4. Непідписані десяткові цілі числа в діапазоні 0–255

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

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

Перший байт:

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

Другий байт:

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

Третій байт:

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

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

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

Що нового у цьому виклику складності ASCII Art Kolmogorov?

  1. Можливість вибору дійсних даних представляє новий аспект завдання. Вхідні дані явно занадто обмежені, щоб кодувати весь результат, але можуть містити достатньо інформації, щоб заслужити увагу.

  2. Кілька можливих результатів мають багато структури, тому повторне використання коду або під-зображень можливо як у межах кожного зображення, так і між зображеннями.

  3. Існує достатньо дублювання, що навіть мови, не орієнтовані на подібні завдання, мають шанс скористатися розумним кодом, а не просто рядками жорсткого кодування.


2
db звучить як Aston Martin! AFAIK - це Tesla Roadster.
Рівень річки Св.

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

Чи дозволено пробіл проміжних / задніх пробілів, особливо зліва?
Рівень річки Св.

@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: p
Арнольд

Це геній. На секунду я був як би чекати, що для цього вбудований 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 місяців (див. журнал фіксування).
фірфокс

Я жартую. Але я думаю, це викликає питання: чи це гольф, якщо ви створюєте мову для вирішення проблеми? Де межа?
nielsbot

1
@nielsbot Я думаю, що це вважається однією із стандартних лазів .
Ніл

7

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

-5 байт завдяки 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]

Спробуйте в Інтернеті!

Функція лямбда, відображаючи Intзначення 0..3для зображень у порядку, зазначеному в ОП.



@ Adám Дякую! Я зміг застосувати це, але побачив це лише після того, як я скоротив його далі - все-таки економить байти :)
Οurous

Ага, чому є два фрагменти?
Ерік Аутгольфер

@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замість ручного прокладки (це також означає генерування лівої сторони та дзеркальне відображення, замість того, щоб починати з правої сторони)

Безголівки:

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

C (стук) , 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.