শেভরনসকে সলিউডিসে রূপান্তর করুন


23

একটি প্রোগ্রাম যেটি শুধুমাত্র স্পেস, নতুন লাইন, এবং কোণ বন্ধনী ধারণকারী একটি স্ট্রিং লাগে লিখুন: <, >( chevrons )। আউটপুট স্পেস, নতুন লাইন, এবং স্ল্যাশ একটি স্ট্রিং: /, \( soliduses ) যাদের আকার ইনপুট মিলা, কিন্তু এক চতুর্থাংশ পালা ঘড়ির কাঁটার দিকে ঘোরে, মূল ইনপুটের প্রতিটি সারির মধ্যে সন্নিবেশিত স্পেস একটি কলাম সঙ্গে (নন্দনতত্ব জন্য)।

উদাহরণস্বরূপ, ইনপুটটি যদি এটি হয়:

<>

আউটপুটটি এই হবে:

/\
\/

ইনপুটটি যদি এটি হয়:

><<<>
 <><

আউটপুটটি এই হবে:

   \/
/\ /\
\/ /\
/\ /\
   \/

ইনপুটটি যদি এটি হয়:

>>  <<
<>  <>
  <
  ><

আউটপুটটি এই হবে:

      /\ \/
      \/ \/
\/ /\    
/\      
      /\ /\
      \/ /\

শেষ দুটি উদাহরণে কীভাবে মূল ইনপুট সারিগুলির মধ্যে ফাঁকের একক কলাম রয়েছে তা লক্ষ্য করুন।

আপনি একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন যা কোনও সাধারণ উপায়ে ইনপুট নেয় (কমান্ড লাইন, স্টিডিন) এবং আউটপুট প্রিন্ট করে, বা আপনি স্ট্রিং আর্গুমেন্টের সাহায্যে কোনও ফাংশন লিখতে পারেন যা আউটপুট প্রিন্ট করে বা রিটার্ন করে।

খালি নেতৃস্থানীয় এবং অনুসরণযোগ্য সারি বা ইনপুটটিতে শ্বেতস্পেসের কলামগুলি আউটপুটে উপস্থিত হওয়ার দরকার নেই। অতিরিক্ত হিসাবে, ফলাফলের আকারগুলি যতক্ষণ সঠিক হয় ততক্ষণ আউটপুটে কোনও স্থানে এবং / অথবা পিছনের জায়গাগুলি এবং / অথবা নিউলাইনগুলি থাকতে পারে। অন্য কথায়, আসকি শিল্পটির অনুবাদ কোনও বিষয় নয়, কেবল আকার এবং একে অপরের সাথে তাদের সম্পর্ক

আপনি বৈকল্পিকভাবে ধরে নিতে পারেন ইনপুটটির একটি পিছনের নতুন লাইন রয়েছে।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


আমরা কি অনুমান করতে পারি যে ইনপুটটি আয়তক্ষেত্রাকার, এবং গোছার স্থানটি পিছনে রয়েছে?
orlp

@ অরলপ নং আপনি একটি অনুবর্তনযোগ্য নতুন লাইন ধরে নিতে পারেন তবে এটি অবশ্যই আয়তক্ষেত্রাকার নয়।
ক্যালভিনের শখ

উত্তর:


4

সিজেম, 35 বাইট

qN/_s,S*f+{iD%[S3*" \/"_$]=}f%W%zN*

এটি এখানে অনলাইনে চেষ্টা করুন


আমার প্রায় একই কোড ছিল, তবে সেই চালাক $কৌশল ছাড়া এটি এখনও 37 বাইট দীর্ঘ ছিল ...
ডেনিস

এই $কৌশলটি ইতিমধ্যে আমার জীবনকে অনেকবার বাঁচিয়েছে;)
অপ্টিমাইজার

3

সিজেম, 37 বাইট

qN/_z,S*f{+"< >""/\    \/ "3/er}W%zN*

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

qN/                                   e# Read from STDIN and split at linefeeds.
   _z,                                e# Zip a copy and push the results length.
                                      e# This computes the maximum line length.
      S*                              e# Repeat " " that many times.
        f{                     }      e# For each line:
                                      e#   Push the string of spaces.
          +                           e#   Append it to the line.

           "< >""/\    \/ "3/         e#   Push "< >" and ["/\ " "   " "\/ "].
                             er       e#   Perform transliteration.
                                W%z   e# Reverse the lines and zip.
                                      e# This rotates by 90 degrees.
                                   N* e# Join, separating by linefeeds.  

2

পাইথন 2, 105 বাইট

def f(s):
 for row in map(None,*s.split("\n")):print" ".join("\/ /\ "[1-cmp(c,"<")::3]for c in row[::-1])

সমস্ত ভুল কারণে, এটি আমার এখনও map(None, ...)অবধি ব্যবহারযোগ্যতম ব্যবহারগুলির মধ্যে একটি হয়ে উঠেছে । নিখুঁত আয়তক্ষেত্র এমনকি আউটপুট প্যাড।

দ্বিতীয় উদাহরণটি নেওয়া যাক:

><<<>
 <><

