এমন একটি প্রোগ্রাম লিখুন যা এর উত্স ফাইলটির নামকে উল্টে দেয়


27

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

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

প্রোগ্রামটি আবার চালানোর সাথে সাথে নামটি উল্টো করা উচিত। প্রকৃতপক্ষে, প্রোগ্রামটি বেশ কয়েকবার নির্বিচারে চালাতে সক্ষম হওয়া উচিত।

এই চ্যালেঞ্জের উদ্দেশ্যে:

  • আপনি ধরে নিতে পারেন ফাইলের নামগুলি সর্বদা 1 থেকে 127 টি অক্ষরের মধ্যে ছোট হাতের অক্ষর (এজে) এর স্ট্রিং থাকে। (যদি আপনার ভাষাতে ফাইল চালানোর জন্য ফাইলের প্রয়োজন হয় তবে এক্সটেনশানের আগে অংশটি বিপরীত করুন, যেমন mycode.batedocym.bat।)
  • আপনি ধরে নিতে পারেন কোড ফাইলটি নিজেই একটি ডিরেক্টরিতে রয়েছে সুতরাং এতে নামকরণের বিরোধ থাকবে না (নিজের সাথে বাদ দিয়ে)।
  • আপনি ধরে নিতে পারবেন না যে ফাইলের নামটি প্যালিনড্রোম নয়, অর্থাৎ বিপরীত অবস্থায় একই। প্যালিনড্রোমযুক্ত ফাইলের নামগুলি যেমন ঠিক না তেমনি কাজ করা উচিত work
  • আপনি আপনার ফাইলের সামগ্রী বা মেটাডেটা পড়তে পারেন। এখানে কোনও বাধা নেই।
  • আপনি ধরে নিতে পারেন যে আপনার প্রোগ্রামটি একটি বিশেষ, আধুনিক, সাধারণ পর্বের অপারেটিং সিস্টেমে চালিত হবে (যেমন উইন্ডোজ / লিনাক্স), যেহেতু সমস্ত শেলের একই কমান্ড সেট নেই।

একটি কংক্রিট উদাহরণ হিসাবে, বলুন যে আপনার mycodeনিজের ডিরেক্টরিতে ডাকা একটি ফাইলে পাইথন প্রোগ্রাম রয়েছে । চলমান

python mycode

টার্মিনালে ফাইলের নামটি বিপরীত হওয়া উচিত edocym। ফাইলটি edocymতার ডিরেক্টরিতে একা থাকা উচিত - নামযুক্ত কোনও ফাইলের mycodeআর উপস্থিতি নেই। চলমান

python edocym

নামটি আবার ফিরিয়ে দেবে mycode, এমন সময়ে প্রক্রিয়াটি অনির্দিষ্টকালের জন্য পুনরাবৃত্তি হতে পারে।

যদি একই পাইথন ফাইলটির নাম racecarপরিবর্তন করা হয় (কোড পরিবর্তন না করে) এবং তখন চালানো হবে

python racecar

"রেসকার" একটি প্যালিনড্রোম হওয়ায় দৃশ্যমানভাবে কোনও কিছুই পরিবর্তন করা উচিত নয়। একই যায় ফাইলের নাম ছিল বলুন, aবা xx

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


বর্তমানের ওয়ার্কিং ডিরেক্টরি কী গুরুত্বপূর্ণ?
ব্র্যাড গিলবার্ট 2

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

6
আমরা যদি একটি সংকলিত ভাষা ব্যবহার করি? এক্সিকিউটেবল কীভাবে আপনার বিধিগুলিকে প্রভাবিত করে?
এমবিলেম

'কোন ইনপুট গ্রহণ করে এবং আউটপুট উত্পাদন করে না' তা স্পষ্ট করার জন্য অনুরোধ। প্রযুক্তিগতভাবে, ফাইলটির নাম একটি ইনপুট যা অবশ্যই ফাইল সিস্টেম থেকে পুনরুদ্ধার করা উচিত এবং পরিবর্তিত নামটি অবশ্যই ফাইল সিস্টেমে প্রেরণ করতে হবে। এগুলি ইনপুট এবং আউটপুট। এটি উল্লেখ করা সার্থক হতে পারে যে অন্য কোনও আউটপুট অনুমোদিত নয়।
atk

