Apa ekstensi file?

10

Tantangan Anda adalah menemukan ekstensi file dari nama file yang disediakan:

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

Anda harus mendapatkan teks dari yang terakhir . atau yang terakhir .ke akhir string. Pertandingan menangkap kelompok pertama dari ekspresi reguler /\.([^.]+)$/berfungsi, dan begitu juga dengan membagi input pada .s dan mengembalikan yang terakhir.

Nama file akan selalu mengandung setidaknya satu ., tetapi mungkin mengandung banyak .. (lihat contoh)

Masukan akan selalu cocok ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$.

programmer5000
sumber
17
Silakan pertimbangkan menggunakan Sandbox di masa depan untuk mendapatkan umpan balik tentang tantangan Anda sebelum mempostingnya ke situs utama.
Mego
1
codegolf.meta.stackexchange.com/a/12432/59376 - Dapatkan ide ini dari tantangan Anda.
Magic Octopus Mm
@carus membuat tantangan yang bagus!
programmer5000
1
mengapa suara negatif? Apakah tantangan ini "sangat sepele" atau lebih?
Abel Tom
Sunting riwayat @AbelTom akan menyarankan downvotes adalah karena kurangnya spesifikasi dalam konsep pertama dari pertanyaan ini.
Patrick Roberts

Jawaban:

11

JavaScript (ES6), 19 byte

Mengembalikan nama file lengkap ketika tidak ada ekstensi file. Saya kira ini adalah perilaku tidak terdefinisi yang dapat diterima .

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("[email protected][]h")) // -> h0wC[]h
console.log(f(".bashrc")) // -> bashrc

Arnauld
sumber
Inti dari perilaku yang tidak terdefinisi adalah bahwa segala sesuatu berjalan. Meskipun, setan hidung, sementara masih perilaku tidak terdefinisi, mungkin gagal klausa "tidak ada program jahat".
John Dvorak
10

Mathematica, 13 22 byte

Sunting: Tidak yakin bagaimana saya melewatkan ".bashrc"test case. Terima kasih kepada Artyer karena membuatku jujur.