map(None,*s.split("\n"))দরিদ্র ব্যক্তিকে সম্পাদন করে zip_longest, প্রদান করে:

[('>', ' '), ('<', '<'), ('<', '>'), ('<', '<'), ('>', None)]

লক্ষ্য করুন যে দ্বিতীয় লাইনটি কীভাবে প্রথমের চেয়ে সংক্ষিপ্ত, সুতরাং আমরা Noneশেষে পেয়ে যাব । সাধারণত এটি একটি সমস্যা হতে পারে তবে কোনও কারণে পাইথন 2 এবং বিশেষত প্রায় সমস্ত কিছুই তুলনীয়

>>> None < ""
True

এর অর্থ এই যে অভিব্যক্তি 1-cmp(c,"<")আয় 0, 1, 2জন্য ">", "<", Noneযথাক্রমে আমাদের একজন বের করে আনতে স্ট্রিং slicing কৌতুক ব্যবহার করার অনুমতি দেয় "\/", "/\", " "। এটি ব্যবহার করে, আমরা আউটপুট লাইনটি লাইনে মুদ্রণ করি, ফাঁকা জায়গাগুলির সাথে 2-চর গ্রুপগুলিতে যোগদান করি।


+1 এই সমাধানটি আমি যখন আমার মাথায় দেখেছিলাম যখন আমি প্রশ্নটি পড়ি তখন অবাক হওয়া উচিত নয় যে এটি ইতিমধ্যে এখানে ছিল: পি
কেড

1

স্কালা, 201 188 টি অক্ষর

(s:String)(Seq("")0/:s.lines.flatMap(l⇒Seq(l,l))){case((v,i),l)(l.map(c⇒if(Set('>','<')(c))if(c%4==i)'/'else'\\'else c)+:v,2-i)}._1.init.transpose.map(_.mkString).mkString("\n")

বিঃদ্রঃ:

এটি কেবল তখনই কার্যকর হয় যখন সরবরাহিত স্ট্রিংয়ের সমান দৈর্ঘ্যের সমস্ত লাইন থাকে (অর্থাত্ স্পেস দিয়ে প্যাডযুক্ত)

ব্যাখ্যা:

আমি এ Seq[String]এবং এ এর টিউপলের প্রাথমিক মান সহ ভাঁজটি ব্যবহার করছি Int( Seq.empty[String]ছোট লেখার পরিবর্তে Seq("")এবং .initভাঁজ লেখার পরে), ভাঁজটি স্ট্রিংয়ের সংকলনে পরিচালিত হয়, প্রতিটি স্ট্রিং মূল ইনপুটের একটি লাইন এবং প্রতিটি লাইন দ্বিগুণ হয়। কৌশলটি এখানে চরটির মডুলোর জন্য পরীক্ষা করা ছিল। যেহেতু '<'মান 60০, এবং '>'মান is২, মডুলো ৪ এর পরীক্ষার ফলে ০ বা ২ পাওয়া যাবে that's এ কারণেই ভাঁজটিও একটি ফ্লিপিং Intসেট বহন করে থাকে এবং 0 এবং 2 এর সাথে উল্টে যায় 2-i। প্রত্যেক বিজোড় লাইন মানচিত্র উচিত '>'করার '/'এবং '<'করতে '\\', এবং প্রত্যেক এমনকি লাইন মানচিত্র উচিত '>'কাছে '\\'এবং '<'করতে '/'। এই জন্যই আমি পরীক্ষা করছিc%4==iএবং 1 পাথর দিয়ে 2 পাখি আঘাত। ভাঁজটি বিপরীতে স্ট্রিংগুলির প্রাথমিক ক্রমটি "পুনর্নির্মাণ" করে এবং তারপরে (শেষ লাইনটি নামানোর পরে) আমি সিকোয়েন্সটি স্থানান্তর করি (এ কারণেই সমস্ত স্ট্রিং অবশ্যই একই দৈর্ঘ্যের হওয়া উচিত)। জড়িত জড়িতদের কারণে, আমার _.mkStringপ্রতিটি লাইনে (পূর্ববর্তী কলাম) এবং তারপরে mkString("\n")চূড়ান্ত আউটপুটটির দরকার।


0

পার্ল - 119

@l=map[/./g],reverse<>;do{print;$_=join(' ',map({'<'=>'/\\','>'=>'\/'}->{$_->[$b]}||'  ',@l))."\n";$b++;}while(/[^ 
]/)

প্রথমত, @lবিপরীত ক্রমে লাইনগুলির সাথে ইনপুটগুলির প্রতিটি লাইনে অক্ষরগুলি উপস্থাপন করে এমন তালিকাগুলির তালিকা হিসাবে নির্ধারিত হয়। তারপরে এটি অক্ষরের কলামগুলির মধ্য দিয়ে যায়, আনুষঙ্গিক বন্ধনীগুলিকে সংশ্লিষ্ট স্ল্যাশগুলির সাথে প্রতিস্থাপন করে, ফাঁক দিয়ে উপাদানগুলিতে যোগ দেয় এবং জোড় স্ল্যাশগুলি একটি লাইন হিসাবে মুদ্রণ করে।

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