Inspirado por essa pergunta de nossos amigos rivais na Code Review.
Definições
Uma super matriz é uma matriz em que cada novo elemento da matriz é maior que a soma de todos os elementos anteriores. {2, 3, 6, 13}
é uma super matriz porque
3 > 2
6 > 3 + 2 (5)
13 > 6 + 3 + 2 (11)
{2, 3, 5, 11}
não é um super array, porque
3 > 2
5 == 3 + 2
11 > 5 + 3 + 2
Uma matriz duper é uma matriz em que cada novo elemento da matriz é maior que o produto de todos os elementos anteriores. {2, 3, 7, 43, 1856}
é um super array, mas também é um array duper desde
3 > 2
7 > 3 * 2 (6)
43 > 7 * 3 * 2 (42)
1856 > 43 * 7 * 3 * 2 (1806)
O desafio
Escreva uma função ou programa que aceite uma matriz como entrada no formato de lista nativa de idiomas e determine o quão super é a matriz. Opcionalmente, você também pode obter uma entrada de comprimento de matriz (para idiomas como C / C ++). Além disso, você pode assumir que todos os números da lista serão números inteiros maiores que 0. Se for uma super matriz, você deve imprimir It's a super array!
Se for uma matriz super duper , você deve imprimir It's a super duper array!
Também é possível que uma matriz seja duplicada. não super. Por exemplo: {1, 2, 3}
neste caso, você deve imprimir It's a duper array!
Se a matriz não for nem super nem duper, é possível imprimir um valor falso.
Como de costume, esse é um código de golfe, então as brechas padrão se aplicam e a resposta mais curta em bytes vence.
fonte
{1, 2, 3}
matriz?2 * 1
que igualar3
na minha cabeça.super[space][space]array
for permitido.Respostas:
Geléia ,
47454̷4̷ 42 bytesIsso imprime uma string vazia (falsy) para matrizes que não são nem super nem duper. Experimente online!
Como funciona
fonte
JavaScript (ES6),
111110 bytesGuardou um byte graças a @ETHproductions !
Explicação
Pega uma matriz de números, retorna uma string ou o número
0
para false.Teste
Mostrar snippet de código
fonte
s+=s&&n>s&&n,d*=d&&n>d&&n
s
precisa ser feito dessa maneira porque precisa ser definido comofalse
ifn>s
, masd*false
tem o mesmo efeito para que um funcione. Obrigado!Java,
183182 bytesFiz as seguintes suposições:
""
é um valor falso.Se algum destes estiver errado, por favor me diga.
De qualquer forma, não posso deixar de pensar que poderia ter exagerado com a quantidade de variáveis.
Edit: conseguiu salvar um byte, graças a @UndefinedFunction
fonte
boolean s=true
paraboolean s=1<2
?MATL , 66 bytes
Usa a versão atual (10.0.3) , anterior a esse desafio.
A entrada é de stdin. Se não for super ou duper, a saída está vazia (o que é falsey).
EDIT (7 de abril de 2016) : devido a alterações no release 16.0.0 do idioma,
5L
e6L
precisa ser substituído3L
e respeitosamente4L
. O link para o compilador online inclui essas modificações.Experimente online !
Explicação
fonte
C ++ 14,
178, ..., 161157 bytesNão consigo pensar em uma maneira de torná-lo mais curto.Parece que sempre há espaço para melhorias!Atualização 1 : Sou a favor de código seguro, mas pegar uma matriz bruta e seu tamanho como argumentos de função é 9 bytes mais curto que pegar um vetor :(
Atualização 2: agora retorna uma string vazia como valor falso, ao custo de 8 bytes.
Atualização 3: Voltar para 165 bytes, graças ao comentário do CompuChip.
Atualização 4: Outro comentário da CompuChip, mais 4 bytes de desconto.
Atualização 5: usar em
auto
vez destring
juntamente com outra sugestão do CompuChip remove outros 4 bytes do código.Programa completo não destruído com casos de teste:
Saída:
fonte
It's a array!
é verdadeira ( prova ) de acordo com nossa definição no Meta .if ... >=
comparações de comprimento : acho quee=r>s?e:0
é equivalente aif(r<=s)e=0
.for(s=p=*a;--n;s+=r,p*=r)r=*++a
trabalho? Permitiria que você caíssei
completamenteC, 150 bytes
Cada entrada é finalizada por a
0
. Teste principal:Bônus, se for permitido um formato de saída mais compacto, podemos reduzi-lo para 107 bytes :
Nesse caso,
Z
retorne3
para superduper,2
para super,1
para duper e0
para nenhum.fonte
Pitão -
5452 bytesA parte de formatação da string provavelmente pode ser jogada no golfe, mas eu gosto da abordagem de teste de super-duper.
Conjunto de Teste .
fonte
c2"superduper"
pode ser+R"uper""sd"
lang-pyth
não existe.Python 3, 127
Economizou 5 bytes graças a FryAmTheEggman.
Solução bastante básica no momento, nada muito chique. Basta executar um total de soma e produto e verificar cada elemento.
Aqui estão os casos de teste, caso alguém queira tentar bater minha pontuação.
fonte
AWK - 140 bytes
Para aqueles que não conhecem o AWK, os registros são automaticamente analisados em linhas com base na variável
RS
e as linhas são automaticamente analisadas em campos com base na variávelFS
. Também são "" variáveis não atribuídas que, quando adicionadas a um #, agem como um 0. ABEGIN
seção é chamada exatamente uma vez, antes de qualquer registro / campo ser analisado. O restante do idioma é semelhante ao C, com cada bloco de código correspondente sendo aplicado a cada registro. Consulte http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started para obter mais detalhes.Exemplo de execução onde
'code'
está como acima:echo 1 2 6 | 'code'
Também pode colocar a matriz em um arquivo chamado Filename e executar como:
'code' Filename
Se o código for executado com frequência, ele poderá ser colocado em um arquivo de script executável. Isso removeria o anexo
' '
e oawk
comando seria colocado na parte superior do arquivo como:#!/bin/awk -f
fonte
It's a array!
para matrizes que não são super nem duper, que é uma string verdadeira de acordo com nossa definição no Meta .echo 1 2 6 | <the above code>
PHP,
144...113112 BytesExplicação:
Sem registradores globais, seria este (118 bytes):
$a
(rendimentos de conversão de matriz em cadeiaArray
)$p
em 1, aumentando assim o custo do produto.fonte
$a
. Você não precisa se preocupar com avisos e outras coisas - simplesmente ignore-os neste site.$argv[1]
é uma boa alternativa. Dito isto, esse desafio é muito vago quanto aos formatos de entrada e saída. Mas você pode ser penalizado com outros desafios com essa abordagem. E codificar permanentemente a entrada não é aceitável - embora haja algumas exceções permitindo isso. Eu sei que a leitura de entrada é muito cara em PHP, por isso fiz uma pergunta semelhante na meta sobre isso .register_globals
, mas escreverei futuros golfs como uma função. Por que, oh, por que os short_closures foram rejeitados?R , 115 bytes
Experimente online!
Valor de falsidade:
It's a array!
Nada muito chique aqui, exceto talvez o usosapply
em uma lista de funções.fonte
Scala, 172 bytes
Ungolfed (embora realmente não haja muito trabalho para fazer isso):
fonte
Haskell, 136 bytes
f
é a função necessária. Observe que a soma vazia é 0 e o produto vazio é 1, e é por isso que[0]
não é nem super nem duper.s
captura a estrutura comum de testar super ou duper usando um operador arbitrárioo
e um elemento neutro arbitráriot
. Ofoldr
guarda informação de tuplas(s,b)
em ques
é o resultado de encadeamento todos os elementos vistos com o operadoro
eb
diz se, para cada elemento olhou até agora, este elemento foi maior do que a soma / produto previamente calculado.A produção não é muito disputada e eu apreciaria se alguém contribuísse com uma idéia melhor!
Versão um pouco mais legível:
fonte
05AB1E ,
5351 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
Veja aqui uma explicação de como
.•dwā•
é "duper" e como„¦È!
é "array!".fonte
Geléia , 37 bytes
Experimente online!
Programa completo.
Eu recebi a
Z…P
idéia da resposta (antiga) de Dennis.fonte