Seu objetivo é escrever um programa que receba uma entrada e, quando encadeado N
vezes, execute "multiplicação sequencial". O que é multiplicação sequencial, você pode perguntar? É uma sequência com uma semente a
definida da seguinte forma:
f(0) = a
f(n+1) = f(n)*(f(n)-1)
Então vamos a = 5
. Assim, f(0) = 5
, f(1) = f(0)*(f(0)-1) = 5*4 = 20
, e f(2) = f(1)*(f(1)-1) = 20*19 = 380
.
Se o seu programa foi ABC
, ABC
deve receber entrada a
e saída f(1)
. O programa ABCABC
deve sair f(2)
, etc. Sua série de programas deve receber apenas uma vez e somente uma vez.
Este é um código de golfe, portanto o programa mais curto em bytes vence. As brechas padrão são proibidas.
fonte
if
eelse
.CJam, 5 bytes
Experimente online!
Como funciona
fonte
pl, 5 bytes
Experimente online.
Seria 4 bytes se eu não tivesse sido preguiçoso e não implementado "atribuir a _" ...
Explicação
fonte
05AB1E , 3 bytes
Código:
Explicação:
Experimente online!
fonte
GolfScript, 5 bytes
Experimente online.
De-golfe e comentou:
O intérprete GolfScript lê automaticamente a entrada e a coloca na pilha, mas como uma sequência, não como um número. Portanto, precisamos transformar a entrada em um número com
~
e, depois, novamente com string`
. No final, o intérprete imprimirá automaticamente o número estrito na pilha.(Agora, se o desafio fosse repetir
f(n+1) = f(n)*(-f(n)-1)
, eu poderia ter feito isso em 4 bytes com~.~*
. Descobrir como e por que isso funciona é deixado como um exercício. :)fonte
JavaScript REPL,
2520 bytesTrabalhará na eliminação de um REPL
fonte
Lua,
3518 bytesÉ algo que Lua pode fazer facilmente pela primeira vez!
Edit: Eu descobri muitas coisas em Lua desde que fiz isso, então estou atualizando :)
...
contém o argumento da linha de comando descompactado, destacando que ele usará seu primeiro valor nesse caso, pois não será permitido gastar, resultando apenas em impressãon*(n-1)
.fonte
Y , 7 bytes
Experimente aqui!
É assim que funciona:
j
recebe entrada numérica.z
ativa a impressão implícita.C
inicia um novo link.:
duplica o valor na pilha e ot
diminui, deixando-nos com[a a-1]
. Então, temos[a*a-a]
de*
.!
pula o próximo comando; no EOF, não faz nada. Quando encadeados, eles pulam o comando de entrada e o processo começa novamente.fonte
Jolf, 6 bytes
Experimente aqui!
Explicação
fonte
, 5 caracteres / 7 bytes
Try it here (Firefox only).
Devo realmente explicar isso? Oh bem, aqui vai ...
Explicação
É basicamente avaliado
input*=--input;
em JS.fonte
Perl, 23 bytes
Versão alternativa, 10 bytes
Isso requer a
-p
troca. Não tenho certeza se é um jogo justo em uma questão de layout de fonte .fonte
Haskell,
1411 bytesExemplo de uso
Talvez essa não seja uma função adequada. Se você estiver escolhendo, poderá usar
(*)=<<pred$id
(<- há um espaço no final) por 14 bytes.Edit: @Zgarb reescreveu a função usando a função mônada e salvou 3 bytes. Obrigado!
fonte
(*)=<<pred$
salva 3 bytes. Além disso, deve-se notar que isso não define realmente uma função e o valor de entrada deve ser colocado diretamente após ela.id
torna uma função adequada. Eu coloquei uma nota na minha resposta.Pure bash (sem utilitários), 40
fonte
TI-Basic,
65 bytesExecuta em calculadoras TI-83/84
Este programa funciona devido ao fato de uma expressão na última linha de um programa ser impressa em vez do
Done
texto comum .fonte
:Ans²-Ans
Mathcad, 39 "bytes"
Da perspectiva do usuário, o Mathcad é efetivamente um quadro branco 2D, com expressões avaliadas da esquerda para a direita, de cima para baixo. O Mathcad não suporta uma entrada convencional de "texto", mas utiliza uma combinação de texto e teclas especiais / barra de ferramentas / itens de menu para inserir uma expressão, texto, plotagem ou componente. Por exemplo, digite ":" para inserir o operador de definição (mostrado na tela como ": ="), "[" para inserir um índice de matriz ou "ctl-]" para inserir um operador de loop while (incluindo espaços reservados para o condição de controle e uma expressão corporal). O que você vê na imagem acima é exatamente o que aparece na interface do usuário e como "digitado".
Para fins de golfe, a contagem de "bytes" é o número equivalente de operações do teclado necessárias para inserir uma expressão.
Uma coisa que tenho ainda menos certeza (do ponto de vista da equivalência de "bytes") é como contar criando uma nova região (por exemplo, a: = 5 ou k: = 0..n-1). Eu igualei cada movimento a uma nova região como sendo igual a uma nova linha e, portanto, 1 byte (na prática, eu uso o mouse para clicar onde eu quero a região).
Eu incluí apenas as declarações ativas e não os comentários, e incluí 2 bytes cada para as entradas a e n, mas não os valores em si (5 e 7 no exemplo).
fonte
Haskell, 72 bytes
Esse desafio não é amigável para Haskell. No entanto, o seguinte funciona se a entrada estiver unária e o código for executado no GHCI:
Explicação:
Unário é sempre ímpar, portanto o primeiro aplicativo será convertido em decimal.
x*(x-1)
é sempre par; caso contrário, retornax*(x-1)
ondex
está a entrada. Como Haskell é fortemente digitado e símbolos 'especiais' não podem ser chamados assim&1
, acredito que essa é a única maneira de concluir isso em Haskell, a menos que alguém use variáveis globais ou um formulário de entrada ainda mais estranho.fonte
C ++ (gcc) , 173/176 bytes
Ambas as versões têm uma nova linha crucial no final.
Versão macro, 173 bytes
Experimente online!
Versão do modelo, 176 bytes
Um pouco mais de C ++ ish:
Experimente online!
fonte
Burlesco - 5 bytes
fonte