Бета Сніжинка


12

Виклик

Зима швидко наближається до багатьох місць, які отримують перші шари снігу протягом сезону 15/16, то чому б нам не вибити снігові машини і зарахувати собі сніг?

З огляду на ціле число nчерез STDIN, виведіть сніжинку бета-версії ASCII (як описано нижче) на рівні n.

Бета Сніжинка

Сніжинка починається з рівня 0 з одного x:

x

Потім на кожному куті додайте одну з цих фігур:

x
xx

Ви додали вищевказану форму до правого верхнього кута. Для правого нижнього кута поверніть його на 90 ° за годинниковою стрілкою, для нижнього лівого, на 180 ° за годинниковою стрілкою, а для верхнього лівого - на 270 ° за годинниковою стрілкою.

Якщо ви це зробите, ви отримаєте таку форму:

 x x
xx xx
  x
xx xx
 x x

Зверніть увагу на орієнтацію фігур. Продовжуючи, ми додаємо більше фігур до кожного кута, використовуючи описані вище правила орієнтації, до діаграми, щоб отримати рівень 2:

  x x x
 xxxxxxx
xx x x xx
 xxx xxx
xx  x  xx
 xxx xxx
xx x x xx
 xxxxxxx
  x x x

Зауважте, що фігури додаються лише до xs з двома або більше відкритими сторонами (що згадується як кут вгорі).

L-форми можуть і перекриватимуться для значень nбільше 1. Наприклад:

Якщо рівень 0:

x x

Тоді повинно бути перекриття на рівні 1 (вказане з o, не включати oу свій вихід):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

Ваше завдання - вивести це ASCII подання сніжинки Beta.

Бонус

Буде встановлено 50 бонусних повторів за найкоротшу програму, яка, коли nнегативна, виводить сніжинку (на рівні n*-1) як зображення або графічно на екран.

У вас можуть бути окремі програми для виграшу та основного завдання.

Перемога

Виграє найкоротша програма в байтах.


4
Гамма-сніжинка - це тривимірна версія.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ну це ідея для подальшого виклику;)
бета-розпад

Чи можете ви уточнити 2 or more exposed sidesправило? Припускаючи , що центр є 0,0те 1,1, 1,-1, -1,-1, -1,1всі мають 2 відкриті сторони (сторони , зверненої до інших 4 бали). Чи не повинно бути 3+ відкритих сторін, щоб уникнути заповнення? Або по черзі воно розширюється лише за наявності 0 або 1 сусідів (кардинальних).
Джонатан Ліч-Пепін

Як зазначено вище, це також призведе до додаткового зростання у випадках, як n = 2 на кутах «квадрата» навколо центру (це не пік, але він піддається на сторонах W, NW, N (зверху) зліва).
Джонатан Ліч-Пепін

Відповіді:


8

CJam, 88 83 82 байт

1]]{{0f+zW%}8*{YYb_m*{~W$m>fm>}%z:z8Ybff=__1m>\1fm>]:zWf%(\:..|}4*..|}q~*" x"ff=N*

Тестуйте це тут.

Я думаю, що можу багато заощадити, коли я виявляю, де куточки. Але я принаймні знаю, як виглядають наступні ітерації:

N = 3 :

   x x x x   
  xxxxxxxxx  
 xx x x x xx 
xx xxxxxxx xx
 xxx x x xxx 
xx xxx xxx xx
 xxx  x  xxx 
xx xxx xxx xx
 xxx x x xxx 
xx xxxxxxx xx
 xx x x x xx 
  xxxxxxxxx  
   x x x x   

N = 4:

    x x x x x    
   xxxxxxxxxxx   
  xx x x x x xx  
 xx xxxxxxxxx xx 
xx xx x x x xx xx
 xxx xxxxxxx xxx 
xx xxx x x xxx xx
 xxx xxx xxx xxx 
xx xxx  x  xxx xx
 xxx xxx xxx xxx 
xx xxx x x xxx xx
 xxx xxxxxxx xxx 
xx xx x x x xx xx
 xx xxxxxxxxx xx 
  xx x x x x xx  
   xxxxxxxxxxx   
    x x x x x    

З огляду на це, вони здаються набагато більш регулярними, ніж я очікував, і якесь аналітичне рішення, яке генерує їх безпосередньо, може бути набагато коротшим.


1

Python 2, 269 байт

Не розміщує фігури в кожному куті, але визначає, чи є символ у сніжинці на основі координат.

Спочатку генерується один куточок, а потім дзеркально бавиться до повної сніжинки.

i=input()
d=2*i+1
s=[x[:]for x in[[0]*d]*d]
s[0][0]=1
if i:s[1][1]=1
for j in range(2,d):
 for v in range(j+1):s[j][v]=s[v][j]=(j+v)%3!=1and j+v<d+i if v>j/2 else j%2==1or j%4+v%2in[0,3]
for l in[l[:0:-1]+l for l in s[:0:-1]+s]:print''.join(['X'if n else' 'for n in l])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.