Pierścienie Borromee ASCII

24

Te pierścienie boromejskie to ciekawy zestaw trzech okręgów, połączone tak, że usunięcie jednego z nich będzie rozłączyć dwie pozostałe:

wprowadź opis zdjęcia tutaj

Możesz zrobić zestaw dla siebie z kilkoma gumkami i pierścieniem spoiwa . Przy większej liczbie gumek łatwo jest utworzyć dowolne ogniwo Brunnian .

Napisz program lub funkcję, która wyprowadza (drukuje lub zwraca) to ascii-artystyczne przedstawienie pierścieni Borromee:

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

Linie mogą mieć końcowe spacje i może być końcowy nowy wiersz.

Najkrótszy kod w bajtach wygrywa.

Hobby Calvina
źródło
2
Muszę powiedzieć, że jest to dość trudne wyzwanie ze względu na to, jak proste jest oczekiwane wyjście
Beta Decay
3
Jestem trochę rozczarowany. Pomyślałbym, że wyzwaniem byłoby przyjęcie liczby całkowitej i pierścieni wyjściowych tego rozmiaru.
Blacklight Shining
tak, też tak myślałem (program bierze int jako dane wejściowe, a następnie rysuje Brunnian Link z tyloma składnikami, ale to nie jest wyjątkowe, może kilka skrzyżowań?). Tego rodzaju program musiałby faktycznie wyszukiwać (a przynajmniej
próbować i popsuć

Odpowiedzi:

7

CJam, 53 51 50 49 bajtów

Zwykła stara konwersja bazy ...

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

Wszystkie znaki są w rozszerzonym zakresie ASCII (kod ASCII od 1 do 255), więc liczba znaków == liczba bajtów.

Wypróbuj online tutaj i uzyskaj oryginalny kod tutaj

Optymalizator
źródło
Ciekawe, gdzie jest nowa linia w twoim wyszukiwaniu?
Maltysen
@Maltysen Nie mam tego. B/N*dzieli się na 11 znaków i dołącza do nowej linii
Optimizer
to coooool.
Maltysen,
6

Pyth - 51 bajtów

Jestem pewien, że ktoś pokona to szybko, ale tylko podstawowa odpowiedź na kompresję, bo czuję się leniwy. Spróbuję wkrótce napisać poważną odpowiedź.

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

Wypróbuj tutaj online .

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
Maltysen
źródło
4

Pyth, 49 bajtów

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

Demonstracja.

Wykorzystuje to kodowanie base 4 i kroi łańcuch na jedenaste, a następnie łączy je ponownie na nowej linii.

isaacg
źródło
3

Ruby, 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}

Coś innego niż konwersja prostej bazy.

Nie golfowany:

-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.
Level River St
źródło
3

Rubin, 117 bajtów

Nie wygrywam, ale pomyślałem, że to urocze podejście:

puts'    --
    |     |
--  |
|   | |   |
| -||
| | | | | |
| | -|
| |   | |
-||
  |     |
  --'.gsub /-./,'+\0---+ '
Lynn
źródło
2

BrainFuck, 361 bajtów

Oto mały program BrainFuck, drukujący tylko znak po znaku.

+++++++++[->>>>++++++++++++++<+++++<+++++<++++<]>----....>--.>.....>-->++++++++++<<<.>>>.<<<<....>>>.<<<.....>>>.>.<<<.>.....<.<...>>>.>.<.<<<...>>>.<<<.>>>.<<<...>>>.>.<.<<<.>.>.>.<...<.<.>>>.>.<.<<<.>>>.<<<.>>>.<<<.>>>.<<<.>>>.<<<.>>>.>.<.<<<.>>>.<<<.>.>.>.<...<.>>>.<.<<<.>>>.<<<...>>>.<<<.>>>.>.<<<.>.>.<...<.<.>>>.>.<<<<..>>>.<<<.....>>>.>.<<<<..>.>.....<.
AboveFire
źródło
1

Staq , 109 znaków

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

wydajność:

Executing D:\codegolf\Staq borromean rings.txt

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

Execution complete.
>
ML
źródło
0

Python 3, 139 bajtów

To jest najbliższy sposób, w jaki mogę go wydrukować bezpośrednio (co byłoby 134 bajtami) bez robienia tego .... Nie jestem pewien, jak go skrócić.

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')
mbomb007
źródło