Definição e Regras
Uma matriz golfy é uma matriz de números inteiros, em que cada elemento é maior ou igual à média aritmética de todos os elementos anteriores. Sua tarefa é determinar se uma matriz de números inteiros positivos fornecida como entrada é de golfe ou não.
Você não precisa lidar com a lista vazia.
Você pode escolher dois valores distintos não vazios. Eles devem ser consistentes e devem obedecer a todas as outras regras de problemas de decisão . Este é o código-golfe , o código mais curto em cada idioma vence!
Casos de teste e exemplo
Por exemplo, a seguinte matriz:
[1, 4, 3, 8, 6]
É uma matriz de golfe, porque cada termo é maior que a média aritmética dos anteriores. Vamos trabalhar passo a passo:
Número -> Elementos precedentes -> Média -> Segue a regra? 1 -> [] -> 0,0 -> 1 ≥ 0,0 (Verdadeiro) 4 -> [1] -> 1,0 -> 4 ≥ 1,0 (Verdadeiro) 3 -> [1, 4] -> 2,5 -> 3 ≥ 2,5 (Verdadeiro) 8 -> [1, 4, 3] -> 2. (6) -> 8 ≥ 2. (6) (Verdadeiro) 6 -> [1, 4, 3, 8] -> 4,0 -> 6 ≥ 4,0 (Verdadeiro)
Todos os elementos respeitam a condição, portanto, esta é uma matriz de golfe. Observe que, para o propósito deste desafio, assumiremos que a média de uma lista vazia ( []
) é 0
.
Mais casos de teste:
Entrada -> Saída [3] -> Verdadeiro [2, 12] -> Verdadeiro [1, 4, 3, 8, 6] -> Verdadeiro [1, 2, 3, 4, 5] -> Verdadeiro [6, 6, 6, 6, 6] -> Verdadeiro [3, 2] -> Falso [4, 5, 6, 4] -> Falso [4, 2, 1, 5, 7] -> Falso [45, 45, 46, 43] -> Falso [32, 9, 15, 19, 10] -> Falso
Observe que este é o quebra - cabeça 1 do CodeGolf-Hackathon e também é publicado no Anarchy Golf (que está quebrado) - Reeditado por histocrat , mas eu sou o autor original dos dois sites e, portanto, posso repassá- los aqui.
fonte
Respostas:
Python 2 , 37 bytes
Experimente online!
Saídas via código de saída: trava (código de saída 1) para matrizes de golfe, apenas sai com o código de saída 0 para matrizes que não são de golfe. ovs e Jonathan Frech salvou 3 bytes.
Python 2 , 44 bytes
Experimente online!
Uma variante mais tradicional, que retorna
True
para matrizes de golfe, além dissoFalse
. Jonathan Frech salvou 2 bytes.fonte
a==[]or
pode sera and
.sum(a)<=len(a)*a.pop()*[]
do caso base, que é sempre verdadeiro comoint < list
!Gelatina ,
65 bytesExperimente online!
Como funciona
fonte
ÆmƤµ⁼Ṣ
JavaScript (ES6),
3332 bytesO código também funciona com valores negativos, como
[-3, -2]
. Retornafalse
para uma matriz de golfe,true
para outras matrizes. Edit: Salvo 1 byte graças a @JustinMariner.fonte
!
já que a especificação pede apenas dois valores diferentes; portanto, retornarfalse
quando é uma matriz de golfe é bom.Wolfram Language (Mathematica) , 35 bytes
Experimente online!
Saídas
False
para matrizes de golfe eTrue
outros.fonte
MATL ,
98 bytesSaídas
0
para matrizes de golfe,1
caso contrário.Experimente online!
Explicação
Considere entrada
[1, 4, 3, 8, 6]
.fonte
Haskell ,
535048 bytesExperimente online!
Edit: -3 bytes graças ao Zgarb!
Explicação
A versão sem pontos acima é equivalente ao seguinte programa:
Dada uma entrada
s=[1,4,3,8,6]
,scanl1(+)s
calcula as somas de prefixo[1,5,8,16,22]
ezipWith(*)[1..](tail s)
deixa cair o primeiro elemento e multiplica-se todos os outros elementos, com o seu índice de:[4,6,24,24]
. A lista agora está ativa se, em pares, as somas do prefixo forem menores ou iguais ao índice de elementos e tempos, que pode ser verificado zipando ambas as listas(<=)
e verificando se todos os resultados estãoTrue
comand
.fonte
C # (Compilador Visual C #) , 71 + 18 = 89 bytes
18 bytes adicionais para
using System.Linq;
Experimente online!
fonte
using System.Linq;
, na verdade seriam 89 bytes, às vezes expressos como "71 + 18 = 89" para mostrar que 18 bytes são necessários, mas não fazem parte da solução, enquanto a contagem final ainda é o último número na linha de título ( o que é útil para alguns analisadores automáticos).APL (Dyalog) , 10 bytes
Esta é uma função de prefixo tácito anônimo (chamado de trem monádico em termos de APL).
Experimente todos os casos de teste no TIO!
É isso
∧/
totalmente verdade que⊢
os elementos≥
são maiores ou iguais a+\
as somas acumuladas÷
dividido por⍳
os inteiros de 1 a∘
a≢
número de elementos?
fonte
∘
une as coisas da mesma forma que "o" une em "contar os gatos". É realmente chamado de composição .C (gcc) ,
626062 bytesb=
).Experimente online!
fonte
05AB1E , 5 bytes
Experimente online!
A extensa ajuda de Dennis e Adnan chegou a esta versão reduzida. Também foi corrigido um erro para tornar isso possível, obrigado novamente a vocês. Tomo pouco crédito por esta resposta.
05AB1E , 10 bytes
Experimente online!
Longo porqueDgsO/
é o equivalente a "médio" em 05AB1E.Aparentemente
ÅA
é a média aritmética.fonte
+\÷J
(divida a soma acumulada por índices) no Jelly. Não é tão fácil no 05AB1E? Edit: Deixa pra lá.ü+
que, na verdade, não há divisão por índices além deg
obter o comprimento da matriz,L
pressionar1,2,...,n
e dividir para obter a média, que ainda é essencialmente 5 bytes..S_
é um longo caminho a percorrer<=
, se alguém tiver alguma idéia lmk.÷W
trabalhar em vez deü.S_P
?ÅA
, entãoηÅA÷W
funciona agora.APL (Dyalog) , 15 bytes
Experimente online!
Quão?
fonte
PowerShell , 60 bytes
Experimente online!
Leva a entrada como uma matriz literal (por exemplo,
@(1, 4, 3, 8, 6)
) para$a
. Define nossa$o
variável utput como1
. Então faz um loop$a
. A cada iteração, estamos (ab) usando a conversão implícita do PowerShell para*=
o resultado de uma comparação booleana em relação à nossa$o
produção. O booleano é se o valor atual$_
é igual-g
ou superiore
aos termos anteriores$a[0..$i++]
somados (-join'+'|iex
) dividido por quantos termos já vimos$i
. Portanto, se qualquer passo no caminho for falso, ele$o
será multiplicado por0
. Caso contrário, ele permanecerá por1
toda parte.Simplesmente colocamos
$o
no pipeline e a saída está implícita.1
por verdade e0
por falsey.fonte
Perl 5, 27 +2 (-ap) bytes
Experimente Online
fonte
C # (.NET Core) , 74 bytes
Experimente online!
Retorna 0 para falso e 1 para verdadeiro.
Resposta de 3 bytes a mais do que o núcleo dos chryslovelaces . Mas, no total, vários bytes mais curtos porque minha variante não precisa de nenhuma instrução.
using
fonte
Cubix , 35 bytes
Experimente online!
Não é o uso mais eficiente do espaço (6 não operações no código) Não produz saída para uma matriz de golfe,
1
para uma matriz que não seja de golfe.Expande para o seguinte cubo:
Explicação a seguir , mas basicamente contém algo como a resposta MATL de Luis Mendo ou a resposta Julia de Dennis .
Assista correr!
fonte
Matlab e Octave,
4136 bytes5 bytes salvos thx em Luis Mendo
Experimente online!
fonte
a
fosse zero. Mas esse é um truque útil, em situações semelhantes, que você deve ter em mente.SQL (MySQL), 68 bytes
Experimente online!
Retorna 1 para matrizes de golfe e 0 caso contrário. Toma a entrada de uma tabela chamada ,
t
. Para criart
, execute:e para carregar os valores:
fonte
Ruby , 30 bytes
Experimente online!
Inspirado pela resposta de Lynn . Joga
NoMethodError
para o golfe, retornanil
caso contrário.fonte
Python 2 , 52 bytes
Experimente online!
Python 2 ,
50484442 bytesand
.S=k=0
.or
e o valor booleano da comparação comok
valor de incremento.NameError
usando uma variável indefinida em vez de aZeroDivisionError
.Experimente online!
fonte
q / kdb + , 14 bytes
Solução:
Exemplos:
Explicação:
Bastante simples com o
avgs
built-in:fonte
Julia 0.6 , 29 bytes
Retorna falso ou verdadeiro .
Experimente online!
fonte
R ,
3834 bytesExperimente online!
fonte
y
nos argumentos da função, usarcumsum(x)
diretamente é 4 bytes mais curto. É uma penacummean
não existe na base de R.Adicione ++ , 54 bytes
Experimente online!
Versão não original, 30 bytes
Experimente online!
A saída 1 para matrizes de golfe e 0 de outra forma
Como eles trabalham
A primeira versão foi criada por mim, sem verificar outras soluções. O segundo foi inspirado no comentário de Dennis , então estou menos feliz com isso.
A primeira versão
dbLR$
#
BF
B
€
g
k
{...}
I
K
U
Y
Z
g
k
l
u
w
¦+
AbL
/
0b]$
ABcB]
Bc
zip
ª!
A segunda versão
¬+
J
BcB/
@0@B]
fonte
Pitão ,
1110 bytes-1 byte graças ao Sr. Xcoder
Experimente online!
fonte
SI.OM._
(porto de solução de cairdcoinheringaahing de Jelly, por Erik o Outgolfer), ou 10 bytes usando a sua abordagem:.A.egb.O<Q
Java (OpenJDK 8) , 96 bytes
Sei que não é uma boa linguagem para o golfe, mas ainda assim!
Matriz de entrada como primeiro argumento de ints separados por vírgula para testar.
Retorna 1 para verdadeiro, 0 para falso.
Experimente online!
fonte
Java 7, 100 bytes
Golfe:
Ungolfed:
Experimente online
Retorna 0 para ungolfy e 1 para matrizes de golfe. Um pouco mais que a resposta java 8.
fonte
PHP, 44 bytes
recebe entrada dos argumentos da linha de comando, sai com
0
(ok) para uma matriz de golfe, com1
mais.Corra com
-nr
ou experimente online .fonte
J, 19 bytes
+/\ % #\
médias dos prefixos:#\
produz 1..n}:0,
adicione 0 ao começo e remova o último[>:
é o elemento da lista original por elemento> = para a lista deslocada de médias?*/
são todos os elementos de maior, ou seja, a lista anterior é todos os1
s?Experimente online!
fonte
AWK , 39 bytes
Experimente online!
Observe que o link TIO possui 5 bytes extras
i=s=0
para permitir a entrada de várias linhas.fonte
Japonês , 10 bytes
Chegou com duas soluções de 10 bytes, parece que não consegue melhorar isso.
Tente
Explicação
Alternativo
Tente
fonte