Cắt mảng!


27

Cho một mảng số nguyên và hai số làm đầu vào, loại bỏ một lượng nhất định của các phần tử đầu tiên và cuối cùng, được chỉ định bởi các số. Đầu vào có thể theo bất kỳ thứ tự nào bạn muốn.

Bạn nên loại bỏ các phần tử x đầu tiên , trong đó x là đầu vào số đầu tiên và cũng loại bỏ các phần tử y cuối cùng , trong đó y là đầu vào số thứ hai.

Mảng kết quả được đảm bảo có độ dài ít nhất hai.

Ví dụ:

[1 2 3 4 5 6] 2 1 -> [3 4 5]
[6 2 4 3 5 1 3] 5 0 -> [1 3]
[1 2] 0 0 -> [1 2]

2
Chính xác thì nó có nghĩa gì khi "loại bỏ" các giá trị khỏi một mảng đặc biệt là loại bỏ chúng khỏi cuối? Trong các ngôn ngữ như C, trong đó một mảng chỉ là một con trỏ đến phần tử đầu tiên và độ dài, chúng ta có thể thay đổi độ dài để cắt bớt mảng không? Đó là những gì thường được thực hiện trong lập trình thế giới thực, nhưng thách thức đối với tôi không rõ ràng.
Cody Grey

@CodyGray Loại bỏ các giá trị khỏi mảng là những gì nó sẽ trông như thế nào, nhưng không nhất thiết là những gì diễn ra sau hậu trường.
Okx

4
Bạn có ý nghĩa gì bởi "trông giống như"? Mảng không có một cái nhìn - tất cả là đằng sau hậu trường!
Cody Grey


2
@Okx Không, đó là lỗi, tôi khuyên bạn nên thêm bảng xếp hạng.
Erik the Outgolfer

Câu trả lời:


16

Haskell, 55 39 33 29 byte

Đã lưu 16 byte nhờ Laikoni

Đã lưu thêm 6 byte nhờ Laikoni

Đã lưu thêm 4 byte nhờ Laikoni

Chắc chắn điều này có thể được cải thiện, nhưng là người mới bắt đầu, đã cho nó bức ảnh đẹp nhất của tôi.

r=(reverse.).drop
a#b=r b.r a

Sử dụng

(5#0) [6,5,4,3,2,1,3]

Hãy thử trực tuyến!


5
Chào mừng bạn đến với sân golf PPCG và Haskell nói riêng! Mục tiêu là sử dụng càng ít byte càng tốt, ví dụ bạn có thể loại bỏ hầu hết các khoảng trắng và rút ngắn xs.
Laikoni

@Laikoni À, cảm ơn! Đã chỉnh sửa, không thể thấy bản thân mình đi ngắn hơn nếu không có chức năng ẩn danh và sử dụng ứng dụng cho các chức năng (không chắc cách thức hoạt động).
Henry

Nhìn tốt bây giờ! :) Nếu bạn đổi f x a bthành f a b x, bạn chỉ cần bỏ x: f a b=reverse.drop b.reverse.drop a.
Laikoni

1
@Laikoni Wow, thủ thuật infix thú vị. Cảm ơn một lần nữa! Tôi đã có thể rút ngắn nó xuống còn 33 byte, nhưng cố gắng làm a#b=let r=reverse in r.drop b.r.drop alà 38 byte. Hay chúng ta được phép có một hàm được khai báo bên ngoài cái này?
Henry

1
@Laikoni Cảm ơn bạn đã giới thiệu, rất hữu ích. Chỉ cần tìm thấy trang web này ngày hôm nay, nhưng chắc chắn mong muốn được chơi xung quanh đây một số nữa!
Henry


6

Toán học, 17 byte

#[[#2+1;;-#3-1]]&

đầu vào

[{1, 2, 3, 4, 5, 6}, 2, 1]


Sử dụng tốt đẹp ;;! Tôi quản lý để ràng buộc bạn với Drop@##2~Drop~-#&(nếu chúng tôi nhận đầu vào theo thứ tự kỳ lạ như thế 1, {1,2,3,4,5,6}, 2), nhưng không tốt hơn.
Greg Martin

6

Python , 28 26 byte

-2 byte nhờ @Rod

lambda a,n,m:a[n:len(a)-m]

Hãy thử trực tuyến!


lưu 6 ...lambda a,n,m:a[n:~m]
Aaron

@Aaron này loại bỏ một mục quá nhiều.
trứng

