Codegolf — Ascii Искусство Дня #3 — Китайские Святыни

  • Автор темы Gallaktik
  • Обновлено
  • 22, Oct 2024
  • #1

В сегодняшнем выпуске AAOD мы собираемся построить китайский храм разной высоты.

Рассмотрим следующие примеры высоты (

 
 
 
 
 
 
 
 # Ruby, <s>104</s> <s>101</s> 96 bytes
 
) N к # Language Name, N bytes

N :

0

# :

[

] :

.

| :

_

3 :

_

1 :

4

и так далее.

Детали строительства

Я уверен, что большинство деталей схемы ясны. Вот некоторые более мелкие детали:

  • Дверь в нижней части святилища может быть как минимум \__...__/ 2 шириной и максимально иметь ]##..##[ | ширина.
  • Всегда будет двое . directly above the pillars around the door (two vertical _ ).
  • Лестница начинается с той же ширины, что и дверь, и увеличивается, как показано на рисунке.
  • 5 blocks above each roof level increase in size of _ сверху вниз.
  • 1 roofs levels increase in size of . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \_______________/ . ]#######[ . \___________________/ . ]#########[ . \_______________________/ . ]###########[ . \___________________________/ . ]#############[ . \_______]####.-----.####[_______/ |__|__|__|__| |__|__|__|__| |__|__|__|__|_____|__|__|__|__| ############/_____\############ |_______| /_________\ сверху вниз.
  • Стеновые блоки вокруг двери должны как минимум содержать N = 6 . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \_______________/ . ]#######[ . \___________________/ . ]#########[ . \_______________________/ . ]###########[ . \______]###.-----.###[______/ |__|__|___| |___|__|__| |__|__|___|_____|___|__|__| ##########/_____\########## |_______| /_________\ и максимум, N = 5 . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \_______________/ . ]#######[ . \___________________/ . ]#########[ . \_____]##.-----.##[_____/ |__|__|_| |_|__|__| |__|__|_|_____|_|__|__| ########/_____\######## |_______| /_________\ между двумя N = 4 . Priority goes to the outer wall blocks so that the one closest to the door gets a varying size for each level.
  • Пространство между . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \_______________/ . ]#######[ . \____]#.-----.#[____/ |__|__| |__|__| |__|__|_____|__|__| ######/_____\###### |_______| /_________\ and the N = 3 (или . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \___]#.---.#[___/ |__|_| |_|__| |__|_|___|_|__| #####/___\##### |_____| /_______\ ) is filled by N = 2 на крыше прямо над дверями.

Подробности испытания

  • Напишите функцию или полную программу, которая считывает положительное целое число, большее . | . ]#[ . \_______/ . ]###[ . \__]#.-.#[__/ |___| |___| |___|_|___| ####/_\#### |___| /_____\ via STDIN/ARGV/function argument or closest equivalent and outputs (to STDOUT or closest equivalent) the N = 1 й китайский храм
  • Завершающая новая строка не является обязательной.
  • Не должно быть никаких конечных пробелов или достаточного количества конечных пробелов для заполнения вывода в минимальном ограничивающем прямоугольнике.
  • Не должно быть никаких ведущих пробелов, которые не являются частью шаблона.

Таблица лидеров

Первый пост серии генерирует таблицу лидеров.

Чтобы ваши ответы были видны, начинайте каждый ответ с заголовка, используя следующий шаблон Markdown:

6

где 1 is the size of your submission. If you improve your score, you может держите старые результаты в заголовке, вычеркивая их. Например:

N

#код-гольф #ascii-art

Gallaktik


Рег
14 Nov, 2006

Тем
76

Постов
200

Баллов
600
  • 26, Oct 2024
  • #2

Перл, 332 316 294

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 w 

Пытаться мне.

С, 371

d

Пытаться мне.

JavaScript, 365

Вышеупомянутое можно перевести почти 1 к 1 на JavaScript:

