Кільця ASCII Borromean


24

У Борромео кільця являють собою цікавий набір з трьох кіл, пов'язані таким чином, що видалення будь-якого з них буде роз'єднати два інших:

введіть тут опис зображення

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

Напишіть програму або функцію, яка виводить (друкує або повертає) це художнє представлення кілець Borromean:

    +-----+
    |     |
+-----+   |
|   | |   |
| +-|---+ |
| | | | | |
| | +-|---+
| |   | |
+-|---+ |
  |     |
  +-----+

У рядках може бути пробіли, і може бути новий проміжок.

Виграє найкоротший код у байтах.


2
Я мушу сказати, що це досить важкий виклик через те, наскільки простий очікуваний результат
бета-розпад

3
Я трохи розчарований. Думав, що завданням буде взяти цілий розмір і вивести кільця такого розміру.
Blacklight Shining

так, я теж подумав (програма приймає int як вхід, а потім малює Brunnian Link з такою кількістю компонентів, але це не унікально, можливо, кількість перетинів?). Така програма повинна була б насправді здійснити пошук (або принаймні пробні та помилкові - чи ці кільця блокуються, і якщо я видаляю його, чи виходжу безкоштовно?), А не просто малювати фіксовану картину ...
alexey

Відповіді:


7

CJam, 53 51 50 49 байт

Просте старе базове перетворення ...

"FÓîÞ¤ÛY­ËB[¢O²êÍÓ
}²|äG"299b4b"+ -|"f=B/N*

Усі символи знаходяться в розширеному діапазоні ASCII (код ASCII від 1 до 255), тому кількість символів == кількість байтів.

Спробуйте його онлайн тут і отримайте оригінал коду тут


Просто цікаво, де знаходиться новий рядок у вашому пошуку?
Мальтісен

@Maltysen У мене його немає. B/N*розбивається на 11 символів і приєднується до нового рядка
Optimizer

це coooool.
Мальтісен

6

Pyth - 51 байт

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

s@L"
 +-|"jC" zB²;¶Ê ¿ïÁ»#-ÌClHõy%|ap"5

Спробуйте це онлайн .

s              Reduce on string concatenation
 @L            Map second arg to index first arg
  "..."        String of all chars (Pyth allows literal newlines)
  j            Base conversion to list
   C           Base conversion 256 -> 10
    "..."      Base 256 string
   5           To Base 5

4

Pyth, 49 байт

jbc11s@L"+ -|"jC"Tª]UʨWÕÝ_K¨}ÝÝ÷K¨Ý]Òê]UÕ*¡"4

Демонстрація.

Для цього використовується базове кодування 4 та розбиває рядок на одинадцяті, потім знову приєднується до них у нових рядках.


3

Рубі, 110

-2.upto(8){|i|s=" "*(i%6)+"+-----+"*(1-i%2)+" "*9
6.times{|j|"@d me?K[RR@"[i+2].ord>>j&1>0&&s[j*2]=?|}
puts s}

Щось відрізняється від прямого базового перетворення.

Безголівки:

-2.upto(8){|i|                                           #for each line
  s=" "*(i%6)+"+-----+"*(1-i%2)+" "*9                    #load s with "+-----+" (if required!) padded appropriately with leading spaces and with nine trailing spaces.   
  6.times{|j|"@d me?K[RR@"[i+2].ord>>j&1>0&&s[j*2]=?|}   #replace characters with | as necessary, according to the 6-bit number encoded by each character in the magic string.
  puts s}                                                #print the line.

3

Рубін, 117 байт

Не вигравав, але я подумав, що це милий підхід:

puts'    --
    |     |
--  |
|   | |   |
| -||
| | | | | |
| | -|
| |   | |
-||
  |     |
  --'.gsub /-./,'+\0---+ '

2

BrainFuck, 361 байт

Ось невеличка програма BrainFuck, лише друк із позначкою char.

+++++++++[->>>>++++++++++++++<+++++<+++++<++++<]>----....>--.>.....>-->++++++++++<<<.>>>.<<<<....>>>.<<<.....>>>.>.<<<.>.....<.<...>>>.>.<.<<<...>>>.<<<.>>>.<<<...>>>.>.<.<<<.>.>.>.<...<.<.>>>.>.<.<<<.>>>.<<<.>>>.<<<.>>>.<<<.>>>.<<<.>>>.>.<.<<<.>>>.<<<.>.>.>.<...<.>>>.<.<<<.>>>.<<<...>>>.<<<.>>>.>.<<<.>.>.<...<.<.>>>.>.<<<<..>>>.<<<.....>>>.>.<<<<..>.>.....<.

1

Стак , 109 ч

&iiiqi{1" "}{211}{c"| "}{fcc}{o"+-|"}{p"+--"}{r"---+"}{ec;}22pr;22c22epr21ec2f2ecor1effcefor;f2ceor1e2c22e2pr

вихід:

Executing D:\codegolf\Staq borromean rings.txt

    +-----+
    |     |
+-----+   |
|   | |   |
| +-|---+ |
| | | | | |
| | +-|---+
| |   | |
+-|---+ |
  |     |
  +-----+

Execution complete.
>

0

Пітон 3, 139 байт

Це найближче, що я можу отримати безпосередньо надрукувати його (що було б 134 байти), але насправді цього не роблю .... Я не впевнений, як скоротити його більше.

a='+-----+'
b='+-|---+'
c=' '*4
d='| '
e=c+d
print(c+a,e*2,a+e[1:],"|   | "*2,d+b+" |",d*6,d+d+b,"| |   "*2,b+" |",e[2:]+e,"  "+a,sep='\n')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.