xấu của tôi .. Đó là một mẹo phổ biến đôi khi tôi sử dụng và không kiểm tra đầy đủ các yêu cầu của thử thách ..
Aaron

@Aaron lát cắt có quyền ưu tiên toán tử cao hơn so với +và do đó được áp dụng cho [0]. Bạn sẽ cần dấu ngoặc : (a+[0])[n:~m].
trứng

yah, nhận ra rằng sau này .. tôi đang cố gắng thực hiện ý tưởng của mình
Aaron

6

C # (.NET Core) , 55 54 byte

using System.Linq;(a,x,y)=>a.Skip(x).Take(a.Count-x-y)

Hãy thử trực tuyến!

Sử dụng List<int>như là một đầu vào.

  • Lưu 1 byte nhờ TheLethalCoder!

1
Tôi vừa mới trả lời +1 này. Tuy nhiên, bạn có thể lưu một byte bằng cách lấy Listlàm đầu vào để bạn có thể sử dụng Countthay vì Length.
TheLethalCoder

Tôi đã đưa ra một giải pháp sử dụng Wherechỉ dài hơn một chút so với cách này mà tôi cũng khá hài lòng :)
TheLethalCoder

Bạn không cần thêm using System.Linq;vào số byte :)
Stefan

@Stefan Tôi cần đếm từng câu usingtôi thêm vào, và các phương thức SkipTakecần điều đó using.
Charlie

hm đuợc. Trong một số thử thách khác, tôi được cho biết rằng những ứng dụng đó không cần thiết.
Stefan

5

Perl 5 , 21 byte

19 byte mã + -apcờ.

$_="@F[<>..$#F-<>]"

Hãy thử trực tuyến!

Sử dụng -ađể tự động đặt đầu vào bên trong @F, sau đó chỉ giữ một lát của nó theo các đầu vào khác: từ chỉ mục <>(đầu vào thứ hai) đến chỉ mục $#F-<>(kích thước của mảng trừ đầu vào thứ ba). Và $_được in ngầm nhờ -pcờ.


5

Rust, 29 byte

|n,i,j|&n[i..<[_]>::len(n)-j]

Gọi nó như sau:

let a = &[1, 2, 3, 4, 5, 6];
let f = |n,i,j|&n[i..<[_]>::len(n)-j];
f(a, 2, 1)

Tôi đã có rất nhiều niềm vui khi chiến đấu với người kiểm tra mượn để tìm ra cách tiếp cận ngắn nhất là gì để nó có thể suy ra thời gian của một lát cắt được trả lại. Hành vi của nó xung quanh việc đóng cửa có phần thất thường, vì nó sẽ suy ra thời gian sống, nhưng chỉ khi bạn không thực sự khai báo tham số là một kiểu tham chiếu. Thật không may, điều này mâu thuẫn với việc được yêu cầu xác định loại đối số trong chữ ký là lệnh gọi phương thức n.len cần biết loại nó đang hoạt động.

Các cách tiếp cận khác tôi đã cố gắng giải quyết vấn đề này:

fn f<T>(n:&[T],i:usize,j:usize)->&[T]{&n[i..n.len()-j]}     // full function, elided lifetimes
let f:for<'a>fn(&'a[_],_,_)->&'a[_]=|n,i,j|&n[i..n.len()-j] // type annotation only for lifetimes. Currently in beta.
|n:&[_],i,j|n[i..n.len()-j].to_vec()                        // returns an owned value
|n,i,j|&(n as&[_])[i..(n as&[_]).len()-j]                   // casts to determine the type
|n,i,j|&(n:&[_])[i..n.len()-j]                              // type ascription (unstable feature)
|n,i,j|{let b:&[_]=n;&b[i..b.len()-j]}                      // re-assignment to declare the type


4

C #, 62 byte

using System.Linq;(l,x,y)=>l.Where((n,i)=>i>=x&i<=l.Count-y-1)

Lấy một List<int>làm đầu vào và trả về một IEnumerable<int>.


Điều này cũng hoạt động cho 64 byte:

using System.Linq;(l,x,y)=>l.Skip(x).Reverse().Skip(y).Reverse()

4

TIS-100, 413 405 byte

472 chu kỳ, 5 nút, 35 dòng mã