#include <stdio.h> void r(int n, int c) { for (int i = 0; i++ < n; ) putchar(c); } void c(char* s) { for (; *s; ++s) putchar(*s); } int f(int n) { int m = n * 2; int d = n < 3 ? m - 1 : 5; int w = m - d / 2 + 2; r(m + 5, 32); c(".\n"); r(m + 5, 32); c("|\n"); for (int k = 0; ; ++k) { r(m - k * 2, 32); c("."); r(k + 3, 32); c("]"); r(k * 2 + 1, 35); c("["); r(k + 3, 32); c(".\n"); if (k == n) break; r(m - k * 2 + 1, 32); c("\\"); r(k * 4 + 7, 95); c("/\n"); } c(" \\"); r(n + 1, 95); c("]"); r(n - d / 2 , 35); c("."); r(d, 45); c("."); r(n - d / 2 , 35); c("["); r(n + 1, 95); c("/\n"); for (int k = 0; k < 2; ++k) { c(" "); for (int j = 0; j < w / 3; ++j) c("|__"); c("|_|" - w % 3 + 2); r(d, k ? 95 : 32); c(!w % 3 ? "|" : w % 3 < 2 ? "|_" : "|_|"); for (int j = 0; j < w / 3; ++j) c("__|"); c("\n"); } c(" "); r(w, 35); c("/"); r(d, 95); c("\\"); r(w, 35); c("\n"); r(w + 1, 32); c("|"); r(d + 2, 95); c("|\n"); r(w, 32); c("/"); r(d + 4, 95); c("\\\n"); return 0; }

Использовать:

m,d,w,k,j;r(n,c){for(j=0;j++<n;)putchar(c);}c(char*s){for(;*s;)putchar(*s++);}f(n){m=n*2;d=n<3?m-1:5;w=m-d/2+2;r(m+5,32);c(".\n");r(m+5,32);c("|\n");for(;;){r(m-k*2,32);c(".");r(k+3,32);c("]");r(k*2+1,35);c("[");r(k+3,32);c(".\n");if(k==n)break;r(m-k*2+1,32);c("\\");r(k++*4+7,95);c("/\n");}c(" \\");r(n+1,95);c("]");r(n-d/2,35);c(".");r(d,45);c(".");r(n-d/2,35);c("[");r(n+1,95);c("/\n");for(k=0;k<2;){c(" ");for(j=0;j<w/3;++j)c("|__");c("|_|"-w%3+2);r(d,k++?95:32);c(!w%3?"|":w%3<2?"|_":"|_|");for(j=0;j<w/3;++j)c("__|");c("\n");}c(" ");r(w,35);c("/");r(d,95);c("\\");r(w,35);c("\n");r(w+1,32);c("|");r(d+2,95);c("|\n");r(w,32);c("/");r(d+4,95);c("\\\n");} ||answer||

Python 2, 356 352 347 344 байта

----------------- TOP ------------ 3∵£ # Store min(input, 3) into the register for later use \.\| # Push a . and a | ?›ƛ ; # Map 1...input+1 to ⇧\.$꘍ # That+2 spaces after a dot \[+ # Append a [ \#n*+ # Append that many # \_n›d* # That+1 underscores \\ +" # Appended to a \ and paired with the previous f÷ # All of that flattened and each pushed to the stack ------------------- Doorway ------------------ ?⇧Ẏ # To the last of what was pushed in the previous, take the first input+2 characters \]+ # Append a ] ?⇩1∴\#*+ # Append min(input-2,1) hashes \.+ # Append a . ¥- # Append min(input,3) - ?:3>[d‹|⇧] # Input*2-1 if input>3 else input+2 `|__` Ẏ # Repeat '|__' to that length ‛_|+ # Append '_|' ¥꘍ # Append min(input,3) spaces :ð\_V # Make a copy, and replace spaces with underscores ---------- Entrance ------------ ȮȧL‹\#*\/+ ȮȧL # Length of top part of doorway with whitespace removed ‹\#*\/+ # That-1 #, plus a / ‛|/fJ # Append ['|','/'] 2ʀ¥+ # [a,a+a,a+2] where a = min(3,input) \_*+ # That many underscores appended to each of previous ÷ # Iterate out those on the stack - Final magic bit - W # Get the stack vøM # Palindromise each, mirroring brackets øĊ # Center each ⁋ # Join on newlines