অতিরিক্তভাবে, আপনি কি শিশু প্রক্রিয়াগুলি ব্যবহারকে ইনপুট / আউটপুট নিয়মের লঙ্ঘন হিসাবে বিবেচনা করেন? তা হল, নামটি উল্টানোর মতো কাজের অংশটি সম্পাদনের জন্য একটি পৃথক প্রক্রিয়া কল করার জন্য অন্য প্রক্রিয়াটির নাম প্রেরণ করা প্রয়োজন (আপনার কোড এবং অ্যাপ্লিকেশনটিতে ইনপুট) আদানপ্রদানের প্রক্রিয়া থেকে প্রক্রিয়াটির মান (প্রক্রিয়াটির আউটপুট) প্রাপ্ত করা দরকার এবং অ্যাপ্লিকেশন ইনপুট)।
atk

উত্তর:


41

বাশ + সাধারণ লিনাক্স ইউটিস, 13 বাইট

আমার পদ্ধতিটি @ ডিজিটালট্রামার মতো তবে পাইপের কারণে কিছুটা খাটো ls:

mv * `ls|rev`

ওহ খুব ভালো.
ডিজিটাল ট্রমা

20
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি একটি খুব সুন্দর প্রথম উত্তর। :)
অ্যালেক্স এ।

1
ডিরেক্টরিতে অন্য কোনও ফাইল না থাকলে কেবল কাজ করে।
ডাব্লুগ্রোলাও

1
@ ডাব্লুগ্রোলাও এবং& টেরডন: আপনার উভয় মতামতই সঠিক তবে প্রশ্ন ইতিমধ্যে সেই দুটি অনুমানকে পরিচালনা করে।
জুলি পেলেটিয়ার

@ জুলি পেলেটিয়ার আহ, হ্যাঁ, আপনি ঠিক বলেছেন। আমি মিস করেছি যে ফাইলের নামগুলিতে কেবল ছোট হাতের অক্ষর থাকতে পারে।
টেরডন

14

সি #, 153 বাইট

void f(){var x=System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;File.Move(x,new string(x.Reverse().ToArray()).Substring(4)+".exe");}

ওও দুর্দান্ত এবং যতক্ষণ না আপনি একটি ভেরিয়েবল সংজ্ঞায়িত করেছেন:

System.Reflection.Assembly.GetExecutingAssembly ()। ManifestModule.Name

ঠিক মানে


12

বাশ + সাধারণ লিনাক্স ইউটিস, 15

  • @ ডেনিসকে ধন্যবাদ 1 বাইট সংরক্ষিত

ধরে নেওয়া যায় যে স্ক্রিপ্টটি নিজেই একটি ডিরেক্টরিতে রয়েছে।

mv * `rev<<<$0`

6
আপনি ধরে নিতে পারেন কোড ফাইলটি নিজেই একটি ডিরেক্টরিতে রয়েছে , তাই $0এটি দিয়ে প্রতিস্থাপন করা যেতে পারে *
ডেনিস

দুঃখিত তবে আপনার আপডেটে একটি ছোট বাগ আছে এবং এটি এখনকার মতো কাজ করে না। সবচেয়ে সহজ ফিক্সটি হ'ল $0শেষের পরিবর্তে আপনার যা ছিল তার কাছাকাছি ফিরে যাওয়া *
জুলি পেলেটিয়ার

@ জুলিপেল্টিয়ের মনে হয়েছিল আমি চেষ্টা করার আগে এটি কাজ করেছিল, তবে হ্যাঁ, আপনি ঠিক বলেছেন - * গ্লোব্বিং বিস্তৃতি কোনওটির ডানদিকে হয় না <<<
ডিজিটাল ট্রমা

7

জুলিয়া, 51 বাইট

d,f=splitdir(@__FILE__)
cd(d)do
mv(f,reverse(f))end

