फ़ाइल एक्सटेंशन क्या है?


10

आपकी चुनौती किसी दिए गए फ़ाइल नाम का फ़ाइल एक्सटेंशन ढूंढना है:

hi.txt -> txt or .txt
carrot.meme -> meme or .meme
lol (undefined behavior)
what..is..this..file -> file or .file
.bashrc -> bashrc or .bashrc
T00M@n3KaPZ.h0wC[]h -> h0wC[]h or .h0wC[]h
agent.000 -> 000 or .000

आपको स्ट्रिंग के अंत में . आखिरी .से आखिरी या बाद में पाठ प्राप्त करना होगा । नियमित अभिव्यक्ति का पहला कैप्चरिंग ग्रुप मैच /\.([^.]+)$/काम करता है, और इसलिए इनपुट को विभाजित करता है .और अंतिम को वापस करता है।

फ़ाइल का नाम हमेशा कम से कम एक होगा ., लेकिन इसमें कई हो सकते हैं .। (उदाहरण देखें)

इनपुट हमेशा मेल करेगा ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$


17
कृपया मुख्य साइट पर पोस्ट करने से पहले अपनी चुनौतियों पर प्रतिक्रिया प्राप्त करने के लिए भविष्य में सैंडबॉक्स का उपयोग करने पर विचार करें ।
मेगो

1
codegolf.meta.stackexchange.com/a/12432/59376 - अपनी चुनौती से इस विचार को समझें
मैजिक ऑक्टोपस

@carusocomputing अच्छी चुनौती!
प्रोग्रामर

1
नकारात्मक वोट क्यों? क्या यह चुनौती "अत्यधिक तुच्छ" है या नहीं?
हाबिल टॉम

@AbelTom एडिट हिस्ट्री से पता चलता है कि डाउनवोट्स इस प्रश्न के पहले ड्राफ्ट में विशिष्टताओं की कमी के लिए थे।
पैट्रिक रॉबर्ट्स

जवाबों:



11

जावास्क्रिप्ट (ईएस 6), 19 बाइट्स

फ़ाइल एक्सटेंशन नहीं होने पर पूरा फ़ाइल नाम देता है। मुझे लगता है कि यह एक स्वीकार्य अपरिभाषित व्यवहार है

let f =

s=>s.split`.`.pop()

console.log(f("hi.txt"))               // -> txt
console.log(f("carrot.meme"))          // -> meme
console.log(f("lol"))                  // -> undefined behavior
console.log(f("what..is..this..file")) // -> file
console.log(f("T00M@n3KaPZ.h0wC[]h")) // -> h0wC[]h
console.log(f(".bashrc")) // -> bashrc


अपरिभाषित व्यवहार की बात यह है कि कुछ भी हो जाता है। हालांकि, नाक के राक्षस, जबकि अभी भी अपरिभाषित व्यवहार, "कोई दुर्भावनापूर्ण प्रोग्राम" खंड को विफल कर सकता है।
जॉन ड्वोरक

10

गणितज्ञ, १३ २२ बाइट्स

संपादित करें: यह निश्चित नहीं है कि मैं ".bashrc"परीक्षण के मामले में कैसे चूक गया । मुझे ईमानदार रखने के लिए एरियर का धन्यवाद।

