Thiếu phát hiện trình tự số nguyên - Hệ thống tập tin


8

Thách thức là phát hiện các chuỗi số nguyên bị thiếu của các tệp hoặc thư mục. Bạn có một thư mục chứa đầy các tệp / thư mục được đặt tên là số nguyên.

Các tệp / thư mục được tạo từ nhiều luồng nhưng công việc chưa hoàn thành - do đó có các khoảng trống trong chuỗi.

Đầu vào là hai số nguyên một bắt đầu và kết thúc và nhiệm vụ của bạn là phát hiện số nguyên bắt đầu của các chuỗi bị thiếu tiếp theo. Bạn có thể đoán rằng tất cả các tệp và thư mục trong thư mục nơi chạy chỉ có các tệp hoặc thư mục có tên nguyên.

Các dạng câu trả lời được chấp nhận: các hàm, đoạn mã - chúng phải chạy trên dòng lệnh.
Đầu vào bắt đầu / kết thúc được chấp nhận: bao gồm trên dòng lệnh, biến env / argv đều ổn , tham số cho hàm, đầu vào của người dùng vẫn ổn .
Mã ngắn nhất sẽ thắng.

Cập nhật - Mặc dù tôi đã cố gắng tìm ra cái này, nhưng có nhiều câu trả lời thú vị. Ý tưởng trong câu trả lời Bash của apricotboy đã được sử dụng một phần để giúp tôi thiết kế câu trả lời 35 Byte Bash của mình. Tốt nhất của may mắn trên một tiếp theo.

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
Có vẻ như một yêu cầu thêm khá vô nghĩa với tôi.
Leaky Nun

4
Đây hoàn toàn là một thách thức của tắc kè hoa - yêu cầu lấy đầu vào làm tên tệp và / hoặc thư mục làm cho thách thức này liên quan nhiều hơn đến việc làm việc với hệ thống tệp hơn là thực sự điền vào các lỗ hổng.
Mego

14
Tất cả các bạn đều phàn nàn quá nhiều bất cứ khi nào có một thách thức đòi hỏi bất kỳ chức năng nào ngoài việc xáo trộn các số nguyên hoặc chuỗi xung quanh.
frageum

3
@feersum Chúng tôi phàn nàn khi các thử thách tùy ý yêu cầu chức năng bổ sung (như hệ thống tập tin I / O) không thêm bất cứ điều gì vào thử thách thực tế.
Mego

4
@feersum Làm thế nào để tìm các số nguyên bị thiếu trong chuỗi liên quan đến việc tìm các tệp trong thư mục?
Rò rỉ Nun

Câu trả lời:


5

Python 2, 101 byte

2 byte nhờ @xnor.

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

Tôi đã phát hiện 2 dấu cách sau bạn import osmà bạn nên lấy ra.
Mực giá trị

@ KevinLau-notKenny Cảm ơn.
Nữ tu bị rò rỉ

Tôi nghĩ rằng if~-n!=t:có thể if~t+n:.
xnor

4

APL Dyalog , 25 24 hoặc 36 byte

Nhắc cho giới hạn dưới, sau đó giới hạn trên.

Dường như từ các bình luận cho đến các câu trả lời khác mà OP muốn có trình tự ngắn nhất có thể.

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

{
    ⍵/⍨những trường hợp
    ~không đúng
    ⍵∊⍨là tập hợp chứa
    ⍵-1tiền thân
}của
(
    (⍳⎕)các số nguyên cho đến n
    ~ ngoại trừ
    ⍳⎕-1số nguyên cho đến n -1
)~ngoại trừ
⍎¨việc đánh giá từng
⎕SH'dir/b'danh sách tên trống trong thư mục hiện tại


Câu trả lời cũ trả về chuỗi dài 1:

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

(
    biểu diễn chuỗi
    ¨của mỗi
    (⍳⎕)số nguyên cho đến n
    ~ ngoại trừ
    ⍳⎕-1số nguyên cho đến n -1
)~ngoại trừ
⎕SH'dir/b'danh sách các tệp trong thư mục hiện tại

Chỉ hoạt động trên Windows. Một giải pháp đa nền tảng:

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

0chỉ tên tệp của (các)
⎕NINFOtệp gốc INFOrmation
⍠1bằng cách sử dụng ký tự đại diện
⊢'*'trên tất cả các tệp


