Das Jahr 2013 hatte eine interessante Eigenschaft: Die Ziffern sind nacheinander sortiert (0123). Nennen wir diesen Zahlentyp eine sortierbare Zahl: eine nicht negative Ganzzahl, deren 10-stellige Basis nach dem Sortieren fortlaufend ist. Leider wird dies erst 2031 und danach erst 2103 wieder vorkommen. Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die die nächste sortierbare Zahl ausgibt oder zurückgibt, wenn sie mit einer Standardmethode eine nicht negative Ganzzahl enthält.
Regeln
- Eingabe und Ausgabe müssen in Basis 10 sein.
- Die Ausgabe kann in jedem vernünftigen Format erfolgen (Zahlenliteral, Zeichenfolgenliteral, Einzelelementarray usw.).
- Ihr Code muss innerhalb von 1 Minute für alle Eingaben bis 98764 die richtige Ausgabe erzeugen.
Testfälle
0 -> 1
1 -> 2
9 -> 10
10 -> 12
11 -> 12
99 -> 102
233 -> 234
234 -> 243
243 -> 312
2016 -> 2031
2031 -> 2103
2103 -> 2130
2130 -> 2134
2134 -> 2143
9876 -> 10234
98764 -> 98765
Die sortierbaren Zahlen bilden A215014 . Eine Liste aller Einträge bis 98765 finden Sie hier .
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
Python 2 , 61 Bytes
Probieren Sie es online!
quelle
'0123456789'
so etwas sein1./81
, aber es funktioniert nicht ganz.1./81.0000001
was immer noch nicht richtig funktioniert und länger ist1./81-1e-10
aber es sind immer noch 10 Bytes und du müsstest es immer noch kürzen .Jelly ,
11109 BytesGibt ein Singleton-Array zurück. Probieren Sie es online!
Wie es funktioniert
quelle
MATL , 8 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
JavaScript (ES6),
6454 BytesDank Neil konnten 10 Bytes eingespart werden
Testfälle
Code-Snippet anzeigen
quelle
map
Rückruf das Array selbst ist. Sie können jedoch noch viel besserf=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 BytesTest Suite
quelle
PowerShell v2 +,
716867 BytesProbieren Sie es online!
Eine iterative Lösung, die auf meinem Computer praktisch sofort ausgeführt wird.
Ja, das ist eine
do
/until
loop in einem Code-Golf. Tut mir leid, nicht leid. Grundsätzlich schleifen wir von unserer Eingabe nach oben,$n
bis die$n|sort
regulären-match
Ausdrücke entgegenstehen0123456789
. Dann platzieren wir$n
in der Pipeline und die Ausgabe ist implizit.Ein Byte wurde gespeichert, indem erkannt wurde, dass
-join(0..9)
es ein Byte kürzer als die Literalzeichenfolge ist0123456789
.quelle
Mathematica, 63 Bytes
Wird
#+1
durch den nächsten Wert ersetzt, solange dieserDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
falsch ist. Dies ist die Bedingung, dass der aktuelle Wert sortiert werden kann.Hier ist eine weitere lustige Idee, die leider viel zu lange gedauert hat:
In dieser generiere ich zuerst alle sortierbaren Jahre und wähle dann die erste aus, die größer als die Eingabe ist.
Weitere Ideen, die nicht kürzer waren als der erste Versuch:
quelle
PHP,
10510389 BytesNeue 89-Byte-Version dank Titus:
Verwendung:
Vorherige 103-Byte-Version dank Xanderhall:
Vorherige 105-Byte-Version:
Verwendung:
sortable-years.php?n=9000
Ausgänge9678
.Ungolfed-Version mit Testfällen:
Online testen! (Neue 89-Byte-Version)
Online testen! (Vorherige 103-Byte-Version)
Online testen! (Vorherige 105-Byte-Version)
Ausführungszeit für alle Testfälle möglicherweise <= 1 Sekunde.
quelle
break
(exit
auf der Golf-Version) wegzunehmen, du hast es gefunden! Groß.$i=0
ist unnötig (-4).join
ist ein Alias fürimplode
(-3).echo$n
ist genug Leistung (-5).$argv[1]
anstelle von$_GET[n]
allow-r
können Sie das<?
Tag (-2) weglassen .join
als Pseudonym vonimplode
! Über denphp -r
Parameter, den ich in der Vergangenheit verwendet habe, aber in letzter Zeit verwende ich ihn nicht, weil (ich weiß nicht warum) ich ihn manchmal nicht richtig funktionieren lassen kann.Perl 6 , 49 Bytes
Erläuterung
Prüfung:
quelle
C #,
153130101 Bytes (1229983 ohne Namespace-Deklarationen)-23 Bytes dank pinkfloydx33
ein weiteres -29 dank Link Ng (ich hätte wirklich wissen müssen, dass ich es nicht in ein Array konvertieren muss)
Verdammte Umbauten.
(Zusätzlicher Bonus, das ist überraschend schnell)
quelle
$"{n}".ToCharArray()
oder(""+n).ToCharArray()
und Sie brauchen nicht die Klammern nach dem während:while(!s.Contains...)n++;
oder besser noch , sie kombinieren und eine leere Schleife Körper verlassen:while(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
declare s mitvar s="... "
oder entfernen Sie ganz:while(!"0123456789".Contains(...
n++
und es stattdessen mit dem obigen kombinieren und tun$"{++n}".ToCharArray()
use System;
und verwenden Siestring
stattString
für 11 Bytes. Verwenden Siestring.Concat
anstelle vonstring.Join
und behalten Sie nur den 2. Parameter für 1 Byte bei. Wechseln Sie""+ ++n
zu++n+""
für 1 Byte. Ihnen als Übung überlassen: 14 weitere Bytes können entfernt werden.Befunge , 117 Bytes
Probieren Sie es online!
Die Art und Weise, wie wir testen, ob ein Jahr sortiert ist, besteht darin, ein "Array" (in das String-Literal in Zeile 5 geschrieben) zu erstellen. Für jede Ziffer im Jahr setzen wir diesen Index in das Array auf 1. Sobald alle Ziffern vorhanden sind Bei der Verarbeitung wird gezählt, wie viele Einsen der Reihe nach vorhanden sind. Wenn diese Anzahl der Länge des Jahres entspricht, können wir davon ausgehen, dass das Jahr sortiert ist.
Ausführliche Erklärung
quelle
Ruby, 51 Bytes
quelle
Python 2, 68 Bytes
Gut geschlagen von @Dennis, aber trotzdem nur als alternative Methode gepostet.
quelle
C #, 127 Bytes
Schlagen Siedie aktuelle C # -Übertragung um 3 Byte: pBereits zurückgeschlagenIch weiß, dass diese Antwort leicht zurückgeschlagen werden kann ...
repl.it demo
Ungolfed
quelle
05AB1E ,
109 Bytes-1 danke an Emigna.
Probieren Sie es online!
Neue Beschreibung kommt, wenn ich Zeit habe.
quelle
[>D{žhså#
für 9 Bytes.Python 2,
118 117 114108 BytesBEARBEITEN:
-1 Byte danke an @ Gábor Fekete
-6 Bytes dank @Zachary T
quelle
sorted
Funktion speichern .PHP,
908988 BytesEin ganz anderer Ansatz:
Laufen Sie mit
-r
.Nervenzusammenbruch
quelle
Clojure,
1049691 BytesLange Methodennamen machen das nicht so kurz ... Zumindest
map-indexed
und führen-
Sie die Hauptberechnungen ordentlich durch.Edit 1 : Gut, ich habe vergessen, dass ich auch
=
mehrere Argumente verwenden kann, sodass ich nicht überprüfen muss, ob die Anzahl der unterschiedlichen Werte 1 ist.Edit 2 : Keine Notwendigkeit zu laufen
(sort(seq(str %)))
,(sort(str %))
funktioniert genauso gut.Ungolfed:
quelle
R 87 Bytes
Wie üblich, wenn es darum geht, Zahlen in Ziffern aufzuteilen, verfügt R nicht über eine systemeigene Methode, um dies zu tun. Folglich müssen wir die Eingabe in ein Zeichen zwingen, in einen Zeichenvektor aufteilen und anschließend wieder in einen beliebigen numerischen Typ konvertieren.
Probieren Sie es online aus
quelle