Ok, ontem foi o segundo dia de Natal e meus pais e eu tivemos um jogo de "sjoelen", como é chamado na Holanda. O programador interno surgiu em mim, mas justamente quando eu tive a resposta, eu a perdi. Eu quero que você refaça isso.
As regras:
Você tem uma prancha de madeira, um sjoelbak , com 4 caixas, cada uma com seu próprio número. Quando um schijf (um objeto parecido com um disco) entra em uma das caixas, você obtém os pontos acima dessa caixa.
Quando há um schijf nas quatro caixas, você não recebe 10, mas recebe 20 pontos.
Exemplo:
Da esquerda para a direita: 3 5 4 3
Cada caixa tem pelo menos 3 schijven (plural de schijf ), ou seja, 20 * 3 = 60 pontos.
Valores resultantes: 0 2 1 0
0 * 2 + 2 * 3 + 1 * 4 + 0 * 1 = 10 pontos.
O que totaliza 60 + 10 = 70 pontos.
A entrada:
a quantidade de schijven da esquerda para a direita, ou seja, "4 5 4 5", [4,5,4,5], "4 \ n5 \ n4 \ n5", o que você quiser.
A saída:
a quantidade de pontos, ou seja, 84, como saída, variável, retorno ou no topo da pilha, o que você quiser.
Como em todo e qualquer código de golfe, você não pode usar scripts externos e o código com o mínimo de bytes vence.
PS: Como você já deve ter notado, sou holandês. Sinta-se livre para editar possíveis erros gramaticais.
fonte
Respostas:
CJam,
23 2120 bytesTalvez eu consiga jogar alguns bytes com isso.
Entrada é como
Saída é a pontuação
Como funciona
Algoritmo
[1 2 3 4]
.1 + 2 + 3 + 4 = 10
, simplesmente adiciono o mínimo schijven comum a cada um para obter o efeito da10
pontuação de bônus .1
cada um, depois multiplico o segundo2
e o adiciono primeiro. Na próxima iteração, recebo a soma atual e escore3
schijven. E assim por diante.Experimente online aqui
fonte
Piet, 240 (30 * 8) codéis, 138 contendo código real
Codel tamanho 10, para melhor visibilidade
Exemplos de teste:
Exibição de fluxo:
Usando minha própria abreviação para facilitar o manuseio e a tela compacta. Ele mostra o fluxo geral do programa, não os locais exatos dos codéis.
Explicação completa:
Salve a imagem e experimente-a neste interpretador Piet online:
PietDev online Piet intérprete
fonte
APL (Dyalog Classic) ,
161312 bytes-3 graças a @ Adám
Experimente online!
⌽+⌊/
reverso (arg) + min (arg)1⌽
gire 1 para a esquerda+\
somas parciais+/
somafonte
Mathematica,
38322320 bytes(Com a ajuda de swish )
Use alinhavando a entrada até o fim:
Alternativo (36 bytes):
fonte
Tr[(# + Min@#) {2, 3, 4, 1}] &
20*Min@#
, você pode se livrar dele substituindo menos por mais, porque convenientemente2+3+4+1==10
.R,
4140 caracteresUso:
No último exemplo,
a
é vetor3 5 4 3
,a-b
é0 2 1 0
, com o qual multiplicamos vetor2 3 4 1
, dando assim o0 6 4 0
que adicionamos com5*b
dando15 21 19 15
(5*b
sendo reciclado para cada membro do vetor adicionado, portanto adicionando efetivamente4*5*b
), que finalmente somamos, dando assim70
.fonte
b=min(a<-scan());sum(5*b+(a-b)*c(2:4,1))
JavaScript (ES6),
9347 bytesUso:
s(1, 2, 3, 4)
Como funciona: a função procura o menor número nos argumentos e multiplica isso por
10
(não com20
) e adiciona o restante da pontuação. Não é necessário multiplicar por20
e subtrair partes da pontuação para continuar o cálculo.Obrigado a edc65 por compartilhar melhorias!
Sem golfe:
fonte
S=(a,b,c,d)=>10*Math.min(a,b,c,d)+a*2+b*3+c*4+d
Pitão , 15
A entrada deve ser separada por vírgula no STDIN, por exemplo
Isso usa o mesmo truque que muitas outras soluções usaram, de adicionar o mínimo a cada elemento para contabilizar o bônus. O mínimo está
hSQ
no código acima. Para explicar a multiplicação por 2, 3, 4 e 1, mapeio d sobre a lista [0,1,2,3] e multiplico o (dl) ésimo elemento da entrada por d + 1. Assim, o -1º elemento é multiplicado por 1, o zeroth por 2, o primeiro por 3 e o segundo por 4. Então eu somar.fonte
J,
2322 caracteresExemplo:
Experimente aqui.
(23 longa definição de função explícita:
v=:3 :'+/+/\.3|.y+<./y'
)fonte
+/2 3 4 1*(+<./)
?2 3 4 1+/ .×]+<./
?Ostrich v0.1.0 ,
4841 caracteres (muito longo)É simplesmente o mesmo que a versão antiga abaixo, exceto que, em vez de usar
@
para girar a pilha inteira,)\+
(desconsulta à direita) é usado.Versão antiga:
Na verdade, descobri dois bugs na minha linguagem recém-implementada, anotada na descrição abaixo. No momento, o idioma é muito, muito parecido com o Golfscript; portanto, se você conhece o Golfscript, deve ser bastante fácil de ler.
Espera entrada como uma matriz no STDIN, porque sou uma maçaneta e esqueci de implementar a E / S na v0.1.0.
Resolver um problema real em Ostrich é bom, porque mostra exatamente quanto mais coisas eu preciso adicionar ao idioma: D
fonte
Python 2, 43 bytes
Inspirado na resposta de @ user2487951.
fonte
Jagl Alpha 1.2 - 20 bytes
A entrada está no formato stdin
(3 4 5 6)
, a saída é deixada na pilha:Aguardando uma resposta do pôster original sobre o formato de saída. Como a entrada é especificada como "o que você quiser" , assumirei que minha entrada pode ser uma matriz no topo da pilha.Agora recebe entrada no stdin.Explicação:
fonte
Haskell, 40
em vez de remover o número mínimo do restante e adicionar
20
s adicionais , isso adiciona mais10
ao número mínimo.fonte
..4*c+d..
Matlab, 27
Demorei um pouco para entender que é um jogo para um jogador. Com a ajuda da função anônima
que é chamado com vetor de linha
fonte
f=
por 2 bytes a menos. A função é armazenada naans
variável.[2:4,1]
reduzirá 2 bytes se a entrada for vetor de coluna.Java, 84 bytes
Eu tenho a idéia de que isso pode ser jogado ainda mais, mas é isso por enquanto.
A chamada com
A(new int[]{3,5,4,3})
, a saída é retornada como int (porqueSystem.out.println()
duplicaria os bytes)Ungolfed
fonte
GolfScript, 22 bytes
Lê a entrada de stdin, no formato
[3 5 4 3]
. Grava a saída em stdout. (Se a entrada como uma matriz na pilha for permitida, a liderança~
poderá ser omitida, totalizando 21 bytes.)Isso usa uma estratégia um pouco diferente das soluções CJam / Pyth / etc.: primeiro construo uma matriz com 2 cópias do primeiro valor de entrada, 3 do segundo, 4 do terceiro e um do quarto. Então eu ordeno esse array, retiro o menor elemento, multiplico por 11 e somado com os outros elementos.
fonte
Python 2, 51
Sem inspiração, mas curto:
Mais pitônico:
fonte
Julia,
48.35 caracteresfunction p(m);sum([2 3 4 1].*m)+10minimum(m);end
na forma de atribuição compacta:
Exemplo:
fonte
Javascript, 97 bytes
fonte
Javascript, ES6, 57
Eu queria ver como a recursão acabaria e, embora definitivamente não seja a resposta mais curta, eu senti que acabou bem.
a*b*c*d
: Pega os valores de entrada e localiza o produto de todos eles e avalia isso como uma expressão booleana para uma instrução if inline. Isso retornará falso se um ou mais dos valores for 0 e verdadeiro para qualquer outro valor.20+f(--a,--b,--c,--d)
: Se retornar true, a função retornará 20 (para o conjunto schijven ) mais a chamada recursiva da função para todos os valores menos um (para remover esse conjunto schijven ). Dessa forma, ele percorrerá recursivamente até que pelo menos uma das caixas esteja vazia.a*2+b*3+c*4+d
Depois de pelo menos uma caixa vazia, a outra parte da instrução if inline será executada. Apenas retorna os pontos para o schijven restante nas caixas.Assim, no final, todos os conjuntos de schijven de 20 pontos e os pontos remanescentes são somados e retornados da função, produzindo a resposta.
fonte
Haskell 42 chars
fonte
f l@[a,b,c,d]=10*minimum l+2*a+3*b+4*c+d
- salva 2 caracteresHPPPL (Linguagem de programação HP Prime),
58.57 bytesO * entre 10 e min não é necessário, então eu o removi.
HPPPL é a linguagem de programação da calculadora gráfica em cores HP Prime / CAS.
Exemplo é executado:
Se não precisa ser um programa, é realizável em um
40.39 bytes de uma linha:fonte
Staq, 72 caracteres
Exemplo de execução:
O Staq possui duas pilhas, uma ativa e uma passiva. O
|
comando alterna a pilha ativa para passiva e vice-versa.Tudo entre chaves define uma função, a primeira letra após a chave de abertura é o nome da função, o restante até a chave de fechamento é a própria função. É possível substituir funções, recursão e funções aninhadas.
{aii}
definiria uma função a que incrementaria o topo da pilha duas vezes. Todas as seguintes instâncias doa
código serão substituídas porii
.Comentários dentro dos pré- requisitos do Staq:
&
adiciona zero no topo da pilha,[
instrui o ponteiro a pular para o correspondente]
se o topo da pilha for zero,x
exclui o valor mais alto da pilha. Portanto, os comentários podem ser escritos no código na forma de&[here is a comment]x
Explicação (também executável):
https://esolangs.org/wiki/Staq
O programa usa uma pilha (inicialmente ativa) para calcular 2a + 3b + 4c + d, e a segunda pilha (inicialmente passiva) para calcular 10 vezes o mínimo dos valores de entrada. Em seguida, ambos os resultados são resumidos e exibidos.
fonte
PowerShell para Windows ,
4847 bytes-1 byte graças a mazzy
Experimente online!
fonte
Powershell for Windows
quando usamos osort
alias? ver meta