Dosya uzantısı nedir?


10

Sorun, sağlanan bir dosya adının dosya uzantısını bulmaktır:

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

Metni , dizenin sonundan . veya .sonundan sonuna kadar almalısınız . Düzenli ifadenin ilk yakalama grubu eşleşmesi /\.([^.]+)$/çalışır ve girdiyi .s'ye bölmek ve sonuncuyu döndürmek de işe yarar .

Dosya adı her zaman en az bir tane içerir ., ancak birden fazla dosya içerebilir .. (örneklere bakın)

Giriş her zaman eşleşecektir ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$.


17
Ana siteye göndermeden önce zorluklarınız hakkında geri bildirim almak için lütfen gelecekte Sandbox'ı kullanmayı düşünün .
Mego


@ carusocomputing güzel bir meydan okuma!
programcı5000

1
neden olumsuz oylar? Bu zorluk “aşırı derecede önemsiz” mi?
Abel Tom

@AbelTom düzenleme geçmişi downvotes bu sorunun ilk taslağında şartname eksikliği için olduğunu önerecektir.
Patrick Roberts

Yanıtlar:



11

JavaScript (ES6), 19 bayt

Dosya uzantısı olmadığında tam dosya adını döndürür. Sanırım bu kabul edilebilir tanımsız bir davranış .

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


Tanımlanmamış davranışın amacı her şeyin yolunda gitmesidir. Bununla birlikte, burun şeytanları, hala tanımlanmamış davranış olsa da, "kötü amaçlı program yok" yan tümcesinde başarısız olabilir.
John Dvorak

10

Mathematica, 13 22 bayt

Düzenleme: ".bashrc"Test vakasını nasıl özlediğimden emin değilim . Beni dürüst tuttuğu için Artyer'a teşekkürler.

FileExtension["a"<>#]&

Giriş maçları ise \.[^.]+, o zaman FileExtensionbiz mektubu prepend yüzden sadece, boş bir dize döndürür a. Başka bir durumda, önekleme açıktısını etkilemez FileExtension.


11
Yerleşik bir Mathematica ... sürpriz değil.
programcı5000

1
Mümkün olan herhangi bir soru için mathematica yapıları olmasa
şaşırırdım

Ben Matematica erişimi yok ama şüpheli ediyorum .extiçin bozulana şey, neden olacaktır .bashrcçıkışına gerek bashrc(O başarısız Mathics )
Artyer


Mathematica sadece meta yerleşiklere ihtiyaç duyar Create Built-in XXXXXXXX.
Sihirli Ahtapot Vazosu




7

c işlevi, 21

  • @Dennis sayesinde 1 bayt tasarruf edildi.
  • @JohanduToit sayesinde 3 bayt kaydedildi.
  • @Neil sayesinde 2 bayt kaydedildi.
  • @Algmyr sayesinde 1 bayt kaydedildi.
f(s){s=rindex(s,46);}

Çevrimiçi deneyin .


1
Eski POSIX işlevlerini kullanmakta sorun yaşıyorsanız, rindexbir bayt kaydetmek için kullanabilirsiniz .
algmyr

@algmyr Elbette, TIO'da iyi çalışıyor, bu yüzden kullanacağım. Daha rindex()önce hiç duymamıştım - bahşiş için teşekkürler!
Dijital Travma

5

PHP, 21 Bayt

<?=pathinfo($argn,4);

Çevrimiçi deneyin!

için daha kısa bir ifade

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

pathinfo

PHP, 27 Bayt

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

patlamak

Çevrimiçi deneyin!

PHP <7.0, 26 Bayt

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

kullanımdan kaldırılmış bölünme


1
İlki için bir satırsonu mu sayıyorsunuz? 28 bayt değil, 27 bayt olmalıdır.
Conor O'Brien

@ ConorO'Brien Teşekkür Ederiz. ``
Jörg Hülsermann

2
pathinfo()Tabanlı biri olabilir <?=pathinfo($argn,4);.
manatwork


4

GNU Marka , 12 bayt

$(suffix $1)

Yerleşik kullanılmıyor, 27 bayt:

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

4

Toplu işlem, 10 bayt

@echo %~x1

Bir kez garip bir şekilde rekabetçi.


4

V , 5 , 3 bayt

Bu cevabın daha fazlası yazdırılabilirden yazdırılamadığından, burada bir hexdump var:

00000000: cd81 ae                                  ...

Çevrimiçi deneyin!

Bu Jan Dvorak'ın algoritmasını kullanır , sadece daha verimli bir kodlaması olur.

Açıklama:

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

Eski çözüm:

$T.d|

Açıklama lütfen?
Outgolfer Erik

@EriktheOutgolfer Tamamlandı
James

Bekle ®, ardından nokta mı geliyor? Lol bu garip.
Outgolfer Erik


3

Jöle , 4 bayt

ṣ”.Ṫ

Dosya adını alan ve uzantıyı önde olmayan döndüren monadik bir bağlantı ..

Çevrimiçi deneyin!

Nasıl?

Kelimenin tam anlamıyla sorulan şeyi yapar ...

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

3

Git , 85 bayt

Git ... zahmetlidir.

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

Çevrimiçi deneyin!

Koddan parantez örneği:

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

2
()(){([])([()])}- geçerli bir Brain-Flak mı?
eush77

5
@ eush77 Teknik olarak geçerli Brain-Flak, hatasız çalışacağı için ilginç / yararlı bir şey yapmıyor. Ya sadece değişmezi var 2herhangi bir talimat / komutları ya da bir şey veya sürekli olarak girdi bağlı olarak daha fazla bellek ayırma sonsuz bir döngüyle.
James

Kullanmak filepath.Extsize birkaç ısırık kazandıracak
powelles

3

JavaScript (ES6), 33 31 28 bayt

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

Yorumlardaki özellik değişikliği, ihtiyacı ortadan kaldırır +1.

Nderscore sayesinde -3 bayt


1
-3 ile sliceve şablon dizesi yürütme:s=>s.slice(s.lastIndexOf`.`)
nderscore

3

Ortak Lisp, 57 bayt

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

Çevrimiçi deneyin (bu anonim işlevi çağırmak ve döndürülen dizeyi görüntülemek için bazı baytlar eklendi)

açıklama

(#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

Ben 0 ile başlayan, bununla biten ters dize alt dize olsun


3

Gema, 3 karakter

*.=

Örnek çalışma:

bash-4.4$ gema '*.=' <<< 'what..is..this..file'
file

3

MATL, 8 7 bayt

46&YbO)

MATL Online'da deneyin !

açıklama

        % 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

C #, 33 41 bayt

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

Önerildiği gibi düzenleyin:

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

1
using Sytem.Linq;Bayt sayımınıza dahil etmeniz gerekir
TheLethalCoder

Ayrıca a=>a.Split('.').Last();örtülü getiri daha kısadır
TheLethalCoder

@TheLethalCoder Önerilen düzeltmeler için teşekkür ederiz, hala yeni :)
LiefdeWen

