Einige Teiler positiver Ganzzahlen hassen sich wirklich und teilen nicht gerne eine oder mehrere gemeinsame Ziffern.
Diese ganzen Zahlen heißen Hostile Divisor Numbers ( HDN )
Beispiele
Die Zahl 9566
hat 4
Teiler: 1, 2, 4783 and 9566
(Wie Sie sehen, haben keine zwei die gleiche Ziffer ).
Somit ist 9566 ein H- Ostil D ivisor N umber
Nummer 9567
ist NICHT HDN da die Teiler ( 1, 3, 9, 1063, 3189, 9567
) einige gemeinsame Ziffern haben.
Hier sind die ersten paar HDN
1,2,3,4,5,6,7,8,9,23,27,29,37,43,47,49,53,59,67,73,79,83,86,87,89,97,223,227,229,233,239,257,263,267,269,277,283,293,307,337...
Aufgabe
Die obige Liste geht weiter und Ihre Aufgabe ist es, den n-ten HDN zu finden
Eingang
Eine positive ganze Zahl n
von 1
bis4000
Ausgabe
Der nth
HDN
Testfälle
Hier sind einige 1-indizierte Testfälle.
Bitte geben Sie an, welches Indexsystem Sie in Ihrer Antwort verwenden, um Verwirrung zu vermeiden.
input -> output
1 1
10 23
101 853
1012 26053
3098 66686
4000 85009
Das ist Code-Golf , also gewinnt die niedrigste Punktzahl in Bytes.
BEARBEITEN
Gute Nachrichten! Ich habe meine Sequenz bei OEIS eingereicht und ... Die
feindlichen Divisorennummern lauten jetzt OEIS A307636
quelle
94699599289
das Quadrat von307733
Teiler,[1, 307733, 94699599289]
was zeigt, dass es sich um ein HDN handelt. Scheint mir feindlich zu sein.49
? Faktoren[1, 7, 49]
qualifizieren sich als feindselig ... Oder4
:[1, 2, 4]
...1
mit Teilerliste[1]
. (Vielleicht sind große HDN interessanter?)49
als Divisoren[7, 7]
, die nicht nur Ziffern teilen, sondern die gleichen Ziffern sind.49
hat Faktoren[1, 7, 49]
Antworten:
05AB1E ,
1210 Bytes-2 Bytes dank @Emigna .
1-indiziert
Probieren Sie es online aus oder überprüfen Sie die meisten Testfälle (die letzten beiden Testfälle werden ausgelassen, da sie eine Zeitüberschreitung aufweisen).
Erläuterung:
quelle
µNNÑ€ÙSDÙQ
für 10.µ
, damit du mir die Mühe ersparst . ;)Python 2 , 104 Bytes
Probieren Sie es online!
0-indiziert.
quelle
JavaScript (ES6), 78 Byte
1-indiziert.
Probieren Sie es online!
Schnellere Version, 79 Bytes
Probieren Sie es online!
Wie?
Bei einer Ganzzahlk>0 bilden wir den String s als Verkettung aller Teiler von k .
Dak immer ein Teiler von sich selbst ist, wird s mit k initialisiert (zu einem String gezwungen) und der erste Teiler, den wir versuchen, ist d=k−1 .
Für jeden Teilerd von k , prüfen wir , ob eine beliebige Ziffer von d finden Sie in s durch Drehen d in einen Zeichensatz in einem regulären Ausdruck umwandeln.
Beispiele
"956647832".match(/[1]/)
ist falsch"9567".match(/[3189]/)
ist wahrKommentiert
Dies ist die Version ohne
eval()
, für die Lesbarkeitquelle
Gelee , 10 Bytes
Probieren Sie es online!
-1 Byte dank ErikTheOutgolfer
Nimmt Eingaben von STDIN auf, was für Jelly ungewöhnlich ist, aber bei
nfind
Verwendung normal ist.2-indiziert
quelle
nfind
, änderte es die Indexierung lol⁼Q$
ist das gleiche wieQƑ
.Perl 6 , 53 Bytes
Probieren Sie es online!
1-indiziert.
/(.).*$0/
Entspricht einer beliebigen Zahl mit einer wiederholten Ziffer.grep $_ %% *, 1 .. $_
Gibt eine Liste aller Teiler der Nummer zurück, die$_
derzeit auf Mitgliedschaft in der Liste überprüft werden.[~]
Verkettet alle diese Ziffern miteinander und vergleicht dannR!~~
die Zeichenfolge rechts mit dem Muster links. ( Ist~~
der übliche Übereinstimmungsoperator,!~~
ist die Negation dieses Operators undR
ist ein Metaoperator, der die Argumente von vertauscht!~~
.)quelle
Python 2 (PyPy) ,
117114 ByteVerwendet 1-Indizierung
Probieren Sie es online!
quelle
Wolfram Language 103 Bytes
Verwendet 1-Indizierung. Ich bin überrascht, dass so viel Code erforderlich ist.
quelle
(n=t=1;While[t<=#,If[!Or@@IntersectingQ@@@Subsets[IntegerDigits@Divisors@n,{2}],t++];n++];n-1)&
Ich habe nicht vor, eine Antwort zu posten, daher lasse ich diese hierPowerShell , 112 Byte
Probieren Sie es online!
Nimmt 1-indizierte Eingaben auf
$args[0]
, speichert diese in$a
Schleifen, bis diese treffen0
. Bei jeder Iteration wird ein Array mit zehn Elementen auf Null gesetzt$z
(verwendet, um unsere Stellenzahlen zu speichern). Dann konstruieren wir unsere Liste der Teiler mit1..++$n|?{!($n%$_)}
. Für jeden Teiler setzen wir ihn in einen String um"$_"
, setzen ihn int
oCharArra umy
undsort
diese Ziffern mit dem-u
Nique-Flag (da es uns egal ist, ob ein Teiler selbst doppelte Ziffern hat). Wir erhöhen dann die entsprechende Ziffernanzahl$z
. Dann verringern wir$a
nur , wenn$z
enthält0
s und1
s (dh haben wir ein HDN gefunden). Wenn wir unserefor
Schleife beendet haben, bedeutet dies, dass wir die entsprechende Anzahl von HDNs gefunden haben, sodass wir$n
in der Pipeline verbleiben und die Ausgabe implizit erfolgt.quelle
$a-=!($z-ge2)
Stattdessen$a-=!($z|?{$_-ge2})
Python 3 , 115 Bytes
1-indiziert
Probieren Sie es online!
Dies erfordert viel Rekursion. Selbst mit einem erhöhten Rekursionslimit ist dies nicht möglich
f(30)
. Ich denke, es könnte weiter Golf spielen und ich habe versucht, etwas zu finden, das das ersetzt(1-x%d)
, aber ich konnte mir nichts einfallen lassen (-~-x%d
hat den falschen Vorrang). Alle Bytes, die entfernt werden können, werden sehr geschätzt.Wie es funktioniert
quelle
Brachylog (v2), 14 Bytes
Probieren Sie es online!
Funktionsübermittlung; Eingabe von links, Ausgabe nach rechts. (Die TIO-Verknüpfung enthält ein Befehlszeilenargument zum Ausführen einer Funktion, als wäre sie ein vollständiges Programm.)
Erläuterung
"Ist das eine feindliche Teilernummer?" Entscheidungsproblemcode :
Dies stellte sich im Grunde als das gleiche heraus wie bei @ UnrelatedString, obwohl ich es unabhängig geschrieben habe.
Wrapper "n-te Lösung für ein Entscheidungsproblem ":
Dies ist einer der Fälle, in denen der Wrapper, der zum Erzeugen der n-ten Ausgabe erforderlich ist, erheblich länger ist als der Code, der zum Testen der einzelnen Ausgaben erforderlich ist :-)
Ich habe mir diesen Wrapper unabhängig von @ UnrelatedStrings ausgedacht. Es ist gleich lang und funktioniert nach dem gleichen Prinzip, wird aber irgendwie etwas anders geschrieben. Es hat mehr Verbesserungspotential, da wir durch Ersetzen der
A
durch eine Einschränkungsvariable gesuchte Werte Einschränkungen hinzufügen könnten , aber keine der möglichen Einschränkungsvariablen spart Byte. (Wenn es eine "nichtnegative Ganzzahl" -Einschränkungsvariable gäbe, könnten Sie dieA
durch diese ersetzen und dann ein Byte speichern, indem Sie dasℕ
Unnötige machen.)quelle
Java 10,
149139138126125120119 Bytes-10 Bytes durch Verwenden von
.matches
anstelle von.contains
pro Ziffer, inspiriert von der JavaScript-Antwort von @Arnauld .-5 Byte dank @ValueInk
-1 Byte dank @ceilingcat
1-indiziert
Probieren Sie es online aus.
Erläuterung:
quelle
i
unds
in Ihrer Regex-Suche umschalten , benötigen Sie keine zusätzliche Zeichenfolgenkonvertierung, und das Ergebnis ist dasselbe.Brachylog , 16 Bytes
Probieren Sie es online!
Sehr langsam und doppelt so lang wie es wäre, wenn dies ein Entscheidungsproblem wäre . 1-indiziert.
quelle
Wolfram Language (Mathematica) , 74 Bytes
Probieren Sie es online!
quelle
Japt v2.0a0, 17 Bytes
Versuch es
Port dieser Brachylog-Antwort .
Gutschrift: 4 Bytes Ersparnis insgesamt dank Shaggy, der auch vorgeschlagen hat, dass es eine bessere Lösung gibt, die zu viel mehr Bytes führt :)
Originalantwort 28-Byte-Ansatz:
Versuch es
Port dieser JavaScript-Antwort .
quelle
«
Abkürzung vorher nicht benutzt :) Ich denke, wenn Shaggy sich nur um eine Handvoll Bytes in meiner Punktzahl verbessert, muss ich dabei (etwas) anständig werden?Symbol , 123 Bytes
Probieren Sie es online!
1-indiziert. Wirklich langsam für große Eingaben.
quelle
Perl 6 , 74 Bytes
0-indiziert. Bei TIO werden nur die ersten drei Fälle aufgelistet, da es zu langsam ist, den Rest zu testen.
Probieren Sie es online!
quelle
Ruby ,
110979284 Bytes-13 Bytes durch Nutzung von @ Arnauld's JavaScript-Regex-Check .
-5 Bytes zum Auswechseln der
times
Schleife für einen Dekrementierer und awhile
.-8 Bytes, indem Sie
combination
nach etwas suchen, das den anderen Antworten ähnelt.Probieren Sie es online!
quelle
Perl 5
-p
, 66 BytesProbieren Sie es online!
1 indiziert
quelle
J ,
87-59Bytes-28 Bytes dank FrownFrog
Probieren Sie es online!
Original
J 87 Bytes
Probieren Sie es online!
Huch.
Das ist für J furchtbar lang, aber ich sehe keine großartigen Möglichkeiten, es zu beenden.
Erläuterung
Es hilft, ein paar Hilfsverben einzuführen, um zu sehen, was passiert:
d
Gibt eine Liste aller Teiler des Arguments zurückh
sagt dir, eine solche Liste ist feindlich. Jede Zahl~.@":"0
wird stringifiziert und dedupliziert , wodurch eine quadratische Matrix zurückgegeben wird, in der kürzere Zahlen mit Leerzeichen aufgefüllt werden.-.&' '@,/
Die Matrix wird geglättet und Leerzeichen werden entfernt. Abschließend(-:~.)
erfahren Sie, ob diese Zahl Wiederholungen aufweist oder nicht.Mit diesen beiden Helfern wird unser gesamtes, ungolfed Verb:
Hier führen wir eine Liste, deren Kopf unser "aktueller Kandidat" ist (der bei 1 beginnt) und deren Schwanz alle bisher gefundenen feindlichen Zahlen enthält.
Wir erhöhen den Kopf der Liste
>:@[
bei jeder Iteration und hängen den "aktuellen Kandidaten" nur an, wenn er feindlich isth@d@[ # [
. Wir machen das so lange, bis unsere Listenlänge 1 + n erreicht:^:(#@] < 1 + [)^:_
.Wenn wir fertig sind, geben wir die letzte Nummer dieser Liste zurück,
[: {:
die die n-te feindliche Nummer ist.quelle