एक प्रोग्राम लिखें जो अपनी स्रोत फ़ाइल के नाम को उलट देता है


27

किसी एकल फ़ाइल में, एक प्रोग्राम लिखें जिसके लिए किसी इनपुट की आवश्यकता नहीं है और कोई आउटपुट नहीं देता है। जब इसे चलाया जाता है, तो इसे उस फ़ाइल के नाम को उलट देना चाहिए , जिसमें कोड का फेरबदल किए बिना या अन्य साइड इफेक्ट्स पैदा किए बिना, नाम चाहे जो भी हो

इसे प्राप्त करने का कोई भी तरीका ठीक है। यह केवल मायने रखता है कि एक बार प्रोग्राम चलाने के बाद एकमात्र स्थायी परिवर्तन यह है कि इसका फ़ाइल नाम उल्टा हो गया है। उदाहरण के लिए कोई नई फ़ाइल निर्देशिका में नहीं होनी चाहिए।

प्रोग्राम को फिर से चलाना नाम वापस लेना चाहिए। वास्तव में, कार्यक्रम को कई बार मनमाने ढंग से चलाने में सक्षम होना चाहिए।

इस चुनौती के प्रयोजनों के लिए:

  • आप मान सकते हैं कि फ़ाइल नाम हमेशा 1 और 127 अक्षरों के बीच लंबे अक्षरों (az) के तार होते हैं। (यदि आपकी भाषा में फ़ाइलों को चलाने के लिए एक्सटेंशन की आवश्यकता है, तो एक्सटेंशन से पहले वाले हिस्से को उलट दें, जैसे mycode.batedocym.bat)।
  • आप मान सकते हैं कि कोड फ़ाइल एक निर्देशिका में ही है इसलिए इसका नामकरण संघर्ष (स्वयं को छोड़कर) नहीं होगा।
  • आप यह नहीं मान सकते हैं कि फ़ाइल नाम पलिंड्रोम नहीं है, अर्थात उलट होने पर समान। फिलिनाम जो पलिंड्रोम हैं, उन्हें काम करना चाहिए और साथ ही साथ ऐसा नहीं करना चाहिए।
  • आप अपनी फ़ाइल की सामग्री या मेटाडेटा पढ़ सकते हैं। कोई हैं यहाँ प्रतिबंध।
  • आप मान सकते हैं कि आपका कार्यक्रम एक विशेष, आधुनिक, सामान्य ऑपरेटिंग सिस्टम (जैसे विंडोज / लिनक्स) पर चलाया जाएगा, क्योंकि सभी शेल में एक ही कमांड सेट नहीं है।

एक ठोस उदाहरण के रूप में, मान लें कि आपके पास mycodeअपनी निर्देशिका में एक फ़ाइल में पायथन कार्यक्रम है । चल रहा है

python mycode

टर्मिनल में फ़ाइल नाम के विपरीत परिणाम होना चाहिए edocym। फ़ाइल edocymअपनी निर्देशिका में अकेली होनी चाहिए - नाम की कोई फ़ाइल mycodeअब मौजूद नहीं होनी चाहिए। चल रहा है

python edocym

नाम को वापस mycodeउसी बिंदु पर ले जाएगा , जिस बिंदु पर प्रक्रिया को अनिश्चित काल तक दोहराया जा सकता है।

यदि एक ही पायथन फ़ाइल का नाम बदला गया racecar(कोड को बदले बिना) और फिर चलाएं

python racecar

"रेसकार" एक पलिंड्रोम है क्योंकि कुछ भी नहीं बदलना चाहिए। अगर फिल्म का नाम, कहें, aया था, तो वही जाता है xx

बाइट्स में सबसे छोटा कोड जीतता है। टाईब्रेकर उच्च मतदान वाला उत्तर है।


क्या वर्तमान कार्यशील निर्देशिका मायने रखती है?
ब्रैड गिलबर्ट ने

@ BradGilbertb2gills आपको प्रोग्राम के साथ फ़ोल्डर को कहीं और कॉपी करने में सक्षम होना चाहिए और फिर भी यह काम करना चाहिए (यह मानते हुए कि आपके पास अनुमति और व्हाट्सएप है)। आप मान सकते हैं कि शेल की वर्किंग डायरेक्टरी उस फाइल का फोल्डर होगा जिसमें फ़ाइल है।
केल्विन के

