不足している整数シーケンスの検出—ファイルシステム


8

課題は、ファイルまたはディレクトリの整数シーケンスの欠落を検出することです。整数という名前のファイル/ディレクトリで満たされたディレクトリがあります。

ファイル/ディレクトリは複数のスレッドから生成されていますが、ジョブは完了していません-したがって、シーケンスにギャップがあります。

入力は開始と終了の2つの整数であり、タスクは次の欠落シーケンスの開始整数を検出することです。runが置かれているディレクトリ内のすべてのファイルとディレクトリには、整数の名前のファイルまたはディレクトリしかないと想定できます。

受け入れ可能な回答フォーム:関数、コードスニペット-コマンドラインで実行する必要があります。
受け入れ可能な開始/終了入力:コマンドラインに含まれ、環境変数/引数は大丈夫、関数へのパラメーター、ユーザー入力は大丈夫です。
最短のコードが勝ちます。

更新-私はなんとかこれを絞り出しましたが、興味深い答えがたくさんありました。アプリコットボーイのBash回答のアイデアは、35バイトのBash回答を設計する際に一部使用されました。次の運が良かったです。

E.g. Presume files 1,2,3,4,7,8,9,10,18 are present, start is 1, end is 20: 

The output should be: 
5
11
19

5
それは私にはかなり無意味な余分な要件のようです。
Leaky Nun

4
これは完全にカメレオンの課題です。ファイル名やディレクトリとして入力を受け取る必要があるため、実際に穴を埋めるよりも、ファイルシステムを操作することの方が課題になります。
Mego

14
整数や文字列をシャッフルする以外の機能を必要とする課題があるときは、あなたはみんな文句を言いすぎます。
feersum

3
@feersumチャレンジは、実際のチャレンジに何も追加しない追加の機能(ファイルシステムI / Oなど)が恣意的に必要な場合に不平を言います。
Mego

4
@feersumディレクトリ内のファイルの検索に関連して、欠落している整数を順番に見つけるのはどうですか?
Leaky Nun

回答:


5

Python 2、101バイト

@xnorのおかげで2バイト。

import os
t=-1
for n in range(input(),input()+1):
 if~-os.path.isfile(str(n)):
  if~t+n:print n
  t=n

あなたの後にimport os、あなたが取るべき2つの後続スペースを検出しました。
Value Ink

@ KevinLau-notKennyありがとう。
Leaky Nun

if~-n!=t:できると思いますif~t+n:
xnor 2016

4

Dyalog APL25 24または36 バイト

下限を求め、次に上限を求めます。

コメントから他の回答まで、OPはできるだけ短いシーケンスを望んでいたようです。

{⍵/⍨~⍵∊⍨⍵-1}((⍳⎕)~⍳⎕-1)~⍎¨⎕SH'dir/b'

{
    ⍵/⍨どこにあるか、それらの
    ~真実ではない
    ⍵∊⍨セットが含まれていることを
    ⍵-1彼らの前任者
}
(
    (⍳⎕)までの整数のをn個
    ~除い
    ⍳⎕-1までの整数N -1
)~以外
⍎¨の各評価
⎕SH'dir/b'カレントディレクトリの名前の裸のリスト


長さ1のシーケンスを返す古い回答:

(⍕¨(⍳⎕)~⍳⎕-1)~⎕SH'dir/b'

(
    現在のディレクトリ内のファイルのベアリストを除くn -1 までの整数を除くnまで
    ¨の各
    (⍳⎕)整数の文字列表現
    ~
    ⍳⎕-1
)~
⎕SH'dir/b'

Windowsでのみ機能します。クロスプラットフォームソリューション:

(⍕¨(⍳⎕)~⍳⎕-1)~0⎕NINFO⍠1⊢'*'

0ファイル名だけ(S)
⎕NINFOネイティブファイル(複数可)の情報
⍠1ワイルドカードを使用して
⊢'*'、すべてのファイルに


(⍕¨(⍳⎕)〜⍳⎕-1)〜0⎕NINFO⍠1⊢ '*' Unknown APL character:getting(U + 2360)Non-APL character

@ A.DanischewskiどのAPLを使用していますか?
アダム

3
@ A.Danischewski Dyalog APL
アダム

2
@ A.Danischewski具体的にはバージョン15.0以降。無料で、提供したリンクからダウンロードできます。
アダム


4

Ruby、74 60 45バイト

入力はコマンドラインで、のように実行しruby f.rb 0 20ます。現在のディレクトリでのみ機能します。

ARGV変数へのアンパックから-1バイト、selectおよびおよびgrepをセットの減算で置き換えて-13バイト。