এই প্রোগ্রামটি অপারেটিং সিস্টেম অজোনস্টিক হওয়া উচিত, যদিও এটি কেবল ওএস এক্সে পরীক্ষা করা হয়েছিল though

Ungolfed:

# Get the directory and file name of the current source file
d, f = splitdir(@__FILE__)

# Change the working directory temporarily to d
cd(d) do
    # Overwrite the file with the reverse of its name
    mv(f, reverse(f))
end

8
অভিনন্দন! 20k !!!
লুইস মেন্ডো

বেশিরভাগ উত্তরগুলি ধরেই মনে হচ্ছে যে ফাইলটি বর্তমান ডিরেক্টরিতে রয়েছে তাই আমার মনে হয় না আপনার প্রয়োজন হবে cd। এই ক্ষেত্রে f=readdir()[]এমনকি আরও খাটো হবে।
ডেনিস

6

ম্যাটল্যাব, 50 46 বাইট

e='.m';x=mfilename;movefile([x e],[flip(x) e])

4 বাইট অপসারণ এবং পরীক্ষার জন্য সুয়েভারকে ধন্যবাদ!

ওএস এক্স এল ক্যাপিটান এবং ডেবিয়ান জেসি, উভয়ই মতলব সংস্করণ আর ২০১৪ এ'র সাথে পরীক্ষিত।

উইন্ডোজ যখন ফাইলটি ব্যবহৃত হচ্ছে তখন ফাইলের নাম পরিবর্তন করতে একটি পতাকা 'f'প্রয়োজন ( e='.m';x=mfilename;movefile([x e],[flip(x) e]),'f')।

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

e='.m';                       % Store file extension '.m' in variable `e`
x=mfilename;                  % Get name of file being run, without the extension
movefile([x e],[flip(x) e])   % Move (rename) file. `flip` is used for reversing the
                              % name without extension. [...] is (string) concatenation

আপনি যে ওএসের 'f'প্রয়োজনীয় তা প্রয়োজনীয়?
স্যুভার

উইন্ডোজ ম্যাকের দরকার নেই?
লুইস মেন্ডো

লিনাক্সের ম্যাকের প্রয়োজন নেই বলে মনে হয়।
সোয়েভার

@ তবুও ধন্যবাদ! 4 বাইট বন্ধ :-)
লুইস মেন্ডো

@ স্যুভার আপনি কী ওএসটি কাজ করে তা নির্দেশ করতে পারবেন?
লুইস মেন্ডো

4

রুবি, 24 বাইট

File.rename$0,$0.reverse

মোটামুটি স্ব-ব্যাখ্যামূলক। ( $0ফাইলটি কার্যকর করা হচ্ছে তার নাম))

ruby whateverযে ডিরেক্টরিটিতে ফাইল রয়েছে তার একটি ওয়ার্কিং ডিরেক্টরি দিয়ে চালান ।


4

ব্যাচ, 109 বাইট

@echo off
set f=%0
set r=
:l
set r=%f:~0,1%%r%
set f=%f:~1%
if not .%f%==. goto l
ren %0.bat %r%.bat

নোট 1: ব্যাচ ফাইলগুলি অবশ্যই শেষ হওয়া উচিত .bat; ধারণা করা হয় যে ব্যাচ ফাইলটি তার নামে এক্সটেনশন ছাড়াই কার্যকর করা হয়েছে এবং এটির .batবিপরীত হওয়া উচিত নয়। উদাহরণস্বরূপ, reverseনামান্তর করতে চেষ্টা করবে reverse.batকরার esrever.bat
দ্রষ্টব্য 2: CMD.EXEব্যাচ ফাইলটির নাম পরিবর্তন করার পরে ত্রুটিগুলি আউট। ( COMMAND.COMএটি প্রথম স্থানে স্ট্রিং ম্যানিপুলেশনের জন্য অক্ষম ব্যতীত না))

সম্পাদনা করুন: ফাইলের নাম বর্ণমালা (@ সিও'ব'র মন্তব্যের ভিত্তিতে) এই গ্যারান্টিটি ব্যবহার করে 2 বাইট সংরক্ষণ করা হয়েছে।