FileExtension["a"<>#]&

Jika input cocok \.[^.]+, maka FileExtensioncukup kembalikan string kosong, jadi kami tambahkan hurufnya a. Dalam kasus lain apa pun, mengawali atidak mempengaruhi output dari FileExtension.

ngenisis
sumber
11
A Mathematica builtin ... tidak mengherankan.
programmer5000
1
Saya akan terkejut jika tidak ada Mathematica builtin untuk setiap pertanyaan yang mungkin
sagiksp
Saya tidak memiliki akses ke Mathematica, tetapi saya menduga itu .exttidak menghasilkan apa-apa, yang gagal karena .bashrcperlu keluaran bashrc(Gagal dalam Matematika )
Artyer
Tampaknya itu berfungsi
programmer5000
Mathematica hanya perlu meta built-in Create Built-in XXXXXXXX.
Magic Gurita Guci
9

Bash murni, 13

echo ${1##*.}

Cobalah online .

Trauma Digital
sumber
7

Japt , 3 byte

2 byte kode, +1 untuk hbendera.

q.

Penjelasan:

q.       Split the input by `.`
   -h    Return the last item

Cobalah online!

Oliver
sumber
7

05AB1E , 4 byte

'.¡¤

Cobalah online! atau Coba Semua Tes

'.   # Push '.'
  ¡  # Split on occurrences of '.'
   ¤ # Tail
Riley
sumber
Apa? Saya belum pernah melihat kejadian perpecahan di wiki . Sunting: Sekarang saya menemukannya!
facepalm42
7

fungsi c, 21

  • 1 byte disimpan berkat @Dennis.
  • 3 byte disimpan berkat @JohanduToit.
  • 2 byte disimpan berkat @Neil.
  • 1 byte disimpan berkat @algmyr.
f(s){s=rindex(s,46);}

Cobalah online .

Trauma Digital
sumber
1
Jika Anda setuju menggunakan fungsi POSIX lama yang dapat Anda gunakan rindexuntuk menyimpan byte.
algmyr
@ algmyr Tentu, ini berfungsi dengan baik di TIO, jadi saya akan menggunakannya. Saya belum pernah mendengar rindex()sebelumnya - terima kasih atas tipnya!
Digital Trauma
5

PHP, 21 Bytes

<?=pathinfo($argn,4);

Cobalah online!

adalah ungkapan yang lebih pendek untuk

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

pathinfo

PHP, 27 Bytes

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

meledak

Cobalah online!

PHP <7.0, 26 Bytes

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

perpecahan usang

Jörg Hülsermann
sumber
1
Apakah Anda menghitung baris tambahan untuk yang pertama? Itu harus 27 byte, bukan 28.
Conor O'Brien
@ ConorO'Brien Terima Kasih. Saya punya hitungan setelah salin dan tempel dari versi split a ``
Jörg Hülsermann
2
Yang pathinfo()berbasis bisa <?=pathinfo($argn,4);.
manatwork
4

GNU Make , 12 byte

$(suffix $1)

Tidak menggunakan builtin, 27 byte:

$(lastword $(subst ., ,$1))
eush77
sumber
4

Batch, 10 byte

@echo %~x1

Anehnya kompetitif sekali.

Neil
sumber
4

V , 5 , 3 byte

Karena lebih dari jawaban ini tidak dapat dicetak dan tidak dapat dicetak, berikut adalah hexdump:

00000000: cd81 ae                                  ...

Cobalah online!

Ini menggunakan algoritma Jan Dvorak , itu hanya terjadi untuk penyandian yang lebih efisien.

Penjelasan:

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

Solusi lama:

$T.d|
James
sumber
Penjelasannya tolong?
Erik the Outgolfer
@EriktheOutgolfer Selesai
James
Tunggu ®artinya diikuti dengan titik? Lol itu aneh.
Erik the Outgolfer
3

Jelly , 4 byte

ṣ”.Ṫ

Tautan monadik yang mengambil nama file dan mengembalikan ekstensi tanpa pimpinan ..

Cobalah online!

Bagaimana?

Secara harfiah melakukan apa yang diminta ...

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

Pergi , 85 byte

Go itu ... merepotkan.

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

Cobalah online!

Contoh tanda kurung dari kode:

()(){([])([()])}
benar-benar manusiawi
sumber
2
()(){([])([()])}- apakah ini Brain-Flak yang valid?
eush77
5
@ eush77 Otak-Flak ini secara teknis valid , karena akan berjalan tanpa kesalahan, tetapi tidak melakukan sesuatu yang menarik / berguna. Entah itu hanya literal 2tanpa instruksi / perintah atau apa pun atau loop tak terbatas yang terus mengalokasikan lebih banyak memori, tergantung pada input.
James
Menggunakan filepath.Extakan menghemat beberapa gigitan
powelles
3

JavaScript (ES6), 33 31 28 byte

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

Perubahan spesifikasi dalam komentar menghilangkan kebutuhan +1.

-3 byte berkat nderscore

Stephen
sumber
1
-3 dengan slicedan templat eksekusi string:s=>s.slice(s.lastIndexOf`.`)
nderscore
3

Gangguan Umum, 57 byte

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

Cobalah secara online (menambahkan beberapa byte untuk memanggil fungsi anonim ini dan menampilkan string yang dikembalikan)

Penjelasan

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

Saya mendapatkan substring dari string terbalik, mulai dari 0, berakhir pada ini


sumber
3

Gema, 3 karakter

*.=

Contoh dijalankan:

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

MATL, 8 7 byte

46&YbO)

Cobalah di MATL Online !

Penjelasan

        % 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
Suever
sumber
3

Javascript (ES5), 38 byte

function(s){return s.split(".").pop()}
Berdosa
sumber
2
Asal tahu saja, downvote dilakukan secara otomatis oleh pengguna Komunitas saat jawaban Anda diedit. Saya menganggap ini sebagai bug .
Dennis
tolong perbaiki itu jika Anda bisa!
Dosa
3

C #, 33 41 byte

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

Edit seperti yang disarankan:

using System.Linq;a=>a.Split('.').Last();
LiefdeWen
sumber
1
Anda perlu memasukkan using Sytem.Linq;ke dalam hitungan byte Anda
TheLethalCoder
Dan juga a=>a.Split('.').Last();pengembalian implisit lebih pendek
TheLethalCoder
@TheLethalCoder Terima kasih atas perbaikan yang disarankan, masih baru untuk ini :)
LiefdeWen
Saya terkejut ini lebih lama daripada solusi saya menggunakan Path...
TheLethalCoder
3

