Sortieren Sie die Liste anhand einer Liste von Zeichenfolgen als Zahlen, ohne zu wissen, welche Basis verwendet wird. Die Werte der Ziffern sind ebenfalls unbekannt (es ist möglich, dass '1'
> '2'
).
Da die Werte von Ziffern unbekannt sind, verwenden Sie das Benford-Gesetz (oder das Gesetz der ersten Ziffer), um den relativen Wert der Ziffern zu bestimmen. Bei Verteilungen, die dem Benfordschen Gesetz folgen, werden Ziffern mit niedrigeren Werten häufiger als führende Ziffern angezeigt als Ziffern mit höheren Werten.
Regeln
- Das ist Code-Golf
- Die Liste der Zeichenfolgen kann von einer Quelle Ihrer Wahl stammen (stdin, Variable, Datei, Benutzer usw.).
- Zeichenfolgen sind auf ASCII-Zeichen beschränkt.
- Zeichen, die nicht als führende Zeichen erscheinen, haben die höchsten Werte. (Nehmen wir an, dass es keine Nullen gibt und sortieren Sie streng nach der führenden Frequenz.)
- Zeichen, die als führende Ziffern so oft vorkommen wie andere Zeichen, werden gleich gewichtet.
Beispiel
Unsortiert
['c','ca','ac','cc','a','ccc','cx','cz','cy']
Sortiert
['c','a','cc','ca','cz','cy','cx','ac','ccc']
Hinweis: In dem Beispiel 'cz'
, 'cy'
und 'cx'
wie der 5., 6. und 7. Elemente in beliebiger Reihenfolge , da die Ziffern erscheinen können 'x'
, 'y'
und 'z'
sind gleich gewichtet.
Antworten:
Python, 59
108112Die Eingabe wird als Liste bereitgestellt
a
, und dieser Ausdruck erzeugt die sortierte Liste (+2 Zeichen, die einer Variablen zugewiesen werden sollen). Dies sortiert die Liste in umgekehrter Reihenfolge nach negierter Länge und dann nach Häufigkeit.quelle
zip
mitNone
. In Python 3 funktioniert das allerdings nichtitertools.zip_longest
.None
kann nicht mit ganzen Zahlen in Python 3 verglichen werden, daher würde es trotzdem fehlschlagen.fillvalue
müsste auf etwas weniger als den kleinsten Wert gesetzt werden.Rubin, 65
Sortiert lexikografisch nach der Größe der Zeichenfolge, wobei die Häufigkeit der einzelnen Zeichen nicht die führende Ziffer ist.
quelle
Java (261)
Die Methoden nehmen ein Array von Zeichenfolgen und sortieren das Array an der richtigen Stelle. An der Implementierung ist nichts Besonderes zu bemerken, es werden jedoch die zu Java 8 hinzugefügten Lambda-Ausdrücke verwendet.
quelle
Javascript (E6) 147
Grenze
Frequenzwerte bis 1000000000: Zum Sortieren werden die Frequenzwerte in einer großen, gepolsterten Zeichenfolge zusammengeführt
Ungolfed
Sidenote-
X-~
Inkrement um 1, auch wenn die ursprüngliche Nummer X undefiniert oder NaN istVerwendung
Ausgabe:
["c", "a", "cc", "ca", "cx", "cz", "cy", "ac", "ccc"]
quelle