Qual é a extensão do arquivo?


10

Seu desafio é encontrar a extensão do arquivo de um nome de arquivo fornecido:

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

Você deve obter o texto do último . ou do último .até o final da string. A primeira correspondência de grupo de captura da expressão regular /\.([^.]+)$/funciona, assim como dividir a entrada em se .retornar a última.

O nome do arquivo sempre conterá pelo menos um ., mas pode conter vários .. (veja exemplos)

A entrada sempre corresponderá ^[.a-zA-Z0-9^!\[\]{}@$%+=]+$.


17
Considere usar o Sandbox no futuro para obter feedback sobre seus desafios antes de publicá-los no site principal.
Mego 16/05


@carusocomputing nice challenge!
Programmer5000

1
por que os votos negativos? Esse desafio é "extremamente trivial" ou algo assim?
Abel Tom

O histórico de edições do @AbelTom sugere que os votos negativos foram causados ​​pela falta de especificações no primeiro rascunho desta pergunta.
Patrick Roberts

Respostas:



11

JavaScript (ES6), 19 bytes

Retorna o nome do arquivo completo quando não há extensão de arquivo. Suponho que esse seja um comportamento indefinido aceitável .

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


O objetivo do comportamento indefinido é que vale tudo. Embora os demônios nasais, embora ainda tenham comportamento indefinido, possam falhar na cláusula "sem programas maliciosos".
John Dvorak

10

Mathematica, 13 22 bytes

Edit: Não tenho certeza de como eu perdi o ".bashrc"caso de teste. Agradeço a Artyer por me manter honesto.

FileExtension["a"<>#]&

Se a entrada corresponder \.[^.]+, FileExtensionbasta retornar a string vazia, portanto, acrescentamos a letra a. Em qualquer outro caso, a adição anão afeta a saída de FileExtension.


11
Um Mathematica embutido ... nenhuma surpresa.
Programmer5000 #

1
Eu ficaria surpreso se não houvesse nenhum builtins mathematica para qualquer pergunta possível
sagiksp

Eu não tenho acesso a Mathematica, mas eu suspeito que .extresultaria em nada, o que failes para .bashrca necessidade de saída bashrc(Ele falhar em Mathics )
Artyer


O Mathematica precisa apenas de meta-built-ins Create Built-in XXXXXXXX.
Magic Octopus Urn




7

função c, 21

  • 1 byte salvo graças a @Dennis.
  • 3 bytes salvos graças a @JohanduToit.
  • 2 bytes salvos graças ao @Neil.
  • 1 byte salvo graças a @algmyr.
f(s){s=rindex(s,46);}

Experimente online .


1
Se você estiver bem com o uso de funções POSIX herdadas, poderá usar rindexpara salvar um byte.
algmyr

@algmyr Claro, ele funciona bem no TIO, então eu vou usá-lo. Eu nunca tinha ouvido falar rindex()antes - obrigado pela dica!
Digital Trauma

5

PHP, 21 bytes

<?=pathinfo($argn,4);

Experimente online!

é uma expressão mais curta para

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

pathinfo

PHP, 27 bytes

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

explodir

Experimente online!

PHP <7.0, 26 bytes

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

divisão preterida


1
Você está contando uma nova linha à direita para a primeira? Deveria ter 27 bytes, não 28.
Conor O'Brien

@ ConorO'Brien Obrigado. Tenho contagem após copiar e colar da versão dividida um ``
Jörg Hülsermann

2
O pathinfo()baseado poderia ser <?=pathinfo($argn,4);.
Manatwork 17/05/19


4

Marca GNU , 12 bytes

$(suffix $1)

Não usando um builtin, 27 bytes:

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

4

Lote, 10 bytes

@echo %~x1

Estranhamente competitivo pela primeira vez.


4

V , 5 , 3 bytes

Como mais desta resposta é imprimível do que imprimível, aqui está um hexdump:

00000000: cd81 ae                                  ...

Experimente online!

Isso usa o algoritmo de Jan Dvorak , por acaso é uma codificação mais eficiente.

Explicação:

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

Solução antiga:

$T.d|

Explicação, por favor?
Erik the Outgolfer

@EriktheOutgolfer Done
James

Wait ®significa seguido por um ponto? Lol isso é estranho.
Erik the Outgolfer


3

Gelatina , 4 bytes

ṣ”.Ṫ

Um link monádico que pega o nome do arquivo e retorna a extensão sem avanço ..

Experimente online!

Quão?

Literalmente faz o que foi pedido ...

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

3

Go , 85 bytes

Ir é ... problemático.

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

Experimente online!

Uma amostra de parênteses do código:

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

2
()(){([])([()])}- é um Brain-Flak válido?
Eush77 16/05

5
@ eush77 É tecnicamente válido o Brain-Flak, pois será executado sem erros, mas não faz nada de interessante / útil. É apenas o literal 2sem instruções / comandos ou qualquer coisa ou um loop infinito que aloca continuamente mais memória, dependendo da entrada.
James

Usando filepath.Extvai poupar algumas mordidas
powelles

3

JavaScript (ES6), 33 31 28 bytes

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

A alteração de especificação nos comentários elimina a necessidade +1.

-3 bytes graças a nderscore


1
-3 com sliceexecução de cadeia de caracteres e modelo:s=>s.slice(s.lastIndexOf`.`)
nderscore 16/05

3

Lisp comum, 57 bytes

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

Experimente online (adicionou alguns bytes para chamar essa função anônima e exibir a string retornada)

Explicação

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

Eu recebo substring de string invertida, começando em 0, terminando neste


3

Gema, 3 caracteres

*.=

Exemplo de execução:

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

3

MATL, 8 7 bytes

46&YbO)

