एक सममित नक्शा समाप्त करें


12

आपको एक मैप का एक-चौथाई हिस्सा दिया जाता है जो इनपुट के रूप में x- और y-axes पर सममित है। कार्यक्रम को पूरा नक्शा प्रिंट करना चाहिए।

नक्शे में निम्नलिखित वर्ण हो सकते हैं: -+/\|.और उन्हें उम्मीद के मुताबिक बदल दिया जाना चाहिए। डेटा में हमेशा आयताकार और छोटा होता है।

उदाहरण

$ cat in
+---
|./.
|/..

$ ./solution < in
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+

सबसे छोटा कोड जीतता है।


इनपुट डेटा के लिए वास्तव में छोटे का क्या मतलब है? यह थोड़ा अस्पष्ट है।
जॉय

@ जॉय बताते हैं कि इनपुट अधिकतम 16 पंक्तियों और 40 वर्णों पर है।

मुझे एहसास हुआ कि मैंने कोई समय सीमा नहीं रखी है, लेकिन अगर किसी को उसके समाधान के लिए एक सेकंड से अधिक की आवश्यकता है, तो मैं वास्तव में इसे देखना चाहूंगा।

जवाबों:


1

गोल्फस्क्रिप्ट - 32 वर्ण

n%{{.-1%{.3%2=115*^}%+}%zip}2*n*

समस्या की समरूपता के कारण, हम दो बार दोहराते हैं {क्षैतिज रूप से पलटें, संक्रमण ( zip)}। एक बोनस के रूप में, आप 2छवि को अधिक दोहराने के लिए मान को बड़ी संख्या में बदल सकते हैं ।

कैरेक्टर ट्रांसपोजेशन को x^=155 if x%3==2प्रतिबंधित चरित्र स्थान के कारण किया जाता है। वहाँ भी {.5^3%(45+}एक ही लंबाई में है।


3

कैनवस , 5 4 बाइट्स

║Q↷↷

पहला कैनवस जवाब देता है, तो चलिए एक आसान से शुरू करते हैं। :)

-1 बाइट @ दिजिमा को धन्यवाद ।

स्लैश कैनवस में मिररिंग या रोटेट करते समय स्वचालित रूप से परिवर्तित हो जाते हैं।
1 बाइट हो सकती थी ( इसे ऑनलाइन आज़माएं ), लेकिन दुर्भाग्य से यह डॉट्स .को 'क्षैतिज रूप से मिरर करने पर सिंगल कोट्स में बदल देती है ।

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

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

2

विंडोज पॉवरशेल, 99 103 117 126 129

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

टिप्पणियाँ:

  • यह दुर्भाग्य से दो चीजों की जरूरत है जो कि गोल्फ में गोल्फ के दौरान पावरहेल्ड बुरी तरह से खराब है: एक स्ट्रिंग को उलट देना (या मूल्यों का क्रम) और एक स्ट्रिंग में सामान का अनुवाद करना। मुझे पूरा यकीन है कि यह कम से कम दो बार लंबे समय तक रूबी समाधान के पर्ल के रूप में होगा।

परीक्षा:

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

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

इतिहास

  • 2011-02-09 11:10 (129) - पहला प्रयास।
  • 2011-02-09 11:27 (126) - OFSको बचाने के लिए -joinऔर 99..0एक चर में संग्रहीत ।
  • 2011-02-09 11:31 (117) - -replaceसरणियों के खिलाफ काम करता है, इसलिए मुझे तीन -replaceएस की आवश्यकता नहीं है -split, लेकिन इसके बजाय -replace, ए , कर सकते हैं -join
  • 2011-02-09 15:03 (105) - एक ही चीज़ को दो बार करने के बजाय, इसे एक बार करें और उल्टा करें। और कोष्ठकों में असाइनमेंट डालने से इसका मूल्य पाइप लाइन के लिए बाहर निकल जाता है :-)
  • 2011-02-09 15:08 (103) - मुझे $aअब ज़रूरत नहीं है क्योंकि अब तक 99..0इसका इस्तेमाल नहीं किया गया है।
  • 2011-02-09 15:17 (99) - filterपरिभाषा के बाद व्हॉट्सएप होने की जरूरत नहीं है । हटाए गए $xऔर बदले में पहली पंक्ति के दौरान हर पंक्ति को इकट्ठा करना और फिर दूसरी छमाही के लिए आउटपुट देना।

2

रूबी - 88 87 वर्ण

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

परीक्षण चालन

D:\tmp>ruby cg_sym_map.rb < sym_map.in.
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+

1
अच्छा लगा, मुझे पुट-असाइनमेंट पसंद है।

आह, मेरा निधन है;; मैं जानता था कि यह अंततः आएगा
जॉय


2

चारकोल , 5 4 बाइट्स

S‖M⌈

-1 बाइट @ @ नील को धन्यवाद ।

चारकोल स्वचालित रूप से स्लैश को सही ढंग से प्रतिबिंबित करता है।

