Jakie jest rozszerzenie pliku?


10

Twoim wyzwaniem jest znalezienie rozszerzenia podanej nazwy pliku:

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

Musisz pobrać tekst od ostatniego . lub po ostatnim .do końca ciągu. /\.([^.]+)$/Działa pierwsze dopasowanie grupy przechwytywania wyrażenia regularnego , podobnie jak dzielenie danych wejściowych na .s i zwracanie ostatniego.

Nazwa pliku zawsze będzie zawierać co najmniej jeden ., ale może zawierać wiele .. (patrz przykłady)

Dane wejściowe zawsze będą pasować ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$.


17
Rozważ skorzystanie z piaskownicy w przyszłości, aby uzyskać opinie na temat swoich wyzwań przed opublikowaniem ich na głównej stronie.
— Mego

1
codegolf.meta.stackexchange.com/a/12432/59376 - Ten pomysł pochodzi od twojego wyzwania.
— Magic Octopus Urn

@carusocomputing ładne wyzwanie!
— programator5000

1
dlaczego negatywne głosy? Czy to wyzwanie jest „wyjątkowo trywialne”?
— Abel Tom

Historia edycji @AbelTom sugerowałaby, że w pierwszym szkicu tego pytania głosowano za brakiem specyfikacji.
— Patrick Roberts

Odpowiedzi:



11

JavaScript (ES6), 19 bajtów

Zwraca pełną nazwę pliku, gdy nie ma rozszerzenia pliku. Przypuszczam, że jest to dopuszczalne niezdefiniowane zachowanie .

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


Nieokreślone zachowanie polega na tym, że wszystko idzie. Chociaż demony nosowe, choć wciąż nieokreślone zachowanie, mogą nie spełniać klauzuli „brak szkodliwych programów”.
— John Dvorak

10

Mathematica, 13 22 bajtów

Edycja: Nie jestem pewien, jak przegapiłem ".bashrc"przypadek testowy. Dziękuję Artyerowi za zachowanie mnie w uczciwości.

FileExtension["a"<>#]&

Jeśli dane wejściowe pasują \.[^.]+, to FileExtensionpo prostu zwraca pusty ciąg, więc poprzedzamy literę a. W każdym innym przypadku poprzedzanie anie wpływa na wynik FileExtension.


11
Wbudowana matematyka ... nic dziwnego.
— programator5000

1
Byłbym zaskoczony, gdyby nie było żadnych wbudowanych funkcji matematycznych dla jakiegokolwiek pytania
— sagiksp

Nie mam dostępu do Mathematiki, ale podejrzewałbym, że .extto nic nie da, co nie udaje się z .bashrckoniecznością uzyskania danych wyjściowych bashrc(nie działa w matematyce )
— Artyer


Mathematica musi tylko mieć wbudowane meta Create Built-in XXXXXXXX.
— Magic Octopus Urn




7

funkcja c, 21

  • 1 bajt zapisany dzięki @Dennis.
  • 3 bajty zapisane dzięki @JohanduToit.
  • 2 bajty zapisane dzięki @Neil.
  • 1 bajt zapisany dzięki @algmyr.
f(s){s=rindex(s,46);}

Wypróbuj online .


1
Jeśli nie masz nic przeciwko korzystaniu ze starszych funkcji POSIX, możesz użyć rindexdo zapisania bajtu.
— algmyr

@ algmyr Pewnie, działa dobrze na TIO, więc go użyję. Nigdy wcześniej o tym nie słyszałem rindex()- dziękuję za podpowiedź!
— Cyfrowa trauma

5

PHP, 21 bajtów

<?=pathinfo($argn,4);

Wypróbuj online!

jest krótszym wyrażeniem dla

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

pathinfo

PHP, 27 bajtów

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

eksplodować

Wypróbuj online!

PHP <7.0, 26 bajtów

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

przestarzały podział


1
Czy liczysz końcowy znak nowej linii? Powinien mieć 27 bajtów, a nie 28.
— Conor O'Brien

@ ConorO'Brien Dziękuję. Liczę po skopiowaniu i wklejeniu z wersji podzielonej ``
— Jörg Hülsermann

2
pathinfo()Jeden oparty może być <?=pathinfo($argn,4);.
— manatwork



4

Partia, 10 bajtów

@echo %~x1

Raz dziwnie konkurencyjny.


4

V , 5 , 3 bajty

Ponieważ większej części tej odpowiedzi nie można wydrukować niż wydrukować, oto zrzut heksowy:

00000000: cd81 ae                                  ...

Wypróbuj online!

Korzysta z algorytmu Jana Dvoraka , okazuje się, że jest to bardziej wydajne jego kodowanie.

Wyjaśnienie:

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

Stare rozwiązanie:

$T.d|

Wyjaśnienie proszę?
— Erik the Outgolfer

@EriktheOutgolfer Done
— James

Oczekiwanie ®oznacza kropkę? Lol, to dziwne.
— Erik the Outgolfer


3

Galaretka , 4 bajty

ṣ”.Ṫ

Monadyczny link pobierający nazwę pliku i zwracający rozszerzenie bez wiodącego ..

Wypróbuj online!

W jaki sposób?

Dosłownie robi to, o co poproszono ...

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

3

Idź , 85 bajtów

Go jest ... kłopotliwy.

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

Wypróbuj online!

Próbka nawiasów z kodu:

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

2
()(){([])([()])}- czy jest to poprawny Brain-Flak?
— eush77

5
@ eush77 To technicznie poprawny Brain-Flak, ponieważ będzie działał bez błędów, ale nie robi nic interesującego / użytecznego. Jest to albo dosłowny 2brak instrukcji / poleceń, albo nieskończona pętla, która stale przydziela więcej pamięci, w zależności od danych wejściowych.
— James

Korzystanie filepath.Extzaoszczędzi ci kilka kęsów
— powelles

3

JavaScript (ES6), 33 31 28 bajtów

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

Zmiana specyfikacji w komentarzach eliminuje potrzebę +1.

-3 bajty dzięki nderscore


1
-3 z slicewykonaniem łańcucha i szablonu:s=>s.slice(s.lastIndexOf`.`)
— nderscore

3

Common Lisp, 57 bajtów

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

Wypróbuj online (dodano kilka bajtów, aby wywołać tę anonimową funkcję i wyświetlić zwrócony ciąg)

Wyjaśnienie

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

Otrzymuję podciąg odwróconego łańcucha, zaczynając od 0, kończąc na tym



3

MATL, 8 7 bajtów

46&YbO)