6
यदि हम संकलित भाषा का उपयोग कर रहे हैं तो क्या होगा? निष्पादन योग्य आपके नियमों को कैसे प्रभावित करता है?
EMBLEM

'कोई इनपुट स्वीकार नहीं करता है और कोई आउटपुट नहीं देता' को स्पष्ट करने का अनुरोध करता है। तकनीकी रूप से, फ़ाइल का नाम एक इनपुट है जिसे फ़ाइल सिस्टम से पुनर्प्राप्त किया जाना चाहिए और परिवर्तित नाम फ़ाइल सिस्टम में भेजा जाना चाहिए। ये इनपुट और आउटपुट हैं। यह निर्दिष्ट करने के लिए सार्थक हो सकता है कि किसी अन्य आउटपुट की अनुमति नहीं है।
ATK

इसके अतिरिक्त, क्या आप इनपुट / आउटपुट नियमों के उल्लंघन के लिए बाल प्रक्रियाओं के उपयोग पर विचार करते हैं? अर्थात्, कार्य के भाग को करने के लिए एक अलग प्रक्रिया को कॉल करना, जैसे नाम को उलटना, अन्य प्रक्रिया को नाम भेजने की आवश्यकता होगी (आपके कोड से आउटपुट और ऐप से इनपुट) और प्रक्रिया से मूल्य प्राप्त करें (प्रक्रिया का आउटपुट और अनुप्रयोग के लिए इनपुट)।
ATK

जवाबों:


41

बैश + आम linux बर्तन, 13 बाइट्स

मेरा तरीका @ DigitalTrauma के समान है लेकिन पाइप के कारण थोड़ा छोटा है ls:

mv * `ls|rev`

ओह बहुत अच्छा।
डिजिटल ट्रॉमा

20
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यह एक बहुत अच्छा पहला जवाब है। :)
एलेक्स ए।

1
निर्देशिका में कोई अन्य फ़ाइल नहीं होने पर ही काम करता है।
WGroleau

1
@WGroleau && terdon: आपकी दोनों टिप्पणियां सही हैं लेकिन सवाल पहले से ही उन 2 मान्यताओं को संभालता है।
जूली पेलेटियर

@ जूलीप्लेटियर आह, हाँ, आप काफी सही हैं। मुझे याद आया कि फ़ाइल के नाम में केवल कम केस अक्षर शामिल हो सकते हैं।
टेराडॉन

14

सी #, 153 बाइट्स

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

OO शांत है और आपके द्वारा परिभाषित एक चर है:

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

बस मतलब है


12

बैश + आम लिनेक्स के बर्तन, 15

  • 1 बाइट ने @ डेनिस को धन्यवाद दिया

मान लेता है कि स्क्रिप्ट निर्देशिका में ही है।

mv * `rev<<<$0`

6
आप मान सकते हैं कि कोड फ़ाइल एक निर्देशिका में ही है , इसलिए $0इसे प्रतिस्थापित किया जा सकता है *
डेनिस

क्षमा करें, लेकिन आपके अपडेट में एक छोटा सा बग है और यह काम नहीं करता है। सबसे आसान तय यह है $0कि आखिरी के बजाय आपने पहले जो किया था, उसके करीब जाना *
जूली पेलेटियर

@JuliePelletier यह काम करने से पहले लगता था जब मैंने इसे आज़माया था, लेकिन हाँ, आप सही कह रहे हैं - * ग्लोबिंग का विस्तार ए के दाईं ओर नहीं होता है <<<
डिजिटल ट्रॉमा

7

जूलिया, 51 बाइट्स

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

यह कार्यक्रम ऑपरेटिंग सिस्टम अज्ञेय होना चाहिए, हालांकि यह केवल ओएस एक्स पर परीक्षण किया गया था।

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

MATLAB, 50 46 बाइट्स

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

4 बाइट्स हटाने और परीक्षण के लिए @Suever के लिए धन्यवाद!

Matlab संस्करण R2014a के साथ OS X El Capitan और Debian Jessie पर परीक्षण किया गया।

