La constante de Champernowne est un nombre qui est construit en concaténant les premiers n
nombres, avec une n
tendance à l'infini. Cela ressemble à quelque chose comme ça:
0.123456789101112131415161718192021222324252627282930...
Maintenant, je vais vous décrire le numéro Rien . Cela peut être considéré comme une minimisation de la constante de Champernowne comme un entier. Je ferai référence au numéro Rien avec les premiers n
chiffres comme Ri ( n ). Voici comment le formuler:
- Les premiers
n
nombres naturels (la séquence {1,2,3, ...}) sont concaténés. - Ce résultat est ensuite trié en fonction de la valeur numérique. Donc
1..12
, ressemblerait011111223456789
. - Étant donné que le Rien nombre ne peut pas avoir des zéros, nous passons tous
0
s afin qu'ils soient importants, tout en gardant le nombre réduit, ce qui , par exemple,101111223456789
. C'est Ri ( n ), en l'occurrence Ri (12).
Voici quelques résultats pour Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 10001111111111111222222222222223333333334344545666777888999 42 1000011111111111122222222222222333333333333334444455556666777788889999 45 1000011111111111122222222222222333333333333333434444444555556666777788889999 55 100000111111111111122222222222222333333333333333344 100 100000000000111111111111111122222222222222222222333333333333333333334444444444444444444545555555555555555556666666666666666666666666667676777777777777777997799779977999999 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Objectif Étant donné un nombre 1 ≤ n
<10000 en entrée (via des arguments, STDIN ou codage en dur si votre langue ne prend pas en charge les entrées classiques), output / return Ri ( n
).
Ceci est un code-golf , donc le code le plus court en octets gagne. Vous pouvez utiliser une langue qui a été créée après ce concours, à condition que cela n’ait pas été fait pour répondre à ce défi. (Bien sûr, vous pouvez l' utiliser si cela apporte une solution intéressante, mais indiquez que votre réponse est non concurrente.)
Mise en oeuvre de référence
J'ai testé cela dans IE, donc il ne devrait vraiment pas y avoir de problème. S'il est un problème, il y a une solution simple: obtenir un navigateur sain d' esprit.
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">
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
c'est le numéro rien .1
s devant les0
s, oui?Réponses:
Pyth, 8
Crée une liste
[1, .. , input]
puis supprime le premier, joint et trie, puis ajoute un 1.Suite de tests
la source
Perl,
4442413331 octetsYaaay, premier post!
Merci à primo pour la sauvegarde de 2 octets.
Comme d'autres l'ont fait, supprimer 1 et l'ajouter à la main manuellement fait le travail.
Essayez-le en ligne
la source
print 1,sort"@{[2..<>]}"=~/\d/g
Japt,
1412 octetsEssayez-le en ligne!
Comment ça marche
la source
Retina , 78 octets
Il est temps de montrer quelques nouvelles fonctionnalités de Retina (ce n'est pas encore très compétitif, mais avant aujourd'hui, cela aurait probablement été plus proche de 300 octets).
Essayez-le en ligne.
Explication
Bien qu'il soit possible de convertir très facilement en décimal et en unaire, cela reste néanmoins assez long, car je dois effectuer plusieurs conversions en arrière car certaines opérations sont plus réalisables en décimal qu'en unaire et inversement.
Commençons par convertir l'entrée en unaire. Cela fonctionne en faisant correspondre l'entrée puis en utilisant
$*1
laquelle répète1
autant de fois (cette fonctionnalité de répétition est nouvelle à ce jour).Ensuite, nous générons une plage allant de
1
àN
en unaire. J'ai expliqué pourquoi cela fonctionne dans ma réponse à FizzBuzz .Nous convertissons chaque nombre de la plage en valeurs décimales afin de pouvoir utiliser les chiffres décimaux. Ceci est effectué en comparant chacun des nombres unaires de sorte que chacun
1
génère une capture séparée. Ensuite, nous remplaçons cela par le nombre de captures du groupe un, en utilisant la nouvelle syntaxe du nombre de captures$#1
.Cela supprime le début
1
ainsi que tous les espaces de la chaîne, il ne reste donc que les chiffres (sauf un seul1
).Nous reconvertissons en unaires et ajoutons
1
à chaque chiffre (pour nous assurer que même0
est un non vide). Nous insérons également un espace devant chaque chiffre pour nous assurer qu'ils sont séparés.Nous comparons à plusieurs reprises un petit nombre précédé d'un nombre plus grand et les échangeons. C'est une sorte de bulle dans la rétine. :)
Retour à la décimale.
Enfin, nous en insérons un
1
au début pour rendre compte de celui que nous avons supprimé précédemment.la source
Haskell, 44 octets
Malheureusement ,
sort
est enData.List
, c'est 17 octets!la source
JavaScript (ES6),
65625452 octets3 octets sauvés grâce à edc65
Construit une chaîne de tous les nombres de 2 à
x
, puis scinde, trie, joint et ajoute un 1 au début. Cela peut encore être golfable; suggestions bienvenues!la source
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(voir astuces sur ES6)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 octet de moins, c'est la division).split()
était si étrange ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Essayez-le en ligne
Alternativement:
la source
Mathematica, 52 octets
Une fois encore, le traitement des chaînes de caractères a eu lieu ...
la source
IntegerDigits
discussions sur les listes vous évitent d'avoir besoin de les cartographier.APL (17)
Explication:
Tester:
la source
∊
cela aplatirait le tableau et vous donnerait une chaîne. C'est bon à savoir.Python 2, 60 octets
la source
ClojureScript, 48 octets
Comme tous les autres, à peu près. REPL disponible ici .
la source
Ruby, 48 octets
Une fonction anonyme. Fondamentalement, juste Rubyfied certaines des autres réponses ici ..
la source
Brachylog ,
7641 octetsPrend un nombre en entrée.
Cette solution fonctionne avec les quelques modifications que j'ai apportées au prédicat Findall intégré.
f
. Apparemment, OP sait utiliser des langages plus anciens que la réponse, je pense donc que tout va bien (les changements que j’ai apportés datent d’il ya longtemps, je me suis motivé à le faire à cause de ce défi).Explication
la source
Smalltalk, 76 octets
Comme d'habitude dans Smalltalk, conceptuellement très laconique, mais textuellement très verbeux ...
Ajoutez ceci comme méthode de classe pour
String
et appelez comme ceci, par exemple pour 20,String f: 20
la source
Utilitaires Bash + GNU, 58
Essayez-le en ligne.
la source
Bash,
35 à34 octetsCela s'appuie sur les réponses de @DigitalTrauma et de @OlivierDulac . Essayez-le en ligne avec Ideone .
Comment ça marche
seq 2 $1
affiche tous les entiers de 2 à celui spécifié sur la ligne de commande.fold -1
enveloppe toutes les lignes de largeur 1, c’est-à-dire qu’elles placent chaque caractère sur sa propre ligne.-1
semble être une fonctionnalité non documentée.sort
trie les caractères en fonction de leur valeur numérique.printf %d 1`...`
ajoute un 1 à la première ligne et imprime chaque ligne sous la forme d'un entier (%d
), sans séparation.Cela tire parti de la curieuse implémentation printf de Bash, qui répète sans cesse la chaîne de formatage, jusqu'à ce que tous les arguments soient consommés.
la source
JavaScript ES6,
4946 octetsMerci à edc65 pour 2 octets
la source
Julia, 33 octets
C'est une fonction lambda qui accepte un entier et retourne une chaîne. Pour l'appeler, assignez-le à une variable.
Nous construisons la plage
2:n
, qui sera vide pourn
<2, la joindrons en une chaîne, scinderons la chaîne en un tableau de caractères, les trierons, les joindrons en une chaîne et ajouterons 1 au début.la source
APL, 21 octets
Il s'agit d'une fonction monadique non nommée qui accepte un entier à droite et retourne une chaîne. Pour l'appeler, assignez-le à une variable.
Explication:
Essayez-le en ligne
la source
Python 2, 60 octets
Indexation pour la victoire. :-)
Python 2, 60 octets
Juste une alternative.
la source
Voie lactée 1.6.4 , 22 octets (non en compétition)
Je devais ajouter un opcode de tri pour ce défi.
Explication
la source
Sérieusement, 10 octets
Décharge Hex:
Essayez-le en ligne
Explication:
la source
Outils Bash et GNU,
5852 octetsla source
PowerShell,
6159 octetsPrend l'entrée
param($a)
et l'utilise ensuite pour indexer dans un tableau avec[$a-eq1]
. Si true, nous indexons le deuxième élément et la sortie1
. Sinon, nous concaténons"1"
avec lejoin
tableau ed créé par 1) en définissant une nouvelle plage2..$a
elle-mêmejoin
édifiée ensemble, 2) en le transformant en tableau de caractères, et 3) en l'envoyant à travers leSort-Object
applet de commande, qui sont ensuite tous affichés.Edit1 - 2 octets enregistrés en déplaçant l'
-join
opérateur interne .la source
Gogh ,
9 à7 octetsVous pouvez exécuter ceci en utilisant:
la source
Gelée , 8 octets
Essayez-le en ligne!
Comment ça marche
la source
Oracle SQL 11.2,
222211 octetsNon-golfé
la source
MATL , 17 octets
Utilise la version actuelle (7.0.0) du langage / compilateur.
Inspiré par la réponse de FryTheEgggman .
EDIT (29 juillet 2016): Vous pouvez l' essayer en ligne avec quelques modifications pour vous adapter aux changements de langue.
Exemple
Explication
la source
05AB1E , 6 octets
Remarque: cette soumission utilise des fonctionnalités postérieures à ce défi et n'est donc pas compétitive.
Code:
Explication:
Utilise le codage ISO 8859-1
la source
Mathcad, 86 "octets"
La fonction s (n) utilise une boucle for pour construire "l'entier" de Champernowne en convertissant chaque nombre en forme de chaîne et en les concaténant. La chaîne est ensuite convertie en son vecteur équivalent de codes ASCII et triée. La fonction échange ensuite les zéros non significatifs avec le premier et convertit le vecteur en chaîne.
Pour vérifier la fonction, j'ai placé les scénarios de test dans un vecteur vn, puis appliqué s à vn à l'aide de l'opérateur de vectorisation. Je vérifie ensuite les résultats par rapport aux valeurs du cas de test donné.
Mathcad est une application mathématique basée sur des feuilles de calcul 2D composées de "régions" pouvant chacune être du texte, une expression mathématique, un programme, un tracé ou un composant scripté.
Une instruction mathématique ou de programmation est choisie dans une barre d’outils ou à l’aide d’un raccourci clavier. Pour le golf, une opération ("octet") est considérée comme le nombre d'opérations au clavier nécessaires pour créer un nom ou une expression (par exemple, pour définir la variable a sur 3, nous écririons a: = 3. L'opérateur de définition : = est une simple pression sur la touche ":", tout comme a et 3, donnant un total de 3 "octets". La programmation pour l'opérateur nécessite la saisie de ctl-shft- # (ou un simple clic sur la barre d'outils de programmation). 1 octet.
la source