Wypróbuj w MATL Online !

Wyjaśnienie

        % 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

JavaScript (ES5), 38 bajtów

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

2
Właśnie dlatego wiesz, że opinia głosowa została automatycznie przesłana przez użytkownika społeczności podczas edytowania Twojej odpowiedzi. Uważam to za błąd .
— Dennis

plz napraw to, jeśli potrafisz!
— Sinned

3

C #, 33 41 bajtów

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

Edytuj zgodnie z sugestią:

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

1
Musisz uwzględnić using Sytem.Linq;w swojej liczbie bajtów
— TheLethalCoder

A także a=>a.Split('.').Last();niejawny zwrot jest krótszy
— TheLethalCoder

@TheLethalCoder Dzięki za sugerowane poprawki, wciąż nowe w tym :)
— LiefdeWen

Dziwi mnie, że jest to dłuższe niż moje rozwiązanie, używając Path...
— TheLethalCoder

3

Awk, 14 13 znaków

( Kod 10 9 znaków + opcja wiersza poleceń 4 znaki.)

{$0=$NF}1

Dzięki:

Przykładowy przebieg:

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

Nie potrzebujesz ;. i po prostu FYI, awk '{$0=$NF}1 działa, nie wymaga opcji wiersza poleceń. Och ... muszę być zmęczony. Widzę, co tu zrobiłeś. Potrzebujesz opcji wiersza polecenia.
— Robert Benson

1
Dziękuję, @RobertBenson. Nie mam pojęcia, dlaczego to ;tam umieściłem .
— manatwork

3

Lua , 53 30 bajtów

Zastępuje wszystko do ostatniego . pustym ciągiem ''.

Podwójny nawias, aby wybrać tylko pierwszą wartość zwracaną gsub .

Wszelkie wskazówki dotyczące golfa są mile widziane, jestem zardzewiały w lua ...

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

Wypróbuj online!


3

Java 8, 52 27 bajtów

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

Wypróbuj tutaj.

Zastąp wszystko przed ostatnią kropką (i samą kropką) niczym.

Jest to krótsze niż użycie split ( s->s.split("\\.")[s.split("\\.").length-1];) lub substring ( s->s.substring(s.lastIndexOf('.'));).


3

Taxi , 1397 bajtów

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.

Wypróbuj online!

Taksówka nie ma funkcji cofania, więc balon szybko się zwiększył. Logika jest następująca:

  1. Podziel ciąg na znaki
  2. Odwróć tablicę
  3. Iteruj przez każdy z nich, aż do znalezienia kropki, przechowując każdą w tablicy FIFO
  4. Opróżnij tablicę (ponieważ dostępna jest tylko jedna tablica LIFO)
  5. Zrzuć tablicę FIFO do tablicy LIFO
  6. Połącz tablicę i dane wyjściowe LIFO

3

Vim, 5 bajtów

$F.d0

Objaśnienie: znajdź ostatni . wiersz, usuń wszystko przed nim

Kolejne, dłuższe, ale moim zdaniem wciąż interesujące podejście z 9 bajtami (zauważ końcową nową linię)

d/.*\./e

Ten działa podobnie, 5 bajtów (ponownie, końcowy nowy wiersz):

d?\.


2

Brain-Flak , 84 bajtów

Obejmuje +2 za -rc

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

Wypróbuj 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
{({}<>)<>}<>

2

Japt , 6 5 bajtów

q'. o

Wypróbuj online!

Wyjaśnienie

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

Gdy potrzebujesz tylko zwrócić ostatni element tablicy, możesz użyć ozamiast gJ. (Nauczyłem się tej sztuczki od @obarakon jakiś czas temu)
— ETHproductions

2

jq, 15 14 znaków

( 11 10 znaków kodowych + 4 znaki opcji wiersza poleceń).

./"."|last

Przykładowy przebieg:

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

Test online


2

Oktawa, 24 bajty

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

Tworzy anonimową funkcję o nazwie ans która może zaakceptować ciąg jako dane wejściowe

Demo online

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.