Tela , 5 4 bytes

3

Tela , 5 4 bytes

║Q↷↷

Resposta do First Canvas, então vamos começar com uma resposta fácil. :)

-1 byte graças a @dzaima .

As barras são convertidas automaticamente ao espelhar ou girar no Canvas.
Poderia ter 1 byte ( Experimente on-line ), mas infelizmente também transforma os pontos .em aspas simples 'ao espelhar horizontalmente.

Experimente online.

Explicação:

         # (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
fonte

Respostas:

2

Windows PowerShell, 99 103 117 126 129

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

Notas:

  • Infelizmente, isso precisa de duas coisas nas quais o PowerShell é notoriamente ruim ao jogar golfe: reverter uma string (ou sequência de valores) e transliterar coisas em uma string. Tenho certeza de que isso é pelo menos o dobro do tempo que uma solução Perl of Ruby.

Teste:

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

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

História

  • 09-02-2011 11:10 (129) - Primeira tentativa.
  • 09-02-2011 11:27 (126) - OFSpara salvar -joine armazenar 99..0em uma variável.
  • 2011-02-09 11:31 (117) - -replacetrabalha contra matrizes, então eu não preciso de três -replaces, mas pode fazer um -split, -replace, -joinem vez disso.
  • 09-02-2011 15:03 (105) - Em vez de fazer a mesma coisa duas vezes, faça-o uma vez e inverta-o. E colocar uma tarefa entre parênteses faz com que ela cuspa seu valor no pipeline :-)
  • 09-02-2011 15:08 (103) - Não preciso $amais, já que 99..0não é usado com tanta frequência até agora.
  • 09-02-2011 15:17 (99) - Não precisa haver espaço em branco após a filterdefinição. Removido $xe, em vez disso, coletando todas as linhas durante a primeira execução em uma matriz e, em seguida, produzindo isso para a segunda metade.
Joey
fonte
2

Ruby - 88 87 caracteres

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

Execução de teste

D:\tmp>ruby cg_sym_map.rb < sym_map.in.
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
Wile E. Coyote
fonte
1
Bom, eu gosto da tarefa de colocar.
Ah, aí está minha morte ;-) Eu sabia que isso chegaria eventualmente
Joey
2

Carvão , 5 4 bytes

S‖M⌈

-1 byte graças a @Neil .

O carvão lida automaticamente com a reflexão correta das barras.

Experimente online (detalhado) ou Experimente online (puro) .

Explicação:

Tome a entrada como uma string:

InputString()
S

Reflita o espelho tanto para a direita quanto para baixo ( :⌈é um componente interno :Right, :Down):

ReflectMirror(:⌈)
‖M⌈
Kevin Cruijssen
fonte
O @ ASCII-only adicionou mais multidirecionais, inclusive o que lhe dá o direito e o down em um único byte.
Neil
@ Neil Como você usa o código verboso? :RightDownclaro que não será o resultado que desejaríamos.
Kevin Cruijssen 27/01/19
Multidirecionais usam apenas um :prefixo no modo verboso.
Neil
@ Neil Então :Right:Down, ::RightDownou algo mais? Nenhum desses dois resultados fornecerá um na versão codificada com o -vlargumento. Qual seria o código detalhado para obter S‖M⌈ao usar o -vlarg?
Kevin Cruijssen 27/01/19
ReflectMirror(:⌈)
Neil
1

Perl, 80 caracteres

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

Script de Shell !!

#!/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
fonte
1

CJam, 26 bytes

Como o CJam é mais recente que esse desafio, essa resposta não é elegível para a marca de seleção verde, mas foi um exercício divertido de qualquer maneira

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

Teste aqui.

Explicação

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.";

A transposição no final leva a segunda inversão a ser realizada ao longo das colunas. No final, transpomos o mapa novamente e terminamos com a orientação original.

Martin Ender
fonte
1

PowerShell, 95 bytes

Inspirado pela resposta de Joey .

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

Nota: 40porque o autor publica o comentário Let's say the input is at most 16 rows and 40 characters.

Script de teste:

$f = {

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

}

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

Resultado:

True
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
True
+\/\/+
/\/\/\
\/\/\/
+/\/\+
True
+------+
|......|
|..\/..|
|../\..|
|......|
+------+
confuso
fonte
0

Ruby - 105

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

Golfscript - 44 caracteres

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

resultado

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

Outro script que funciona apenas por exemplo e não muda para '\' - 32 caracteres

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

resultado

$ cat in
+---
|./.
|/..
$ cat in | golfscript codegolf-761.gs 
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
$ 
VOCÊ
fonte
`\` também precisa ser invertido.
Nabb
@ Nabb, obrigado, que fez meu código enorme: P
YOU
Marca: use variáveis ​​para seqüências de caracteres repetidas, se a diminuir. Embora existam alguns outros truques que você pode tentar descobrir antes de postar minha resposta mais tarde.
Nabb
@ Nabb, Obrigado, vou tentar descobrir e me deixar ter 30 minutos: D
VOCÊ
@ Nabb, eu ainda não consegui descobrir, você pode postar o seu.
VOCÊ
0

Haskell , 76 bytes

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

Experimente 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
fonte
0

MS-SQL 2017, 243 bytes

entrada :

DECLARAR @s VARCHAR (100) = '+ ---' + CHAR (10) + '| ...' + CHAR (10) + '| .. \';

comprimido :

declara @t TABLE (l IDENTIDADE INT (1,1), s CHAR (40)); INSERT IN @t (s) SELECT valor + TRANSLATE (REVERSE (valor), '\ /', '/ \') FROM STRING_SPLIT (@ s, char (10)); SELECT s FROM (SELECT l, s FROM @t UNION ALL SELECT 1e3-l, TRANSLATE (s, '\ /', '/ \') FROM @t) b ORDEM POR l

legível por humanos :

declara @ t TABELA (l IDENTIDADE INT (1,1), s CHAR (40));
INSERIR EM @ t (s)
  SELECT value + TRANSLATE (REVERSE (value), '\ /', '/ \')
  FROM STRING_SPLIT (@ s, caractere (10));

Selecione% s 
A PARTIR DE(
   SELECIONE l, s FROM @t 
   UNIÃO TUDO 
   SELECT 1e3-l, TRADUZIR (s, '\ /', '/ \') FROM @t
  b) 
ENCOMENDA POR l

saída (como texto no ex.management studio):

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

(6 linhas afetadas)
marcin f
fonte