ファイル拡張子は何ですか?


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で入力を分割して最後の入力を返します。

ファイル名には常に少なくとも1つ.が含まれますが、複数のファイル名が含まれる場合があります.。(例を参照)

入力は常に一致し^[.a-zA-Z0-9^!\[\]{}@$%+=]+$ます。


17
メインサイトに投稿する前に、今後、Sandboxを使用して課題に関するフィードバックを取得することを検討してください。
メゴ

1
codegolf.meta.stackexchange.com/a/12432/59376-あなたの挑戦からこのアイデアを得ました。
魔法のタコUr

@carusocomputingすてきなチャレンジ!
Programmer5000

1
なぜ反対票?この課題は「非常に些細なこと」ですか?
アベルトム

@AbelTomの編集履歴は、この質問の最初のドラフトに仕様がなかったことに対する投票権があることを示唆しています。
パトリックロバーツ

回答:



11

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


未定義の動作のポイントは、何でも行きます。ただし、鼻の悪魔は未定義の動作ですが、「悪意のあるプログラムはありません」という条項に失敗する可能性があります。
ジョンドヴォルザーク

10

Mathematica、13 22バイト

編集:".bashrc"テストケースを逃した方法がわからない。正直に言ってくれたArtyerに感謝します。

FileExtension["a"<>#]&

入力が一致した場合\.[^.]+、その後、FileExtensionちょうど空の文字列を返しますので、私たちは手紙を付加しましたa。それ以外の場合、先頭に追加aしてもの出力には影響しませんFileExtension


11
Mathematicaの組み込み...驚きはありません。
Programmer5000

1
どんな質問可能性のための任意のMathematicaの組み込みコマンドがなかった場合、私は驚かれると思い
sagikspは

私はMathematicaにアクセスすることはできませんが、私はそれが疑われるでしょう.extのためにfailes何も、につながる.bashrc出力に必要とするbashrc(これはに失敗しMathics
Artyer


MathematicaはメタビルトインするだけCreate Built-in XXXXXXXXです。
魔法のタコUr




7

c関数、21

  • @Dennisのおかげで1バイト節約されました。
  • @JohanduToitのおかげで3バイト節約されました。
  • @Neilのおかげで2バイト節約されました。
  • @algmyrのおかげで1バイト節約されました。
f(s){s=rindex(s,46);}

オンラインでお試しください


1
従来のPOSIX関数を使用rindexしても問題ない場合は、バイトの保存に使用できます。
アルグミール

@algmyr確かに、TIOで問題なく動作するので、使用します。私はrindex()前に聞いたことがない-ヒントをありがとう!
デジタル外傷

5

PHP、21バイト

<?=pathinfo($argn,4);

オンラインでお試しください!

は短い表現です

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

pathinfo

PHP、27バイト

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

爆発する

オンラインでお試しください!

PHP <7.0、26バイト

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

非推奨の分割


1
最初の改行の末尾の改行を数えていますか?これは、27のバイトではなく、28でなければなりません
コナー・オブライエン

ConorO'Brien @あなたがコピーした後、カウントを持っていると分割バージョン``から貼り付ける.Iありがとう
イェルクHülsermann

2
pathinfo()ベース1は、可能性があり<?=pathinfo($argn,4);
マナトワーク


4

GNU Make、12バイト

$(suffix $1)

組み込みの27バイトを使用しない場合:

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


4

V5、3つのバイト

この回答の多くは印刷可能というよりも印刷不可能であるため、hexdumpがあります。

00000000: cd81 ae                                  ...

オンラインでお試しください!

これはJan Dvorakのアルゴリズムを使用しており、たまたまそれをより効率的にエンコードしているだけです。

説明:

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

古いソリューション:

$T.d|

説明してください?
エリックアウトゴルファー

@EriktheOutgolfer完了
ジェームズ

待機®とは、ドットが続くことを意味しますか?笑それは奇妙です。
エリックアウトゴルファー



3

Go、85バイト

Goは...面倒です。

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

オンラインでお試しください!

コードの括弧のサンプル:

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

2
()(){([])([()])}—有効なBrain-Flakですか?
eush77

5
@ eush77技術的には有効な Brain-Flakです。エラーなしで実行されますが、興味深い/有用なことは何もしません。2入力に応じて、より多くのメモリを継続的に割り当てるのは、命令/コマンドなどのないリテラルまたは無限ループのいずれかです。
ジェームズ

を使用filepath.Extすると、数
バイト

3

JavaScript(ES6)、33 31 28バイト

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

コメントの仕様を変更すると、の必要性がなくなり+1ます。

nderscoreのおかげで-3バイト


1
-3 with sliceおよびテンプレート文字列実行:s=>s.slice(s.lastIndexOf`.`)
nderscore

3

Common Lisp、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

Javascript(ES5)、38バイト

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

2
ご存知のように、あなたの答えが編集されたときに、ダウン票はコミュニティユーザーによって自動的にキャストされました。これはバグだと思います。
デニス

できればそれを修正してください!
罪を犯した

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 コマンドラインオプションは不要です。ああ...私は疲れているに違いない。あなたがそこで何をしたかわかる。コマンドラインオプションが必要です。
ロバートベンソン

1
ありがとう、@ RobertBenson。なぜ;そこに置いたのか分かりません。
マナトワーク


3

Java 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配列は1つしか使用できないため)
  5. FIFOアレイをLIFOアレイにダンプします
  6. LIFO配列と出力を連結します

3

Vim、5バイト

$F.d0

説明:最後の.行を見つけて、その前のすべてを削除します

もう1つ長いですが、私の意見では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
{({}<>)<>}<>



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.