সেখানে থাকুন বা বর্গক্ষেত্র!


19

"সেখানে থাকুন বা স্কোয়ার থাকুন" কথাটি প্রত্যেকে শুনেছেন। তাই আমি ভেবেছিলাম এটি সম্পর্কে একটি চ্যালেঞ্জের সময় এসেছে।

ইনপুট

আপনি STDIN বা সমতুল্য হয়ে ইনপুট হিসাবে পাঠ্য হিসাবে একটি সম্পূর্ণ পরম ডিরেক্টরি ঠিকানা নেবেন।

আউটপুট

যদি ডিরেক্টরি ঠিকানা উপস্থিত থাকে এবং বৈধ হয় তবে আপনার প্রোগ্রামটি আপনার কম্পিউটারের সেই ফোল্ডারে চলে যাবে। যদি তা না হয় তবে এটি STDOUT বা নিম্নলিখিত স্কোয়ারের সমতুল্য আউটপুট আসবে:

+-+
| |
+-+

আবশ্যকতা

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

অনুমিতি

  • আপনি ধরে নিতে পারেন ইনপুটটি কখনই খালি থাকে না।
  • আপনি ধরে নিতে পারেন ডিরেক্টরিতে কোনও ফাইল নাম শেষ পর্যন্ত যুক্ত হয় না।
  • আপনি ধরে নিতে পারেন যে ইনপুট ডিরেক্টরিটি এখনকার কোনওটিই নয়।
  • আপনি ধরে নিতে পারেন আপনার কাছে যেখানেই লেখার এবং সম্পাদনের অনুমতি রয়েছে।

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।


আমরা কি ফাইলের নাম হার্ডকোড করতে পারি?
বুকআল

হ্যাঁ @bookowl আপনি পারেন
ফিনডাব্লু

পাথটিতে ফাইলের নাম ( c:\users\Joe\program.txt) রয়েছে কি না ( c:\users\Joe\ )? পরবর্তী ক্ষেত্রে, তৈরি করা ফাইলটির নাম উত্সের মতো হওয়া উচিত?
লুইস মেন্ডো

@ লুইস মেন্ডো আপনি কখনই কোনও ফাইল ইনপুট হিসাবে কেবল একটি ডিরেক্টরি হিসাবে পাবেন না
FinW

@ ফিনডব্লিউ দুঃখের বিষয়, আপনি এখনও আমার প্রশ্নের উত্তর দেননি: তৈরি করা ফাইলের নামটি কি মূল ফাইলের মতো হওয়া উচিত?
লুইস মেন্ডো

উত্তর:


1

বাশ + কোর্টিলস, 43 42 বাইট

mv -t $1 $0 2> >(:)||echo -n '+-+
| |
+-+'

এটি প্রতিধ্বনিত করতে -n পতাকাের মাধ্যমে ট্রেলিং করা নতুন লাইনটি প্রিন্ট করা এড়ায়।

আমি "অনিবার্য" যদি পেছনের নতুন লাইনের অনুমতি দেওয়ার মাধ্যমে ওপি বলতে কী বোঝায় তা আমি নিশ্চিত নই।

যদি এটি একটি ট্রেলিং নিউলাইন অন্তর্ভুক্ত করা গ্রহণযোগ্য হয় তবে পরিবর্তন করুন

echo -n '+-+

প্রতি

echo '+-+

এবং মোট 39 বাইট জন্য 3 বাইট সংরক্ষণ করুন।


7

পাওয়ারশেল , 59 62 61 60 বাইট

