Expandir um número
Sua tarefa é expandir um número inteiro maior que 0 da seguinte maneira:
Divida o número em dígitos decimais e, para cada dígito, gere uma lista de acordo com estas regras:
- se o dígito for ímpar, a lista começa com o dígito e desce para 1;
- se o dígito for par, a lista começará com o dígito e aumentará para 9.
- se o dígito for 0, a lista está vazia.
Anote as listas dos números ímpares abaixo dos dígitos e acima dos pares. Em seguida, alinhe na parte superior as colunas e colete os dígitos em cada linha para criar números inteiros. Como etapa final, some os números para encontrar a expansão do número.
Aqui está um exemplo das regras acima aplicadas ao 34607:
9
8
79
68
57
346 7 -> 399 7 -> 3997 -> 9418
2 6 288 6 2886
1 5 177 5 1775
4 66 4 664
3 5 3 53
2 4 2 42
1 1 1
Aqui estão os casos de teste:
1: 1
2: 44
3: 6
44: 429
217: 1270
911: 947
2345: 26114
20067: 3450
34875632: 70664504
9348765347634763: 18406119382875401
Isso é código-golfe , então as respostas mais curtas em bytes em cada idioma vencem.
Respostas:
Gelatina , 13 bytes
Um link monádico que recebe e retorna números inteiros positivos.
Experimente online! ou veja a suíte de testes .
Quão?
fonte
Perl 6 ,
6866 bytesTente
Tente
Expandido:
fonte
APL (Dyalog) , 39 bytes
Corpo do programa completo. Solicita a entrada de STDIN. Imprime o resultado em STDOUT.
Experimente online!
Para apresentar o último caso de teste correcta,
⎕FR
( M ponto-loating R ePresentation) foi definido para 128 bits decimal e⎕PP
( P rint P recision) foi definido a 34 dígitos.⍞
solicitar entrada de texto de STDIN⍎¨
executar cada (obtém cada dígito como um número){
…}¨
Para cada elemento, aplique a seguinte função em que o argumento é representado por⍵
:2|⍵:
se ímpar (lit. "if" divisão restante quando dividido por 2), então:⌽
marcha ré⍳
os números de 1 até⍵
o argumento⋄
outro×⍵:
se o argumento for positivo (lit. "if" signum), então:⌽
marcha ré⍵
o argumento,
Seguido por⍵
argumento↓
elementos retirados de⍳9
os os Ɩ ntegers de 1 até 9⋄
outro⍬
lista vazia↑
misture (combine) esta lista de listas em uma única matriz, preenchendo com zeros à direita⍉
transpor↓
dividir essa matriz em uma lista de listas0~⍨¨
remova todos os zeros de cada lista10⊥¨
converta cada um dos números da base 10 para os normais (isso coleta os dígitos)+/
somar os númerosfonte
JavaScript (ES6),
888382 bytesNota
9 - k < x || 9
salva um byte,9 - k >= x && 9
mas gera em1
vez de0
se a desigualdade for verificada. Seria um problema se isso levasse a1 > k
, desencadeando o caminho errado no ternário externo. Mas isso significaria issok = 0
e9 - k = 9
, portanto , não podemos ter9 - k < x
ao mesmo tempo.Casos de teste
NB: Removido o último caso de teste que excede a precisão do número JS.
Mostrar snippet de código
fonte
Japonês , 18 bytes
Experimente online!
fonte
Java 11,
210209191181 bytesOk, isso levou um bom tempo (principalmente porque eu cometi um erro no começo, então tive que anotar cada etapa para entender melhor o que fiz de errado). Provavelmente pode ser jogado um pouco mais.
-18 bytes graças a @ceilingcat .
Explicação:
Experimente aqui.
fonte
Pip , 28 bytes
Experimente online!
Explicação
Como as etapas prosseguem
34607
como argumento:fonte
Pitão - 23 bytes
Conjunto de Teste .
fonte
Haskell ,
106104 bytesExperimente online!
fonte
R ,
153146 bytesExperimente online!
Às vezes, não sei dizer se sou apenas lixo no golfe, ou se R é ....Definitivamente, eu economizei 7 bytes graças ao user2390246, que me lembrou outra maneira de extrair dígitos (que eu sugeri) .Você pode substituir
strtoi
poras.double
para obter18406718084351604
o último caso de teste (que está errado); R possui apenas números inteiros de 32 bits.fonte
character->int
quando liguei:
e depois usei destrtoi
qualquer maneira!Perl 5 , 120 + 1 (
-a
) = 121 bytesExperimente online!
fonte
Python 2 , 131 bytes
Experimente online!
fonte
05AB1E , 16 bytes
Experimente online ou verifique todos os casos de teste .
Ou alternativamente:
Explicação:
fonte
Burlesco , 39 bytes
Experimente online!
fonte