A constante Champernowne é um número que é construído concatenando os primeiros n
números, n
tendendo ao infinito. Parece algo como isto:
0.123456789101112131415161718192021222324252627282930...
Agora, descreverei para você o número de Rien . Pode ser pensado como uma minimização da constante Champernowne como um número inteiro. Vou me referir ao número de Rien com os primeiros n
dígitos como Ri ( n ). Isto é como formulá-lo:
- Os primeiros
n
números naturais (a sequência {1,2,3, ...}) são concatenados. - Esse resultado é classificado de acordo com o valor do dígito. Assim
1..12
seria011111223456789
. - Como o número de Rien não pode ter zeros à esquerda, movemos todos os
0
s para que sejam significativos, mantendo o número minimizado, resultando em, digamos101111223456789
,. Este é Ri ( n ), neste caso, Ri (12).
Aqui estão alguns resultados para Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 10001111111111111222222222222223333333334444555666777888999 42 100001111111111111122222222222222233333333333333444444455556666777788889999 45 10000111111111111112222222222222223333333333333334444444444455555666677778888999999 55 100000111111111111111222222222222222233333333333333444444444444444455555555555566666777778888899999 100 100000000000111111111111111111112222222222222222222233333333333333333333444444444444444444445555555555555555555566666666666666666666777777777777777777778888888888888888888899999999999999999999 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Objetivo Dado um número 1 ≤ n
<10000 como entrada (via argumentos, STDIN ou codificação física se o seu idioma não suportar entrada convencional), produza / retorne Ri ( n
).
Este é um código de golfe , portanto o código mais curto em bytes vence. Você pode usar um idioma que foi criado após este concurso, desde que não tenha sido feito para responder a esse desafio. (Claro, você pode usá-lo, se ele fornecer uma solução interessante, mas marque sua resposta como não concorrente.)
Implementação de referência
Eu testei isso no IE, então realmente não deveria haver um problema. Se não é um problema, há uma solução fácil: conseguir um navegador sã.
function min(n) {
var seq = [];
for(var i = 1; i <= n; i++) seq.push(i);
seq = seq.join("").split("").map(Number);
var to;
if(seq.indexOf(1) >= 0) to = seq.splice(seq.indexOf(1), 1);
seq.sort(function(a, b) {
return a - b;
});
if(to) seq = to.concat(seq);
return seq.join("");
}
t.onchange = t.onkeyup = function() {
h.innerHTML = min(this.value)
}
* {
font-family: Consolas, monospace;
}
input {
border: 2px dotted #aaaaaa;
border-radius: 5px;
margin: 10px;
}
<input id="t" type="number">
<div id="h">
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números em seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades de sinalizador de intérprete separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
era o número do rien .1
s na frente deles0
, sim?Respostas:
Pitão, 8
Faz uma lista
[1, .. , input]
, remove a primeira, junta-se e classifica e, em seguida, acrescenta um 1.Suíte de teste
fonte
Perl,
4442413331 bytesYaaay, primeiro post de todos os tempos!
Obrigado ao primo pelos 2 bytes salvos.
Como outros fizeram, remover 1 e anexá-lo manualmente faz o trabalho.
Experimente online
fonte
print 1,sort"@{[2..<>]}"=~/\d/g
Japonês,
1412 bytesExperimente online!
Como funciona
fonte
Retina , 78 bytes
Hora de mostrar alguns novos recursos do Retina (ainda não é muito competitivo, mas antes de hoje isso provavelmente seria mais próximo de 300 bytes).
Experimente online.
Explicação
Embora seja possível converter entre decimal e unário de maneira bastante conveniente agora, isso ainda é bastante longo, porque eu tenho que converter para frente e para trás várias vezes porque algumas operações são mais factíveis em decimal do que em unário e vice-versa.
Vamos começar convertendo a entrada para unário. Isso funciona combinando a entrada e, em seguida, usando o
$*1
que se repete1
muitas vezes (esse recurso de repetição é novo a partir de hoje).Em seguida, geramos um intervalo de
1
paraN
em unário. Expliquei por que isso funciona na minha resposta do FizzBuzz .Convertemos cada número no intervalo de volta para decimal para que possamos trabalhar com os dígitos decimais. Isso é feito combinando cada um dos números unários, de modo que cada
1
um gere uma captura separada. Em seguida, substituímos isso pelo número de capturas do grupo um, usando a nova sintaxe de contagem de capturas$#1
.Isso remove os
1
espaços iniciais e todos os espaços da sequência, portanto, resta apenas os dígitos (exceto um1
).Nós convertemos novamente para unário e adicionamos
1
a cada dígito (para garantir que par0
seja um não vazio). Também inserimos um espaço na frente de cada dígito para garantir que eles sejam separados.Combinamos repetidamente um número pequeno precedido por um número maior e os trocamos. Esse tipo de bolha na Retina. :)
Volte ao decimal.
Por fim, inserimos um único
1
na frente para explicar o que removemos anteriormente.fonte
Haskell, 44 bytes
Infelizmente
sort
está dentroData.List
, são 17 bytes!fonte
JavaScript (ES6),
65625452 bytesGuardado 3 bytes graças a edc65
Constrói uma sequência de todos os números de 2 a
x
, depois divide, classifica, une e adiciona 1 ao início. Isso ainda pode ser jogável; sugestões bem-vindas!fonte
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(ver dicas ES6)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 byte menor, é a divisão).split()
senti tão estranho ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Experimente online
Alternativamente:
fonte
Mathematica, 52 bytes
Mais uma vez, o processamento de strings aconteceu ...
fonte
IntegerDigits
tópicos sobre listas para que você não precise mapeá-lo.APL (17)
Explicação:
Teste:
fonte
∊
isso achataria a matriz e forneceria uma string. É bom saber disso.Python 2, 60 bytes
fonte
ClojureScript, 48 bytes
O mesmo que todos os outros, praticamente. REPL disponível aqui .
fonte
Ruby, 48 bytes
Uma função anônima. Basicamente, apenas Rubyfied algumas das outras respostas aqui ..
fonte
Brachylog ,
7641 bytesPega um número como entrada.
Esta solução funciona com as poucas alterações que fiz no predicado interno do Findall
f
. Aparentemente, o OP está bem em usar idiomas mais antigos que a resposta, então acho que está bem (as alterações que fiz foram intencionadas há muito tempo, apenas me motivei a fazê-lo por causa desse desafio).Explicação
fonte
Smalltalk, 76 bytes
Como de costume em Smalltalk, conceitualmente muito conciso, mas textualmente muito detalhado ...
Adicione isso como um método de classe
String
e chame assim, por exemplo, para 20,String f: 20
fonte
Utilitários Bash + GNU, 58
Experimente online.
fonte
Bash,
3534 bytesIsso se baseia nas respostas de @DigitalTrauma e @OlivierDulac . Experimente online com Ideone .
Como funciona
seq 2 $1
imprime todos os números inteiros de 2 ao especificado na linha de comando.fold -1
quebra todas as linhas com a largura 1, ou seja, coloca cada caractere em sua própria linha.-1
parece ser um recurso não documentado.sort
classifica os caracteres pelo seu valor numérico.printf %d 1`...`
precede um 1 à primeira linha e imprime cada linha como um número inteiro (%d
), sem separação.Isso tira proveito da curiosa implementação printf do Bash, que repete a cadeia de formatação repetidamente, até que todos os argumentos sejam consumidos.
fonte
JavaScript ES6,
4946 bytesAgradecimentos a edc65 por 2 bytes
fonte
Julia, 33 bytes
Esta é uma função lambda que aceita um número inteiro e retorna uma string. Para chamá-lo, atribua-o a uma variável.
Construímos o intervalo
2:n
, que ficará vazio porn
<2, juntamos-o a uma sequência, dividimos a sequência em uma matriz de caracteres, ordenamos-os, juntamos-o a uma sequência e acrescentamos 1.fonte
APL, 21 bytes
Esta é uma função monádica sem nome que aceita um número inteiro à direita e retorna uma string. Para chamá-lo, atribua-o a uma variável.
Explicação:
Experimente online
fonte
Python 2, 60 bytes
Indexação para a vitória. :-)
Python 2, 60 bytes
Apenas uma alternativa.
fonte
Via Láctea 1.6.4 , 22 bytes (não competindo)
Eu tive que adicionar um opcode de classificação para esse desafio.
Explicação
fonte
Sério, 10 bytes
Hex Dump:
Experimente Online
Explicação:
fonte
Ferramentas Bash e GNU,
5852 bytesfonte
PowerShell,
6159 bytesPega a entrada
param($a)
e a usa para indexar em uma matriz com[$a-eq1]
. Se verdadeiro, indexamos o segundo elemento e a saída1
. Caso contrário, concatenamos"1"
com ojoin
array ed criado por 1) definindo um novo intervalo2..$a
que foijoin
editado juntos, 2) convertendo-o como um char-array e 3) enviando-o peloSort-Object
cmdlet, que é gerado.Edit1 - salvou 2 bytes movendo o
-join
operador interno .fonte
Gogh ,
97 bytesVocê pode executar isso usando:
fonte
Gelatina , 8 bytes
Experimente online!
Como funciona
fonte
Oracle SQL 11.2,
222211 bytesSem golfe
fonte
MATL , 17 bytes
Usa a versão atual (7.0.0) do idioma / compilador.
Inspirado pela resposta de FryTheEgggman .
EDIT (29 de julho de 2016): você pode experimentá-lo on-line com algumas modificações para se adaptar às alterações no idioma.
Exemplo
Explicação
fonte
05AB1E , 6 bytes
Nota: Este envio usa recursos que pós-datam esse desafio e, portanto, não são competitivos
Código:
Explicação:
Usa codificação ISO 8859-1
fonte
Mathcad, 86 "bytes"
A função s (n) usa um loop for para criar o "número inteiro" do Champernowne convertendo cada número em sua forma de string e concatenando-os juntos. A sequência é então convertida em seu vetor equivalente de códigos ASCII e classificada. A função então troca quaisquer zeros à esquerda com o primeiro, finalmente convertendo o vetor de volta em uma string.
Para verificar a função, coloquei os casos de teste em um vetor vn e apliquei s a vn usando o operador vetorizar. Em seguida, verifico os resultados com relação aos valores de caso de teste fornecidos.
O Mathcad é um aplicativo matemático baseado em planilhas 2D compostas de "regiões", cada uma das quais pode ser texto, uma expressão matemática, programa, plotagem ou componente com script.
Uma instrução matemática ou de programação é selecionada em uma barra de ferramentas da paleta ou inserida usando um atalho de teclado. Para fins de golfe, uma operação ("byte") é considerada o número de operações do teclado necessárias para criar um nome ou expressão (por exemplo, para definir a variável a como 3, escreveríamos a: = 3. O operador de definição : = é um único pressionamento de tecla ":", como são ae 3, fornecendo um total de 3 "bytes". A programação para o operador requer digitar ctl-shft- # (ou um único clique na barra de ferramentas de programação) para que novamente seja equivalente a 1 byte.
fonte