Awk, 14 13 karakter

( 10 9 karakter kode + 4 opsi opsi perintah karakter.)

{$0=$NF}1

Terimakasih untuk:

  • Robert Benson karena menemukan titik koma yang tidak perlu (karakter -1)

Contoh dijalankan:

bash-4.4$ awk -F. '{$0=$NF}1' <<< $'hi.txt\ncarrot.meme\nlol\nwhat..is..this..file\n.bashrc\[email protected][]h'
txt
meme
lol
file
bashrc
h0wC[]h
manatwork
sumber
Anda tidak membutuhkannya ;. dan hanya FYI, awk '{$0=$NF}1 berfungsi, tidak ada opsi baris perintah yang diperlukan. Oh ... aku pasti lelah. Saya melihat apa yang Anda lakukan di sana. Anda memang membutuhkan opsi baris perintah.
Robert Benson
1
Terima kasih, @RobertBenson. Saya tidak tahu mengapa saya meletakkannya di ;sana.
manatwork
3

Lua , 53 30 byte

Ganti semuanya hingga yang terakhir .dengan string kosong ''.

Tanda kurung ganda untuk memilih hanya nilai pengembalian pertama gsub.

Setiap kiat bermain golf dipersilakan, saya berkarat di ...

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

Cobalah online!

Felipe Nardi Batista
sumber
3

Java 8, 52 27 byte

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

Coba di sini.

Ganti semuanya sebelum titik terakhir (dan titik itu sendiri) dengan apa-apa.

Ini lebih pendek daripada menggunakan split ( s->s.split("\\.")[s.split("\\.").length-1];) atau substring ( s->s.substring(s.lastIndexOf('.'));).

Kevin Cruijssen
sumber
3

Taksi , 1397 byte

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.

Cobalah online!

Taksi tidak memiliki fungsi terbalik sehingga ini menggelembung cukup cepat. Logikanya adalah:

  1. Pisahkan string menjadi karakter
  2. Membalikkan array
  3. Iterasi masing-masing sampai periode ditemukan, menyimpan masing-masing dalam array FIFO
  4. Kosongkan array (karena hanya ada satu array LIFO yang tersedia)
  5. Dump array FIFO ke dalam array LIFO
  6. Menggabungkan array dan output LIFO
Toast insinyur
sumber
3

Vim, 5 byte

$F.d0

Penjelasan: temukan yang terakhir . baris , hapus semuanya sebelum itu

Lain, lebih lama, tetapi menurut saya pendekatan yang masih menarik dengan 9 byte (perhatikan baris baru yang tertinggal)

d/.*\./e

Ini bekerja dengan cara yang sama, 5 byte (sekali lagi, tertinggal baris baru):

d?\.

oktupol
sumber
2

Brain-Flak , 84 byte

Termasuk +2 untuk -rc

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

Cobalah online!

# 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
{({}<>)<>}<>
Riley
sumber
2

Japt , 6 5 byte

q'. o

Cobalah online!

Penjelasan

 q'. o
Uq'. o
Uq'.    # Split the input at "."
     o # Return the last item
Luke
sumber
Saat Anda hanya perlu mengembalikan item terakhir dari sebuah array, Anda dapat menggunakannya osebagai ganti gJ. (Mempelajari trik dari @obarakon beberapa waktu lalu)
ETHproduksi
2

jq, 15 14 karakter

( 11 10 karakter kode + 4 opsi opsi perintah karakter.)

./"."|last

Contoh dijalankan:

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

Tes online

manatwork
sumber
2

Oktaf, 24 byte

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

Membuat fungsi anonim bernama ansyang dapat menerima string sebagai input

Demo online

Suever
sumber