Bu benim çözüm kullanarak daha uzun olduğunu şaşırdım Path...
TheLethalCoder

3

Awk, 14 13 karakter

( 10 9 karakterlik kod + 4 karakterlik komut satırı seçeneği.)

{$0=$NF}1

Sayesinde:

  • Gereksiz noktalı virgül (-1 karakteri) tespit ettiği için Robert Benson

Örnek çalışma:

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

İhtiyacınız yok ;. ve sadece FYI, awk '{$0=$NF}1 çalışıyor, komut satırı seçeneğine gerek yok. Oh ... yorgun olmalıyım. Orada ne yaptığınızı görüyorum. Komut satırı seçeneğine ihtiyacınız var.
Robert Benson

1
Teşekkürler @RobertBenson. Bunu neden ;buraya koyduğum hakkında hiçbir fikrim yok.
manatwork

3

Lua , 53 30 bayt

Sonuna kadar olan her şeyi .boş dize ile değiştirir ''.

Yalnızca ilk dönüş değerini seçmek için çift parantez kullanın gsub.

Herhangi bir golf ipuçları bekliyoruz, ben lua paslı ...

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

Çevrimiçi deneyin!


3

Java 8, 52 27 bayt

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

Burada deneyin.

Son noktadan (ve noktanın kendisinden) önceki her şeyi hiçbir şeyle değiştirmeyin.

Bu, split ( s->s.split("\\.")[s.split("\\.").length-1];) veya substring ( s->s.substring(s.lastIndexOf('.'));) kullanmaktan daha kısadır .


3

Taksi , 1397 bayt

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.

Çevrimiçi deneyin!

Taksi ters bir işleve sahip değil, bu yüzden bu oldukça hızlı bir şekilde balonlandı. Mantık:

  1. Dizeyi karakterlere ayır
  2. Diziyi ters çevir
  3. Her biri bir FIFO dizisinde saklanan bir nokta bulunana kadar her birini tekrarlayın
  4. Diziyi boşaltın (yalnızca bir LIFO dizisi bulunduğundan)
  5. FIFO dizisini LIFO dizisine dök
  6. LIFO dizisini ve çıktısını bitiştir

3

Vim, 5 bayt

$F.d0

Açıklama: en son .satırdaki yeri bul , ondan önceki her şeyi sil

Bir başka, daha uzun, ama bence 9 bayt ile hala ilginç bir yaklaşım (sondaki yeni çizgiye dikkat edin)

d/.*\./e

Bu, benzer şekilde çalışır, 5 bayt (yine, yeni satırın sonunu):

d?\.


2

Brain-Flak , 84 bayt

İçin +2 içerir -rc

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

Çevrimiçi deneyin!

# 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

Japt , 6 5 bayt

q'. o

Çevrimiçi deneyin!

açıklama

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

Bir dizinin yalnızca son öğesini döndürmeniz gerektiğinde o, yerine kullanabilirsiniz gJ. (@Obarakon'dan bir süre önce bu hileyi öğrendim)
ETHproductions 16:17

2

jq, 15 14 karakter

( 11 10 karakterlik kod + 4 karakterlik komut satırı seçenekleri.)

./"."|last

Örnek çalışma:

bash-4.4$ jq -Rr './"."|last' <<< 'what..is..this..file'
file

Çevrimiçi test


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.