Contagem regressiva
Seu objetivo para este desafio do código-golfe é contagem regressiva e, enquanto isso, reciclar números. Deixe-me explicar.
Primeiro, seu aplicativo lê um número, como argumento do programa ou usando stdin. Em seguida, basta contagem regressiva assim:
10 9 8 7 6
(em ordem decrescente )
Mas espere, tem mais!
Reciclando
Há situações em que podemos imprimir todos os números, mas não listar todos os números, podemos fazer reciclagem! Deixe-me dar um exemplo rápido:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Agora, ainda listamos todos os números, 110, 109, 108, mas reciclamos um 0 e um 1 .
Outro exemplo:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Desafio do código-golfe
- Leia um número (argumento ou stdin)
- Produza a contagem regressiva em ordem decrescente enquanto recicla todos os números possíveis (para stdout ou arquivo)
- Pare quando atingir 1 OU no momento em que reciclar de 0 a 9 (aconteça o que acontecer primeiro)
Exemplo simples (até 1 atingido):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Exemplo mais avançado (todo reciclado):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Respostas:
T-SQL -
291277267217199191166158153145142128117Depois de abordar isso de uma nova maneira, consegui chegar a 145 (142 após alguns pequenos ajustes), não muito surrados. Isso significa que eu posso competir por prata ou bronze. ^^
Isso não imprime uma lista, seleciona os resultados. A questão nunca forneceu detalhes sobre a saída, portanto isso deve ser bom. Isso ainda tem o mesmo limite de 100 na entrada, em parte porque estou abusando do fato de que todo 11º termo abaixo de 100 perde um caractere e em parte devido ao limite de 100 recursões padrão em expressões comuns de tabela.
fonte
Python 143
147O recuo do primeiro nível é o espaço, o segundo nível é o caractere de tabulação.
fonte
p=o=''
parâmetros opcionais para a função; você pode usar*
paraand
dentron and r<1023
ou talvez atér<1023*n
;while x-1:
pode barbear um espaço comowhile~-x
. Além disso, pode ser mais curto usar um conjunto de dígitos em vez de uma máscara de bits para armazenar quais dígitos foram usados.Haskell,
154149147145128120119117 bytesadicionando na verificação de reciclagem custa muitos caracteres ... suspiro
golfou um pouco lembrando quais dígitos ainda não haviam sido reciclados e parando quando a lista está vazia. depois jogou um pouco mais, passando para recursão explícita e mais alguns truques.
saída de exemplo:
fonte
Python 2:
119117Marcando isso como wiki da comunidade, porque é apenas uma versão mais eficiente da resposta de Will .
fonte
d=s,={''}
trabalho?d=s,={''}
é equivalente ad={''}; s,={''}
.s,={''}
usa a descompactação de sequência, um recurso mais comumente usado em instruções comoa, b = (b, a)
, mas você também pode usá-lo para extrair o único elemento de uma sequência de elemento único.len(d)%11*n
, apesar de parecer discutível com você usando um loop exec.set()
que um conjunto de elemento único{x}
. Portanto, o flornquake o inicializa com um membro de preenchimento e verifica se possui todos os dez dígitos, verificando se possui onze elementos. Como a cadeia vazia precisa ser inicializadas
, ela é criada para servir como esse membro de preenchimento, combinando essas inicializações para salvar caracteres.len(d)%11*n
teria sido bom. :)Ruby,
145139130 bytesAbordagem semelhante à de Will, exceto que eu não estou usando uma máscara de bits, mas uma matriz de dígitos não utilizados. A entrada é via STDIN.
Existe uma versão alternativa usando em
while
vez de,times
mas o que eu tentar, o número de bytes é o mesmo:fonte
CJam,
8077655754 PersonagensProvavelmente nem um pouco otimizado, masdepois de muitas otimizações e depuração aqui está a conversão direta da minha resposta ES6 no CJam:Experimente online aqui . A função pega o número como STDIN e gera a contagem regressiva reciclada, parando no meio se a reciclagem estiver concluída.
Vou tentar jogar mais.
Como funciona:
A idéia básica é que, para cada número de contagem regressiva C, verifique se os primeiros dígitos H são iguais aos últimos dígitos H da sequência resultante, onde H passa do número de dígitos em C para 0
fonte
JavaScript ES6,
149146 caracteresTais verbos, muitos personagens, uau.
Execute-o no console mais recente do Firefox.
Após a execução, ele cria um método
C
que você pode usar comoATUALIZAÇÃO : Às vezes, o velho simples
return
é mais curto que o fechamento da função de seta :)fonte