विंडोज पर एक झंडे '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'आवश्यक है?
Suever

@Suever Windows। क्या यह मैक पर आवश्यक नहीं है?
लुइस मेंडो

लिनक्स के मैक पर इसकी जरूरत नहीं है।
स्वेअर

@ शुक्रिया! 4 बाइट्स :-)
लुइस मेंडो

क्या आप इस पर काम करने वाले सटीक OS का संकेत दे सकते हैं?
लुइस मेंडो

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नहीं, सिवाय इसके कि यह पहली जगह में स्ट्रिंग हेरफेर करने में असमर्थ है।)

संपादित करें: फ़ाइल नाम अल्फ़ाबेटिक (@ CᴏɴᴏʀO'B comment की टिप्पणी पर आधारित) की गारंटी का उपयोग करके 2 बाइट्स सहेजा गया।


3
1. आप क्यों नहीं कह रहे हैं? 2. मुझे लगता है कि आप एक बाइट को बचा सकते हैंif ]%f% NEQ ] goto l
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ आह हां, फ़ाइल का नाम अल्फ़ाबेटिक है, इसलिए मैं वास्तव में 2 बाइट्स बचा सकता हूं, लेकिन संकेत के लिए धन्यवाद।
नील

1
आप के बारे में पता करने के लिए आवश्यक है कि आप OOBL AKA SMALLTALK-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, हम सरल बना सकते हैं *n=strrchr(*v,47)करने के लिए *n=*v+110 अक्षर को बचाने के लिए, लेकिन यह पूरी तरह से मान्य नहीं है ( ././myexecutableउदाहरण के लिए, इसे लागू किया जा सकता है )।


यदि आप एक फ़ाइल एक्सटेंशन (जैसे ".out") को इन-टैक रखना चाहते हैं, तो आप 2 बाइट की लागत *t=strchr(b,0)को बदल सकते हैं *t=strrchr(b,46)। हालांकि इसकी आवश्यकता नहीं है।


अच्छा - मैंने कभी नहीं देखा कि renameअगर src == डेस्ट हो तो क्या होगा ; ऐसा लगता है कि आप मुक्त करने के लिए palindrome बाधा को संतुष्ट करते हैं।
टोबी स्पाइट

ध्यान दें कि इसके लिए एक फ़ाइल सिस्टम की आवश्यकता होती है जहां कोडपॉइंट 47 विभाजक है। मुझे लगता है कि इसमें POSIX शामिल है (या क्या यह /कोने के मामले में EBCDIC की अनुमति देता है ?)
टोबी स्पाइट

@TobySpeight हाँ, मैंने कुछ स्पष्टीकरण के लिए gnu.org/software/libc/manual/html_node/Renaming-Files.html की जाँच की , लेकिन सबसे नज़दीकी मैंने पाया "नाम बदलने के लिए एक विशेष मामला तब है जब पुराना नाम और नया नाम एक ही फ़ाइल के दो नाम हैं इस मामले को संभालने का सुसंगत तरीका पुराना नाम हटाना है। हालाँकि, इस मामले में POSIX के लिए आवश्यक है कि नाम कुछ भी न करें और सफलता की रिपोर्ट करें- जो असंगत है। हमें नहीं पता कि आपका ऑपरेटिंग सिस्टम क्या करेगा। ", इसलिए मुझे लगता है। एक बाहरी मौका यह गैर-पॉसिक्स अनुरूप प्रणालियों पर फ़ाइल को हटा देगा। तो हाँ, असली कोड की जाँच करनी चाहिए!
डेव

मैंने अभी linux.die.net/man/3/rename की जाँच की और यह पुष्टि करता है कि लिनक्स इसे POSIX को अनिवार्य रूप से संभालता है: "यदि पुराना तर्क और नया तर्क एक ही मौजूदा फ़ाइल को हल करते हैं, तो नाम बदलें () सफलतापूर्वक वापस आएगा और कोई अन्य प्रदर्शन नहीं करेगा कार्रवाई की। "
डेव

