Nas brechas padrão , é proibido o seguinte :
Alegando que sua resposta está escrita em "MyOwnLanguage", onde o comando
x
significa "leia uma sequência de números, divida-os em grupos de três e imprima os últimos números desses grupos em que o segundo número é menor que o primeiro"
Aqui, vamos fazer exatamente a mesma coisa.
Tarefa
Dada uma sequência de números inteiros positivos, cujo comprimento é divisível por 3, divida-os em grupos de três e imprima os últimos números dos grupos em que o segundo número é menor que o primeiro.
Casos de teste
Input Output
[] []
[1,2,3,4,5,6,7,8,9] []
[2,1,3,5,4,6,8,7,9] [3,6,9]
[3,1,4,1,5,9,2,6,5] [4]
[100,99,123] [123]
[123,123,456] []
[456,123,789] [789]
Pontuação
Isso é código-golfe . A resposta mais curta em bytes vence.
As brechas padrão se aplicam, portanto, lembre-se de não ter um comando interno x
que execute essa tarefa.
code-golf
arithmetic
array-manipulation
Freira Furada
fonte
fonte
MyOwnLanguage
e adicionar ox
comando ...: Px
que executa especificamente essa função.p
, posso usá-lo?Respostas:
Oitava, 32 bytes
Experimente online!
ou
Verifique os casos de teste!
fonte
Geléia ,
98 bytesExperimente online!
Como funciona
fonte
Haskell,
3029 bytesMinha primeira tentativa de jogar golfe em Haskell, talvez eu tenha perdido uma ou duas otimizações
-1 byte graças a @JulianWolf
fonte
x d=d
você pode economizar um byteMathematica, 37 bytes
Supondo que isso satisfaça as especificações, a ngenisis recebe crédito por essa abordagem, levando a uma economia de 1 byte!
Função pura.
BlockMap[...,#,3]&
divide a lista de entrada em sub-listas de tamanho 3 e em seguida opera em cada sublista com a funçãoIf[#>#2,Print@#3]&@@#&
. O resultado é que cada último número qualificado é impresso. A função também retorna um valor (ou seja, uma lista deNull
um terceiro, contanto que a lista de entrada), que parece ser um comportamento permitido.Mathematica,
4238 bytesAgradecemos a Martin Ender por economizar 4 bytes!
Função pura.
#~Partition~3
faz o que você pensa.Cases[X,P:>Q]
seleciona todos os elementos daX
correspondência do padrãoP
e retorna o resultado da regra de transformação:>Q
aplicada a cada instância. Aqui, o padrão a ser correspondido é{a__,b_}/;a>0
:b_
corresponderá ao último elemento da lista e aa__
todos os outros elementos (nesse caso, os dois primeiros); ligue para elesy
ez
por enquanto. O sneakya>0
então se expande paray>z>0
, que é o teste que queremos aplicar (válido porque a especificação diz que tudo será um número inteiro positivo). E a regra de transformação é:>b
, que simplesmente substitui cada triplo ordenado correspondente pelo seu último elemento.Submissão original:
Função pura; uma implementação simples, além da
#.{1,-1,0}
que calcula a diferença entre o primeiro e o segundo elementos de cada sub-lista de 3 elementos.fonte
#>#2&@@#&
é mais curto. Mas no geral é ainda mais curto para usarCases
em vez deSelect
:Cases[#~Partition~3,{a__,b_}/;a>0:>b]&
a>0:>
tem dois tipos de magia nele!BlockMap
é tentador aqui.BlockMap[If[#>#2,#3,Nothing]&@@#&,#,3]&
funciona e tem apenas 39 bytes ... podemos salvar alguns bytes?BlockMap[If[#>#2,Print@#3]&@@#&,#,3]&
indiscutivelmente satisfaz a especificaçãoPitão, 10 bytes
Suíte de teste
fonte
R, 35 bytes
fonte
Braquilog (2), 14 bytes
Experimente online!
Brachylog, ao contrário, luta com esse tipo de problema. Observe que este programa tem uma complexidade computacional horrível, pois força bruta que divide a entrada em grupos de 3 (não tendo nenhuma "divisão em grupos" incorporada); corre rapidamente com quatro grupos, mas muito lentamente com cinco.
Explicação
fonte
l÷₃;?ḍ₍
é uma alternativa mais rápida./
não÷
; eles são equivalentes aqui), mas é um byte mais longo, então eu o descartei enquanto jogava golfe.J , 14 bytes
Isso avalia um verbo monádico. Experimente online!
Explicação
fonte
Alice ,
1211 bytesAgradecemos a Leo por economizar 1 byte.
Experimente online!
Usa os pontos de código de uma string como lista de entrada e gera o caractere correspondente às saídas que devem ser mantidas.
Explicação
fonte
r
vez deex
. TIO05AB1E , 8 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
fonte
dc , 30 bytes
E / S: um número por linha.
fonte
Perl 5 , 31 bytes
30 bytes de código +
-p
sinalizador.Experimente online!
Substitui cada grupo de 3 números (
\d+ (\d+) (\d+)
) pelo terceiro ($2
) se o segundo ($1
) for menor que o primeiro ($&
) e nada diferente.fonte
CJam , 15 bytes
Bloco anônimo que espera argumento na pilha e deixa o resultado na pilha.
Experimente online! (Executa todos os casos de teste)
Explicação
fonte
Flak cerebral , 82 bytes
Experimente online!
fonte
Gelatina , 10 bytes
Experimente online!
ou
Verificar casos de teste
-3 bytes graças a @LeakyNun
Explicação
fonte
s3µṪ×>/µ€ḟ0
s3µṪWx>/µ€
R, 37 bytes
Versão com a
scan()
qual eu não gosto, mas a torna mais curta.Versão com a
function()
qual é mais fácil testar (41 bytes)Graças ao @ Giuseppe! Boa idéia para usar a reciclagem do índice.
Teste:
Resultado:
fonte
x
a partir stdin usandox=scan()
no início, em vez de definir uma função, você também pode simplesmente definiri=c(1,2,0)
desde índices lógicos são reciclados ou seja,x=scan();i=c(1,2,0);x[!i][x[i>1]<x[i==1]]
x=scan()
abordagem, pois torna a entrada muito complicada. E eu não posso torná-lo repetível então.matrix()
mas de alguma forma eu não acreditava que seria possível abreviá-lo.JavaScript (ES6),
4644424139 bytesTente
Insira uma lista de números separados por vírgula, sem espaços.
Explicação
fonte
y%3>1&a[y-1]<a[y-2]
?Casca , 8 bytes
Experimente online!
Explicação
Este programa está um pouco envolvido, então tenha paciência comigo.
A função
ΓȯΓ↑<
pega uma lista do comprimento 3x = [a,b,c]
,. O primeiroΓ
dividex
ema
e[b,c]
, e os alimenta como argumentos para a funçãoȯΓ↑<
. Isso deve ser equivalente a((Γ↑)<)
, mas devido a um bug / recurso do intérprete, na verdade é equivalente a(Γ(↑<))
, interpretado como uma composição deΓ
e↑<
. Agora,a
é alimentado para a última função usando aplicação parcial, a função resultante↑<a
é fornecidaΓ
, que desconstrói[b,c]
emb
e[c]
. Em seguida,b
é alimentado para↑<a
, resultando em uma função que pega os primeirosb<a
elementos de uma lista. Esta função é finalmente aplicada a[c]
; o resultado é[c]
sea>b
, e[]
de outra forma. Essas listas são concatenadasṁ
para formar o resultado final, que é impresso implicitamente.Sem o "recurso", eu teria 9 bytes:
fonte
Python 3 ,
4342 bytes1 byte graças ao xnor.
Experimente online!
fonte
MATL , 10 bytes
O resultado é exibido como números separados por espaços.
Experimente online!
Ou verifique todos os casos de teste . Isso exibe uma representação de string da saída, para que uma matriz vazia seja realmente vista como
[]
. Observe que em MATL um número é igual a uma matriz singleton, portanto,[4]
é mostrado como4
.Explicação
fonte
Röda , 15 bytes
Röda é quase tão curta quanto as línguas de golfe ...
Isso pega três valores do fluxo e empurra o terceiro (
_3
) de volta, se o segundo (_2
) for menor que o primeiro (_1
).Os sublinhados são açúcar de sintaxe para
for
loops; portanto, o programa pode ser escrito como{{[a]if[b<c]}for a,b,c}
ou mesmo{[a]for a,b,c if[b<c]}
.Nenhum link TIO, porque não funciona no TIO por algum motivo (embora funcione com a versão mais recente do Röda que antecede o desafio).
fonte
Java 7,
8685 bytes-1 byte graças a @ PunPun1000
Explicação:
Experimente aqui.
fonte
3,9
no caso de teste em1,2,3,4,5,6,7,8,9
vez de3,6,9
).C #, 126 bytes
Se você deseja um programa inteiro com o método, seria 175 bytes :
Economizou 7 bytes com a ajuda de TheLethalCoder
fonte
(int[]i)
pode simplesmentei
não haver necessidade do tipo.(i)
.Python 2 , 57 bytes
Experimente online!
fonte
CJam , 16 bytes
A saída é mostrada como números separados por espaços.
Experimente online!
Explicação
fonte
PHP, 89 bytes
Experimente online!
fonte
JavaScript,
108107108 bytesEsta é uma função JS anônima (lambda) válida. Adicione
x=
no início e chame likex([5,4,9,10,5,13])
. Saídas como funçãoreturn
.O fragmento recebe a entrada como uma lista de números inteiros separados por vírgula.
fonte
martin
edennis
como id?[5,4,9,10,5,13]
.,
resultou em uma matriz de strings em vez de números! A solução está perfeitamente bem. Somente o trecho do caso de teste estava errado. Eu consertei isso agora. Obrigado por apontar isso! :)Perl5.8.9,
7360 bytes(58 + 2 para o sinalizador 'n' para ler o arquivo inteiro e a para divisão automática). Supõe que a entrada seja linhas de números separados por espaço
Redução graças ao Dada. Incluindo a impressão no final para visibilidade, isso economizaria 8 bytes, se não.
fonte
print"\n"
no final. Além disso, você pode fazer$b[1]<$b[0]&&print"$b[2] "while@b=splice@a,0,3
para salvar 7 bytes. Finalmente, você pode usar-a
sinalizador em vez de fazer@a=split
(ele fará o mesmo automaticamente e armazenará o resultado em@F
vez de@a
); com o Perl 5.8.9, você precisará,-na
enquanto o Perls recente-a
é suficiente. Isso deve levá-lo a 47-48 bytes.Clojure, 43 bytes
Entediante :/
fonte
Bash , 61 bytes
Experimente online!
fonte