V3:@PatrickOscityで提案されているように、別のファイルシステムチャレンジに対する古いRubyの回答での代替の使用から-5バイト。-10 Rubyの関数の癖を覚えてから。Dir.globString#next

a,b=$*
f=[*a..b]-Dir[?*]
puts f-f.map(&:next)

4

Perl 6、47バイト

{my \c;.say if .IO.e??(c=0)!!!c++ for $^a..$^b}

説明:

{my \c;.say if .IO.e??(c=0)!!!c++ for $^a..$^b}
{                                               } # A function. Arguments: $^a and $^b (implicitly)
 my \c;                                           # A variable without prefix (\ is needed only here)
                                  for $^a..$^b    # For each number between $^a and $^b 
       .say if                                    # Print the number if the result is truthy:
               .IO.e??(c=0)!!!c++                 # If the file exists, reset the sequence (don't print this one), otherwise, return the `!(c++)` result (is it the first time we're incrementing)

フリップフロップを使用しようとしました。なんとかできませんでした:P


これは関数です。閉じ}た後、引数を括弧で囲んでください。
ベン

うん:-) ゴルフでも、どこでもPerl 6を使用するより多くの人々に会いたいと思っています!
ベン2016

1

PHP、64バイト

<?=implode("\n",array_diff(range($argv[1],$argv[2]),glob("*")));

次のように実行します。

php -f golf.php 1 20

注意:

  • 現在のディレクトリのみを実行します。

  • 出力の末尾に改行はありません。

  • これには、<?=php.iniでを許可する必要があります。これはデフォルトだと思いますが、よくわかりません。

バッシュ、31バイト

a(){(seq $@;ls)|sort|uniq -u;}

として実行しa 1 20ます。繰り返しますが、現在のディレクトリのみを行います。

2つ提出できますか?そう願っています。これはCode Golfへの私の最初の投稿なので、私はエチケットについてあまり確信が持てません。私も私のバイトを正しく数えているといいのですが。


3
複数のソリューションを提出することができますが、それらがお互いの些細な派生物でない限り、各ソリューションは個別の回答にする必要があります。
Mego

不足している各範囲の最初の要素のみを印刷することになっていますが、PHPコードは不足しているすべての数値を印刷するように見えますが、これは正しいですか?
feersum

ああ、私の悪い。私はそれを誤解しており、十分に読まずに、質問の出力を取得することを目的としていました。提出物を削除する必要がありますか?
アプリコットボーイ

1

これは古い質問ですが、それでも好きです...

PowerShell、70バイト

for($m,$n=$args;$m-le$n;$m++){$w=$a;$a=Test-Path $m;if(!$a-and$w){$m}}

コマンドラインからスクリプトとして実行します(例:。\ misso.ps1 1 20)。


0

PowerShell v4 +、62バイト

param($x,$y)$x..$y|?{$_-notin($a=(ls ".\").Name)-and$_-1-in$a}

目的のディレクトリにスクリプトとして保存し、ローカルで呼び出します(下の例を参照)。入力$xを受け取っ$yてrangeを作成し..、それを基本的にフィルターであるWhere-Object|?{...})にパイプします。ここでは、唯一の現在の要素が項目を選択している$_でカレントディレクトリの収集、しかし前の要素があり、そのコレクション(すなわち、不足している範囲の開始のみを)。-notin.Name-in

ls別名でGet-ChildItem、あなたが期待するものは基本的です。のencapsulation-selectにはv4が.Name必要$a=ls ".\"|select Nameです。それ以外の場合はが必要です。

PS C:\Tools\Scripts\golfing\misd> ls .\

    Directory: C:\Tools\Scripts\golfing\misd

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         7/26/2016   7:48 AM          8 1
-a---         7/26/2016   7:48 AM         10 10
-a---         7/26/2016   7:54 AM          0 18
-a---         7/26/2016   7:48 AM          8 2
-a---         7/26/2016   7:48 AM          8 3
-a---         7/26/2016   7:48 AM          8 4
-a---         7/26/2016   7:48 AM         10 7
-a---         7/26/2016   7:48 AM          8 8
-a---         7/26/2016   7:48 AM          8 9
-a---         7/26/2016   8:18 AM        365 misd.ps1

PS C:\Tools\Scripts\golfing\misd> .\misd.ps1 1 20
5
11
19

0

Groovy、53バイト

{f,s,e->(s..e)-f.listFiles().collect{it.name as int}}

説明とスクリーンショットはありましたが、そのバージョンを投稿せずにページを離れました...それか、「Groovyでディレクトリを統計する最良の方法」についてのランダムなSOスレッドに回答を投稿しました。

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