FileExtension["a"<>#]&

यदि इनपुट मेल खाता है \.[^.]+, तो FileExtensionबस खाली स्ट्रिंग लौटाता है, इसलिए हम पत्र को प्रस्तुत करते हैं a। किसी भी अन्य मामले में, प्रस्तुत aकरने का उत्पादन प्रभावित नहीं करता है FileExtension


11
एक Mathematica buildin ... कोई आश्चर्य नहीं।
प्रोग्रामर

1
मुझे आश्चर्य होगा कि अगर किसी भी प्रश्न के लिए कोई गणितज्ञ
बिल्डिंस

मेरे पास गणितज्ञों तक पहुंच नहीं है, लेकिन मुझे संदेह होगा कि .extइसके परिणामस्वरूप कुछ भी नहीं होगा, जो .bashrcआउटपुट की आवश्यकता के लिए bashrcविफल रहता है (यह गणित में विफल रहता है )
आर्टीजर


Mathematica को सिर्फ मेटा-इन्स को बनाने की जरूरत है Create Built-in XXXXXXXX
मैजिक ऑक्टोपस Urn




7

c फ़ंक्शन, 21

  • 1 बाइट ने @ डेनिस को धन्यवाद दिया।
  • 3 बाइट्स ने @JohanduToit को धन्यवाद दिया।
  • 2 बाइट्स ने @ धन्यवाद का धन्यवाद बचाया।
  • 1 बाइट @algmyr की बदौलत बचा।
f(s){s=rindex(s,46);}

इसे ऑनलाइन आज़माएं


1
यदि आप विरासत POSIX फ़ंक्शंस का उपयोग करके ठीक हैं तो आप rindexबाइट को बचाने के लिए उपयोग कर सकते हैं ।
अल्जाइमर

@algmyr ज़रूर, यह TIO पर ठीक काम करता है, इसलिए मैं इसका इस्तेमाल करूँगा। मैं पहले कभी नहीं सुना था rindex()- टिप के लिए धन्यवाद!
डिजिटल ट्रामा

5

PHP, 21 बाइट्स

<?=pathinfo($argn,4);

इसे ऑनलाइन आज़माएं!

के लिए एक छोटी अभिव्यक्ति है

<?=pathinfo($argn)[extension];

pathinfo

PHP, 27 बाइट्स

<?=end(explode(".",$argn));

विस्फोट

इसे ऑनलाइन आज़माएं!

PHP <7.0, 26 बाइट्स

<?=end(split("\.",$argn));

पदावनत विभाजन


1
आप पहले एक के लिए एक अनुगामी newline गिनती कर रहे हैं? यह 27 बाइट्स होना चाहिए, 28 नहीं।
कॉनर ओ'ब्रायन

@ ConorO'Brien थैंक यू। मेरे पास विभाजन संस्करण से कॉपी और पेस्ट करने के बाद की गिनती है ``
Jörg Hülsermann

2
pathinfo()आधारित एक हो सकता है <?=pathinfo($argn,4);
17:56


4

GNU मेक , 12 बाइट्स

$(suffix $1)

बिलिन का उपयोग नहीं, 27 बाइट्स:

$(lastword $(subst ., ,$1))

4

बैच, 10 बाइट्स

@echo %~x1

एक बार के लिए अजीब प्रतिस्पर्धी।


4

वी , 5 , 3 बाइट्स

चूंकि इस उत्तर का अधिक प्रिंट करने योग्य नहीं है, इसलिए यहां एक हेक्सडंप है:

00000000: cd81 ae                                  ...

इसे ऑनलाइन आज़माएं!

यह जन ड्वोरक के एल्गोरिथ्म का उपयोग करता है , यह सिर्फ इसका अधिक कुशल एन्कोडिंग होने के लिए होता है।

स्पष्टीकरण:

Í       " Remove all occurrences of:
 0x81   "   Anything (greedy)
     ®  "   Followed by a dot 

पुराना समाधान:

$T.d|

कृपया स्पष्टीकरण दें?
आउटगॉल्फ को एरिक

@EriktheOutgolfer पूरा हुआ
जेम्स

प्रतीक्षा का ®मतलब बिंदी से है? लोल अजीब है।
एरिक आउटगॉल्फ़र


3

जेली , 4 बाइट्स

ṣ”.Ṫ

फ़ाइल नाम लेने और बिना किसी अग्रणी के एक्सटेंशन वापस करने के लिए एक विवादास्पद लिंक .

इसे ऑनलाइन आज़माएं!

कैसे?

वस्तुतः वही किया जाता है जो पूछा गया था ...

ṣ”.Ṫ - Main link: list of characters, f
 ”.  - literal '.'
ṣ    - split f at occurrences of '.'
   Ṫ - tail (get the last chunk)

3

जाओ , tes५ बाइट्स

जा ... मुसीबत है।

import(."fmt"
."os"
."strings")
func main(){s:=Split(Args[1],".");Print(s[len(s)-1])}

इसे ऑनलाइन आज़माएं!

कोड से कोष्ठकों का एक नमूना:

()(){([])([()])}

2
()(){([])([()])}- क्या यह एक मान्य ब्रेन-फ्लैक है?
eush77

5
@ eush77 यह तकनीकी रूप से ब्रेन-फ्लैक वैध है , क्योंकि यह त्रुटियों के बिना चलेगा, लेकिन यह कुछ भी दिलचस्प / उपयोगी नहीं करता है। यह या तो केवल शाब्दिक है 2जिसमें कोई निर्देश / आदेश या कुछ भी नहीं है या एक अनंत लूप है जो लगातार इनपुट के आधार पर अधिक मेमोरी आवंटित करता है।
जेम्स

उपयोग करने filepath.Extसे आप कुछ काटने से
बचेंगे

3

जावास्क्रिप्ट (ईएस 6), 33 31 28 बाइट्स

s=>s.slice(s.lastIndexOf`.`)

टिप्पणियों में विशिष्ट परिवर्तन की आवश्यकता को हटा देता है +1

-3 बाइट्स अंडरस्कोर के लिए धन्यवाद


1
-3 sliceऔर टेम्पलेट स्ट्रिंग निष्पादन के साथ:s=>s.slice(s.lastIndexOf`.`)
nderscore

3

आम लिस्प, 57 बाइट्स

(lambda(s)(#1=reverse(subseq #2=(#1# s)0(search"."#2#))))

इसे ऑनलाइन आज़माएं (इस अनाम फ़ंक्शन को कॉल करने के लिए कुछ बाइट्स जोड़े और लौटी स्ट्रिंग प्रदर्शित करें)

व्याख्या

(#1=reverse ...)     ;reverse is now accessible with #1# - saves 1 byte. I 
                     ;also need to reverse output of function inside to 
                     ;get extension in correct order
#2=(#1# s)           ;reverse of input string is now accessible with #2#
(search"."#2#)       ;I take reversed string and search for "." to get position of 
                     ;first instance of "." in string from the end of it
(subseq ... 0 ...)   ;get part of reversed string, 
                     ;starting from first character and ending just 
                     ;before first occurance of "."
                     ;this gives reversed extension

मुझे 0 से शुरू, इस पर समाप्त होता है, उलटा स्ट्रिंग का विकल्प मिलता है



3

MATL, 8 7 बाइट्स

46&YbO)

MATL ऑनलाइन पर यह कोशिश करो !

व्याख्या

        % Implicitly grab input as string
46      % ASCII for '.'
&Yb     % Split the input string at the '.' characters
O)      % Retrieve just the last part
        % Implicitly print the result

3

जावास्क्रिप्ट (ईएस 5), 38 बाइट्स

function(s){return s.split(".").pop()}

2
बस इतना पता है, जब आपका जवाब संपादित किया गया था, तो डाउनवोट समुदाय उपयोगकर्ता द्वारा स्वचालित रूप से डाली गई थी। मैं इसे एक बग मानता हूं
डेनिस

अगर आप कर सकते हैं कि plz तय!
पाप किया

3

सी #, 33 41 बाइट्स

a=>a.Split('.').Last();

सुझाव के अनुसार संपादित करें:

using System.Linq;a=>a.Split('.').Last();

1
आपको using Sytem.Linq;अपनी बाइट गिनती में शामिल करने की आवश्यकता है
TheLethalCoder

और यह भी a=>a.Split('.').Last();निहित वापसी कम है
TheLethalCoder

@TheLethalCoder सुझाव के लिए धन्यवाद फिक्स, अभी भी इस के लिए नया :)
LiefdeWen

मुझे आश्चर्य है कि यह मेरे समाधान का उपयोग करने से अधिक लंबा है Path...
TheLethalCoder

3

अक्क, १४ १३ वर्ण

( 10 9 अक्षर कोड + 4 वर्ण कमांड लाइन विकल्प।)

{$0=$NF}1

करने के लिए धन्यवाद:

नमूना रन:

bash-4.4$ awk -F. '{$0=$NF}1' <<< $'hi.txt\ncarrot.meme\nlol\nwhat..is..this..file\n.bashrc\nT00M@n3KaPZ.h0wC[]h'
txt
meme
lol
file
bashrc
h0wC[]h

आप की जरूरत नहीं है ;। और सिर्फ FYI, awk '{$0=$NF}1 काम करता है, कोई कमांड लाइन विकल्प की जरूरत नहीं है। ओह ... मैं थक गया होगा। आपने वहां क्या किया वह मैने देखा। आपको कमांड लाइन विकल्प की आवश्यकता है।
रॉबर्ट बेन्सन

1
धन्यवाद, @RobertBenson। मुझे नहीं पता कि मैंने ;वहां क्यों रखा ।

3

लुआ , 53 30 बाइट्स

.खाली स्ट्रिंग के साथ आखिरी तक सब कुछ बदल देता है ''

केवल पहले रिटर्न मान का चयन करने के लिए डबल कोष्ठक gsub

किसी भी गोल्फ युक्तियाँ का स्वागत करते हैं, मैं लू में जंग खा रहा हूँ ...

print(((...):gsub('.*%.','')))

इसे ऑनलाइन आज़माएं!


3

जावा 8, 52 27 बाइट्स

s->s.replaceAll(".*\\.","")

इसे यहाँ आज़माएँ।

कुछ भी नहीं के साथ अंतिम डॉट (और खुद डॉट) से पहले सब कुछ बदलें।

यह विभाजन ( s->s.split("\\.")[s.split("\\.").length-1];) या सबस्ट्रिंग ( s->s.substring(s.lastIndexOf('.'));) का उपयोग करने से कम है ।


3

टैक्सी , 1397 बाइट्स

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.Go to Chop Suey:n 1 r 1 l 4 r 1 l.[a]Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 1 l 1 r 1 l.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan "b" if no one is waiting.Switch to plan "a".[b]Go to The Babelfishery:n 1 l 1 l.[c]Go to Fueler Up:n.Go to Joyless Park:n 2 r.Go to Narrow Path Park:w 1 r 3 l.Pickup a passenger going to Cyclone.Go to Cyclone:w 1 l 1 r 2 l.Pickup a passenger going to Crime Lab.Pickup a passenger going to Joyless Park.'.' is waiting at Writer's Depot.Go to Writer's Depot:s.Pickup a passenger going to Crime Lab.Go to Crime Lab:n 1 r 2 r 2 l.Switch to plan "c" if no one is waiting.Go to Narrow Path Park:n 5 l.[d]Pickup a passenger going to Chop Suey.Go to Chop Suey:e 1 r 1 l 1 r.Go to Narrow Path Park:n 1 l 1 r 1 l.Switch to plan "e" if no one is waiting.Switch to plan "d".[e]Go to Joyless Park:e 1 r 3 l.Switch to plan "f" if no one is waiting.Pickup a passenger going to Narrow Path Park.Go to Fueler Up:w 1 l.Go to Narrow Path Park:n 4 l.Switch to plan "e".[f]Go to Narrow Path Park:w 1 r 3 l.[g]Switch to plan "h" if no one is waiting.Pickup a passenger going to KonKat's.Go to KonKat's:e 1 r.Pickup a passenger going to KonKat's.Go to Narrow Path Park:n 2 l.Switch to plan "g".[h]Go to KonKat's:e 1 r.Pickup a passenger going to Post Office.Go to Post Office:s 3 r 1 l.

इसे ऑनलाइन आज़माएं!

टैक्सी में रिवर्स फ़ंक्शन नहीं होता है इसलिए यह बहुत जल्दी फुलाया जाता है। तर्क है:

  1. स्ट्रिंग को पात्रों में तोड़ें
  2. सरणी उल्टा
  3. प्रत्येक के माध्यम से एक अवधि तक पाया जाता है, प्रत्येक को FIFO सरणी में संग्रहीत करना
  4. सरणी खाली करें (क्योंकि केवल एक LIFO सरणी उपलब्ध है)
  5. फीफो सरणी को LIFO सरणी में डंप करें
  6. LIFO सरणी और आउटपुट को समेटें

3

विम, 5 बाइट्स

$F.d0

स्पष्टीकरण: अंतिम .पंक्ति में खोजें, इससे पहले कि सब कुछ हटा दें

एक और, लंबे समय तक, लेकिन मेरी राय में अभी भी 9 बाइट्स के साथ दिलचस्प दृष्टिकोण (नोटिस नई लाइन)

d/.*\./e

यह एक समान काम करता है, 5 बाइट्स (फिर से, नई लाइन को पीछे छोड़ते हुए):

d?\.


2

ब्रेन-फ्लैक , 84 बाइट्स

के लिए +2 शामिल है -rc

(()){{}([((((()()()){}())()){}{}){}]({}<>)<>)({()(<{}>)}{})}{}{{}}<>{}{({}<>)<>}<>

इसे ऑनलाइन आज़माएं!

# Push 1 to start the loop
(())

# Start loop
{{}

  # If TOS == 46 i.e. '.'
  ([((((()()()){}())()){}{}){}]({}<>)<>)({()(<{}>)}{})
  # ^------------------------^ ^-------^ 
  #           This is 46         Also, copy TOS to other stack

# End loop after the first '.'
}{}

# Delete everything from this stack
{{}}

# Delete the '.' that got copied
<>{}

# Copy everything back to reverse it to the correct order
{({}<>)<>}<>

2

जाप , 6 5 बाइट्स

q'. o

इसे ऑनलाइन आज़माएं!

व्याख्या

 q'. o
Uq'. o
Uq'.    # Split the input at "."
     o # Return the last item

जब आपको केवल किसी सरणी के अंतिम आइटम को वापस करने की आवश्यकता होती है, तो आप इसके oस्थान पर उपयोग कर सकते हैं gJ। (थोड़ी देर पहले @obarakon से यह चाल सीखी गई)
ETHproductions


2

ऑक्टेव, 24 बाइट्स

@(x)strsplit(x,'.'){end}

एक अनाम फ़ंक्शन बनाता है जिसका नाम ansइनपुट के रूप में एक स्ट्रिंग स्वीकार कर सकता है

ऑनलाइन डेमो

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