3
1. আপনি কেন চলাফেরা করছেন? ২. আমি মনে করি আপনি এটি করে একটি বাইট সংরক্ষণ করতে পারেনif ]%f% NEQ ] goto l
কনর ও'ব্রায়ান

@ সিও'বাʀɪᴇɴ হ্যাঁ, ফাইলটির নাম বর্ণানুক্রমিক, তাই আমি আসলে 2 বাইট সংরক্ষণ করতে পারি, তবে ইঙ্গিতটির জন্য ধন্যবাদ।
নীল

1
আপনি ব্যাচটি চালু রাখার দরকার নেই আপনি অবিলম্বে একে একে ছোট্ট -80
বিড়াল

4

সি, 102 বাইট

main(c,v)char**v;{char*b=strdup(*v),*n=strrchr(*v,47),*t=strchr(b,0);for(;*++n;*--t=*n);rename(*v,b);}

ভাঙ্গন:

                            // No #include lines required (for GCC at least)
main(c,v)char**v;{          // K&R style function to save 2 bytes
    char*b=strdup(*v),      // Duplicate args[0] (script path)
        *n=strrchr(*v,47),  // Find last "/" in input
        *t=strchr(b,0);     // Go to end of output string
    for(;*++n;*--t=*n);     // Reverse input into output character-by-character
    rename(*v,b);           // Rename the file
}                           // Implicit return 0

অবশেষে একটি চ্যালেঞ্জ যেখানে সি নয় (বেশ হতাশার সাথে) অপ্রতিরোধ্য!


যদি আমরা "শেলটির কার্যকরী ডিরেক্টরিটি ফাইলটিতে থাকা ফোল্ডারটি অনুমান করতে পারি" গ্রহণ করি তবে এর অর্থ হ'ল প্রোগ্রামটি সর্বদা হিসাবে ডাকা হবে ./myexecutable, আমরা 10 টি অক্ষর সংরক্ষণ করতে সহজ *n=strrchr(*v,47)করতে পারি *n=*v+1, তবে এটি সম্পূর্ণ বৈধ নয় ( এটি ././myexecutableউদাহরণস্বরূপ বলা যেতে পারে )।


এছাড়াও আপনি ইন-বিচক্ষণতা একটি ফাইল এক্সটেনশন (যেমন ".out") রাখতে চান তাহলে, আপনি পরিবর্তন করতে পারেন *t=strchr(b,0)থেকে *t=strrchr(b,46), 2 বাইট খোয়াতে। যদিও প্রয়োজন হয় না।


ভাল - আমি কখনই renamesrc == ভাগ করে কি করে তা দেখার চেষ্টা করিনি ; দেখা যাচ্ছে আপনি বিনামূল্যে প্যালিনড্রোম সীমাবদ্ধ করেছেন।
টবি স্পিড

মনে রাখবেন এর জন্য একটি ফাইল সিস্টেমের প্রয়োজন যেখানে কোডেপয়েন্ট 47 বিভাজক। আমি মনে করি এটিতে পসিকস অন্তর্ভুক্ত রয়েছে (বা এটি কোনও /কোণায় ইবিসিডিককে অনুমতি দেয় ?)
টবি স্পাইট

@ টবিস্পাইট হ্যাঁ আমি কিছু স্পষ্টতার জন্য gnu.org/software/libc/manual/html_node/Renaming-Files.html পরীক্ষা করেছি , তবে আমার নিকটস্থ পাওয়া গেছে "পুনরায় নামকরণের জন্য একটি বিশেষ ক্ষেত্রে হ'ল পুরাতন নাম এবং নতুন নাম একই ফাইলের জন্য দুটি নাম "এই কেসটি হ্যান্ডেল করার ধারাবাহিক উপায় হ'ল পুরাতন নাম মুছুন However তবে, এই ক্ষেত্রে পসিক্সের প্রয়োজন হয় যে নামটি পুনরায় নামকরণ করা এবং সাফল্যের প্রতিবেদন করা inc যা বেমানান। আপনার অপারেটিং সিস্টেমটি কী করবে তা আমরা জানি না" ", সুতরাং আমি অনুমান করি সেখানে আছে বাইরের সুযোগ এটি নন-পসিক্স অনুবর্তী সিস্টেমগুলিতে কেবল ফাইলটি মুছবে। হ্যাঁ, বাস্তব কোডটি চেক করা উচিত!
ডেভ

