Definition
Der Rang eines Wortes ist definiert als die Position des Wortes, wenn alle möglichen Permutationen (oder Anordnungen) seiner Buchstaben alphabetisch angeordnet sind, wie in einem Wörterbuch, unabhängig davon, ob die Wörter bedeutungsvoll sind oder nicht.
Betrachten wir diese beiden Wörter - "blau" und "gesehen". Zunächst würden wir alle möglichen Anordnungen der Buchstaben dieser Wörter in alphabetischer Reihenfolge schreiben:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Nun schauen wir von links und finden die Position der Wörter, die wir brauchen. Wir sehen, dass sich das Wort "blau" an der 4. Position und "gesehen" an der 10. Position befindet. Der Rang des Wortes "blau" ist also 4 und der des Wortes "gesehen" ist 10. Dies ist die allgemeine Methode zur Berechnung des Rangs eines Wortes. Stellen Sie sicher, dass Sie nur mit 1 anfangen zu zählen.
Aufgabe
Ihre Aufgabe ist es, einen Code zu schreiben, der ein beliebiges Wort als Eingabe aufnimmt und dessen Rang anzeigt. Der Rang sollte die Ausgabe sein. Seien Sie vorsichtig mit Wörtern, die wiederholte Buchstaben enthalten.
Beispiele
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Sie können davon ausgehen, dass die Eingabe vollständig in Kleinbuchstaben erfolgt und nur alphabetische Zeichen enthält . Auch wenn ein Leerzeichen oder eine ungültige Zeichenfolge eingegeben wird, können Sie alles zurückgeben.
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code!
quelle
O(n log n)
. (sorry, kein Python) Mein Beitrag (C ++) benötigt 2,53s, um Test 14 zu lösen.['h', 'e', 'l', 'l', 'o']
im Gegensatz zu'hello'
?Antworten:
Gaia , 4 Bytes
Probieren Sie es online!
quelle
Python 3 , 71 Bytes
Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Pyth , 6 Bytes
Testsuite.
Erläuterung
quelle
Gelee , 5 Bytes
Probieren Sie es online! oder sehen Sie sich die Testsuite an
Wie es funktioniert
quelle
Œ¿
nicht.ṢŒ¿
Arbeit?1
Python 2 , 78 Bytes
Probieren Sie es online!
Python 3 , 73 Bytes
Probieren Sie es online!
quelle
CJam , 8 Bytes
Probieren Sie es online!
+1 Byte aufgrund einer 1-indizierten Anforderung.
quelle
Haskell , 56 Bytes
Probieren Sie es online!
+6 Byte wegen 1-Indexing-Anforderung. :(
quelle
Japt ,
810 Bytes0-indiziert.Poxy, unnötige 1-Indizierung, erhöht meine Byteanzahl um 25%!Probier es aus
Erläuterung
á
Ruft alle Permutationen der Eingabe ab,â
entfernt Duplikate,n
sortiert sie undb
ruft den Index des ersten Auftretens der Eingabe abU
.quelle
J ,
2823 Bytes-5 Bytes dank FrownyFrog
Wie es funktioniert?
Probieren Sie es online!
quelle
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 Bytes
Tcl hat keine eingebaute Methode zur Berechnung der nächsten lexikografischen Permutation, daher müssen wir dies selbst tun. Aber warte ... es ist kürzer , dies mit einer einfachen rekursiven Funktion zu tun, die alle möglichen Permutationen in beliebiger Reihenfolge berechnet .
Ungolfed:
quelle
K (oK) ,
2318 BytesLösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Generieren Sie Permutationen der Indizes der sortierten Eingabezeichenfolge, indizieren Sie sie wieder in die Eingabezeichenfolge, nehmen Sie die Unterscheidungsmerkmale, überprüfen Sie, wo die ursprüngliche Zeichenfolge übereinstimmt, und fügen Sie eine hinzu.
quelle
Java 8, 211 Bytes
Erläuterung:
Probieren Sie es online aus.
quelle
Python 3 ,
183182 BytesDie erste Antwort, die im Polynom läuft!
Probieren Sie es online!
Die Eingabe muss in Großbuchstaben erfolgen, da ... ein Byte gespeichert wird.
Vollständiges Programm, nimmt Eingaben von
stdin
und Ausgaben anstdout
.Variablennamen: (Art ungolfed Code)
Dauert leider
from math import factorial as f
genau 1 Byte mehr.(Hinweis ohne Bezug: Ich habe das
Combinatorica`
Paket von Mathematica überprüft , nichts Nützliches, einschließlichRankPermutation
)quelle
Schale , 6 Bytes
Probieren Sie es online! Ich habe das Gefühl, dass es einen Weg zum Ablegen geben sollte
(
.Erläuterung:
quelle
Sauber ,
113111 BytesProbieren Sie es online!
+3 Bytes für 1-Indizierung: /
quelle
APL (Dyalog Unicode) , 33 Byte (SBCS)
Probieren Sie es online!
quelle
Python 3 ,
105104103 BytesProbieren Sie es online!
quelle
Ruby , 49 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
106100 ByteTestfälle
Code-Snippet anzeigen
Wie?
P () ist unsere rekursive Permutationsfunktion. Das umgebende Objekt von P wird aber auch zum Speichern der Ränge der Permutationen verwendet.
Der Umhüllungscode lautet nun:
quelle
C ++, 230 Bytes
Gemäß meiner Anfrage muss der Code definitiv so wie er ist ausführbar sein. Die reine Funktionsklausel ist im Grunde genommen Müll. : - @
Vielen Dank an alle, die freundlicherweise die Frage beantwortet haben, was für mich herausgeschnitten werden kann. Im Interesse der Gültigkeit Codes habe ich den beliebten GCC-Ansatz des Einbindens von <bits / stdc ++. H> vermieden, den ich immer als schlechten Schlupfloch-Cheat angesehen habe.
Was folgt ist, was von meinem ursprünglichen Beitrag übrig bleibt:
Ich bin mir bei der Verwendung von C und C ++ immer unsicher, was für die Bytesumme zählt. Je nach Programm, Funktion oder Ausschnitt?Die Antwort ist immer noch vage (solange es sich nicht um einen Ausschnitt handelt, denke ich). Ich gehe also mit der kürzesten der beiden Möglichkeiten.
Hier ist es nicht mit den notwendigen Überschriften usw. bespielt :
Das sind bis zu 230 Bytes, ein Drittel der Standardgröße, die jedes C ++ - Programm benötigt. (Also, ich fühle mich nicht schlecht, wenn ich es nicht mitzähle, aber da ich noch nie eine feste Beschwerde gesehen habe, muss OP mir sagen, welche er am liebsten befriedigt. Schreiben Sie einen Code, um ein Wort als Eingabe zu nehmen und zeige seinen Rang an. “)
Ich bin mir auch nicht sicher, ob dies "der Rang sollte ausgegeben werden" erfüllt.
quelle
using namespace std
,#include <algorithm>
Header, die zum Definieren der Funktion in Bytes verwendet werden. Und ... Nein,main(){}
ist ein gültiges C ++ (g ++) - Programm mit 8 Bytes.import math
ist das oft nötig. Lassen Sie mich die relevanten Meta finden ...puts
undprintf
) ausgefüllt werden . Ihr Code muss so kompiliert und erfolgreich ausgeführt werden, damit er gültig ist. Siehe: codegolf.meta.stackexchange.com/a/10085/45941main
Funktionsdeklaration kann nicht wie besehen ausgeführt werden.Perl 5 , 98 + 3 (
-pF
) = 101 BytesProbieren Sie es online!
quelle
Oktave , 43 Bytes
Probieren Sie es online!
quelle
Perl 6 , 53 Bytes
Probieren Sie es online!
quelle
PowerShell , 275 Byte
Probieren Sie es online!
Das ist also eine blutige Sauerei.
In PowerShell sind keine Permutationen integriert. Daher verwendet dieser Code den Algorithmus von hier (mit starkem Golfsport), der unter der Microsoft Limited Public License ( Anhang B auf dieser Lizenzseite) verfügbar ist .
Das Programm nimmt Eingaben
$s
als String an, dann beginnt das eigentliche Programm mit$b=New-Object ...
. Wir bauen ein neues StringBuilder- Objekt, bei dem es sich (im Wesentlichen) um eine veränderbare Zeichenfolge handelt. Dadurch können wir die Permutationen einfacher handhaben. Anschließend rufen wir die Funktion aufn
(wobei$j
die Länge der Eingabezeichenfolge festgelegt wird), markieren die Ausgabesort
mit-u
nique.indexOf()
, suchen die Eingabezeichenfolge und fügen sie hinzu,1
da PowerShell mit Nullindex versehen ist.Die Funktion ist der Hauptteil des Programms. Als Eingabe wird eine Zahl verwendet, und jede Iteration wird heruntergezählt, bis wir
1
einen einzelnen Buchstaben erreichen. Der Rest der Funktion ruft die Funktion im Wesentlichen rekursiv auf, nimmt den aktuellen Buchstaben und iteriert ihn durch jede Position.Aufgrund der Funktionsweise der Permutationsfunktion gibt es ein einziges Bit zusätzlicher Logik
if($s.length-eq1){1;exit}
, um Eingabezeichenfolgen mit einer Länge zu berücksichtigen1
.quelle
Pyt , 5 Bytes
Erläuterung:
Probieren Sie es online!quelle