मैं डेबियन मैनपेज के साथ जा रहा था: "यदि oldpathऔर newpathउसी फ़ाइल के संदर्भ में मौजूदा हार्ड लिंक हैं, तो rename()कुछ भी नहीं करता है, और सफलता की स्थिति लौटाता है" - यदि तार समान हैं, तो वे उसी फ़ाइल का संदर्भ देते हैं।
टोबी स्पाइट

3

विटसी + * श, 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
नमस्कार, और PPCG में आपका स्वागत है! महान पहली पोस्ट!
NoOneIsHere

2

वी , 29 26 बाइट्स

:se ri
izyw:!mv z "
dd

चूंकि इसमें unprintables शामिल हैं, यहाँ एक हेक्स डंप है:

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 पर नहीं चलेगा क्योंकि TIO फाइल एक्सेस की अनुमति नहीं देता है।

स्पष्टीकरण:

: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]केवल स्क्रिप्ट के बिना ही सीधे चलने पर केवल फ़ाइल नाम देता है। हेलका ने संकेत दिया कि यह ठीक है
डिजिटल ट्रॉमा

@DigitalTrauma जब मैंने अपने दम पर कार्यक्रम चलाया, 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");
आवेषण

उत्कृष्ट !!! लेकिन आपका कोड बेहतर है, वाह आपको 31 बाइट्स
मिलीं

क्या आप इसे सापेक्ष नहीं बना सकते? WOuld सेव 7 बाइट्स:rename($f=__FILE__,"./".strrev(pathinfo($f)[filename]).".php");
Martijn

या उससे भी छोटा:rename(__FILE__,strrev(basename(__FILE__,'.php')).'.php');
मार्टिज़न

ठंडा!
वर्स

2

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

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

नमस्ते, और PPCG में आपका स्वागत है! अच्छी पहली पोस्ट!
R

2

पायथन 2 , 41 बाइट्स

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

बैश पर डेमो।

पायथन वास्तव में फ़ाइल एक्सटेंशन की परवाह नहीं करता है, इसलिए हम बस पूरे फ़ाइल नाम को फ्लिप कर सकते हैं।


1

PHP, 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``)

@Upgoat मुझे जरूरत नहीं है, मुझे नहीं लगता। मैं jsफ़ाइलपैथ के अंत में मेल कर रहा हूं , एक चरित्र से पहले। यह हमेशा रहेगा .
कॉनर ओ'ब्रायन

1

जावास्क्रिप्ट ES6 (Node.js) 70 बाइट्स

कोई रेगेक्स याय!

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

किसी भी मदद की सराहना की है


1

PowerShell 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 }

PPCG में आपका स्वागत है! हमें उनके जवाबों को प्रदर्शित करने की आवश्यकता है, इसलिए मैंने आपके लिए इसे संपादित किया है। इसके अलावा, आप अपने कोड को हाइलाइट करके और ब्रैकेट की तरह दिखने वाले बटन का चयन करके {}या अपने कोड से पहले 4 रिक्त स्थान जोड़कर प्रारूपित कर सकते हैं ।
FryAmTheEggman

0

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

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

केवल एक फ़ाइल है, इसलिए mv *शेल वाइल्डकार्ड में केवल एक परिणाम होगा। गंतव्य नाम वह है (ls).basenameजो सभी फ़ाइलों ('डीआईआर' के लिए उपनाम) को सूचीबद्ध करता है, बेसनेम संपत्ति के लिए कॉल करता है - और चूंकि केवल एक फ़ाइल है, पॉवरशेल 1-आइटम सरणी को एक स्ट्रिंग में अनपैक करेगा। उस फ़ाइलनाम को स्टोर करें $f, फिर इसे उल्टी गिनती और -joinउलटे अक्षरों को एक स्ट्रिंग में वापस से अनुक्रमित करें । अनिवार्य .ps1प्रत्यय जोड़ें ।



0

पायथन 2.7, 68 बाइट्स

आयात os; = a = __ फ़ाइल __; os.rename (a, a.split ("\\") [- 1] [: - 3] [:: - 1] + "। py")

यह शायद सबसे अच्छा है जो मुझे मिल सकता है। मैंने सिर्फ खुद को गलत साबित किया।


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 बाइट्स सहेजे गए, जैसा कि @muddyfish द्वारा @DigitalTrauma को सुझाया गया है।



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$
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.