Experimente no MATL Online !

Explicação

        % 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 bytes

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

2
Para que você saiba, o voto negativo foi convertido automaticamente pelo usuário da Comunidade quando sua resposta foi editada. Eu considero isso um bug .
Dennis

por favor conserte isso se puder!
Sinned

3

C #, 33 41 bytes

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

Edite conforme sugerido:

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

1
Você precisa incluir using Sytem.Linq;na sua contagem de bytes
TheLethalCoder 17/17/17

E também a=>a.Split('.').Last();retorno implícito é mais curto
TheLethalCoder

Graças @TheLethalCoder para correções sugeridas, ainda novos a este :)
LiefdeWen

Estou surpreso este é mais do que a minha solução usando Path...
TheLethalCoder

3

Awk, 14 13 caracteres

( Código de 10 9 caracteres + opção de linha de comando de 4 caracteres.)

{$0=$NF}1

Graças a:

  • Robert Benson por detectar o ponto e vírgula desnecessário (caractere -1)

Exemplo de execução:

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

Você não precisa do ;. e apenas para sua informação, awk '{$0=$NF}1 funciona, nenhuma opção de linha de comando é necessária. Oh ... eu devo estar cansado. Eu vi o que você fez lá. Você precisa da opção de linha de comando.
Robert Benson

1
Obrigado, @RobertBenson. Eu não tenho idéia do por que coloquei isso ;lá.
Manatwork 17/05/19

3

Lua , 53 30 bytes

Substitui tudo até o último .pela string vazia'' .

Parêntese duplo para selecionar apenas o primeiro valor de retorno de gsub .

Quaisquer dicas de golfe são bem-vindas, estou enferrujado na lua ...

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

Experimente online!


3

Java 8, 52 27 bytes

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

Experimente aqui.

Substitua tudo antes do último ponto (e o próprio ponto) por nada.

Isso é mais curto do que usar split ( s->s.split("\\.")[s.split("\\.").length-1];) ou substring ( s->s.substring(s.lastIndexOf('.'));).


3

Táxi , 1397 bytes

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.

Experimente online!

O táxi não tem uma função reversa, então isso aumentou rapidamente. A lógica é:

  1. Quebrar a corda em caracteres
  2. Inverter a matriz
  3. Itere cada um até que um período seja encontrado, armazenando cada um em uma matriz FIFO
  4. Esvazie a matriz (porque há apenas uma matriz LIFO disponível)
  5. Despejar a matriz FIFO na matriz LIFO
  6. Concatene a matriz e a saída LIFO

3

Vim, 5 bytes

$F.d0

Explicação: find last . da fila, exclua tudo antes dele

Outro, mais longo, mas na minha opinião ainda abordagem interessante com 9 bytes (observe a nova linha à direita)

d/.*\./e

Este funciona da mesma forma, 5 bytes (novamente, seguindo uma nova linha):

d?\.


2

Flacidez Cerebral , 84 bytes

Inclui +2 para -rc

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

Experimente 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

Japonês , 6 5 bytes

q'. o

Experimente online!

Explicação

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

Quando você só precisa retornar o último item de uma matriz, pode usar ono lugar de gJ. (Aprendi esse truque de @obarakon uma volta enquanto)
ETHproductions

2

jq, 15 14 caracteres

( Código de 11 10 caracteres + opções de linha de comando de 4 caracteres.)

./"."|last

Exemplo de execução:

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

Teste on-line


2

Oitava, 24 bytes

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

Cria uma função anônima chamada ans que pode aceitar uma string como entrada

Demo Online

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.