$z=ls($d=$args)-di;('"+-+
| |
+-+"','mv b.ps1 "$d"')[$?]|iex

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

ব্যাখ্যা

পাওয়ারশেলের Move-Itemসিএমডিলেট ( mv) ফাইলেরও নাম পরিবর্তন করে, সুতরাং এটি গন্তব্য হিসাবে উপস্থিত না এমন একটি ডিরেক্টরি প্রদানের পরিবর্তে ফাইলটি তার শেষ উপাদানটিতে পুনরায় নামকরণ করে (পিতামাতার উপস্থিতি যতক্ষণ না), তাই এটি কোনও ভাল ছিল না।

আমি Test-Pathনির্ধারণ করতে ব্যবহার করতে পারি যে গন্তব্যটি বিদ্যমান এবং এটি একটি ডিরেক্টরি, তবে এটি অনেক দীর্ঘ Test-Path $d -PathT C

সুতরাং পরিবর্তে আমি (সংক্ষিপ্ত) প্যারামিটার দিয়ে Get-ChildItem( ls) ব্যবহার করছি -Directoryএবং $?এটি সফল কিনা তা পরীক্ষা করে দেখছি। যদি কোনও থাকে তবে আউটপুটটি এমনভাবে নির্ধারিত হয় $zযাতে এটি দেখা যায় না।

এটি 2 টি উপাদান সহ একটি অ্যারের আকারে সম্পন্ন হয়েছে, তারপরে বুলিয়ান মানটির সাথে অ্যারেতে সূচীকরণ করা $?হবে যা এর সাথে মিলিত হবে 0বা 1, সুতরাং গন্তব্য ডিরেক্টরি উপস্থিত না থাকলে প্রথম অ্যারের উপাদানটি বেছে নেওয়া হয় এবং দ্বিতীয়টি যদি এটি হয় আছে।

প্রথম অ্যারে উপাদানটি এমন একটি স্ট্রিং যা বাক্সটি রয়েছে (উদ্ধৃত); নিউলাইনগুলি স্ট্রিংগুলিতে অনুমোদিত হয়, এমনকি যখন সে বংশগত না হয়। দ্বিতীয় উপাদানটি মুভি কমান্ডযুক্ত একটি স্ট্রিং।

সেই অ্যারে নির্বাচনের ফলাফলটি কার্যকর করতে হবে Invoke-Expression( iex) এ পাইপযুক্ত । এটি প্রয়োজনীয় কারণ আমি অ্যারেতে আসল মুভি কমান্ডটি রেখেছি, এটি নির্ধারিত হয় না তা যাই হোক না কেন (অ্যারেটি তৈরি করা), যা উদ্দেশ্যকে পরাভূত করে।


2
এটি টিআইওতে কাজ না করার একমাত্র কারণ হ'ল স্ক্রিপ্টটি বলা হয় .code.tio.ps1, না b.ps1এটি কাজ করে। যদিও STDOUT এ কিছু বিপথগামী আউটপুট রয়েছে বলে মনে হচ্ছে। কি কারণ নিশ্চিত না।
ডেনিস

চমৎকার! বিপথগামী আউটপুটটি ছিল gci, আমার পরীক্ষার ডিরেক্টরিগুলি এটি প্রদর্শিত হয়নি কারণ তাদের কোনও শিশু আইটেম নেই, সুতরাং এটি সেই ত্রুটিটি প্রকাশ করে। এটি এখন আউটপুট বরাদ্দ করে ঠিক করা হয়েছে। ধন্যবাদ @ ডেনিস!
ব্রিটিশবাদী

আমি মনে করিlsgci
ডকুড্রিয়াভসেভ

1
@ ওয়াট দুহ, এটা নিশ্চিত! আমি lsসমস্ত সময় এবং তারপর গল্ফিং এ আমি এটি ভুলে যাওয়ার প্রবণতা ব্যবহার করি। ধন্যবাদ.
ব্রিটিশবাদী

খুশী হলাম। আমার মনে হয় আমি এখানে প্রথমবারের মতো $?গল্ফ ব্যবহার করতে দেখলাম ।
অ্যাডমবর্কবার্ক

5

অক্টাভ, 60 57 52 বাইট

8 স্টেটিকে 8 টি বাইট সংরক্ষণ করা হয়েছে thanks

if~movefile('f.m',input(''))disp("+-+\n| |\n+-+")end

এটি একটি স্ক্রিপ্ট যা ডাকা একটি ফাইলের মধ্যে বাস করে f.m। রান করার সময় এটি ব্যবহারকারীকে ফোল্ডারে ফাইলটি স্থানান্তরিত করার অনুরোধ জানাবে। ফোল্ডারের অস্তিত্ব নেই যদি পদক্ষেপ অপারেশন ব্যর্থ হয়, তারপর movefileআয় false(অথবা 0) অন্যথায় এটি ফেরৎ true(অথবা 1)। যদি এটি হয় তবে falseআমরা স্ট্রিংটি প্রদর্শন করি "+-+\n| |\n+-+"



4

ব্যাচ, 80 বাইট

@if not "%1"=="" move %0 %1\>nul 2>nul&&%1\%~nx0||(echo +-+&echo ^| ^|&echo +-+)

আপনি যদি ব্যাচ ফাইলটি চলমান হিসাবে সরান তবে ব্যাচ এটি পছন্দ করে না, তাই অনুরোধ করে %1\%~nx0(যা ব্যাচের ফাইলের নতুন নাম) ব্যাচটি পুরানো ব্যাচের ফাইলটি সন্ধান বন্ধ করে দেয়।


4

বাশ + কোর্টিলস, 54 বাইট

if [ -d $1 ];then mv $0 $1;else echo "+-+
| |
+-+";fi

যথেষ্ট সহজ। এটি প্রথম পরীক্ষার যুক্তি উপস্থিত রয়েছে কিনা তা দেখার জন্য এটি একটি পরীক্ষা করে, যদি এটি উপস্থিত থাকে তবে প্রোগ্রামটি নিজেকে যুক্তির মধ্যে সরিয়ে দেয়, অন্যথায় স্কোয়ারটি মুদ্রণ করে।

উইন্ডোজে কাজ করে না, তবে এটি উইন্ডোজ / ডাব্লুএসএল-তে উবুন্টুতে বাশ-এ কাজ করে। কোনও ড্রাইভ লেটার নেয় না, তবে আমি মনে করি এটি ঠিক আছে বলে পরিষ্কার করা হয়েছে।

এই অ্যাকাউন্টটির মালিকানা মেন্ডেলিভ।


আমার মনে হয় আপনার এমন দরকার echo -nযাতে আপনি কোনও পেছনের নতুন লাইন মুদ্রণ না করে।
মিচেল স্পেক্টর

1

পাইথন 3, 71 বাইট

from shutil import*
try:move('f',input())
except:print("+-+\n| |\n+-+")

এটি অবশ্যই নামের একটি ফাইলে থাকতে হবে f

মোটামুটি সহজ। এটি এসটিডিআইএন-এ যে কোনও ডিরেক্টরি এতে দেওয়া হয় সেটিতে নিজেকে স্থানান্তরিত করার চেষ্টা করে এবং যদি কোনও ত্রুটি দেখা দেয় তবে এটি বাক্সটি মুদ্রণ করে।


0

সি 137 বাইট

#include<dirent.h> g(char *f,char *z){DIR* d=opendir(z);if(d){strcat(z,f);rename(f,z);}else{puts("+-+");puts("| |");puts("+-+");}}

অবরুদ্ধ সংস্করণ:

#include<dirent.h> 
g(char *f,char *z)
{ 
  DIR* d=opendir(z);
  if(d)
  {
    strcat(z,f);
    rename(f,z);
  }
  else
  {
    puts("+-+");
    puts("| |");
    puts("+-+");
  }
}

fফাইলের নাম zগ্রহণ করে এবং ডিরেক্টরি নামটি গ্রহণ করে। গন্তব্যস্থান স্ট্রিং এর একটি সংযুক্তকরণের হয় zএবং frename()ফাইলটি নতুন জায়গায় সরাতে ব্যবহৃত হয়।

main()ভালো দেখাবে:

int main(int argc, char *argv[])
{
    g(argv[0]+2,argv[1]); // 1st arg is the Destination string
    return 0;
},

অবশ্যই কোনওভাবে সংক্ষিপ্ত করা যায়!


0

রুবি, 58 + 12 = 70 বাইট

পতাকা ব্যবহার করে -nrfileutils। ইনপুটটি একটি ফাইল ডাব্লু / ও নিউলাইন থেকে এসটিডিএন-এ পাইপ করা হয়।

FileUtils.mv$0,File.exist?($_)&&$_ rescue$><<"+-+
| |
+-+"

0

মাইনক্রাফ্ট কম্পিউটারক্রাফ্ট লুয়া , 74 বাইট

if fs.isDir(...)then fs.move("f",... .."f")else print("+-+\n| |\n+-+")end

ফাইলের নামটি "চ" হিসাবে হার্ড-কোডড। এটি একটি গেমের কম্পিউটারে চলে এবং সেই কম্পিউটারের ডিরেক্টরি কাঠামোর সাথে চালিত হয়। সিসি লুয়ার বিল্টিন fsএপিআই ব্যবহার করে ।

Ungolfed:

local tArgs = { ... }      -- '...' is Lua's vararg syntax, similar to python's *args syntax
if fs.isDir(tArgs[1]) then -- Using '...' is like passing all args separately, extra args are usually ignored
    fs.move("file", tArgs[1] .. "file") -- '..' is Lua's string concatenation syntax
else
    print("+-+\n| |\n+-+") -- print the required output if the directory doesn't exist
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.