Kanvas , 5 4 byte

3

Kanvas , 5 4 byte

║Q↷↷

Kanvas jawaban pertama, jadi mari kita mulai dengan yang mudah. :)

-1 byte terima kasih kepada @dzaima .

Garis miring secara otomatis dikonversi ketika mirroring atau berputar di Canvas.
Bisa jadi 1 byte ( Coba online ), tetapi sayangnya itu juga mengubah titik-titik .menjadi tanda kutip tunggal 'ketika mirroring secara horizontal.

Cobalah online.

Penjelasan:

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

Jawaban:

2

Windows PowerShell, 99 103 117 126 129

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

Catatan:

  • Sayangnya ini membutuhkan dua hal yang membuat PowerShell terkenal buruk saat bermain golf: Membalikkan string (atau urutan nilai) dan mentransliterasikan hal-hal dalam string. Saya cukup yakin bahwa ini setidaknya dua kali lebih lama dari solusi Perl of Ruby.

Uji:

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

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

Sejarah

  • 2011-02-09 11:10 (129) - Upaya pertama.
  • 2011-02-09 11:27 (126) - OFSuntuk menyimpan -joindan menyimpannya 99..0dalam variabel.
  • 2011-02-09 11:31 (117) - -replacebekerja terhadap array, jadi saya tidak perlu tiga -replaces tetapi dapat melakukan -split, -replace, -joinsebagai gantinya.
  • 2011-02-09 15:03 (105) - Alih-alih melakukan hal yang sama dua kali, lakukan sekali dan balikkan. Dan menempatkan tugas ke dalam tanda kurung menyebabkannya memuntahkan nilainya ke pipa :-)
  • 2011-02-09 15:08 (103) - Saya tidak perlu $alagi karena 99..0tidak sering digunakan sekarang.
  • 2011-02-09 15:17 (99) - Tidak perlu spasi kosong setelah filterdefinisi. Dihapus $xdan alih-alih mengumpulkan setiap baris selama menjalankan pertama dalam array dan kemudian mengeluarkannya untuk paruh kedua.
Joey
sumber
2

Ruby - 88 87 karakter

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

Uji Coba

D:\tmp>ruby cg_sym_map.rb < sym_map.in.
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
Wile E. Coyote
sumber
1
Bagus, saya suka tugas menempatkan.
Ah, ada kehancuran saya ;-) Saya tahu itu akan datang pada akhirnya
Joey
2

Arang , 5 4 byte

S‖M⌈

-1 byte terima kasih kepada @Neil .

Arang secara otomatis menangani mencerminkan garis miring dengan benar.

Cobalah online (verbose) atau Coba online (murni) .

Penjelasan:

Ambil input sebagai string:

InputString()
S

Refleksikan cermin baik ke arah kanan maupun ke bawah ( :⌈adalah bawaan untuk :Right, :Down):

ReflectMirror(:⌈)
‖M⌈
Kevin Cruijssen
sumber
@ ASCII-only sejak saat itu telah menambahkan lebih banyak multidirectional termasuk yang memberi Anda hak dan ke bawah dalam satu byte.
Neil
@Neil Bagaimana Anda menggunakan kode Verbose? :RightDowntentu saja bukan hasil yang kita inginkan.
Kevin Cruijssen
Multidirectional hanya mengambil :awalan dalam mode Verbose.
Neil
@Neil Jadi :Right:Down, atau ::RightDown, atau sesuatu yang lain? Tak satu pun dari kedua hasil ini akan memberikan dalam versi yang disandikan dengan -vlargumen. Apa yang harus menjadi kode verbose S‖M⌈ketika menggunakan -vlarg?
Kevin Cruijssen
ReflectMirror(:⌈)
Neil
1

Perl, 80 karakter

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

Scripting 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
sumber
1

CJam, 26 byte

CJam lebih baru dari tantangan ini, jadi jawaban ini tidak memenuhi syarat untuk tanda centang hijau, tapi tetap saja itu latihan yang menyenangkan

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

Uji di sini.

Penjelasan

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

Transposing di bagian akhir menyebabkan flipping kedua dilakukan di sepanjang kolom. Pada akhirnya kami mengubah peta lagi, jadi kami berakhir dengan orientasi asli.

Martin Ender
sumber
1

Powershell, 95 byte

Terinspirasi oleh jawaban Joey .

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

Catatan: 40karena penulis memposting komentar Let's say the input is at most 16 rows and 40 characters.

Skrip uji:

$f = {

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

}

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

Keluaran:

True
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
True
+\/\/+
/\/\/\
\/\/\/
+/\/\+
True
+------+
|......|
|..\/..|
|../\..|
|......|
+------+
mazzy
sumber
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
sumber
0

Golfscript - 44 karakter

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

hasil

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

Skrip lain yang hanya berfungsi misalnya dan tidak membalik untuk '\' - 32 karakter

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

hasil

$ cat in
+---
|./.
|/..
$ cat in | golfscript codegolf-761.gs 
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
$ 
KAMU
sumber
`\` perlu dibalik juga.
Nabb
@ Nabb, terima kasih, itu membuat kode saya besar: P
ANDA
Mark: Gunakan variabel untuk string berulang jika membuatnya lebih pendek. Meskipun ada beberapa trik lain yang bisa Anda coba cari tahu sebelum saya posting jawaban saya nanti.
Nabb
@ Nabb, Terima kasih, saya akan mencoba mencari tahu dan memberi saya waktu 30 menit: D
ANDA
@Nabb, saya masih tidak tahu, Anda dapat memposting milik Anda.
ANDA
0

Haskell , 76 byte

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

Cobalah 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
sumber
0

MS-SQL 2017, 243 byte

masukan :

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

terkompresi :

menyatakan @t TABLE (l INT IDENTITY (1,1), s CHAR (40)); INSERT INTO @t (s) SELECT value + TRANSLATE (REVERSE (value), '\ /', '/ \') DARI STRING_SPLIT (@ s, char (10)); SELECT s FROM (SELECT l, s DARI @t UNION ALL SELECT 1e3-l, TRANSLATE (s, '\ /', '/ \') FROM @t) b ORDER BY l

dapat dibaca manusia :

menyatakan @t TABLE (l INT IDENTITY (1,1), s CHAR (40));
INSERT INTO @t (s)
  Nilai SELECT + TRANSLATE (REVERSE (nilai), '\ /', '/ \')
  FROM STRING_SPLIT (@ s, char (10));

SELECT s 
DARI(
   PILIH l, s DARI @ t 
   UNION ALL 
   PILIH 1e3-l, TRANSLATE (s, '\ /', '/ \') DARI @t
  ) b 
PESANAN OLEH l

output (sebagai teks di ex.management studio):

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

(6 baris terpengaruh)
marcin f
sumber