इसे ऑनलाइन (क्रिया) आज़माएँ या इसे ऑनलाइन (शुद्ध) आज़माएँ

स्पष्टीकरण:

इनपुट को एक स्ट्रिंग के रूप में लें:

InputString()
S

प्रतिबिंब को दाईं ओर और नीचे की ओर दोनों को प्रतिबिंबित करें ( :⌈यह एक बिलियन है :Right, :Down):

ReflectMirror(:⌈)
‖M⌈

@ ASCII- ने तब से कुछ और मल्टीडायरेक्शनल जोड़ दिए हैं, जिनमें आपको एक बाइट में राइट और डाउन शामिल है।
नील

@ नील आप वर्बोस कोड में कैसे उपयोग करते हैं ? :RightDownबेशक हम चाहते हैं कि परिणाम नहीं होगा।
केविन क्रूज़सेन 12

Multidirectionals सिर्फ :Verbose मोड में एक उपसर्ग लेते हैं ।
नील

@ नील :Right:Down, या ::RightDown, या कुछ और? हालांकि, इन दोनों परिणामों में से कोई भी -vlतर्क के साथ एन्कोडेड संस्करण में नहीं देगा। Arg S‖M⌈का उपयोग करते समय क्रिया कोड क्या बनना होगा -vl?
केविन क्रूज़सेन

ReflectMirror(:⌈)
नील

1

पर्ल, 80 चार्ट

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

1

शेल स्क्रिप्टिंग !!

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

आई / ओ

./solution in

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

1

सीजेएम, 26 बाइट्स

CJam इस चुनौती से नया है, इसलिए यह उत्तर ग्रीन चेकमार्क के लिए योग्य नहीं है, लेकिन यह वैसे भी एक मजेदार अभ्यास था

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

इसका परीक्षण यहां करें।

व्याख्या

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

अंत में ट्रांसपोज़िंग कॉलम के साथ किए जाने वाले दूसरे फ़्लिपिंग की ओर जाता है। अंत में हम मानचित्र को फिर से स्थानांतरित करते हैं, इसलिए हम मूल अभिविन्यास के साथ समाप्त होते हैं।


1

पॉवरशेल, 95 बाइट्स

जॉय के जवाब से प्रेरित ।

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

नोट: 40क्योंकि लेखक टिप्पणी पोस्ट करता है Let's say the input is at most 16 rows and 40 characters

टेस्ट स्क्रिप्ट:

$f = {

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

}

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

आउटपुट:

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


0

गोल्फस्क्रिप्ट - 44 वर्ण

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

परिणाम

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

एक और स्क्रिप्ट जो केवल उदाहरण के लिए काम करती है और '\' - 32 वर्णों के लिए फ्लिप नहीं होती है

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

परिणाम

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

`\ _ को भी फ़्लिप करना होगा।
नब

@Nabb, धन्यवाद, कि मेरी कोड विशाल: पी
आप

मार्क: बार-बार स्ट्रिंग्स के लिए वैरिएबल का उपयोग करें यदि वह इसे छोटा बनाता है। हालाँकि कुछ अन्य तरकीबें हैं जिन्हें आप मेरे उत्तर के बाद पोस्ट करने से पहले जानने की कोशिश कर सकते हैं।
नबंर

@Nabb, धन्यवाद, मैं यह पता लगाने की कोशिश करेंगे और मुझे 30 मिनट डालते हैं: डी
आप

@ नब, मैं अभी भी समझ नहीं पाया, आप अपनी पोस्ट कर सकते हैं।
आप

0

हास्केल , 76 बाइट्स

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

इसे ऑनलाइन आज़माएं!

-- 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)

0

MS-SQL 2017, 243 बाइट्स

इनपुट :

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

संकुचित :

घोषित करें @t टेबल (l INT पहचान (११), s CHAR (४०)); INSERT INTO @t (s) का चयन करें मूल्य + ट्रांसलेट (रिपोर्ट (मान), / \ / ’, '\’) से STRING_SPLIT (@ s, char (10)); SELECT s FROM (Select l, s FROM @t UNION ALL SELECT 1e3-l, TRANSLATE (s, '\ /', '/ \') FROM @t: b ORDER BY l

मानव पठनीय :

घोषित @ टी टेबल (l INT पहचान (1,1), s CHAR (40));
INSERT INTO @t (s)
  सेलेक्ट वैल्यू + ट्रांसलेट (REVERSE (मान), '\ /', '/ \')
  STRING_SPLIT (@ s, char (10)) से;

का चयन करें 
से (
   चयन करें l, s @ @ से 
   यूनिअन ऑल 
   1e3-l, TRANSLATE (s, '\ /', '/ \') का चयन @ @ से करें
  ) ख 
आदेश द्वारा एल

उत्पादन (पाठ के रूप में ex.management स्टूडियो में):

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

(6 पंक्तियाँ प्रभावित)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.