파일 확장자는 무엇입니까?


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

문자열의 마지막에서 . 또는 마지막 .에서 끝까지 텍스트를 가져와야합니다. 정규식의 첫 번째 캡처 그룹 일치가 /\.([^.]+)$/작동하므로 .s 에서 입력을 분할 하고 마지막을 반환합니다.

파일 이름은 항상 하나 이상을 포함 .하지만 여러 개를 포함 할 수 있습니다 .. (예시 참조)

입력은 항상 일치 ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$합니다.


17
문제를 메인 사이트에 게시하기 전에 향후 샌드 박스 를 사용 하여 문제에 대한 의견을 얻으십시오.
Mego

1
codegolf.meta.stackexchange.com/a/12432/59376- 이 아이디어를 도전에서 얻었습니다.
Magic Octopus Urn

@carusocomputing 좋은 도전!
programmer5000

1
왜 부정적인 투표? 이 도전은 "과도하게 사소한"것입니까?
Abel Tom

@AbelTom 편집 기록은이 질문의 첫 번째 초안에서 다운 보트가 사양이 부족했음을 암시합니다.
패트릭 로버츠

답변:



11

자바 스크립트 (ES6), 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


정의되지 않은 동작의 요점은 모든 것이 진행된다는 것입니다. 비강 악마는 여전히 정의되지 않은 동작이지만 "악의적 인 프로그램 없음"절에 실패 할 수 있습니다.
John Dvorak

10

매스 매 티카, 13 22 바이트

편집 : ".bashrc"테스트 사례를 어떻게 놓쳤는 지 잘 모르겠습니다 . 정직하게 유지 해준 Artyer에게 감사합니다.

FileExtension["a"<>#]&

입력과 일치하는 경우 \.[^.]+, 그 다음 FileExtension우리가 편지를 앞에 추가, 그래서 그냥 빈 문자열을 반환합니다 a. 다른 경우에는 앞에 추가 a해도 출력에 영향을 미치지 않습니다 FileExtension.


11
매스 매 티카 내장 ... 놀랍지 않습니다.
programmer5000

1
질문에 대한 수학적인 내장이 없다면 놀랄 것입니다
sagiksp

내가 티카에 액세스 할 수없는,하지만 난 그 의심 할 .ext에 대한도 실패한 아무것도 초래 .bashrc출력에 필요 bashrc(그것은 실패 Mathics )
Artyer


Mathematica는 내장 메타 만 있으면 Create Built-in XXXXXXXX됩니다.
Magic Octopus Urn




7

c 기능, 21

  • @Dennis 덕분에 1 바이트가 절약되었습니다.
  • @JohanduToit 덕분에 3 바이트가 절약되었습니다.
  • @Neil 덕분에 2 바이트가 절약되었습니다.
  • @algmyr 덕분에 1 바이트가 절약되었습니다.
f(s){s=rindex(s,46);}

온라인으로 사용해보십시오 .


1
레거시 POSIX 함수를 사용해도 괜찮다면 rindex바이트를 저장하는 데 사용할 수 있습니다 .
algmyr

@algmyr 물론, 그것은 TIO에서 잘 작동하므로 사용할 것입니다. 전에는 들어 본 적이 없습니다 rindex(). 팁 주셔서 감사합니다!
Digital Trauma

5

PHP, 21 바이트

<?=pathinfo($argn,4);

온라인으로 사용해보십시오!

더 짧은 표현입니다

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

경로 정보

PHP, 27 바이트

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

터지다

온라인으로 사용해보십시오!

PHP <7.0, 26 바이트

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

더 이상 사용되지 않는 분할


1
첫 번째 줄에 줄 바꿈 줄을 세고 있습니까? 28 바이트가 아닌 27 바이트 여야합니다.
Conor O'Brien

ConorO'Brien @ .I count 개의 복사 한 후 감사 및 분할 버전 A``에서 붙여 넣기
요 르그 Hülsermann

2
pathinfo()를 기반으로 하나가 될 수 있습니다 <?=pathinfo($argn,4);.
manatwork


4

GNU Make , 12 바이트

$(suffix $1)

내장 된 27 바이트를 사용하지 않는 경우 :

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

4

배치, 10 바이트

@echo %~x1

한 번 이상 경쟁이 치열합니다.


4

V , 5 , 3 바이트

이 답변의 대부분은 인쇄 가능한 것보다 인쇄 할 수 없으므로 다음은 16 진수 덤프입니다.

00000000: cd81 ae                                  ...

온라인으로 사용해보십시오!

이것은 Jan Dvorak의 알고리즘 을 사용하며, 더 효율적인 인코딩 일뿐입니다.

설명:

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

오래된 해결책 :

$T.d|

설명해주세요
Outgolfer Erik

@EriktheOutgolfer 완료
제임스

대기 ®는 점 다음에 의미합니까? 롤 이상해.
아웃 골퍼 Erik 14



3

이동 , 85 바이트

바쁘다 ... 번거 롭다.

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

온라인으로 사용해보십시오!

코드에서 괄호 샘플 :

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

2
()(){([])([()])}— 유효한 Brain-Flak입니까?
eush77

5
@ eush77 기술적으로 유효한 Brain-Flak입니다. 오류없이 실행 되기는하지만 재미 있고 유용한 것은 없습니다. 2명령 / 명령이없는 리터럴 이거나 입력에 따라 더 많은 메모리를 지속적으로 할당하는 무한 루프입니다.
James

를 사용 filepath.Ext하면 약간의 물기가 절약됩니다
파월

3

자바 스크립트 (ES6), 33 31 28 바이트

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

주석의 사양 변경으로 인해 필요가 없습니다 +1.

nderscore 덕분에 -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 Online 에서 사용해보십시오 !

설명

        % 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 바이트

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

Awk, 14 13 자

( 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

필요하지 않습니다 ;. 참고로, awk '{$0=$NF}1 명령 줄 옵션이 필요하지 않습니다. 아 .. 피곤해야 해요 난 당신이 무슨 짓을했는지 참조. 명령 행 옵션이 필요합니다.
Robert Benson

1
감사합니다, @RobertBenson. 나는 왜 ;거기에 넣었는지 전혀 모른다 .
manatwork


3

자바 8, 52 27 바이트

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

여기에서 시도하십시오.

마지막 점 (및 점 자체) 앞에있는 모든 것을 아무것도 바꾸지 마십시오.

split ( s->s.split("\\.")[s.split("\\.").length-1];) 또는 substring ( 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. FIFO 어레이를 LIFO 어레이로 덤프
  6. LIFO 배열과 출력을 연결

3

Vim, 5 바이트

$F.d0

설명 : 마지막 찾기 . 줄 , 모든 항목을 삭제하기 전에

또 다른, 더 길지만 내 의견으로는 여전히 9 바이트의 흥미로운 접근법 (후행 줄에 주목)

d/.*\./e

이것은 5 바이트와 비슷하게 작동합니다 (다시 새 줄 끝).

d?\.


2

Brain-Flak , 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

옥타브, 24 바이트

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

ans문자열을 입력으로 받아 들일 수 있는 익명 함수를 만듭니다.

온라인 데모

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.