m4,6
@0
MOV 0 ANY
S:MOV UP ACC
JEZ A
MOV ACC ANY
JMP S
A:MOV RIGHT ACC
L:JEZ B
MOV DOWN NIL
SUB 1
JMP L
B:MOV 0 RIGHT
MOV RIGHT NIL
@1
MOV RIGHT LEFT
MOV LEFT DOWN
MOV RIGHT DOWN
MOV DOWN LEFT
@2
MOV UP ACC
MOV UP LEFT
MOV ACC LEFT
@4
MOV 0 RIGHT
MOV UP NIL
S:MOV LEFT ACC
JEZ A
MOV ACC RIGHT
JMP S
A:MOV UP ACC
L:JEZ B
MOV RIGHT NIL
SUB 1
JMP L
B:MOV 0 UP
K:MOV RIGHT ACC
MOV ACC DOWN
JNZ K
@7
MOV UP ANY

M4,6 ở trên cùng không phải là một phần của mã, nhưng báo hiệu vị trí của các mô-đun bộ nhớ.

nhập mô tả hình ảnh ở đây

Chơi cấp độ này bằng cách dán này vào trò chơi:


function get_name()
    return "ARRAY TRIMMER"
end
function get_description()
    return { "RECIEVE AN ARRAY FROM IN.A", "RECIEVE TWO VALUES A THEN B FROM IN.T", "REMOVE THE FIRST A TERMS AND LAST B TERMS FROM IN.A", "ARRAYS ARE 0 TERMINATED" }
end

function get_streams()
    input = {}
    trim = {}
    output = {}

  arrayLengths = {}

    a = math.random(1,5) - 3

    b = math.random(1,7) - 4

    arrayLengths[1] = 9+a
    arrayLengths[2] = 9+b
    arrayLengths[3] = 8-a
    arrayLengths[4] = 9-b

    s = 0

    trimIndex = 1

  for i = 1,4 do
      for k = 1,arrayLengths[i] do
          x = math.random(1,999)
      input[k+s] = x
            output[k+s] = x
        end

        input[s + arrayLengths[i] + 1]= 0
        output[s + arrayLengths[i] + 1]= 0

        a = math.random(0,3)
        b = math.random(0,arrayLengths[i]-a)

        trim[trimIndex] = a
        trim[trimIndex+1] = b

        trimIndex = trimIndex + 2

    s = s + arrayLengths[i] + 1
    end

    s = 1
    trimIndex = 1

    for i = 1,4 do

      for i = s,s+trim[trimIndex]-1 do
          output[i]=-99
        end

        for i = s + arrayLengths[i] - trim[trimIndex+1], s + arrayLengths[i]-1 do
      output[i]=-99
        end

  trimIndex = trimIndex +2
  s = s + arrayLengths[i] + 1
    end

    trimmedOut = {}
    for i = 1,39 do
            if(output[i] ~= -99) then
                    table.insert(trimmedOut, output[i])
            end
    end

    return {
        { STREAM_INPUT, "IN.A", 0, input },
        { STREAM_INPUT, "IN.T", 2, trim },
        { STREAM_OUTPUT, "OUT.A", 1, trimmedOut },
    }
end
function get_layout()
    return {
        TILE_COMPUTE,   TILE_COMPUTE,   TILE_COMPUTE,   TILE_COMPUTE,
        TILE_MEMORY,    TILE_COMPUTE,    TILE_MEMORY,   TILE_COMPUTE,
        TILE_COMPUTE,   TILE_COMPUTE,   TILE_COMPUTE,   TILE_COMPUTE,
    }
end

Vì vậy, tôi cho rằng điều này cũng được tính là một câu trả lời lua ...


Bây giờ bạn có thể thử nó trực tuyến! Lưu ý: Tôi phải thực hiện một cách thông minh và sử dụng phần đầu của tệp mã làm một nguồn đầu vào, vì TIO hiện chỉ cung cấp một tệp đầu vào duy nhất.
Phlarx

4

MATL , 6 byte

QJi-h)

Hãy thử trực tuyến!

Đầu vào được cho là 1) số phần tử cần cắt từ đầu; 2) số phần tử cần cắt từ cuối; 3) mảng. Giải trình

Q   % Implicit input (1). Increment by 1, since MATL indexing is 1-based.
Ji- % Complex 1i minus real input (2). In MATL, the end of the array is given by `1i`.
h   % Concatenate indices to get range-based indexing 1+(1):end-(2).
)   % Index into (implicitly taken) input array. Implicit display.


3

JavaScript (ES6), 27 byte

(a,n,m)=>a.slice(n,-m||1/m)

Một tham số thứ hai âm để slicedừng cắt mtừ cuối, tuy nhiên khi mbằng 0, chúng ta phải vượt qua một trình giữ chỗ ( Infinityở đây, mặc dù (a,n,m,o)=>a.slice(n,-m||o)cũng hoạt động).


