একটি প্রতিসম মানচিত্র শেষ করুন


12

আপনাকে একটি মানচিত্রের এক-চতুর্থাংশ দেওয়া হবে যা ইনপুট হিসাবে x- এবং y- অক্ষের প্রতিসাম্য। প্রোগ্রামটি সম্পূর্ণ মানচিত্র মুদ্রণ করা উচিত।

মানচিত্রে নিম্নলিখিত অক্ষরগুলি থাকতে পারে: -+/\|.এবং সেগুলি প্রত্যাশা অনুসারে পরিণত করা উচিত। ইন ডেটা সর্বদা আয়তক্ষেত্রাকার এবং ছোট।

উদাহরণ

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

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

সংক্ষিপ্ততম কোড জিতেছে।


কি ঠিক আছে ছোট ইনপুট ডেটা জন্য মানে? এটি মাপদণ্ডে কিছুটা অস্পষ্ট।
জোয়

@ জোয়ী যাক ইনপুটটি সর্বাধিক 16 টি সারি এবং 40 টি অক্ষর characters

আমি বুঝতে পেরেছি যে আমি কোনও সময়সীমা রাখিনি, তবে কারও যদি তার সমাধানের জন্য যদি এক সেকেন্ডের বেশি প্রয়োজন হয় তবে আমি সত্যিই এটি দেখতে চাই।

উত্তর:


1

গল্ফস্ক্রিপ্ট - 32 টি অক্ষর

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

সমস্যার প্রতিসাম্যতার কারণে আমরা দুবার repeat অনুভূমিকভাবে ফ্লিপ করুন, ট্রান্সপোজ ( zip) repeat পুনরাবৃত্তি করি } বোনাস হিসাবে, আপনি 2চিত্রটির আরও পুনরাবৃত্তি করতে মানটিকে আরও বড় সংখ্যায় পরিবর্তন করতে পারেন ।

চরিত্রের স্থানান্তর x^=155 if x%3==2সীমাবদ্ধ চরিত্রের জায়গার কারণে সম্পন্ন হয় । এছাড়াও আছে {.5^3%(45+}একই দৈর্ঘ্য হয়।


3

ক্যানভাস , 5 4 বাইট

║Q↷↷

প্রথম ক্যানভাস উত্তর, সুতরাং আসুন একটি সহজ এক দিয়ে শুরু করা যাক। :)

-১ বাইট @ ডিজাইমাকে ধন্যবাদ ।

ক্যানভাসে মিরর করে বা ঘোরার সময় স্ল্যাশগুলি স্বয়ংক্রিয়ভাবে রূপান্তরিত হয়।
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

উইন্ডোজ PowerShell, 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⌈

@ এএসসিআইআই-এর পর থেকে আরও কয়েকটি বহুমাত্রিক যোগ হয়েছে যা আপনাকে একক বাইটে ডান এবং ডাউন দেয় including
নীল

@ নীল আপনি ভারবোজ কোডটি কীভাবে ব্যবহার করবেন ? :RightDownঅবশ্যই আমরা চাই ফলাফল হতে হবে না।
কেভিন ক্রুইজসেন

একাধিক দিকনির্দেশনা কেবল ভার্বোজ :মোডে একটি উপসর্গ গ্রহণ করে।
নীল

@ নীল তাই :Right:Down, বা ::RightDown, বা অন্য কিছু? যদিও এই দুটি ফলাফলের কোনওটিই -vlআর্গুমেন্ট সহ এনকোডড সংস্করণে কোনও দেয় না । আরগটি S‖M⌈ব্যবহার করার সময় -vlভার্বোজ কোডটি কী হতে হবে ?
কেভিন ক্রুইজসেন

ReflectMirror(:⌈)
নিল

1

পার্ল, ৮০ টি চর

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 বাইট

সিজেএম এই চ্যালেঞ্জের চেয়ে নতুন, সুতরাং এই উত্তরটি সবুজ চেকমার্কের জন্য উপযুক্ত নয়, তবে এটি মজাদার অনুশীলন ছিল

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 
+------+
|./..\.|
|/....\|
|\..../|
|.\../.|
+------+
$ 

`\ পাশাপাশি ফ্লিপ করা দরকার।
নবাব

@ নাব, ধন্যবাদ, এটি আমার কোডকে বিশাল করেছে: পি
আপনি

চিহ্নিত করুন: পুনরাবৃত্ত স্ট্রিংগুলির জন্য এটি পরিবর্তনযোগ্য হিসাবে পরিবর্তনশীল ব্যবহার করুন। যদিও আরও কয়েকটি কৌশল রয়েছে যা আমি পরে আমার উত্তর পোস্ট করার আগে আপনি বের করার চেষ্টা করতে পারেন।
নবাব

@ ন্যাব, ধন্যবাদ, আমি বের করার চেষ্টা করব এবং আমাকে 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

এমএস-এসকিউএল 2017, 243 বাইট

ইনপুট :

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

সংকুচিত :

@ টেবিলটি ঘোষণা করুন (এল INT পরিচয় (1,1), এসএইচএআর (40%); অন্তর্ভুক্ত করুন অন্তর্ভুক্ত @ টি (গুলি) নির্বাচন করুন মান + ট্রান্সলেট (উত্তর (মান)), '\ /', '/ \') থেকে STRING_SPLIT (@ গুলি, চর (10)); নির্বাচন করুন নির্বাচন করুন (নির্বাচন করুন ইউনিট থেকে সমস্ত নির্বাচন 1e3-l, ট্রান্সলেট (গুলি, '\ /', '/ \') @ বি) এর মাধ্যমে

মানব পাঠযোগ্য :

@ টেবিল ঘোষণা করুন (l INT পরিচয় (1,1), এসএইচএআর (40%);
অন্তর্ভুক্ত @ টি (গুলি)
  মান নির্বাচন করুন (অনুবাদ (মূল্য), '\ /', '/ \')
  STRING_SPLIT (@ গুলি, চর (10)) থেকে;

নির্বাচন করুন 
থেকে (
   এল, এস থেকে @ টি নির্বাচন করুন 
   ইউনিয়ন সব 
   1e3-l নির্বাচন করুন, অনুবাদ করুন (গুলি, '\ /', '/ \') থেকে @tt
  ) খ 
অর্ডার দ্বারা l

আউটপুট (প্রাক্তন পরিচালন স্টুডিওতে পাঠ্য হিসাবে):

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

(6 টি সারি প্রভাবিত)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.