Portanto, a tarefa é simples, considerando a matriz de números e o resultado, você precisa encontrar quais operações você precisa usar nos números da matriz para obter o resultado solicitado.
Vamos simplificar o início e permitir apenas operações básicas como: adição, subtração, multiplicação e divisão.
Exemplo:
Input : [5,5,5,5,5] 100
Output : 5*5*5-5*5
Para dar alguma vantagem a linguagens como Java, solicitar é implementar a função, não o programa inteiro, e o resultado pode ser retornado via parâmetro ou impresso no console.
O código é pontuado com base na quantidade de bytes e, como é um desafio ao código de golfe, a pontuação mais baixa vence.
Outro requisito é que você pode obter -10 pontos adicionais se o array contiver apenas digids, oferecer suporte a soluções nas quais você pode construir números a partir dos dígitos seguintes. Ou seja,
Input : [1,2,3,4,5] 0
Output : 12-3-4-5
Observe que, desde que as saídas sejam propostas, alguns casos podem ter mais de uma solução. Depende de você fornecer uma ou mais soluções para determinada tarefa.
EDIT: O resultado deve ser válido do ponto de vista matemático, portanto, a divisão é uma divisão racional, não um número inteiro, e a precedência da operação é a mesma da matemática clássica (primeira multiplicação e divisão, depois adição e subtração).
fonte
*
e/
tem precedência sobre+
e-
? Seus dois exemplos se contradizem.Respostas:
Pitão, 23 bytes
Devido a razões de segurança,
*
e/
não irá avaliar on-line, mas eles teoricamente trabalho.Conjunto de testes com apenas
+
e-
.fonte
Oracle SQL 11.2,
322304270 bytes: 1 é a lista de dígitos
: 2 é o resultado pesquisado
Sem golfe:
fonte
TSQL (sqlserver 2016)
310294280 bytesQue oportunidade maravilhosa de escrever código feio:
Golfe:
Experimente online
Legível: (inserção de ponto decimal (.) E remoção do mesmo é necessário para que o sql aceite que 4/5 não é 0 - a remoção do poço é para as pessoas que o testam)
Esta solução também pode lidar com estes tipos de entrada:
fonte
JavaScript (ES6),
165147 bytesAninhado
eval
... adorável.fonte
Python 3,
170155 bytesCrie um gerador com todos os pedidos possíveis dos operadores, combine isso com os números e avalie até obtermos a resposta.
https://repl.it/C2F5
fonte
['+','-','*','/']
por'+-*/'
; comostring
s são iteráveis, ele o tratará como umarray
com cada elemento sendo cada caractere nostring
- portanto, ele funcionará exatamente como você forneceu a matriz que você possui atualmente.Python,
195186 bytesAqui está uma maneira atroz de fazer isso.
A função
x
aceita um argumento de alist
e aresult
-x([1,2,3,4,5], 15)
por exemplo.O programa inicia um ciclo em que começamos a selecionar aleatoriamente se devemos acrescentar
"+", "-", "*", or "/"
entre cada número ou se devemos concatená-los juntos. Parecia uma opção mais concisa do que realmente passar por permutações e tentar todas as combinações para encontrar todos os resultados, e embora demore mais para ser executado e seja muito menos eficiente. (Felizmente, isso não é uma preocupação neste contexto!)Também anexa "." para cada número para evitar operações com números inteiros como
6/4 = 1
. Isso entãoeval
a nossa expressão e determina se o resultado é igual ao que estamos esperando e, se sim, produz a expressão.Este programa nunca sai - ele continuará produzindo resultados até ser morto.
EDIT 1 : Remova novas linhas desnecessárias, onde
if
instruções de uma linha podem ser usadas.fonte
Matlab, 234
238258bytesEstou assumindo, com base nas limitações das outras respostas, que a ordem numérica da matriz de entrada é mantida por decreto.
Esse código pega uma sequência de números
x
, digamos,x = '12345'
e um resultador
, dizr = 15
e retorna todas as sequências de expressões que você pode avaliar para obterr
aox
usar os quatro operadores.Eu usei duas maneiras diferentes de comprimento equivalente para evitar o uso de expressões -type
ones(length())
ourepmat(length())
-type:~~p(1,:)
que retorna valores não-not emp
(ou seja, uma lista de1
s o mesmo comprimento que a primeira dimensão dep
) e0|p(:,1)
que retorna 0 ou está lá -a-value-inp
(ou seja, uma lista de1
s do mesmo tamanho que a segunda dimensão dep
).O Matlab não possui um método de
nchoosek
substituição , por isso dupliquei os operadores o número correto de vezes, calculei todo o espaçonchoosek
para uma seleção maior de operadores e usei umaunique
chamada para comparar o resultado com o que deveria ser (removendo combinações equivalentes como '*** +' e '*** +'). Eu adiciono um espaço à direita para corresponder ao comprimento do vetor de entrada para fins de concatenação e, em seguida, componho as seqüências de caracteres do operador com as de entrada nas colunas de uma matriz. Em seguida, avalio as expressões em colunas para obter resultados e encontrar a ordem dos operadores que correspondem a essas colunas com resultados que correspondem à nossa entradar
.Teste:
x = '12345'
,r = 15
:Se eu precisasse usar uma matriz de valores duplos de precisão, seria necessário
x = num2str(x,'%d');
converter os dígitos em uma sequência de caracteres, adicionando 21 (20 sem o;
) à minha pontuação. * Os bytes extras foram ponto-e-vírgula que eu deixei apenas para que qualquer pessoa executando esse código não veja seu prompt de comando explodir com longas matrizes. Como minha edição produz agora uma pilha gigante de avisos sobre lógicos e operandos de dois pontos, removi o ponto e vírgula na nova versão.Editar 2: Esqueceu de substituir um
2*n+2
comk
.Resposta antiga:
fonte
JavaScript (ES6), 88 bytes
Jogou um pouco de aleatoriedade para a mistura. Muito mais fácil do que iterar sistematicamente pelas combinações.
Suíte de teste
fonte
PHP, 108 bytes
recebe entrada dos argumentos da linha de comando na ordem inversa. Corra com
-r
.demolir
fonte
Perl 5 com
-pa
, 46 bytesExperimente online!
fonte