3

R , 32 31 30 byte

-1 byte nhờ Rift

-1 byte nhờ Jarko Dubbeldam

pryr::f(n[(1+l):(sum(n|1)-r)])

Đánh giá một chức năng ẩn danh:

function (l, n, r) 
    n[(1 + l):(sum(n|1) - r)]

1+llà cần thiết vì R có lập chỉ mục dựa trên 1. sum(n|1)tương đương với length(n)nhưng nó ngắn hơn một byte.

Hãy thử trực tuyến!


1
tiết kiệm 1 byte vớipryr::f(n[(1+l):(length(n)-r)])
Rift

1
Tổng (n | 1) ngắn hơn chiều dài (n)
JAD

@JarkoDubbeldam tuyệt vời, cảm ơn bạn.
Giuseppe

3

MATL , 10 byte

tniQwi-&:)

Hãy thử trực tuyến!

Giải trình:

Nó hơi dài chỉ 11 byte, nhưng tôi cũng đang viết nó một cách chi tiết, để tự học nó.

---- Input ----
[1 2 3 4 5 6]
2
1
----- Code ----
           % Implicit first input
t          % Duplicate input.
           % Stack: [1 2 3 4 5 6], [1 2 3 4 5 6]
 n         % Number of elements
           % Stack: [1 2 3 4 5 6], 6
  i        % Second input
           % Stack: [1 2 3 4 5 6], 6, 2
   Q       % Increment: [1 2 3 4 5 6], 6, 3
    w      % Swap last two elements
           % Stack: [1 2 3 4 5 6], 3, 6
     i     % Third input
           % Stack: [1 2 3 4 5 6], 3, 6, 1
      -    % Subtract
           % Stack: [1 2 3 4 5 6], 3, 5
       &:  % Range with two input arguments, [3 4 5]
           % Stack: [1 2 3 4 5 6], [3 4 5]
         ) % Use as index
           % Stack: [3 4 5]
           % Implicit display


(vẫn có một upvote - Tôi tin rằng điều này được chơi tốt và được giải thích khi xem xét phương pháp bạn đã sử dụng)
Sanchises

Không, tôi đã không quên điều đó! Tôi đã thử, nhưng tôi không tìm ra cách làm cho nó hoạt động, (và tôi thực sự đã thử). Tôi kết luận rằng không thể trừ đi thứ gì đó J, khi được sử dụng như thế này. Tôi nghi ngờ mình đã sai, tôi chỉ không thể hiểu được về cuộc sống của mình ... Cảm ơn vì đã liên kết với câu trả lời của bạn, tôi rất là người mới chơi MATL ...
Stewie Griffin

Đừng lo lắng, tôi vẫn còn học hỏi rất nhiều - ví dụ, thứ tự của các yếu tố đầu vào )và nổi tiếng hơn là ( run rẩy ...
Sanchise

@Sanchises Nhận xét rất muộn, nhưng tôi mừng vì không chỉ tôi thấy thứ tự đầu vào (gây nhầm lẫn. :) Tôi đã từng đọc "ddi" (= "đích, dữ liệu, chỉ mục" từ hướng dẫn sử dụng) mỗi lần và đôi khi vẫn bị lỗi.
- Phục hồi lại

3

C ++, 96 95 byte

Cảm ơn @Tas vì đã tiết kiệm một byte!

#import<list>
int f(std::list<int>&l,int x,int y){for(l.resize(l.size()-y);x--;)l.pop_front();}

Hãy thử trực tuyến!

C ++ (MinGW), 91 byte

#import<list>
f(std::list<int>&l,int x,int y){for(l.resize(l.size()-y);x--;)l.pop_front();}

Ý bạn là #include<list>sao Bạn có thể cạo một byte bằng cách có int f. Trình biên dịch sẽ cho phép một hàm không quay trở lại, nhưng chúng sẽ cảnh báo chống lại nó
TAS

Vâng, cảm ơn, int fsẽ hoạt động trên hầu hết các trình biên dịch, tôi sẽ chỉnh sửa nó. Trên MinGW, thậm chí bỏ hoàn toàn loại chức năng hoạt động. Và vâng, #include<list>sẽ là một cách tuân thủ tiêu chuẩn để bao gồm tiêu đề, nhưng #import<list>nên hoạt động ít nhất trên GCC, MinGW và MSVC, vì vậy nó cũng sẽ ổn.
Steadybox

2

APL (Dyalog) , 8 7 byte

⌽⎕↓⌽⎕↓⎕

Hãy thử trực tuyến!

Điều này lấy mảng làm đầu vào đầu tiên, theo sau là hai số riêng biệt.

Giải trình

            from the input array
⎕↓           drop the first input elements
            reverse the array
⎕↓           drop first input elements
            reverse again to go back to the original array

Giải pháp 7 byte thay thế:⎕↓⎕↓⍨-⎕
Adám


2

Brain-Flak , 60 byte

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

Hãy thử trực tuyến!

Đầu vào ở định dạng này:

x

a
r
r
a
y

y

Trong trường hợp xlà số lấy từ phía trước, ylà số lấy từ phía sau, và mảng chỉ là tuy nhiên nhiều số điện thoại bạn muốn, ngăn cách bởi dòng mới. Đây là hai lần thử đầu tiên (dài hơn) của tôi:

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

Và đây là một lời giải thích:

#Two times:
(()()){({}<

    #Remove *n* numbers from the top of the stack
    {({}<{}>[()])}{}

    #Reverse the whole stack
    ([]){{}({}<>)<>([])}{}<>

>)[()]}{}

1
Rất vui khi thấy một giải pháp tarpit turing mỗi giờ và sau đó.
Okx

2

APL (Dyalog) , 5 byte

(⌽↓)/

Hãy thử trực tuyến!


Định dạng đầu vào là y x A

Giải trình

/ là Giảm, sẽ chèn hàm sang trái giữa mỗi cặp phần tử của đối số

(⌽↓)là một hàm chức năng tương đương {⌽⍺↓⍵}, loại bỏ các phần tử đầu tiên của mảng và sau đó đảo ngược mảng. ( là đối số bên trái và là đối số bên phải)

Như vậy, (⌽↓)/y x Atương đương với ⌽y↓⌽x↓A, đó là những gì cần thiết.


2

Java 8, 82 byte

a->n->m->{int l=a.length-m-n,r[]=new int[l];System.arraycopy(a,n,r,0,l);return r;}

Hãy thử nó ở đây.

Thay thế bằng số byte tương tự ( 82 ) bằng cách sử dụng vòng lặp:

(a,n,m)->{int l=a.length-m,r[]=new int[l-n],i=0;for(;n<l;r[i++]=a[n++]);return r;}

Hãy thử nó ở đây.

Giải trình:

a->n->m->{                      // Method with integer-array and two integer parameters and integer-array return-type
  int l=a.length-m-n,           //  Length of the array minus the two integers
      r[]=new int[l];           //  Result integer-array
  System.arraycopy(a,n,r,0,l);  //  Java built-in to copy part of an array to another array
  return r;                     //  Return result-String
}                               // End of method

System.arraycopy:

arraycopy(Object src, int srcPos, Object dest, int destPos, int length):

Các java.lang.System.arraycopy()phương pháp bản sao một mảng từ mảng nguồn quy định, bắt đầu ở vị trí quy định, đến vị trí cụ thể của mảng đích. Một chuỗi các thành phần mảng được sao chép từ mảng nguồn được tham chiếu srcđến mảng đích được tham chiếu bởi dest. Số lượng thành phần được sao chép bằnglength đối số.

Các thành phần tại các vị trí srcPosthông qua srcPos + length - 1trong mảng nguồn được sao chép vào các vị trí destPosthông qua destPos + length - 1, tương ứng, của mảng đích.


Bạn có thể lưu byte bằng cách không sử dụng currying?
TheLethalCoder

@TheLethalCoder Không, trong trường hợp này thì không. (a,n,m)->có cùng số byte như a->n->m->. Mặc dù bạn đúng nhưng tôi chỉ có thể sử dụng một cuộc gọi thông thường thay vì cà ri. Tôi thường sử dụng currying khi tôi có hai (hoặc nhiều) tham số .. Tôi đã mắc lỗi sử dụng currying khi tôi có bốn tham số một vài lần ..
Kevin Cruijssen

Ahh bạn đúng, tôi đã nhầm lẫn các byte và tôi đã làm điều đó cũng như cà ri chắc chắn là đến bây giờ!
TheLethalCoder

Không có liên kết TIO? -
hoàn toàn là

2
Xin lỗi, không thể để điều đó trôi qua. Tôi đã đăng câu trả lời của riêng mình vì ... có một tích hợp (ok, không chính xác, nhưng gần như)! : o
Olivier Grégoire


2

Kotlin , 30 byte

{a,s,e->a.drop(s).dropLast(e)}

Hãy thử trực tuyến!

Lấy List<Int>làm đầu vào và giảm từ đầu và sau đó từ cuối.


1
Tôi không truy cập được try it online. Bạn có thể thêm một mã người gọi? Làm thế nào biên dịch lambda mà không có định nghĩa kiểu trong Kotlin? Cảm ơn.
mê mẩn

1
@mazzy có thể là một hack, nhưng bạn có thể chỉ định các loại trong định nghĩa loại biến làval f: (List<Int>, Int, Int) -> List<Int>
YGolybev

Hiểu rồi! Tốt đẹp. Tôi không biết điều này có hợp lệ trong CodeGolf không.
mê mẩn

2

Brachylog , 11 10 byte

kb₍B&t;Bk₍

Hãy thử trực tuyến!

Lấy đầu vào là [x, A, y] trong đó A là mảng cần cắt.

(-1 byte nhờ vào @Firthize.)


Bạn có thể rút ngắn nó thêm 1 byte như vậy : kb₍B&t;Bk₍. ,không nối thêm (xem kết quả của chương trình một phần này ), nó không hoạt động như thế nào . Ngoài ra, đừng cố gắng sao chép những câu trả lời cũ (2016 đến đầu năm 2017) bởi vì đây là phiên bản đầu tiên của ngôn ngữ và các chương trình không tương thích với nhau (đặc biệt, ,trong Brachylog v1 hiện có trong Brachylog v2)
Fatalize

@Firthize Cảm ơn, cập nhật. Cũng ,đã xuất hiện trong phiên bản trước, nhưng nó chỉ không thành vấn đề trong trường hợp này bởi vì tdù sao cũng có sau đó - sự trùng hợp may mắn. Và vâng, tôi nhận ra sự khác biệt của phiên bản sau khi tôi đăng bài này, tôi vẫn đang tìm hiểu mọi thứ và loay hoay ở giai đoạn này. :)
- Phục hồi Monica


1

Bình thường, 5 byte

>E<QE

Hãy thử nó ở đây

Đưa các đối số theo thứ tự ngược lại. <>trong Pyth trim dựa trên thứ tự đối số. Ví dụ: <Q5sẽ cắt bỏ tất cả các giá trị trong đầu vào sau giá trị thứ năm.



1

CJam , 8 byte

{_,@-<>}

Khối ẩn danh nhận các đầu vào từ ngăn xếp theo thứ tự x , y , mảng và thay thế chúng bằng mảng đầu ra.

Hãy thử trực tuyến!

Giải trình

Xem xét đầu vào 2, 1, [10 20 30 40 50 60].

{      }    e# Block
            e# STACK: 2, 1, [10 20 30 40 50 60]
 _          e# Duplicate
            e# STACK: 2, 1, [10 20 30 40 50 60], [10 20 30 40 50 60]
  ,         e# Length
            e# STACK: 2, 1, [10 20 30 40 50 60], 6
   @        e# Rotate
            e# STACK: 2, [10 20 30 40 50 60], 6, 1
    -       e# Subtract
            e# STACK: 2, [10 20 30 40 50 60], 5
     <      e# Slice before
            e# STACK: 2, [10 20 30 40 50]
      >     e# Slice after
            e# STACK: [30 40 50]

1
Điểm hay, sau đó chỉ để giải trí, đây là một giải pháp 8 byte thay thế :) tio.run/##S85KzP1vxGXIFW1ooGBkoGBsoGBioGBqoGBmEPu/Olg7ps7GrvZ/ tựa
Martin Ender

1

q / kdb, 12 byte

Dung dịch:

{(0-z)_y _x}

Thí dụ:

q){(0-z)_y _x}[1 2 3 4 5 6;2;1]
3 4 5
q){(0-z)_y _x}[6 2 4 3 5 1 3;5;0]
1 3
q){(0-z)_y _x}[1 2;0;0]
1 2

Giải trình:

{          } / lambda function
          x  / input array
       y _   / drop y elements from .. (takes from start)
 (0-z)       / negative z ()
      _      / drop -z elements from ... (takes from end)

1

Vợt, 33 byte

(λ(a i j)(drop-right(drop a i)j))

Nó có thể được gọi như vậy:

((λ(a i j)(drop-right(drop a i)j)) '(1 2 3 4 5 6) 2 1)

Tôi có thể có một liên kết đến trang web của ngôn ngữ?
Okx

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.