Płótno , 5 4 bajtów

3

Płótno , 5 4 bajtów

║Q↷↷

Pierwsza odpowiedź Canvas, więc zacznijmy od łatwej. :)

-1 bajt dzięki @dzaima .

Ukośniki są automatycznie konwertowane podczas tworzenia kopii lustrzanej lub obracania na kanwie.
Może to być 1 bajt ( Wypróbuj online ), ale niestety przekształca kropki .w pojedyncze cudzysłowy 'podczas odbicia lustrzanego w poziomie.

Wypróbuj online.

Wyjaśnienie:

         # (Take the multi-line input implicitly as canvas object)
        # Palindromize the canvas object (without overlap)
       # Output it with a trailing newline (without popping)
  ↷↷    # Rotated the canvas object that's still on the stack by 90 degrees twice
         # (and output it implicitly as well at the end)
Kevin Cruijssen
źródło

Odpowiedzi:

2

Windows PowerShell, 99 103 117 126 129

filter x{$_-split'/'-replace'\\','/'-join'\'}$input|%{$_+-join($_[40..0]|x)}|%{$_
$s=,($_|x)+$s}
$s

Uwagi:

  • To niestety wymaga dwóch rzeczy, w których PowerShell jest notorycznie zły podczas gry w golfa: odwracanie ciągu (lub sekwencji wartości) i transliteracja rzeczy w ciągu. Jestem całkiem pewien, że jest to co najmniej dwa razy dłużej niż rozwiązanie Perl of Ruby.

Test:

> gc in| .\map.ps1
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+

> gc in2
+\/
/\/
> gc in2| .\map.ps1
+\/\/+
/\/\/\
\/\/\/
+/\/\+

Historia

  • 2011-02-09 11:10 (129) - Pierwsza próba.
  • 2011-02-09 11:27 (126) - OFSaby zapisać -joini zapisać 99..0w zmiennej.
  • 2011-02-09 11:31 (117) - -replacedziała przeciwko tablic, więc nie muszę trzy -replaces, ale można zrobić -split, -replace, -joinzamiast.
  • 2011-02-09 15:03 (105) - Zamiast robić to samo dwa razy, zrób to raz i odwróć. A umieszczenie przypisania w nawiasach powoduje, że wypluwa swoją wartość do potoku :-)
  • 2011-02-09 15:08 (103) - Nie potrzebuję $ajuż, ponieważ do tej pory 99..0nie jest tak często używany.
  • 2011-02-09 15:17 (99) - Po filterdefinicji nie musi być spacji . Usunięto $xi zamiast tego gromadzono każdą linię podczas pierwszego uruchomienia w tablicy, a następnie wysyłano ją do drugiej połowy.
Joey
źródło
2

Rubin - 88 87 znaków

t=->s{s.tr'/\\\\','\\\\/'}
puts a=$<.map{|l|l.chop!+t[l.reverse]}
puts a.reverse.map &t

Testowe uruchomienie

D:\tmp>ruby cg_sym_map.rb < sym_map.in.
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
Dogbert
źródło
1
Fajnie, podoba mi się zlecenie sprzedaży.
Ach, jest moja śmierć ;-) Wiedziałem, że w końcu to nastąpi
Joey
2

Węgiel , 5 4 bajtów

S‖M⌈

-1 bajt dzięki @Neil .

Węgiel drzewny automatycznie obsługuje prawidłowo odbicia cięć.

Wypróbuj online (pełne) lub Wypróbuj online (czyste) .

Wyjaśnienie:

Weź dane wejściowe jako ciąg:

InputString()
S

Odbij odbicie lustrzane zarówno w prawo, jak i w dół ( :⌈jest wbudowany :Right, :Down):

ReflectMirror(:⌈)
‖M⌈
Kevin Cruijssen
źródło
@ Tylko ASCII od tego czasu dodało więcej wielokierunkowych, w tym co daje ci prawo i w dół w jednym bajcie.
Neil
@Neil Jak korzystać z pełnego kodu? :RightDownoczywiście nie będzie rezultatem, którego byśmy chcieli.
Kevin Cruijssen
Wielokierunkowe po prostu biorą :prefiks w trybie Pełnym.
Neil
@Neil So :Right:Down, or ::RightDown, czy coś jeszcze? Żaden z tych dwóch wyników nie da jednak w wersji zakodowanej -vlargumentu. Co musiałby uzyskać pełny kod S‖M⌈podczas korzystania z -vlarg?
Kevin Cruijssen
ReflectMirror(:⌈)
Neil
1

