Dada uma lista de números inteiros, produza uma diferença direta em uma ordem / profundidade especificada.
Para a lista de números inteiros:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
As diferenças diretas nas várias ordens / profundidades são:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Então, com a entrada de
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Você retornaria a lista
(-142, 55, 27, 41, -269, 397)
Entrada
A entrada pode ser via STDIN ou parâmetros de função.
Um número inteiro especificando a profundidade a ser retornada. Será 0 no comprimento da lista menos 1
Uma lista de números inteiros para calcular a diferença direta para
Saída
A saída pode ser via STDOUT ou retornada pela função.
As diferenças avançadas para a profundidade especificada como uma lista de números inteiros
Regras
Funções internas e de terceiros que fazem isso diretamente não são permitidas.
Aplicam-se restrições de brecha padrão .
O código mais curto vence
-
é o único verbo nessa função.Python,
6159 bytesAqui, realizamos a subtração fechando todos, exceto o último da lista, com todos, exceto o primeiro da lista.
zip(L[1:],L)
é equivalente azip(L[1:],L[:-1])
, devido àzip
natureza de assumir o comprimento mínimo das duas listas:Uma alternativa tão longa (apenas Python 2):
Infelizmente, o Python 2 não corta o final da lista, então não posso
map(int.__sub__,L,L[1:])
. Irritantemente, Python 3 faz , masmap
não retorna uma lista de modo que este acaba por ser um byte mais (60 bytes):No entanto, se permitirmos que a entrada seja a profundidade seguida pela lista como
f(3, 2, 5, 6, 7, 5, 10, 25)
(por exemplo, profundidade 3 e lista[2, 5, 6, 7, 5, 10, 25]
), então são 56 bytes :Aqui está outra alternativa que realmente incomodaria qualquer um que visse isso no código de produção (este destrói a lista original):
fonte
L[1]-L.pop(0)
lugar.Mathematica
23 5723 bytesSugestão de Martin Büttner, explorando a capacidade de listar subtrações.
por exemplo
Rest@#-Most@#
realiza a subtração que produz diferenças.O Nest executa a operação no número especificado de vezes, sempre operando na lista mais recente.
fonte
Haskell,
4034 bytesExemplo de uso:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
quais saídas[-142,55,27,41,-269,397]
.Como funciona: calcule repetidamente a diferença entre elementos vizinhos e armazene os resultados intermediários em uma lista. Pegue o
n
th elemento desta lista.Edit: @Zgarb encontrou 6 bytes para salvar. Impressionante!
fonte
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 bytesFunção recursiva simples, usada
map
para varrer a matriz eslice
soltar o primeiro elemento em cada chamada recursiva.Edite 3 bytes salvos, obrigado @DocMax, sugestão realmente inteligente
Teste no console Firefox / FireBug
fonte
p
e guardar 3 caracteres:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 bytes
Recebe a entrada como uma matriz no estilo CJam e depois a profundidade:
e imprime o resultado como uma matriz no estilo CJam.
Teste aqui.
Explicação
fonte
Java,
122119 bytesExemplo de uso: http://ideone.com/ALgYez
3 bytes graças ao Geobits: v)>
fonte
int
e apenas atribuiri=e
aos outros.> <>
5350 bytesUso: preencha previamente a pilha (-v no interpretador python) primeiro com profundidade, seguida pelos números inteiros.
Por exemplo:
Devoluções
Obrigado ao Sp3000 pela ajuda.
fonte
?!
e mover alguns componentes em vez de0=?
?Prelúdio ,
95927978 bytesO formato de entrada é
onde
N
é a profundidade das diferenças eM
é o número de números inteiros na entrada. A adiçãoM
foi necessária, porque não há como o Prelude distinguir a0
do final da entrada. A saída também é uma lista de números inteiros separados por nova linha. Eu tive que assumir a especificação do Prelude levemente ajustada que criamos para esse desafio , porque o Prelude padrão lê números inteiros como valores de bytes, o que torna impossível a inserção de números negativos. Essencialmente, esse é o intérprete Python com umNUMERIC_INPUT
sinalizador adicional .Para referência, existem apenas
483837 caracteres não espaciais - o restante foi apenas necessário para alinhar o código corretamente.Explicação
No Prelude, cada linha é uma "voz" separada que opera em sua própria pilha. O programa é executado coluna por coluna, onde as vozes separadas são tomadas para operar "em paralelo". Todos os comandos são caracteres únicos e os parênteses são loops do tipo Brainfuck (que são inseridos e repetidos sempre que a parte superior da pilha é diferente de zero). Observe que a posição vertical do parêntese de fechamento é irrelevante - colocá-lo em uma voz diferente ainda conta como correspondente ao parêntese de abertura mais recente, e a pilha que é verificada quanto à condição do loop é sempre a voz em que
(
apareceu. Agora, para este programa ...O programa pode ser basicamente dividido em duas partes. As duas linhas inferiores são usadas apenas para a maioria dos loops do programa (exceto o loop principal
N
), passando1
s para frente e para trás. As duas linhas superiores contêm o loop principal e a diferença real. A anotação a seguir tem o código transposto, para que eu possa anotar as colunas individuais:fonte
Python,
70686759 bytesVersão sem golfe antes de eu ser recursivo:
fonte
R,
48 39 4644 bytesRecursão!
x
é o número de iterações a serem executadas ey
é um vetor de números inteiros.if(x)
é verdade enquantox>0
.Recall
chama a função atual, mas com novos argumentos.Diff
gera as diferenças entre os elementos consecutivos da lista / vetor.Versões prévias:
fonte
Recall()
.Python,
928786 bytesEste é o meu primeiro golfe em Python. Todas as sugestões serão apreciadas :)
56 bytes graças a Sp3000: Dfonte
append
emd+=f-e,
. Em geral, para o code-golf, você nunca precisará usarL.append
por causa disso.c,
6855 bytesIsso pode levar um pouco de liberdade às especificações de entrada. Uma matriz int é construída de modo que o elemento 0 seja a profundidade e os elementos 1 a (n + 1) sejam os elementos da lista de entrada 0 a n. Em seguida, o endereço do elemento 1 é passado para a função.
A matriz deve ter terminação zero. A matriz é editada no local.
Por exemplo:
http://ideone.com/m5PDgF
fonte
int *l
?Powershell
115111 bytesExecute como tal:
Saída:
Mover uma chave para um local diferente permite exibir todas as etapas da resposta.
fonte
STATA, 126 bytes
Espera a entrada como um número inteiro que representa a profundidade, seguida por uma lista de números inteiros separados por espaço, ambos fornecidos pelo prompt padrão. Saída é uma lista separada por nova linha de números inteiros.
Primeiro, converte a lista de números inteiros (que vê como uma cadeia longa) em uma lista de variáveis locais cujos nomes são 1,2,3, ... Em seguida, calcula as diferenças avançadas definindo o valor da y-ésima variável local a ser o valor da y + 1ª variável local menos o valor da y-variável local (ie 18-10 = 8), que substitui os valores existentes somente após o uso. Faz isso $ a (valor da variável global a) vezes. Em seguida, ele exibe o valor de cada variável local, 1 de cada vez.
fonte
T-SQL, muitos :)
Quando vi esse problema pela primeira vez, imaginei se havia uma maneira de fazer isso em uma consulta. Embora trivial para a maioria dos idiomas, não é muito para consulta SQL.
A entrada entra nas variáveis @ (para profundidade) e @L para a lista inteira. @L é um tipo de tabela definido pelo usuário
Configuração de entrada
A consulta com alguns comentários
Resultado
fonte
Japt
-h
,175 bytes12 bytes salvos graças a @Shaggy
Experimente online!
fonte
äÏ-X
porän
ambos para economizar mais 2 bytes.SmileBASIC, 76 bytes
Finalmente uma razão para usar
ARYOP
!fonte
Clojure, 47 bytes
Uma recursão simples em função anônima. Você salva 1 byte se a ordem dos argumentos for trocada, como agora
%2
ocorre com mais frequência que%
.fonte
Geléia , 2 bytes
Experimente online!
Explicação
Resposta muito direta: P
fonte
Japt , 7 bytes
Algumas alternativas que eu disponibilizei para Luis para sua solução .
Tente
10 bytes
Tente
fonte