Tôi nhận được (⍕¨ (⍳⎕) ~-1) ~ 0⎕NINFO⍠1⊢ '*' Ký tự APL không xác định: ⍠ (U + 2360) Ký tự không phải APL

@ A.Danischewski Bạn đang sử dụng APL nào?
Adám

3
@ A.Danischewski Dyalog APL
Adám

2
@ A.Danischewski Phiên bản cụ thể 15.0+, miễn phí và có thể tải xuống với liên kết tôi cung cấp.
Adám


4

Ruby, 74 60 45 byte

Đầu vào là trong dòng lệnh, chạy nó như thế nào ruby f.rb 0 20. Chỉ hoạt động trong thư mục hiện tại.

-1 byte từ việc giải nén ARGVthành các biến và -13 byte từ việc thay thế selectgrepbằng phép trừ được đặt.

V3: -5 byte từ việc sử dụng quyền thay người cho Dir.globtrong một câu trả lời của Ruby cũ sang một thách thức hệ thống tập tin , theo đề nghị của @PatrickOscity. -10 từ việc nhớ một số điều kỳ quặc trong String#nextchức năng của Ruby .

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

4

Perl 6, 47 byte

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

Giải trình:

{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)

Đã thử sử dụng flipflops. Không quản lý để: P.


đây là một chức năng chỉ cần đặt dấu ngoặc đơn với các đối số sau khi kết thúc }.
Ven

Vâng :-). hy vọng sẽ thấy nhiều người sử dụng Perl 6 ở mọi nơi, ngay cả trong việc chơi golf!
Ven

1

PHP, 64 byte

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

Chạy như thế này:

php -f golf.php 1 20

Ghi chú:

  • Chỉ làm thư mục hiện tại.

  • Không có dòng mới trên đầu ra.

  • Điều này đòi hỏi <?=phải được cho phép trong php.ini. Mà tôi nghĩ là mặc định nhưng tôi không chắc chắn.

Bash, 31 byte

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

Chạy như a 1 20. Một lần nữa, chỉ làm dir hiện tại.

Tôi có thể gửi hai? Hy vọng là như vậy. Đây là bài viết đầu tiên của tôi về Code Golf vì vậy tôi không quá chắc chắn về nghi thức. Hy vọng tôi cũng đang đếm chính xác byte của mình.


3
Bạn có thể gửi nhiều giải pháp, nhưng trừ khi chúng là các dẫn xuất tầm thường của nhau, mỗi giải pháp nên có một câu trả lời riêng.
Mego

Bạn chỉ được phép in phần tử đầu tiên của mỗi phạm vi bị thiếu, nhưng mã PHP có vẻ như nó sẽ in tất cả các số bị thiếu, điều này có đúng không?
frageum

Ah, xấu của tôi. Tôi đã hiểu nhầm nó và chỉ nhằm mục đích có được đầu ra trong câu hỏi, mà không đọc nó đủ. Tôi có nên đưa bài dự thi của mình xuống không?
cậu bé mai

1

Tôi thấy bây giờ đây là một câu hỏi cũ, nhưng, tôi vẫn thích nó ...

PowerShell, 70 byte

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

Chạy dưới dạng tập lệnh từ dòng lệnh, ví dụ: \ misso.ps1 1 20.


0

PowerShell v4 +, 62 byte

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

Lưu dưới dạng tập lệnh trong thư mục mong muốn và gọi nó cục bộ (xem ví dụ bên dưới). Đưa đầu vào $x$yxây dựng một phạm vi .., sau đó chuyển nó đến một Where-Object( |?{...}cơ bản) mà về cơ bản là một bộ lọc. Ở đây chúng tôi chỉ chọn mục nơi mà các yếu tố hiện tại $_-notincác .Namebộ sưu tập của thư mục hiện tại, nhưng các yếu tố trước là -inrằng bộ sưu tập (ví dụ, chỉ có sự khởi đầu của một loạt mất tích).

Đây lslà một bí danh Get-ChildItemvà về cơ bản là những gì bạn mong đợi. Yêu cầu v4 cho việc đóng gói - chọn .Name, nếu không bạn cần $a=ls ".\"|select Name.

Thí dụ

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 byte

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

Tôi đã có một lời giải thích và ảnh chụp màn hình, nhưng tôi đã không đăng phiên bản đó và rời khỏi trang ... Hoặc là hoặc tôi đã đăng câu trả lời cho một chủ đề SO ngẫu nhiên về "cách tốt nhất để đánh dấu một thư mục trong Groovy".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.