আমি কেবল লিনাক্স.ডি.এইএন.এইচ.মান / ৩ / গ্রামীণনামটি পরীক্ষা করেছি এবং এটি নিশ্চিত করে যে লিনাক্স এটি পসিক্স সামঞ্জস্যভাবে পরিচালনা করে: "যদি পুরানো যুক্তি এবং একই বিদ্যমান ফাইলটিতে নতুন যুক্তি সংশোধন করে তবে নামকরণ () সফলভাবে ফিরে আসবে এবং অন্য কোনও সম্পাদন করবে না কর্ম."
ডেভ

আমি দেবিয়ান ম্যানপেজটি নিয়ে যাচ্ছিলাম: "যদি একই ফাইলকে উল্লেখ করে হার্ড লিঙ্কগুলি বিদ্যমান থাকে oldpathএবং কিছু না করে এবং একটি সাফল্যের স্থিতি ফিরিয়ে দেয়"newpathrename() - যদি স্ট্রিংগুলি অভিন্ন হয় তবে তারা একই ফাইলটি উল্লেখ করে।
টবি স্পাইট

3

Vitsy + * sh, 15 বাইট

iG:`?r.iG' mr',

ব্যাখ্যা

iG:`?r.iG' mr',
i               Push -1 to the stack. (this assumes that no arguments are passed)
 G              Get the use name of the class specified by the top item of the
                stack. (-1 refers to the origin class, so this class)
  :             Duplicate stack and jump to it.
   `            Read a file with the current stack as its name, replacing the stack
                with the file's contents.
    ?           Shift one stack to the right.
     r          Reverse the current stack.
      .         Write a file with the name specified by the top stack and the
                contents as the second-to-top stack.
       iG       Get the name of the current class again.
         ' mr'  Push 'rm ' to the stack.
              , Execute the current stack as a command.

নোট করুন যে এই জমাটি অবশ্যই ভিট্টির নিরাপদ সংস্করণ ব্যবহার করবে (এটি অনলাইনে চেষ্টা করে করা যায় না!)


3

পার্ল 5, 18 বাইট

কিছুটা রুবির মতো (রান perl nameofscript):

rename$0,reverse$0

একাউন্টে সম্ভাব্য পথ অবলম্বন করা খারাপ (47 বাইট)

($a,$b)=$0=~/(.*\/)?(.*)/;rename$0,$a.reverse$b

1
হ্যালো, এবং পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত প্রথম পোস্ট!
নন ইনিহিরে

2

ভি , 29 26 বাইট

:se ri
izyw:!mv z "
dd

যেহেতু এতে অপ্রিন্টেবল রয়েছে, তাই এখানে একটি হেক্স ডাম্প রয়েছে:

00000000: 3a73 6520 7269 0a69 127a 1b79 773a 216d  :se ri.i.z.yw:!m
00000010: 7620 127a 2012 220a 6464                 v .z .".dd

দ্রষ্টব্য: টিআইও ফাইল অ্যাক্সেসের অনুমতি দেয় না বলে এটি v.tryitonline.net এ চলবে না।

ব্যাখ্যা:

:se ri            "Turn on 'reverse mode' (all text is inserted backwards)
i<C-r>z<esc>      "Enter the path to the file in reverse
yw                "Yank a word. This first word is the name we will save the new file as

"Run an "mv" in the terminal with the contents of register 'z' (the path to the file)
"And the contents of register '"' (the word we yanked)
:!mv <C-r>z <C-r>"

dd                "Delete a line so that we don't have any text printed.

2

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

import os;a=__file__.split('\\')[::-1][0].split('.');os.rename('.'.join(a),'.'.join([a[0][::-1],a[1]]))

-আলেক্স.এ 1 বাইট সরিয়েছে

-ডিজিটাল ট্রমা আমাকে os.rename () দেখায় যা 62 বাইট নিয়ে গেছে।

-মদ্দিফিশ 7 বাইট সরিয়েছে।


আমার মনে হয় আপনি কমার পরে জায়গা সরিয়ে একটি বাইট সংরক্ষণ করতে পারবেনimport
অ্যালেক্স উ:

import os,sys;f=sys.argv[0];os.rename(f,f[::-1])48 বাইটের জন্য কৌশলটি করা উচিত
ডিজিটাল ট্রমা

f [:: - 1] করা কেবল ফাইলের নামই নয়, পুরো পথটিকেই উল্টে দেয়। যাইহোক, আমাকে os.rename () বৈশিষ্ট্যটির সাথে পরিচয় করিয়ে দেওয়ার জন্য ধন্যবাদ।
ম্যাজেন্টা

@ ম্যাজেন্টা আমার জন্য, sys.argv[0]যখন স্ক্রিপ্টটি সরাসরি নিজের মধ্যে চালিত হয় কেবল তখনই কেবল ফাইল নামটি দেয় । হেলকা ইঙ্গিত করেছে এটি ঠিক আছে
ডিজিটাল ট্রমা

@ ডিজিটাল ট্রামুমা যখন আমি নিজে থেকে প্রোগ্রামটি চালাতাম, sys.arg [0] পুরো পথটি ফিরে আসল। আমি একটি দ্বিতীয় সমাধান যুক্ত করব যেখানে sys.argv [0] কেবলমাত্র ফাইলের নাম।
ম্যাজেন্টা

2

পিএইচপি, 84, 70, 54 বাইট

rename($f=__FILE__,strrev(basename($f,$e='.php')).$e);


সম্পাদনা:insertusernamehere মন্তব্যগুলিতে ধন্যবাদ 14 বাইট সরানো হয়েছে
সম্পাদনা:Martijn মন্তব্যগুলিতে ধন্যবাদ 16 বাইট সরানো হয়েছে


2
আপনি এটিকে নিচে পেতে পারেন 70 বাইট : rename($f=__FILE__,__DIR__."/".strrev(pathinfo($f)[filename]).".php");
সন্নিবেশকারী নাম

Excelent !!! তবে আপনার কোডটি আরও ভাল, বাহ আপনি 31 বাইট পেয়েছেন
tttony

আপনি কি এটি আপেক্ষিক করতে পারবেন না? ওয়াল্ড 7 বাইট সংরক্ষণ করুন:rename($f=__FILE__,"./".strrev(pathinfo($f)[filename]).".php");
মার্টিজন

বা আরও ছোট:rename(__FILE__,strrev(basename(__FILE__,'.php')).'.php');
মার্টিজন

শান্ত! ওয়ার যোগ করার সাথে সাথে আমি এখন পেয়েছি 54 বাইট
tttony

2

পাওয়ারশেল, 39 বাইট

mi *(-join((ls).name)[-5..-999]+'.ps1')

হাই, এবং পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
Rɪᴋᴇʀ

2

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

import os;s=__file__;os.rename(s,s[::-1])

বাশ অন ডেমো।

পাইথন আসলেই ফাইল এক্সটেনশনের যত্ন নেয় না, তাই আমরা কেবলমাত্র পুরো ফাইলের নামটি ফ্লিপ করতে পারি।


1

পিএইচপি, 31 বাইট

অনুমান করার মতো খুব বেশি কিছুই আমার অনুমান:

rename($x=$argv[0],strrev($x));

1

পার্ল 6 ,  70   27 বাইট

এটি যদি অন্য কোনও কার্যক্ষম ডিরেক্টরিতে কাজ করার প্রয়োজন হয় তবে আপনার এই জাতীয় কিছু দরকার হবে:

$_=$*PROGRAM;.rename: .basename.flip.IO.absolute: .absolute.IO.dirname

যেহেতু ওয়ার্কিং ডিরেক্টরি প্রোগ্রাম হিসাবে একই ডিরেক্টরি হবে এটি কেবল সহজতে সহজ হতে পারে:

$_=$*PROGRAM;.rename: .flip

ব্যাখ্যা:

$_ = $*PROGRAM;  # IO::Path object

$_.rename:
    $_.basename
      .flip      # reverse characters
      .IO        # turn into an IO object (IO::Path)
      .absolute: # turn it into an absolute path Str in the following dir
        $_.absolute.IO.dirname

1

জাভাস্ক্রিপ্ট (নোড), 108 104 68 বাইট

36 বাইট সংরক্ষণ করা হয়েছে, ডাউনগোটকে ধন্যবাদ!

উইন্ডোজ সংস্করণ:

require("fs").rename(F=__filename,F.split(/.*\\|/).reverse().join``)

অন্যান্য সংস্করণ:

require("fs").rename(F=__filename,F.split(/.*\/|/).reverse().join``)

@ আপগোট আমার দরকার নেই, আমি ভাবি না। আমি jsএকটি চরিত্রের আগে ফাইলপথের শেষে মিলছি। এটি সর্বদা একটি হবে .
কনর ও'ব্রায়ান

1

জাভাস্ক্রিপ্ট ES6 (নোড.জেএস) 70 বাইট

না রেইজেক্স ইয়ে!

require("fs").rename(a=__filename,[...a].reverse().join``.split`/`[0])

কোন সাহায্য প্রশংসা করা হয়


1

পাওয়ারশেল v4 +, 68 বাইট

$a,$b=($c=(ls).Name)-split'\.';mv $c "$(-join($a[$a.length..0])).$b"

কেবলমাত্র কাজ করে কারণ স্ক্রিপ্টটি নিজে থেকেই কোনও ডিরেক্টরিতে থাকার গ্যারান্টিযুক্ত। একটি ls(উপাধিকারের জন্য Get-ChildItem) সম্পাদন করে এবং .Nameফলস্বরূপ বস্তুর (গুলি) নেয়। আমরা যে সংরক্ষণ $cএবং তারপর -splitআক্ষরিক সময়ের তে এটি ফাইলের নাম এবং এক্সটেনশন পেতে, এবং সেই সঞ্চয় করতে $aএবং $bযথাক্রমে।

পরবর্তী mv(জন্য ওরফে Move-Itemকমান্ড, যেখানে আমরা যাচ্ছি) $cথেকে $a(বিপরীত) .$b

উদাহরণ

PS C:\Tools\Scripts\golfing\reverse> ls

    Directory: C:\Tools\Scripts\golfing\reverse

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/13/2016   7:58 AM         88 reverse.ps1

PS C:\Tools\Scripts\golfing\reverse> .\reverse.ps1

PS C:\Tools\Scripts\golfing\reverse> ls

    Directory: C:\Tools\Scripts\golfing\reverse

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/13/2016   7:58 AM         88 esrever.ps1

1

পাইথন (2.7 বা 3.4+), 61 49 বাইট

আমি বিশ্বাস করি এটি সর্বোত্তম পাইথন সমাধানের কাছাকাছি:

import os;a=__file__;os.rename(a,a[-4::-1]+".py")

s4b3r6এর উত্তরে অনুপ্রাণিত হয়েছে , তবে তালিকার বিপরীতে __file__পরিবর্তনের পরিবর্তে তালিকাগুলি ব্যবহার করে এবং দু'বার ব্যবহার করার সময় বাইটগুলি সংরক্ষণ করতে ভেরিয়েবলে সংরক্ষণ করে।

দ্রষ্টব্য: এটি ধরে নেয় যে ফাইলের নামটি সর্বদা *.py। একটি সামান্য আরও জেনেরিক সমাধান যা যে কোনও দ্বি-চরিত্রের ফাইল এক্সটেনশন পরিচালনা করতে পারে তা হ'ল প্রতি 1 অতিরিক্ত বাইটের a[-3:]পরিবর্তে প্রতিস্থাপন করতে ".py"

আপডেট:a[-4::-1] ফাইল বিস্তৃতকরণের পরিবর্তে ফাইল এক্সটেনশন সরানোর জন্য তালিকা স্লাইসিং ট্রিকটি ব্যবহার করে 12 বাইট সংরক্ষণ করা হয়েছে এবং তারপরে বিপরীতে a.split(".")[0][::-1]


1

পাওয়ারশেল, 112 বাইট

আমি ইউনিক্স সেমিডসকে পরাজিত করতে যাচ্ছি না, মজা করার জন্য আমার দুটি পেন্স যুক্ত করছি :-)

gci * | % { $n=($_.basename[-1..-(($_.basename).length)] -join “”)+$_.Extension; mv -Path $_.Fullname -Dest $n }

পিপিসিজিতে আপনাকে স্বাগতম! আমাদের জবাবগুলি তাদের স্কোর প্রদর্শন করা প্রয়োজন, সুতরাং আমি এটি আপনার জন্য সম্পাদনা করেছি। এছাড়াও, আপনি আপনার কোডটি হাইলাইট করে এবং বন্ধনীগুলির মতো দেখতে এমন বোতামটি নির্বাচন করে {}বা আপনার কোডের আগে 4 টি স্পেস যুক্ত করে ফর্ম্যাট করতে পারেন ।
FryAmTheEggman

0

পাওয়ারশেল, 50 বাইট

mv *(-join($f=(ls).BaseName)[$f.Length..0]+'.ps1')

এখানে কেবল একটি ফাইল রয়েছে, সুতরাং mv *শেল ওয়াইল্ডকার্ডের কেবল একটি ফলাফল থাকবে। গন্তব্য নামটি (ls).basenameযা সমস্ত ফাইলের তালিকা করে ('dir' এর জন্য নাম), বেসনাম সম্পত্তিটির জন্য কল করে - এবং যেহেতু কেবল একটি ফাইল রয়েছে, পাওয়ারশেল 1-আইটেম অ্যারেটিকে একটি স্ট্রিংয়ে আনপ্যাক করবে। ফাইলের নামটি এতে সংরক্ষণ করুন $f, তারপরে এটি একটি কাউন্টডাউন এবং -joinবিপরীত অক্ষরগুলির সাথে একটি স্ট্রিংয়ে ফিরে আসুন index বাধ্যতামূলক .ps1প্রত্যয় যুক্ত করুন।



0

পাইথন 2.7, 68 বাইট

আমদানি করুন ওএস; এ = __ ফাইল __; ওএসআরনেম (ক, এ.স্প্লিট ("\\") [- 1] [: - 3] [:: - 1] + "। পিআই")

এটি সম্ভবত আমি এটি পেতে পারেন সেরা। আমি কেবল নিজেকে ভুল প্রমাণ করেছি।


0

পাইথন (2 এবং 3), 88 78 বাইট

import os;os.rename(__file__,''.join(reversed(__file__.split(".")[0]))+".py"))

ফাইলটির নাম sys.argv দ্বারা প্রদত্ত (ওপেনিংয়ে ডিরেক্টরি হিসাবে ফাইলটি ফোল্ডারে থাকা ডিরেক্টরি হিসাবে কাজ করে) এবং os.rename ব্যবহার করে তা প্রমাণ করে। বিরক্তিকরভাবে, বিপরীতগুলি একটি পুনরাবৃত্তিকে দেয়, সুতরাং আমাদের যোগদান ব্যবহার করতে হবে।

সম্পাদনা: @ ডিজিটাল ট্রুমায় @ মুডিফিশের পরামর্শ অনুসারে, sys.argv [0] এর পরিবর্তে __file__ ব্যবহার করে 10 বাইট সংরক্ষণ করা হয়েছে।



0

ভিজ্যুয়াল বেসিক স্ক্রিপ্ট, 44 বাইট

WScript.Echo(StrReverse(WScript.ScriptName))

ফাইলের জন্য উদাহরণস্বরূপ আউটপুট reverse.vbs(সিএসক্রিপ্ট সহ রান করুন):

sbv.esrever


0

স্মাইলব্যাসিক 60 বাইট

P$=PRGNAME$()FOR I=1-LEN(P$)TO.Q$=Q$+P$[-I]NEXT
RENAME P$,Q$

বিকল্প:

P$=PRGNAME$()T$=P$*1WHILE""<T$Q$=Q$+POP(T$)WEND
RENAME P$,Q$
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.