Perl, 80 znaków

print reverse map{s@.*@($b=$&)=~y:/\\:\\/:,$&.reverse$b@e;print;y@/\\@\\/@;$_}<>
ninjalj
źródło
1

Skrypty powłoki !!

#!/bin/sh

rm temp
touch temp
file=$1
for STRING in `cat $1`
do
   printf $STRING >> temp
   for ((COUNT=0; COUNT<${#STRING}; COUNT++))
   do
      RECORD[$COUNT]=${STRING:$COUNT:1}
   done
   for ((REV_COUNT=${#STRING}; REV_COUNT>=0; REV_COUNT--))
      do
        if [ "${RECORD[$REV_COUNT]}" = "\\" ]; then
            printf "/" >> temp
        elif [ "${RECORD[$REV_COUNT]}" = "/" ]; then
            printf "\\" >> temp
        else
           printf "${RECORD[$REV_COUNT]}" >> temp
        fi
      done
   echo >> temp
done
cat temp
tac temp > temp2
for STRING in `cat temp2`
do
   for ((COUNT=0; COUNT<${#STRING}; COUNT++))
   do
      RECORD[$COUNT]=${STRING:$COUNT:1}
   if [ "${RECORD[$COUNT]}" = "\\" ]; then
            printf "/"
   elif [ "${RECORD[$COUNT]}" = "/" ]; then
            printf "\\"
   else
           printf "${RECORD[$COUNT]}"
   fi
   done
echo
done

I / O

./solution in

+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
Aman ZeeK Verma
źródło
1

CJam, 26 bajtów

CJam jest nowszy niż to wyzwanie, więc ta odpowiedź nie kwalifikuje się do zielonego znacznika wyboru, ale i tak było zabawnym ćwiczeniem

qN/{{_W%"\/"_W%er+}%z}2*N*

Sprawdź to tutaj.

Wyjaśnienie

qN/{{_W%"\/"_W%er+}%z}2*N*
qN/                        "Read STDIN and split on newlines.";
   {                 }2*   "Execute this block twice.";
    {             }%       "Map this block onto each line.";
     _W%                   "Duplicate and reverse.";
        "\/"               "Push the string '\/'.";
            _W%            "Duplicate and reverse.";
               er          "Character transliteration, swaps slashes and backslashes.";
                 +         "Append to first half of the line.";
                    z      "Zip, i.e. transpose the map.";
                        N* "Join with newlines.";

Transpozycja na końcu prowadzi do drugiego przerzucenia, które należy wykonać wzdłuż kolumn. Na koniec ponownie transponujemy mapę, więc kończymy na oryginalnej orientacji.

Martin Ender
źródło
1

PowerShell, 95 bajtów

Zainspirowany Joey'a odpowiedź .

filter x{$_;$_[40..0]|%{$_-split'/'-replace'\\','/'-join'\'}},($args|%{-join(,($_|% t*y)|x)})|x

Uwaga: 40ponieważ autor zamieszcza komentarz Let's say the input is at most 16 rows and 40 characters.

Skrypt testowy:

$f = {

filter x{$_;$_[40..0]|%{$_-split'/'-replace'\\','/'-join'\'}}
,($args|%{-join(,($_|% t*y)|x)})|x

}

@(
    ,( ("+---",
        "|./.",
        "|/.."),
        "+------+",
        "|./..\.|",
        "|/....\|",
        "|\..../|",
        "|.\../.|",
        "+------+")
    ,( ("+\/",
        "/\/"),
        "+\/\/+",
        "/\/\/\",
        "\/\/\/",
        "+/\/\+")
    ,( ("+---",
        "|...",
        "|..\"),
        "+------+",
        "|......|",
        "|..\/..|",
        "|../\..|",
        "|......|",
        "+------+")
) | % {
    $m,$expected = $_
    $result = &$f @m
    "$result"-eq"$expected"
    $result
}

Wynik:

True
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
True
+\/\/+
/\/\/\
\/\/\/
+/\/\+
True
+------+
|......|
|..\/..|
|../\..|
|......|
+------+
mazzy
źródło
0

Rubin - 105

t=->s{s.tr '/\\\\','\\\\/'}
$<.read.split.map{|l|print l+=t[l.reverse]+"
"
l}.reverse.map{|l|print t[l]}
Arnaud Le Blanc
źródło
0

Golfscript - 44 znaki

n%{.-1%'/'/{'\\'/'/'*}%'\\'*+}%.-1%{-1%}%+n*

wynik

$ cat in2
+-/|/\
/\|//-
$ cat in2 | golfscript codegolf-761.gs 
+-/|/\/\|\-+
/\|//--\\|/\
\/|\\--//|\/
+-\|\/\/|/-+

Kolejny skrypt, który działa tylko na przykład i nie przerzuca na „\” - 32 znaki

n%{.-1%'/'/'\\'*+}%.-1%{-1%}%+n*

wynik

$ cat in
+---
|./.
|/..
$ cat in | golfscript codegolf-761.gs 
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
$ 
TY
źródło
`\` również musi zostać odwrócone.
Nabb,
@Nabb, dzięki, że mój kod był ogromny: P
TY
Znak: Użyj zmiennych dla powtarzających się ciągów, jeśli powoduje to, że są one krótsze. Chociaż istnieje kilka innych sztuczek, które możesz wypróbować, zanim opublikuję moją odpowiedź później.
Nabb
@Nabb, dzięki, postaram się to rozgryźć i dać mi 30 minut: D
TY
@Nabb, nadal nie mogę się domyślić, możesz opublikować swoje.
TY
0

Haskell , 76 bajtów

c '/'='\\';c '\\'='/';c x=x;i=(c<$>)
q#x=x++q(reverse x)
f=((i<$>)#).map(i#)

Wypróbuj online!

-- Only / and \ get converted, all other chars are passed as is
c '/'='\\';c '\\'='/';c x=x

-- "Invert" the string (that is switch all / and \ in it)
-- Just map our conversion function over the string
i = (c<$>)

-- Helper: Concatenate a list with its reversed copy (with the given function applied to the copy)
q # x = x ++ q (reverse x)

-- the resulting function:
f = ((i<$>)#) . -- produce the lower half of the image by reversing the upper half and inverting slashes in each line
    map (i#) -- produce the upper half or the image (by concating each input line with its reversed, inverted version)
Max Yekhlakov
źródło
0

MS-SQL 2017, 243 bajty

wejście :

DEKLARUJ @S VARCHAR (100) = '+ ---' + CHAR (10) + '| ...' + CHAR (10) + '| .. \';

skompresowany :

deklaruj @t TABELA (l TOŻSAMOŚĆ (1,1), s ZNAK (40)); WSTAW DO @t (s) WYBIERZ wartość + TŁUMACZ (ODWRÓCENIE (wartość), '\ /', '/ \') OD STRING_SPLIT (@ s, char (10)); WYBIERZ OD (WYBIERZ l, s OD @t UNION WSZYSTKO WYBIERZ 1e3-l, TŁUMACZ (s, '\ /', '/ \') OD @t) b ZAMÓWIENIE według l

czytelny dla człowieka :

deklaruj @t TABELA (l INTENTENTITY (1,1), s CHAR (40));
INSERT INTO @t (s)
  WYBIERZ wartość + TŁUMACZENIE (ODWRÓCENIE (wartość), „\ /”, „/ \”)
  FROM STRING_SPLIT (@ s, char (10));

WYBIERZ s 
Z(
   WYBIERZ l, s OD @t 
   UNION ALL 
   WYBIERZ 1e3-l, TŁUMACZ (s, '\ /', '/ \') OD @t
  )b 
ZAMÓWIENIE PRZEZ l

wyjście (jako tekst w ex.management studio):

+ ------ +                                
| ...... |                                
| .. \ / .. |                                
| ../ \ .. |                                
| ...... |                                
+ ------ +                                

(Dotyczy 6 rzędów)
Marcin F.
źródło