ASCII Борромео Кольца


24

В Борромео кольца представляют собой любопытный набор из трех кругов, связаны таким образом, что удаление любого из них будет разъединить два других:

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

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

Напишите программу или функцию, которая выводит (печатает или возвращает) это ascii-art представление борромовых колец:

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

В строках могут быть завершающие пробелы и может быть завершающий символ новой строки.

Самый короткий код в байтах побеждает.


2
Я должен сказать, что это довольно сложная задача из-за того, насколько прост ожидаемый результат
Beta Decay

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

@ Maltysen У меня его нет. B/N*разделяется на 11 символов и присоединяется к новой строке
Оптимизатор

это круто
Maltysen

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

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

При этом используется кодировка base4, строка разбивается на одиннадцатые, а затем соединяется с ними на новых строках.


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}

Что-то отличное от прямого базового преобразования.

Ungolfed:

-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, которая печатает только символ за символом.

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

1

Staq , 109 символов

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

выход:

Executing D:\codegolf\Staq borromean rings.txt

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

Execution complete.
>

0

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