Dada uma matriz inteira e dois números como entrada, remova uma certa quantidade do primeiro e do último elementos, especificados pelos números. A entrada pode estar na ordem que você desejar.
Você deve remover os primeiros x elementos, em que x é a primeira entrada numérica e também remover os últimos y elementos, em que y é a segunda entrada numérica.
A matriz resultante é garantida para ter um comprimento de pelo menos dois.
Exemplos:
[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]
Respostas:
Haskell,
55393329 bytesGuardado 16 bytes graças a Laikoni
Economizou mais 6 bytes graças a Laikoni
Economizou mais 4 bytes graças a Laikoni
Estou certo de que isso poderia ser melhorado, mas como iniciante, dei o meu melhor.
Uso
Experimente online!
fonte
xs
.f x a b
paraf a b x
, você pode simplesmente soltar ox
:f a b=reverse.drop b.reverse.drop a
.a#b=let r=reverse in r.drop b.r.drop a
é 38 bytes. Ou podemos ter uma função declarada fora desta?Oitava, 20 bytes
Experimente online!
fonte
Mathematica, 17 bytes
entrada
fonte
;;
! Eu consegui amarrá-loDrop@##2~Drop~-#&
(se considerarmos a entrada em uma ordem estranha como1, {1,2,3,4,5,6}, 2
), mas não melhor.Python ,
2826 bytes-2 bytes graças a @Rod
Experimente online!
fonte
lambda a,n,m:a[n:~m]
+
e, portanto, é aplicada[0]
. Você precisaria de suportes:(a+[0])[n:~m]
.C # (.NET Core) ,
5554 bytesExperimente online!
Usa a
List<int>
como entrada.fonte
List
entrada como para poder usá-lo emCount
vez deLength
.Where
que é apenas ligeiramente mais do que desta maneira que estou muito feliz com tão bem :)using System.Linq;
à contagem de bytes :)using
acrescento na minha resposta, e os métodosSkip
eTake
necessidade queusing
.Perl 5 , 21 bytes
19 bytes de código +
-ap
sinalizadores.Experimente online!
Usos
-a
para autosplit o interior de entrada@F
, então só manter uma fatia de la de acordo com as outras entradas: índice de<>
(segunda entrada) para índice$#F-<>
(tamanho da matriz menos terceira entrada). E$_
é implicitamente impresso graças à-p
bandeira.fonte
Ferrugem, 29 bytes
Chame da seguinte maneira:
Eu me diverti muito lutando com o verificador de empréstimos descobrindo qual era a abordagem mais curta para inferir a vida útil de uma fatia retornada. Seu comportamento em relação aos fechamentos é um tanto irregular, pois inferirá a vida útil, mas apenas se você não declarar o parâmetro como um tipo de referência. Infelizmente, isso entra em conflito com a necessidade de definir o tipo de argumento na assinatura, pois a chamada do método n.len precisa saber o tipo em que está operando.
Outras abordagens que tentei solucionar esse problema:
fonte
Neim , 3 bytes
Experimente aqui
Agradeço à Okx por me incentivar a fazer isso ... :)
fonte
C #, 62 bytes
Toma um
List<int>
como entrada e retorna umIEnumerable<int>
.Isso também funciona para 64 bytes:
fonte
TIS-100,
413405 bytes472 ciclos, 5 nós, 35 linhas de código
O m4,6 na parte superior não faz parte do código, mas sinaliza o posicionamento dos módulos de memória.
Jogue esse nível você mesmo colando isso no jogo:
Então, suponho que isso também conte como uma resposta da lua ...
fonte
MATL , 6 bytes
Experimente online!
A entrada é fornecida como 1) número de elementos para aparar desde o início; 2) número de elementos para cortar a partir do final; 3) matriz. Explicação
fonte
Java (OpenJDK 8) , 32 bytes
Experimente online!
Se realmente restringirmos a matrizes, serão 53 bytes:
Experimente online!
fonte
JavaScript (ES6), 27 bytes
Um segundo parâmetro negativo para
slice
parar de fatiar am
partir do final, no entanto, quandom
é zero, temos que passar um espaço reservado (Infinity
aqui, embora(a,n,m,o)=>a.slice(n,-m||o)
também funcione).fonte
R ,
323130 bytes-1 byte graças ao Rift
-1 byte graças a Jarko Dubbeldam
Avalia para uma função anônima:
1+l
é necessário, pois R possui indexação baseada em 1.sum(n|1)
é equivalente a,length(n)
mas é um byte mais curto.Experimente online!
fonte
pryr::f(n[(1+l):(length(n)-r)])
MATL , 10 bytes
Experimente online!
Explicação:
É um pouco longo para apenas 11 bytes, mas estou escrevendo em detalhes, para aprender também.
fonte
J
, quando usado assim. Eu suspeito que eu estava errado, eu simplesmente não conseguia entender para a vida de mim ... Obrigado por ligar para a sua resposta, eu sou muito mais um novato MATL ...)
e, mais notoriamente,(
tremer ...(
confusa. :) Eu comecei a recitar "ddi" (= "destino, dados, índices" do manual) todas as vezes, e ainda entendi errado algumas vezes.C ++,
9695 bytesAgradecemos a @Tas por salvar um byte!
Experimente online!
C ++ (MinGW), 91 bytes
fonte
#include<list>
? Você pode barbear um byte por terint f
. Compiladores permitirá uma função para não voltar, mas eles alertam contra elaint f
funcionará na maioria dos compiladores, eu vou editar isso. No MinGW, mesmo omitindo completamente o tipo de função funciona. E sim,#include<list>
seria uma maneira compatível com o padrão de incluir o cabeçalho, mas#import<list>
deve funcionar pelo menos no GCC, MinGW e MSVC, por isso também deve estar bem.APL (Dyalog) ,
87 bytesExperimente online!
Isso leva a matriz como a primeira entrada, seguida pelos dois números separadamente.
Explicação
fonte
⎕↓⎕↓⍨-⎕
PHP> = 7.1, 59 bytes
Sandbox do PHP Online
fonte
Flacidez cerebral , 60 bytes
Experimente online!
A entrada está neste formato:
Onde
x
está o número a ser retirado da frente,y
é o número a ser retirado da parte de trás, e a matriz é apenas quantos números você deseja, separados por novas linhas. Aqui estão minhas duas primeiras tentativas (mais longas):E aqui está uma explicação:
fonte
APL (Dyalog) , 5 bytes
Experimente online!
O formato de entrada é
y x A
Explicação
/
é Reduce, que insere a função à esquerda entre cada par de elementos do argumento(⌽↓)
é um trem de funções equivalente a{⌽⍺↓⍵}
, que remove os primeiros⍺
elementos da matriz⍵
e depois reverte a matriz. (⍺
é o argumento da esquerda e⍵
é o argumento da direita)Assim,
(⌽↓)/y x A
é equivalente a⌽y↓⌽x↓A
, que é o que é necessário.fonte
Java 8, 82 bytes
Experimente aqui.
Alternativa com a mesma contagem de bytes ( 82 ) usando um loop:
Experimente aqui.
Explicação:
System.arraycopy
:fonte
(a,n,m)->
tem a mesma contagem de bytes quea->n->m->
. Embora você esteja certo, eu poderia ter usado apenas uma ligação normal em vez de fazer curry. Eu estou meio utilizado de usar currying quando eu tenho dois (ou mais) parâmetros .. Eu já fiz o erro de usar currying quando tenho quatro parâmetros algumas vezes ..C ++,
504846 bytesExperimente online!
fonte
Kotlin , 30 bytes
Experimente online!
Toma
List<Int>
como entrada e cai do começo e depois do fim.fonte
try it online
. Você pode adicionar um código de chamada? como compilar lambda sem definições de tipo no Kotlin? Obrigado.val f: (List<Int>, Int, Int) -> List<Int>
Braquilog ,
1110 bytesExperimente online!
Recebe a entrada como [x, A, y] onde A é a matriz a ser cortada.
(-1 byte graças a @Fatalize.)
fonte
kb₍B&t;Bk₍
.,
acrescenta (veja o resultado deste programa parcial ), não age como∧
. Também não tente copiar itens das respostas antigas do Brachylog (2016-início de 2017) porque era a primeira versão do idioma e os programas não são retrocompatíveis (em particular,,
no Brachylog v1 agora está∧
no Brachylog v2),
ocorreu com a versão anterior, mas não importava neste caso, porque havia umt
pós- ação de qualquer maneira - coincidência de sorte. E sim, eu percebi as diferenças de versão depois de postar isso, eu ainda estava tentando entender as coisas e se debatendo nessa fase. :)Dyalog APL, 16 bytes
Experimente online!
fonte
Pitão, 5 bytes
Experimente aqui
Aceita os argumentos na ordem oposta.
<
e>
em Pyth trim com base na ordem dos argumentos. Por exemplo,<Q5
cortará todos os valores na entrada após a quinta.fonte
tcl, 19
onde
L
está a matriz.demonstração
fonte
CJam , 8 bytes
Bloco anônimo que pega as entradas da pilha na ordem x , y , matriz e as substitui pela matriz de saída.
Experimente online!
Explicação
Considere entradas
2
,1
,[10 20 30 40 50 60]
.fonte
q / kdb, 12 bytes
Solução:
Exemplo:
Explicação:
fonte
Raquete, 33 bytes
Pode ser chamado assim:
fonte