По сути, это построение храма построчно. Функция 3∵£\.\|?›ƛ⇧\.$꘍\[+\#n*+\\\_n›d*+";f÷э⇧Ẏ\]+?⇩1∴\#*+\.+¥-`|__`?:3>[d‹|⇧]Ẏ‛_|+¥꘍:ð\_VȮȧL‹\#*\/+‛|/fJ2ʀ¥+\_*+÷WvøMøĊ⁋ prints a string with the spaces needed to center it.

я использовал питон 2 чтобы сэкономить много байтов, потому что питон 3 Объект карты не срабатывает. Думаю, мне всегда следует играть в гольф питон 2, просто сохраняет еще несколько байтов (даже если просто не нужно анализировать ввод в int).

Хе-хе-хе, в первую очередь, код не очень хорош для игры в гольф.

Редактировать: и, конечно, теперь карта мне больше не нужна...

g '\\'='/' g '/'='\\' g '['=']' g ']'='[' g x=x z=reverse d=min 3 m n s=putStrLn$(6+2*n+1-length s)#' '++map g(z s)++tail s n#c=replicate n c t 0=".";t n=n#'#'++"["++(2+n)#' '++"." r 0="|";r n=(2+2*n)#'_'++"/" q n=d n#'-'++"."++max(n-2)1#'#'++"["++(n+1)#'_'++"/" e i n=d n#i++"|_"++z(take(max(n+2)(2*n-1))(cycle"|__")) b n=d n#'_'++"\\"++max(2*n)(3+n)#'#' w i n=(d n+1+i)#'_'++["|","\\"]!!i f n=mapM_(m n)$[u k|k<-[0..n],u<-[t,r]]++(t(n+1):map($n)[q,e ' ',e '_',b,w 0,w 1]) ||answer||

Вот код в негольфированной форме:JavaScript (), 440

ES6 Редактировать

Исправлена ​​ошибка с перемычкой

Функция с высотой в качестве параметра, выводимая на консоль. Использование строки шаблонамного

, все новые строки значимы и учитываются.

-4'.-4'|]2/ri:M),{2af.-~[W'.I3+~']'#I)*][-2'\'_I2*4+*]]}fI~[~M)<'] M2m1e>'#*'.'-M3e<:D*][-3"|__"M*M2+M2*(e>:L<"_|"D~][_~~'_*][-3'#L)* '/'_D*][L2+~'|'_D)*][L)~'/'_D2+*]]{{_0<{~S*}&}%s_W%1>"\/]""/\["erN}% ≔Nν≔⁺⁵ײνη≔× ⁻η⁻∕¹¦²¦¹τ⁺⁺⁺⁺⁺τ.¶τ|¶× ⁻η⁻∕¹²¦²¦¹“±∨N"G:W⮌+”Fν«≔⁺⁺\×_⁺⁷×⁴ι/ε≔× ⁻η⁻∕L岦¹τ⁺⁺τε¶≔⁺⁺⁺⁺.× ⁺ι⁴]×#⁺³×²ι⁺⁺[× ⁺ι⁴.ε≔× ⁻η⁻∕L岦¹τ⁺⁺τ嶻≔⁻ײ⌊⟦³ν⟧¹δ≔∕δ²ζ≔×#⁺¹⁻νζσ≔⁺⁺⁺⁺⁺\×_⁺ν¹]σ.⁺×-δ⁺.⁺σ⁺[⁺×_⁺ν¹/ε≔× ⁻η⁻∕L岦¹τ⁺⁺τε¶≔×|__νε≔⁻⁻⁺⁴ײνζ¹τ≔✂ε⁰τ¦¦ε≔Lεα≔⁻Lε¹β¿⁼✂εβᦦ|«≔⁺✂ε⁰⦦_ε»≔⁺✂ε⁰ᦦ|ε≔⁺⁺ε× δ⮌εα≔⁺⁺ε×_δ⮌εβэ⁼ν¹¦⁰⁺⁺⁺⁺ ᶦ βэ±⁼ν¹¦⁰э±Lα⁰≔×#⁻⁺⁴ײ⁻ν·⁵ζε⁺¶⁺⁺ε⁺/⁺⁺×_δ\ε¶≔⁻⁻⁺⁴ײ⁻ν·⁵ζ¹ψ⁺× ψ⁺|⁺×_⁺δ²|¶⁺× ⁻ψ¹⁺/⁺×_⁺δ⁴\

Запустите фрагмент для тестирования в Firefox (с выводом на консоль) Негольфед

d5+\.꘍,d5+\|꘍,(n-d:£\.꘍3n+\]꘍\#nd›*\[3n+\.꘍Ṡ,¥›\\꘍ndd7+\_*\/Ṡ,)\.?3+꘍\]\#?d›*\[?3+\.꘍Ṡ,ð\\?›\_*\]?2-1∴\#*\.?d‹5∵-\.?2-1∴\#*\[?›\_*\/Ṡ,3<[⟨0|⟨3⟩|⟨2|1⟩⟩$i|3/⌊d2w$ẋf`013`?3%iIJ';]\_*Ṅðpð+ð\|Vðdp:£3?∵꘍øm,¥3?∵\_*+øm,4<[3+|d]\#*:£ðdp\/\_?d‹5∵*\\¥Ṡ,¥L›\|꘍\_?d‹5∵⇧*\|Ṡ,¥L\/꘍\_?d‹5∵4+*\\Ṡ, <input id=I value=3><button onclick='f(+I.value)'>-></button><br> <pre id=O></pre> версия для интерактивного теста:

 

Assulaevise6


Рег
25 Oct, 2024

Тем
75

Постов
226

Баллов
631
  • 26, Oct 2024
  • #3
Виксал // Not so golfed f=x=>{ R=(n,s=0)=>' #_-'[s].repeat(n); // base building blocks M=c=>R(2)+'|__'.repeat(z+1).slice(0,z-1)+'_|'+R(y,c)+'|_'+'__|'.repeat(z+1).slice(1-z); // manage door level z=x+x+(x<2)+(x<3); // door and stairs surroundings y=x>2?5:x>1?3:1; // door and stairs width o = `${R(x+x+5)}.\n${R(x+x+5)}|\n`; // top for(l=-1;l++<x;) o += `${ // even row t=R(x+x-l-l) // left padding }.${ u=R(l+3) }]${ R(l*2+1,1) }[${ u }.\n ${ // end even row, start odd row t // left padding }\\${ l-x?R(7+l*4,2) :`${t=R(x+1,2)}]${u=R(x<3||x-2,1)}.${R(y,3)}.${u}[${t}` // if last row before the door, insert lintel }/\n`; o += `${ M(0) // door level row 1 }\n${ M(2) // door level row 2 }\n${ R(2)}${t=R(z,1)}/${u=R(y,2)}\\${t // stairs row 1 }\n${ R(1+z)}|__${u // stairs row 2 }|\n${ R(z)}/____${u // stairs row 3 }\\`; out(o) } out=x=>O.innerHTML=x f(3)

, 280 байт

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

Нет, я этого не объясняю.

 

Picirruku


Рег
20 Jul, 2006

Тем
68

Постов
205

Баллов
565
  • 26, Oct 2024
  • #4
Output 1 to 6 in console

Древесный уголь

, 404 байта

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

f=x=>{R=(n,s=0)=>' #_-'[s][Z='repeat'](n),M=c=>R(2)+'|__'[Z](z+1).slice(0,z-1)+'_|'+R(y,c)+'|_'+'__|'[Z](z+1).slice(1-z) for(z=x+x+(x<2)+(x<3),y=x>2?5:x>1?3:1,l=-1,o=`${t=R(x+x+5)}. ${t}| `;l++<x;)o+=`${t=R(x+x-l-l)}.${u=R(l+3)}]${R(l*2+1,1)}[${u}. ${t}\\${l-x?R(7+l*4,2):`${t=R(x+1,2)}]${u=R(x<3||x-2,1)}.${R(y,3)}.${u}[${t}`}/ `;console.log(`${o+M(0)} ${M(2)} ${R(2)}${t=R(z,1)}/${u=R(y,2)}\\${t} ${R(1+z)}|__${u}| ${R(z)}/____${u}\\`)} // TEST f(1),f(2),f(3),f(4),f(5),f(6)

 

Womenlist


Рег
05 Apr, 2020

Тем
70

Постов
161

Баллов
551
  • 26, Oct 2024
  • #5
CJam, 200 байт

Добавлены новые строки, чтобы избежать прокрутки.

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

Краткое объяснение:

Программа строит левую половину храма (включая среднюю), затем переворачивает ее и заменяет некоторые символы, чтобы получить правую половину. Серия из n пробелов во время построения представляется как число ~n (побитовое «нет») и заменяется фактическими пробелами в конце.

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

Затем верхняя стена строится путем повторения «|__» и усечения до нужной длины, за которым следует фиксированный «_|». и пространства. Затем стена дублируется, а дверные проемы заменяются подчеркиваниями. Наконец, нижняя часть строится построчно.

n = int(input()) # A function to print strings centered half_width = 5 + 2*n def p(string): spaces = ' ' * (half_width - len(string) // 2) print(spaces + string) # The rooftops p('.') p('|') p('. ]#[ .') for i in range(n): p('\\' + '_'*(7 + 4*i) + '/') p('.{0}]{1}[{0}.'.format(' '*(i + 4), '#'*(3 + 2*i))) # The bottom rooftop door_width = 2 * min(3, n) - 1 # (11+4i - (3+2i) - 4) / 2 = (4 + 2i) / 2 = 2 + i p('\{0}]{1}.{2}.{1}[{0}/'.format('_'*(2 + i), '#'*(1 + i - door_width // 2), '-'*door_width)) # The windows w = '|__'*n w = w[:4 + 2*i - door_width // 2] if w[-1] == '|': w = w[:-1] + '_' w += '|' p(w + ' '*door_width + w[::-1]) p(w + '_'*door_width + w[::-1]) # The foundation and the stairs w = '#'*(4 + 2*i - door_width // 2) p(w + '/' + '_'*(door_width) + '\\' + w) # The remaining stairs p('|' + '_'*(door_width + 2) + '|') p('/' + '_'*(door_width + 4) + '\\') ||answer||

 

Moodyman


Рег
04 Jun, 2006

Тем
74

Постов
174

Баллов
554
  • 26, Oct 2024
  • #6
Хаскелл, 473 байта p

Виксал

, 120 113 байт

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

n=input() A,B,C,D,E,F,G,H,I='_ |\/#.][' def p(*S): for s in S:print(5+2*n-len(s)/2)*B+s p(G,C,'. ]#[ .') for i in range(n):b=B*(4+i);p(D+A*(7+4*i)+E,G+b+H+F*(3+2*i)+I+b+G) d=2*min(3,n)-1 a=A*(2+i) f=F*(1+i-d/2) j=4+2*i-d/2 w=('|__'*n)[:j-1]+A+C v=w[::-1] p(D+a+H+f+G+'-'*d+G+f+I+a+E,w+B*d+v,w+A*d+v,F*j+E+A*d+D+F*j,C+A*(d+2)+C,E+A*(d+4)+D) ||answer||

Публикую это как отдельный ответ, потому что он очень интересен и использует последнюю версию Vyxal.

Объяснение

f(2);console.log(r)

С, 660 байт

s=[];r="";i=0;m=()=>v(w,13);p=()=>r+=s.join('')+"\n"; v=(i,j)=>{s[w-i]=".|]\\#/"[j%7];s[w+i]=".|[/#\\"[j%7]; while(i--)s[w-i]=s[w+i]="# _-"[j/7|0];}; f=l=>{d=l>3?3:l;m(w=l*2+6);p(v(0,0)); for(v(0,1);i++<=l;v(i*2+2,17))p(),v(i*2+3,7),m(p(v(i,2)));v(l+2,2);p(v(d,21)); for(m(i=w-3);i>d+1;i-=3)v(i,15);p(v(d,8));p(v(d,15)); v(w-3,4);m(p(v(d,19)));p(v(d+1,15));p(v(d+2,19));}

Шаблон казался слишком нерегулярным, чтобы можно было придумать что-то необычное, особенно на языке без обработки строк. Итак, вот мой подход грубой силы: d,i,w;char s[1<<24];m(){v(w,13);}p(){puts(s+1);} v(i,j){s[w-i]=".|]\\#/"[j%7];s[w+i]=".|[/#\\"[j%7]; while(i--)s[w-i]=s[w+i]="# _-"[j/7];} main(l){scanf("%d",&l);d=l>3?3:l;m(w=l*2+6);p(v(0,0)); for(v(0,1);i++<=l;v(i*2+2,17))p(),v(i*2+3,7),m(p(v(i,2)));v(l+2,2);p(v(d,21)); for(m(i=w-3);i>d+1;i-=3)v(i,15);p(v(d,8));p(v(d,15)); v(w-3,4);m(p(v(d,19)));p(v(d+1,15));p(v(d+2,19));} is the width of the door, $:=($w=<>)*2+6;$r=2x($m=$w>3?3:$w);$k=1x($w-3).b.4x$m; y!a-f1-4!/.|\\[,#_ -!,/,/,s/(.*),(.*).{@{-}}/$2$1/,printf"%$:s%s ",y!/\\[!\\/]!r,(reverse=~s/.//r)for@x=(b,c, (map{b33.3x$_.e.1x$_,"[#$k,"x/$w/.a__.22x$_}1..++$w), _c.3x$m.f.($z=substr"|__"x$:,0,2*++$w),"_|$r,$z","d$r,".11x$w,c_.$r,d__.$r) Перед игрой в гольф:

 

Maksim2396m


Рег
26 Sep, 2019

Тем
82

Постов
210

Баллов
630
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно