Schneiden Sie das Array!


27

Entfernen Sie bei einem Ganzzahl-Array und zwei Zahlen als Eingabe eine bestimmte Menge des ersten und des letzten Elements, die durch die Zahlen angegeben werden. Die Eingabe kann in beliebiger Reihenfolge erfolgen.

Sie sollten die ersten x- Elemente entfernen , wobei x die erste numerische Eingabe ist, und auch das letzte y entfernen Elemente, wobei y die zweite numerische Eingabe ist.

Das resultierende Array hat garantiert eine Länge von mindestens zwei.

Beispiele:

[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
Was genau bedeutet es, Werte aus einem Array zu "entfernen" - insbesondere, um sie am Ende zu entfernen? Können wir in Sprachen wie C, in denen ein Array nur ein Zeiger auf das erste Element und eine Länge ist, einfach die Länge ändern, um das Array abzuschneiden? Das ist, was normalerweise in der realen Programmiersprache gemacht wird, aber die Herausforderung ist mir unklar.
Cody Grey

@CodyGray Das Entfernen von Werten aus dem Array sollte so aussehen , aber nicht unbedingt dahinter.
Okx

4
Wie meinst du das mit "aussehen"? Arrays haben keinen Blick - es ist alles hinter den Kulissen!
Cody Grey


2
@Okx Nein, das ist sehr fehlerhaft. Ich würde empfehlen, eine Bestenliste hinzuzufügen.
Erik der Outgolfer

Antworten:


16

Haskell, 55 39 33 29 Bytes

16 Bytes dank Laikoni gespart

6 weitere Bytes dank Laikoni gespart

4 weitere Bytes dank Laikoni gespeichert

Ich bin mir sicher, dass dies verbessert werden könnte, aber als Anfänger habe ich mein Bestes gegeben.

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

Verwendung

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

Probieren Sie es online!


5
Willkommen bei PPCG und Haskell Golf im Besonderen! Das Ziel ist es, so wenig Bytes wie möglich zu verwenden, damit Sie beispielsweise die meisten Leerzeichen entfernen und verkürzen können xs.
Laikoni

@ Laikoni Ah, danke! Bearbeitet, kann nicht sehen, dass ich ohne eine anonyme Funktion und mit Applicative for Functions kürzer werde (nicht sicher, wie das funktioniert).
Henry

Sieht jetzt gut aus! :) Wenn Sie ändern f x a bzu f a b xkönnen Sie einfach das Drop x: f a b=reverse.drop b.reverse.drop a.
Laikoni

1
@Laikoni Wow, interessanter Infix-Trick. Danke noch einmal! Ich konnte es auf 33 Bytes verkürzen, aber der Versuch a#b=let r=reverse in r.drop b.r.drop aist 38 Bytes. Oder dürfen wir eine Funktion außerhalb dieser deklarieren lassen?
Henry

1
@Laikoni Danke für die Einführung, sehr hilfreich. Habe gerade diese Seite heute gefunden, freue mich aber auf jeden Fall darauf, hier noch ein bisschen herumzuspielen!
Henry


6

Mathematica, 17 Bytes

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

Eingang

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


Gute Verwendung von ;;! Ich habe es geschafft, Sie zu binden Drop@##2~Drop~-#&(wenn wir die Eingabe in einer seltsamen Reihenfolge vornehmen 1, {1,2,3,4,5,6}, 2), aber nicht besser.
Greg Martin

6

Python , 28 26 Bytes

-2 Bytes dank @Rod

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

Probieren Sie es online!


save 6 ...lambda a,n,m:a[n:~m]
Aaron

@Aaron dies entfernt einen Gegenstand zu viel.
Ovs

Mein schlechtes .. Es ist ein allgemeiner Trick, den ich manchmal verwende und der nicht vollständig mit den Anforderungen der Herausforderung abgeglichen ist.
Aaron

@Aaron das Slice hat eine höhere Operator-Priorität als das +und wird daher auf angewendet [0]. Sie müssten Klammern: (a+[0])[n:~m].
Ovs

yah, merkte, dass später .. Ich versuche, meine Idee zum
Aaron

6

C # (.NET Core) , 55 54 Bytes

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

Probieren Sie es online!

Verwendet a List<int>als Eingabe.

  • Dank TheLethalCoder 1 Byte gespart!

1
Ich wollte gerade diese +1 beantworten. Sie können jedoch ein Byte speichern, indem Sie ein Listals Eingabe verwenden, damit Sie es Countanstelle von verwenden können Length.
TheLethalCoder

Ich habe eine Lösung gefunden, Wheredie nur geringfügig länger ist als diese Methode, mit der ich auch sehr zufrieden bin :)
TheLethalCoder

Sie müssen using System.Linq;die Byteanzahl nicht erhöhen :)
Stefan

@Stefan Ich muss jedes, was usingich in meiner Antwort hinzufüge, und die Methoden zählen Skipund Takebrauche das using.
Charlie

Hm. in Ordnung. Bei einer anderen Herausforderung wurde mir gesagt, dass diese Verwendungen nicht notwendig waren.
Stefan

5

Perl 5 , 21 Bytes

19 Byte Code + -apFlags.

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

Probieren Sie es online!

Verwendet -a, um die Eingabe automatisch zu teilen @F, und behält dann nur einen Teil davon entsprechend den anderen Eingaben bei: vom Index <>(zweite Eingabe) bis zum Index $#F-<>(Größe des Arrays abzüglich der dritten Eingabe). Und $_wird dank -pFlagge implizit gedruckt .


5

Rust, 29 Bytes

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

Nennen Sie es wie folgt:

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

Ich hatte viel Spaß beim Kämpfen mit dem Leihscheck, um herauszufinden, was der kürzeste Weg war, um daraus die Lebensdauer eines zurückgegebenen Slices abzuleiten. Das Verhalten bei Schließungen ist etwas unregelmäßig, da dies auf die Lebensdauer schließen lässt, jedoch nur, wenn Sie den Parameter nicht als Referenztyp deklarieren. Leider steht dies im Widerspruch zu der Anforderung, den Argumenttyp in der Signatur zu definieren, da der Methodenaufruf n.len den Typ kennen muss, auf dem er ausgeführt wird.

Andere Ansätze, mit denen ich dieses Problem umgehen wollte:

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 Bytes

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

Nimmt ein List<int>als Eingabe und gibt ein zurück IEnumerable<int>.


Dies funktioniert auch für 64 Bytes:

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

4

TIS-100, 413 405 Bytes

472 Zyklen, 5 Knoten, 35 Codezeilen

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

Das m4,6 oben ist nicht Teil des Codes, signalisiert aber die Platzierung der Speichermodule.

Bildbeschreibung hier eingeben

Spielen Sie dieses Level selbst, indem Sie es in das Spiel einfügen:


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

Also ich nehme an, das zählt auch als lua Antwort ...


Sie können es jetzt online ausprobieren! Hinweis: Ich musste eine geschickte Methode ausführen und den oberen Rand der Codedatei als eine Eingabequelle verwenden, da TIO derzeit nur eine einzige Eingabedatei bereitstellt.
Phlarx

4

MATL , 6 Bytes

QJi-h)

Probieren Sie es online!

Die Eingabe erfolgt als 1) Anzahl der zu trimmenden Elemente von Anfang an; 2) Anzahl der Elemente, die vom Ende abgeschnitten werden sollen; 3) Array. Erläuterung

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)

Ein negativer zweiter Parameter slicestoppt das Slicing mam Ende, wenn mjedoch Null ist, müssen wir einen Platzhalter übergeben ( Infinityhier (a,n,m,o)=>a.slice(n,-m||o)funktioniert es zwar auch).


3

R , 32 31 30 Byte

-1 Byte dank Rift

-1 Byte danke an Jarko Dubbeldam

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

Wertet zu einer anonymen Funktion aus:

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

1+list notwendig, da R 1-basierte Indizierung hat. sum(n|1)entspricht length(n)aber es ist ein Byte kürzer.

Probieren Sie es online!


1
Speichern von 1 Byte mitpryr::f(n[(1+l):(length(n)-r)])
Rift

1
Summe (n | 1) ist kürzer als Länge (n)
JAD

@ JarkoDubbeldam ausgezeichnet, danke.
Giuseppe

3

MATL , 10 Bytes

tniQwi-&:)

Probieren Sie es online!

Erläuterung:

Es ist ein bisschen lang für nur 11 Bytes, aber ich schreibe es ausführlich auf, um es selbst zu lernen.

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

Sie haben die
endbasierte

(Trotzdem, habt eine Gegenstimme - ich glaube, das ist gut gelungen und erklärt unter Berücksichtigung der Methode, die ihr benutzt habt)
Sanchises

Nein, ich habe es nicht vergessen! Ich habe es versucht, aber ich habe nicht herausgefunden, wie es funktioniert (und ich habe es wirklich versucht). Ich kam zu dem Schluss, dass es unmöglich ist, etwas davon abzuziehenJ , wenn man es so benutzt. Ich vermutete , dass ich falsch war, konnte ich es einfach nicht herausfinden , für das Leben von mir ... Vielen Dank für die Anbindung an Ihre Antwort, ich bin sehr viel ein MATL Anfänger ...
Stewie Griffin

Keine Sorge, ich lerne auch noch sehr viel - z. B. die Reihenfolge der Eingaben )und mehr notorisch ( zittern ...
Sanchises

@Sanchises Sehr später Kommentar, aber ich bin froh, dass nicht nur ich die Eingangsreihenfolge (verwirrend finde . :) Ich habe jedes Mal versucht, "ddi" (= "Ziel, Daten, Indizes" aus dem Handbuch) zu rezitieren und manchmal immer noch falsch zu verstehen.
Sundar - Reinstate Monica

3

C ++ 96 95 Bytes

Vielen Dank an @Tas für das Speichern eines Bytes!

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

Probieren Sie es online!

C ++ (MinGW), 91 Bytes

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

Meinten Sie #include<list>? Sie könnten ein Byte rasieren, indem Sie haben int f. Compiler lassen zu, dass eine Funktion nicht zurückgegeben wird, warnen jedoch davor
Tas

Ja, danke, int fwird auf den meisten Compilern funktionieren, ich werde das in bearbeiten. Auf MinGW funktioniert sogar das völlige Weglassen des Funktionstyps. Und ja, es #include<list>wäre eine standardkonforme Möglichkeit, den Header #import<list>einzuschließen, sollte aber zumindest auf GCC, MinGW und MSVC funktionieren, also sollte es auch in Ordnung sein.
Steadybox

2

APL (Dyalog) , 8 7 Bytes

⌽⎕↓⌽⎕↓⎕

Probieren Sie es online!

Dies nimmt das Array als erste Eingabe, gefolgt von den beiden Zahlen getrennt.

Erläuterung

            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

Alternative 7-Byte-Lösung: ⎕↓⎕↓⍨-⎕
Adám


2

Brain-Flak , 60 Bytes

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

Probieren Sie es online!

Die Eingabe erfolgt in folgendem Format:

x

a
r
r
a
y

y

Wo xist die Nummer von vorne zu nehmen, yist die Nummer von hinten zu nehmen, und das Array ist nur so viele Zahlen, wie Sie möchten, durch Zeilenumbrüche getrennt. Hier sind meine ersten beiden (längeren) Versuche:

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

Und hier ist eine Erklärung:

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

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

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

>)[()]}{}

1
Es ist schön, ab und zu eine interessante Tarpit-Lösung zu sehen.
Okx

2

APL (Dyalog) , 5 Bytes

(⌽↓)/

Probieren Sie es online!


Eingabeformat ist y x A

Erläuterung

/ is Reduce fügt die Funktion links zwischen jedes Elementpaar des Arguments ein

(⌽↓)ist ein äquivalenter Funktionszug {⌽⍺↓⍵}, der die ersten Elemente des Arrays entfernt und das Array dann umkehrt. ( ist das linke Argument und ist das rechte Argument)

Also (⌽↓)/y x Aist gleichbedeutend damit ⌽y↓⌽x↓A, was gebraucht wird.


2

Java 8, 82 Bytes

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

Probieren Sie es hier aus.

Alternative mit derselben ( 82 ) Byte-Anzahl unter Verwendung einer Schleife:

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

Probieren Sie es hier aus.

Erläuterung:

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

Die java.lang.System.arraycopy()Methode kopiert ein Array vom angegebenen Quellarray, beginnend an der angegebenen Position, an die angegebene Position des Zielarrays. Eine Untersequenz von Array-Komponenten wird vom Quell-Array, auf das von verwiesen wird src, zum Ziel-Array kopiert, auf das von verwiesen wird dest. Die Anzahl der kopierten Komponenten entspricht dem lengthArgument.

Die Komponenten an den Positionen srcPosbis srcPos + length - 1im Quellarray werden jeweils in die Positionen destPosbis zum Zielarray kopiert destPos + length - 1.


Können Sie Bytes sparen, indem Sie kein Currying verwenden?
TheLethalCoder

@TheLethalCoder Nein, in diesem Fall nicht. (a,n,m)->hat die gleiche Byteanzahl wiea->n->m-> . Obwohl Sie Recht haben, hätte ich auch einfach einen normalen Anruf tätigen können, anstatt zu curry. Ich bin irgendwie verwenden currying verwendet , wenn ich zwei (oder mehr) Parameter .. Ich habe schon den Fehler mit currying gemacht , als ich vier Parameter ein paar Mal habe ..
Kevin Cruijssen

Ahh du hast recht, ich habe die Bytes falsch gezählt und das habe ich auch getan.
TheLethalCoder

Kein TIO Link? -
totalhuman

2
Entschuldigung, ich kann das nicht zulassen. Ich habe meine eigene Antwort gepostet , weil ... es eine eingebaute gibt (ok, nicht genau, aber fast)! : o
Olivier Grégoire


2

Kotlin , 30 Bytes

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

Probieren Sie es online!

Nimmt List<Int>als Eingabe und fällt vom Anfang und dann vom Ende.


1
Ich habe keinen Zugang zu try it online. Können Sie einen Anrufercode hinzufügen? Wie kompiliere ich Lambda ohne Typdefinitionen in Kotlin? Vielen Dank.
mazzy

1
@mazzy es könnte wahrscheinlich ein Hack sein, aber Sie können Typen in Variablentypdefinition alsval f: (List<Int>, Int, Int) -> List<Int>
YGolybev

Ich habs! Nett. Ich weiß nicht, ob dies in CodeGolf gültig ist.
mazzy

2

Brachylog , 11 10 Bytes

kb₍B&t;Bk₍

Probieren Sie es online!

Übernimmt die Eingabe als [x, A, y], wobei A das zu trimmende Array ist.

(-1 Byte dank @Fatalize.)


Sie können es durch 1 Byte als solche verkürzen: kb₍B&t;Bk₍. ,hängt an (siehe das Ergebnis dieses Teilprogramms ), es verhält sich nicht so . Versuchen Sie auch nicht , die Dinge aus altem (2016 bis Anfang 2017) zu kopieren Brachylog beantwortet , weil es die erste Version der Sprache war, und Programme sind nicht retrocompatible (insbesondere ,in Brachylog v1 jetzt ist in Brachylog v2)
Fatalize

@Fatalize Danke, aktualisiert. So ,hat in der vorherigen Version anhängen, aber es hat einfach nicht Sache in diesem Fall , weil es eine war , tnachdem es sowieso - glücklicher Zufall. Und ja, ich erkannte die Versionsunterschiede, nachdem ich dies gepostet hatte. Ich war noch dabei, Dinge herauszufinden und herumzuspielen. :)
Sundar - Reinstate Monica


1

Pyth, 5 Bytes

>E<QE

Probieren Sie es hier aus

Fasst die Argumente in umgekehrter Reihenfolge zusammen. <und >in Pyth schneiden basierend auf der Argumentreihenfolge. Zum Beispiel <Q5werden alle Werte in der Eingabe nach dem fünften abgeschnitten.



1

CJam , 8 Bytes

{_,@-<>}

Anonymer Block, der die Eingaben vom Stapel in der Reihenfolge x , y , array nimmt und durch das Ausgabearray ersetzt.

Probieren Sie es online!

Erläuterung

Betrachten Sie Eingänge 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
Guter Punkt, dann nur zum Spaß, hier ist eine Alternative 8-Byte - Lösung :) tio.run/##S85KzP1vxGXIFW1ooGBkoGBsoGBioGBqoGBmEPu/Olg7ps7GrvZ/...
Martin Ender

1

q / kdb, 12 Bytes

Lösung:

{(0-z)_y _x}

Beispiel:

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

Erläuterung:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.