Sie erhalten eine Zeichenfolge, die normale Az-Zeichen enthält. (Sie können davon ausgehen, dass dies bei jedem Test immer der Fall ist, und davon ausgehen, dass alle Buchstaben ebenfalls in Kleinbuchstaben geschrieben sind.) Sie müssen bestimmen, wie viele eindeutige Kombinationen der einzelnen Zeichen in der Zeichenfolge erstellt werden können, und diese Zahl drucken.
Doppelte Buchstaben können jedoch beim Zählen der möglichen Kombinationen ignoriert werden. Mit anderen Worten, wenn die angegebene Zeichenfolge "Hallo" ist, zählt das einfache Umschalten der Positionen der beiden l
s nicht als eindeutige Phrase und kann daher nicht zur Gesamtsumme gezählt werden.
Die kürzeste Byte-Anzahl gewinnt und wir freuen uns darauf, einige kreative Lösungen in Nicht-Golf-Sprachen zu sehen!
Beispiele:
hello -> 60
aaaaa -> 1
abcde -> 120
Antworten:
Python 2 ,
5048 BytesProbieren Sie es online aus!
Keine langweiligen Einbauten! Zu meiner Überraschung ist dies sogar noch kürzer als der Brute-Force-Ansatz, bei dem alle Permutationen mit berechnet
itertools
und die Länge genommen werden.Diese Funktion verwendet die Formel
und berechnet es im laufenden Betrieb. Die Fakultät im Zähler wird durch Multiplikation mit
len(s)
in jedem Funktionsaufruf berechnet . Der Nenner ist etwas subtiler; Bei jedem Aufruf dividieren wir durch die Anzahl der Vorkommen dieses Elements in den verbleibenden Teilen der Zeichenfolge, um sicherzustellen, dass für jedes Zeichenc
alle Zahlen zwischen 1 und der Anzahl der Vorkommen vonc
(einschließlich) durch genau einmal geteilt werden. Da wir nur ganz am Ende teilen, haben wir garantiert keine Probleme mit der Standard-Bodenteilung von Python 2.quelle
05AB1E , 3 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
CJam , 4 Bytes
Probieren Sie es online aus!
Erläuterung
Zeile als Zeichenfolge lesen (
l
), eindeutige Permutationen als Array von Zeichenfolgen (e!
), Länge (,
), implizite Anzeige.quelle
R ,
6965 BytesProbieren Sie es online aus!
4 Bytes gespeichert dank Zahiro Mor in beiden Antworten.
Berechnet den Multinomialkoeffizienten direkt.
R ,
7268 BytesProbieren Sie es online aus!
Verwendet die Multinomialverteilungsfunktion von
dmultinom
, um den Multinomialkoeffizienten zu extrahieren.Beachten Sie, dass der übliche (Golfspieler) aus einem unbekannten Grund
x<-table(strsplit(s,""))
nicht innerhalb desdmultinom
Anrufs funktioniert .quelle
function(s,
!=factorial)(!nchar(s))/prod(!table(strsplit(s,"")))
wird funktionieren. das el () ist redundant - Tabelle weiß, um die Elemente zu suchen ....JavaScript (Node.js) , 49 Byte
t=t*
wird verwendett*=
, um Rundungsfehler (das Abrunden|t
der Zahl) zu vermeiden, um sicherzustellent=t*
, dass alle Zwischenergebnisse (in Bezug auf den Bediener) ganze Zahlen sind.Probieren Sie es online aus!
quelle
t=t*
Sie, wenn Sie dies vermeiden möchten.)aaadegfbbbccc
genau auf den Gleitkomma-Rundungsfehler zurückzuführen istAPL (Dyalog Unicode) , 14 Bytes
Probieren Sie es online aus!
Gibt das Ergebnis als Singleton zurück.
quelle
⍴
->≢
damit es einfache Skalare÷⍨/g⌸,g←!⊢∘≢
Japt ,
53 Bytes-2 Bytes dank @Shaggy
Probieren Sie es online aus!
quelle
â
.J ,
15, 14 BytesProbieren Sie es online aus!
-1 Byte dank FrownyFrog
quelle
~.
kann sein=
Gelee , 4 Bytes
Probieren Sie es online aus!
Tut einfach das, was gefragt wurde: Finde Permutationen der Eingabe, eindeutige und drucke die Länge.
quelle
C # (Visual C # Interactive Compiler) , 59 Byte
Port von @ArBos Python 2-Antwort .
Probieren Sie es online aus.
quelle
Brachylog , 3 Bytes
Probieren Sie es online aus!
pᵘl
macht so ziemlich genau das Gleiche.quelle
Python 2 , 57 Bytes
Probieren Sie es online aus!
Selbstdokumentierend: Gibt die Länge des Satzes eindeutiger Permutationen der Eingabezeichenfolge zurück.
Python 3 , 55 Bytes
Gutschrift geht an ArBo in diesem Fall :
Probieren Sie es online aus!
quelle
APL (Dyalog Unicode) , 24 Bytes
Probieren Sie es online aus!
Einfache Dfn, nimmt eine Zeichenfolge als Argument.
Wie:
quelle
Ruby , 41 Bytes
Probieren Sie es online aus!
quelle
to_a
f=
Teil entfernen können . (In TIO verschieben Sie es in den Header, um nicht gezählt zu werden.)Perl 5 , 43 Bytes
Verwendet die Methode in der Python-Antwort von @ ArBo.
Probieren Sie es online aus!
quelle
Perl 6 ,
3330 Zeichen (3431 Bytes)Ziemlich geradliniger
Whatever
Block.comb
teilt den String in Buchstaben auf,permutations
erhält alle möglichen Kombinationen. Aufgrund der Art und Weise ZwangSet
braucht werdenjoin
zuerst ed (»
giltjoin
für jedes Element in der Liste).Probieren Sie es online aus!
(Die vorherige Antwort wurde verwendet
.unique
,Set
garantiert jedoch die Eindeutigkeit und nummeriert sie, sodass 3 gespart werden.)quelle
K (oK) , 12 Bytes
Lösung:
Probieren Sie es online aus!
Erläuterung:
Verwendet das integrierte OK
prm
:... die im
x^/:x
Grunde genommen die Permutationen von"helo"
nicht erzeugen"hello"
, daher müssen wir die Permutationen von erzeugen0 1 2 3 4
, sie verwenden, um sie zu indizieren"hello"
und dann die Anzahl der eindeutigen zu nehmen.quelle
!-n
. Ende k5 und k6 wurde esprm
. k7 (shakti) hatprm
auch.Java 8,
103102 BytesPort von @ArBos Python 2-Antwort .
-1 Byte dank @ OlivierGrégoire, indem es iterativ statt rekursiv gemacht wird.
Probieren Sie es online aus.
Das Erzeugen aller eindeutigen Permutationen in einem Satz und das Erhalten seiner Größe würde 221 Bytes betragen :
Probieren Sie es online aus.
quelle
s->{int r=1,i=s.length();for(;i>0;)r=r*i/~-s.substring(--i).split(s.charAt(i)+"",-1).length;return r;}
.s->{long r=1,i=s.length();for(;i>0;)r=r*i/(s.chars().skip(--i).filter(c -> c==s.charAt(i)).count()+1);return r;}
aber bisher ohne Erfolg ...MATL , 9 Bytes
Probieren Sie es online aus!
Erläuterung:
quelle
j
wirdi
also implizit. Außerdem&nx
speichert ein Byte überZy1)
tio.run/##y00syfn/P9IholQtr@L/f/WM1JycfHUAOktave / MATLAB, 35 Bytes
Anonyme Funktion, die einen Zeichenvektor verwendet und eine Zahl erzeugt.
In MATLAB kann dies auf
size(unique(perms(s),'ro'),1)
(33 Bytes) gekürzt werden .Probieren Sie es online aus!
Erläuterung
quelle
unique
bereits eindeutige Zeilen zurückgegeben? Oder ist das nur fürtable
s?unique
würden zuerst linearisiert. Für Tische denke ich, dass Sie Recht haben; Das wusste ich nicht!unique
in MATLAB werden Zeilen für genommentables
; Rsunique
nimmt eindeutige Zeilen von Matrizen oder Datenrahmen. Zu viele Array-Sprachen mit denselben Befehlen, die leicht unterschiedlicheRetina 0,8,2 , 73 Bytes
Probieren Sie es online aus! Verwendet die Formel von @ ArBo, wird jedoch von rechts nach links ausgewertet, da dies in ganzzahliger Arithmetik erfolgen kann, während die Größe der beteiligten unären Werte weiterhin minimiert wird. Erläuterung:
Zählen Sie für jedes Zeichen, wie viele Duplikate noch vorhanden sind und wie viele weitere Zeichen vorhanden sind, fügen Sie jeweils eines hinzu, um das aktuelle Zeichen zu berücksichtigen, und trennen Sie die Werte, damit wir wissen, welche geteilt und welche multipliziert werden sollen .
Stellen Sie eine 1 voran, um einen vollständigen Ausdruck zu erhalten.
Multiplizieren Sie wiederholt die vorletzte und drittletzte Zahl, während Sie durch die vorletzte Zahl dividieren. Dies ersetzt die letzten drei Zahlen.
In Dezimalzahl konvertieren.
quelle
K, 27 Bytes
K, 16 Bytes - keine echte Antwort
Nehmen Sie 999999 zufällige Permutationen der Eingabezeichenfolge, nehmen Sie die eindeutige Menge davon und zählen Sie die Länge. Meistens gibt es die richtige Antwort für kurze Saiten.
Verbessert dank @Sriotchilism O'Zaic, @Selcuk
quelle
999999
statt verwenden100000
?Wolfram Language (Mathematica) , 32 Bytes
Probieren Sie es online aus!
Erläuterung: Die
/*
Rechtskomposition mit wendet diese drei Operatoren nacheinander von links nach rechts auf das Funktionsargument an:Characters
konvertiert die Eingabezeichenfolge in eine Liste von Zeichen.Permutations
erstellt eine Liste aller eindeutigen Permutationen dieser Zeichenliste.Length
Gibt die Länge dieser Liste eindeutiger Permutationen zurück.Diese Methode ist für lange Zeichenfolgen sehr verschwenderisch: Die eindeutigen Permutationen werden tatsächlich aufgelistet und gezählt, anstatt a
Multinomial
zu verwenden, um ihre Anzahl ohne Auflistung zu berechnen.quelle
F # (Mono) , 105 Bytes
Probieren Sie es online aus!
quelle
Pyth ,
54 BytesProbieren Sie es online aus!
Dies setzt voraus, dass die Eingabe ein Python-String-Literal ist. Wenn die Eingabe Rohtext sein muss, funktioniert diese 5-Byte-Version:
In beiden Fällen werden nur alle Permutationen der Eingabe als Liste berechnet, dedupliziert, die Anzahl der darin enthaltenen Elemente ermittelt und diese Anzahl implizit gedruckt.
-1 Byte dank @ hakr14
quelle
{
dedupliziert eine Liste für ein Byte kleiner als.{
.J ,
1413 BytesProbieren Sie es online aus!
1 Byte dank Meilen
quelle
#(%*/)&:!#/.~
sollte ein weiteres BytePHP , 77 Bytes
Probieren Sie es online aus!
Dies ist im Grunde nur eine PHP-Portierung von @ ArBos gewinnender Python-Antwort, die lächerlich klüger ist als die rekursive Antwort, die ich ursprünglich hatte. Bravo!
quelle
Ohm v2 , 4 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Stax , 3 Bytes
Führen Sie es aus und debuggen Sie es
quelle