Die Champernowne-Konstante ist eine Zahl, die durch Verketten der ersten n
Zahlen mit n
Tendenz zur Unendlichkeit konstruiert wird . Es sieht ungefähr so aus:
0.123456789101112131415161718192021222324252627282930...
Nun werde ich Ihnen die Rien- Nummer beschreiben. Es kann als Minimierung der Champernowne-Konstante als Ganzzahl betrachtet werden. Ich beziehe mich auf die Rien- Nummer mit den ersten n
Ziffern als Ri ( n ). So formulieren Sie es:
- Die ersten
n
natürlichen Zahlen (die Folge {1,2,3, ...}) werden verkettet. - Dieses Ergebnis wird dann nach dem Ziffernwert sortiert. So
1..12
würde es aussehen011111223456789
. - Da die Rien- Zahl keine führenden Nullen haben kann, verschieben wir alle
0
s so, dass sie signifikant sind, während die Zahl minimiert bleibt101111223456789
. Dies ist Ri ( n ), in diesem Fall Ri (12).
Hier sind einige Ergebnisse für Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 1000111111111112222222222222233333334444555666777888999 42 10000111111111111222222222222233333333333333444444455556666777788889999 45 10000111111111111222222222222233333333333333344444444444555556666777788889999 55 100000111111111111111222222222222223333333333333344444444444444555555555566666777778888899999 100 10000000000011111111111111111111222222222222222222223333333333333333334444444444444444444455555555555555556666666666666666667777777777777777777779999998888888888888888889999 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Ziel Bei einer Zahl von 1 ≤ n
<10000 als Eingabe (über Argumente, STDIN oder Hardcoding, wenn Ihre Sprache keine konventionelle Eingabe unterstützt), geben Sie Ri ( n
) aus / zurück .
Dies ist ein Code-Golf , also gewinnt der kürzeste Code in Bytes. Sie können eine Sprache verwenden, die nach diesem Wettbewerb erstellt wurde, sofern sie nicht für die Beantwortung dieser Herausforderung erstellt wurde. (Natürlich können Sie können es verwenden, wenn es eine interessante Lösung bietet, sondern markieren Sie Ihre Antwort als nicht konkurrieren.)
Referenzimplementierung
Ich habe das im IE getestet, es sollte also wirklich kein Problem geben. Wenn es ist ein Problem, gibt es eine einfache Lösung: einen gesunden Browser erhalten.
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">
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
ist die Rien- Nummer.1
s vor das0
s stellen, ja?Antworten:
Pyth, 8
Erstellt eine Liste,
[1, .. , input]
entfernt dann die führende, fügt sich hinzu, sortiert und stellt eine 1 voran.Test Suite
quelle
Perl,
4442413331 BytesYaaay, erster Post überhaupt!
Danke an primo für die 2 Bytes sparen.
Wie bei anderen funktioniert es auch, wenn Sie 1 entfernen und manuell voranstellen.
Probieren Sie es online aus
quelle
print 1,sort"@{[2..<>]}"=~/\d/g
Japt,
1412 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Netzhaut , 78 Bytes
Es ist Zeit, einige neue Retina-Funktionen vorzustellen (es ist immer noch nicht sehr wettbewerbsfähig, aber bis heute wäre dies wahrscheinlich näher an 300 Bytes gewesen).
Probieren Sie es online aus.
Erläuterung
Das Konvertieren zwischen dezimal und unär ist zwar jetzt recht bequem möglich, aber es ist immer noch ziemlich lang, da ich mehrmals hin und her konvertieren muss, da einige Operationen in dezimal besser möglich sind als in unär und umgekehrt.
Beginnen wir mit der Konvertierung der Eingabe in Unary. Dies funktioniert durch die Eingabe passende und dann mit
$*1
welcher wiederholt ,1
dass viele Male (diese Wiederholung Funktion ist neu , wie von heute).Als nächstes generieren wir einen Bereich von
1
bisN
in unary. Ich habe in meiner FizzBuzz-Antwort erklärt, warum dies funktioniert .Wir konvertieren jede Zahl im Bereich zurück in eine Dezimalzahl, damit wir mit den Dezimalstellen arbeiten können. Dies erfolgt durch Abgleichen jeder der unären Zahlen, sodass jede
1
eine separate Erfassung generiert. Dann ersetzen wir dies durch die Anzahl der Erfassungen der ersten Gruppe unter Verwendung der neuen Syntax für die Erfassungsanzahl$#1
.Dadurch werden sowohl die führenden
1
als auch alle Leerzeichen aus der Zeichenfolge entfernt, sodass nur die Ziffern übrig bleiben (mit Ausnahme einer einzelnen1
).Wir konvertieren zurück zu unary und addieren
1
zu jeder Ziffer (um sicherzustellen, dass even0
nicht leer ist). Wir fügen außerdem vor jeder Ziffer ein Leerzeichen ein, um sicherzustellen, dass sie getrennt sind.Wir passen wiederholt eine kleine Zahl an, der eine größere Zahl vorangestellt ist, und tauschen sie aus. Das ist eine Art Blase in der Netzhaut. :)
Aaaund zurück zur Dezimalzahl.
Schließlich fügen wir
1
vorne eine einzelne ein, um die zuvor entfernte zu berücksichtigen.quelle
Haskell, 44 Bytes
Leider
sort
ist inData.List
, das sind 17 Bytes!quelle
JavaScript (ES6),
65625452 Byte3 Bytes gespart dank edc65
Erstellt eine Zeichenfolge aller Zahlen von 2 bis
x
, teilt, sortiert, verknüpft und fügt am Anfang eine 1 hinzu. Dies kann immer noch Golf sein; Vorschläge willkommen!quelle
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(siehe ES6-Tipps)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 Byte kürzer, es ist der Split).split()
fühlte mich so seltsam ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Probieren Sie es online aus
Alternative:
quelle
Mathematica, 52 Bytes
Wieder einmal passierte die String-Verarbeitung ...
quelle
IntegerDigits
Threads über Listen, so dass Sie es nicht zuordnen müssen.APL (17)
Erläuterung:
Prüfung:
quelle
∊
dies das Array verflachen und Ihnen einen String geben würde. Das ist gut zu wissen.Python 2, 60 Bytes
quelle
ClojureScript, 48 Bytes
So wie alle anderen auch. REPL hier erhältlich .
quelle
Ruby, 48 Bytes
Eine anonyme Funktion. Grundsätzlich nur einige der anderen Antworten hier Rubyfied ..
quelle
Brachylog ,
7641 BytesNimmt eine Zahl als Eingabe.
Diese Lösung funktioniert mit den wenigen Änderungen, die ich am integrierten Findall-Prädikat vorgenommen habe
f
. OP ist anscheinend in Ordnung, wenn Sprachen verwendet werden, die älter sind als die Antwort, daher denke ich, dass dies in Ordnung ist (die Änderungen, die ich vorgenommen habe, waren vor langer Zeit beabsichtigt, ich habe mich nur selbst motiviert, dies aufgrund dieser Herausforderung zu tun).Erläuterung
quelle
Smalltalk, 76 Bytes
Wie in Smalltalk üblich, konzeptuell sehr knapp, aber textlich sehr wortreich ...
Füge dies als Klassenmethode für hinzu
String
und rufe so auf, zB für 20,String f: 20
quelle
Bash + GNU-Dienstprogramme, 58
Probieren Sie es online aus.
quelle
Schlag,
3534 BytesDies baut auf den Antworten von @DigitalTrauma und @OlivierDulac auf . Probieren Sie es online mit Ideone .
Wie es funktioniert
seq 2 $1
Gibt alle Ganzzahlen von 2 bis zu der in der Befehlszeile angegebenen Zahl aus .fold -1
bricht alle Zeilen mit der Breite 1 um, dh platziert jedes Zeichen in einer eigenen Zeile.-1
scheint ein undokumentiertes Feature zu sein.sort
sortiert die Zeichen nach ihrem numerischen Wert.printf %d 1`...`
Stellt der ersten Zeile eine 1 voran und gibt jede Zeile als Ganzzahl (%d
) ohne Trennung aus.Dies nutzt die neugierige printf-Implementierung von Bash, die die Formatzeichenfolge immer wieder wiederholt, bis alle Argumente verbraucht sind.
quelle
JavaScript ES6,
4946 BytesDanke an edc65 für 2 Bytes
quelle
Julia, 33 Bytes
Dies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Wir konstruieren den Bereich
2:n
, der fürn
<2 leer sein wird , fügen ihn zu einem String zusammen, teilen den String in ein Array von Zeichen auf, sortieren sie, fügen ihn zu einem String zusammen und stellen 1 voran.quelle
APL, 21 Bytes
Dies ist eine unbenannte monadische Funktion, die eine Ganzzahl rechts akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Erläuterung:
Probieren Sie es online aus
quelle
Python 2, 60 Bytes
Indizierung für den Gewinn. :-)
Python 2, 60 Bytes
Nur eine Alternative.
quelle
Milchstraße 1.6.4 , 22 Bytes (nicht konkurrierend)
Ich musste einen Sortier-Opcode für diese Herausforderung hinzufügen.
Erläuterung
quelle
Im Ernst, 10 Bytes
Hex Dump:
Probieren Sie es online
Erläuterung:
quelle
Bash- und GNU-Tools,
5852 Bytesquelle
Power,
6159 BytesNimmt Eingaben auf
param($a)
und verwendet sie dann zum Indizieren in ein Array mit[$a-eq1]
. Wenn true, indizieren wir das zweite Element und geben es aus1
. Andernfalls verknüpfen wir uns"1"
mit demjoin
ed-Array, das erstellt wird, indem 1) ein neuer Bereich definiert wird2..$a
, der selbstjoin
zusammengefügt wurde, 2) dieser als char-Array umgewandelt wird und 3) er über dasSort-Object
Cmdlet gesendet wird, das dann ausgegeben wird.Edit1 - Speichert 2 Bytes durch Verschieben des inneren
-join
Operators.quelle
Gogh ,
97 BytesSie können dies ausführen mit:
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Oracle SQL 11.2,
222211 BytesNicht golfen
quelle
MATL , 17 Bytes
Verwendet die aktuelle Version (7.0.0) von Sprache / Compiler.
Inspiriert von FryTheEggmans Antwort .
BEARBEITEN (29. Juli 2016): Sie können es online mit einigen Änderungen versuchen , um sich an Änderungen in der Sprache anzupassen.
Beispiel
Erläuterung
quelle
05AB1E , 6 Bytes
Hinweis: Diese Einsendung verwendet Funktionen, die diese Herausforderung nachträglich erfüllen und daher nicht wettbewerbsfähig sind
Code:
Erläuterung:
Verwendet ISO 8859-1-Codierung
quelle
Mathcad, 86 "Bytes"
Die Funktion s (n) verwendet eine for-Schleife, um die Champernowne-Ganzzahl aufzubauen, indem jede Zahl in ihre Zeichenfolgenform konvertiert und miteinander verkettet wird. Die Zeichenfolge wird dann in den entsprechenden Vektor von ASCII-Codes konvertiert und sortiert. Die Funktion tauscht dann alle führenden Nullen gegen die erste aus und wandelt den Vektor schließlich wieder in einen String um.
Um die Funktion zu überprüfen, habe ich die Testfälle in einen Vektor vn eingefügt und dann mit dem Vektoroperator s auf vn angewendet. Ich überprüfe dann die Ergebnisse anhand der angegebenen Testfallwerte.
Mathcad ist eine mathematische Anwendung, die auf 2D-Arbeitsblättern basiert, die aus "Bereichen" bestehen, von denen jeder Text, ein mathematischer Ausdruck, ein Programm, ein Plot oder eine Skriptkomponente sein kann.
Eine mathematische oder Programmieranweisung wird aus einer Palettensymbolleiste ausgewählt oder über eine Tastenkombination eingegeben. Für Golfzwecke wird eine Operation ("Byte") als die Anzahl der Tastaturoperationen angesehen, die zum Erstellen eines Namens oder Ausdrucks erforderlich sind (um beispielsweise die Variable a auf 3 zu setzen, schreiben wir a: = 3. Der Definitionsoperator : = ist ein einziger Tastendruck ":", ebenso wie a und 3, was insgesamt 3 "Bytes" ergibt. Die Programmierung für den Operator erfordert die Eingabe von ctl-shft- # (oder eines einzelnen Klicks auf die Programmiersymbolleiste), was wiederum gleichbedeutend mit ist 1 Byte.
quelle