Eine Umstellziffer ist eine natürliche Zahl, die nur durch Wiederholung derselben Ziffer geschrieben werden kann. Zum Beispiel 777
ist ein Repdigit, da es sich ausschließlich aus der 7
dreimal wiederholten Ziffer zusammensetzt.
Dies ist jedoch nicht nur auf Dezimalzahlen (Basis 10) beschränkt:
- Jede Mersenne-Zahl (in der Form M n = 2 n -1 ) ist eine Nachkommastelle, wenn sie binär geschrieben ist (Basis 2).
- Jede Zahl ist eine einfache Umstellung, wenn sie in Unary geschrieben ist (Basis 1).
- Jede Zahl
n
kann auch trivial als repdigit11
in base geschrieben werdenn-1
(z. B.17
wenn hexadezimal geschrieben (base 16)11
, und3
wenn binär geschrieben (base 2), ist dies auch11
).
Hier besteht die Herausforderung darin, andere Basen zu finden, bei denen die eingegebene Nummer eine Umstellziffer sein kann.
Eingang
Eine positive Ganzzahl x > 3
in einem beliebigen Format.
Ausgabe
Eine positive Ganzzahl, b
bei der (x-1) > b > 1
die Darstellung von x
in base b
eine Umstellziffer ist.
- Ist dies nicht der Fall
b
, wird eine Ausgabe0
oder ein falscher Wert ausgegeben . - Wenn mehrere solcher
b
vorhanden sind, können Sie einige oder alle ausgeben.
Regeln
- Die
(x-1) > b > 1
Einschränkung besteht darin, die unbedeutenden Konvertierungen in unäre oder die "subtrahierende" Basis zu verhindern. Die Ausgabenummer kann in einer unären oder einer beliebigen geeigneten Basis geschrieben werden, aber die Basis selbst darf keine der trivialen Konvertierungen sein. - Die Eingabe / Ausgabe kann über jede geeignete Methode erfolgen .
- Es gelten die üblichen Lückenbeschränkungen.
Beispiele
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
quelle
quelle
b ≤ 36
vielen Sprachen integrierten Basisumwandlungsfunktionen nicht höher sind?b ≤ 36
stark begrenzt den Umfang dieses Problems, und alle vorhandenen Antworten richtig größere Basen handhaben , so dass ich nicht sagen werde, Sie eine obere auf gebunden nicht davon ausgehen kann ,b
jenseits dessen, was gegeben wird .Antworten:
Jelly,
119 BytesGibt eine Liste von Basen zurück, die leer (falsch) ist, wenn keine vorhanden ist. Probieren Sie es online!
Wie es funktioniert
quelle
Pyth,
1110Anscheinend sucht Pyths Unary
q
nach einer Liste, die alle eindeutigen Werte seit ungefähr 10 Tagen enthält. Die Untersuchung von Pyth-Bugs verbessert anscheinend die Golfergebnisse.Filtert die Liste danach,
[2..input-1)
ob die eindeutige Ziffernfolge der Eingabe in dieser Basis die Länge 1 hat.Test Suite
Erläuterung:
quelle
Ruby,
876963 BytesIch musste die Basiskonvertierung von Hand durchführen, da Rubys Buildins nur bis zur Basis 36 reichen ...
Rückgabe
nil
für nicht gefunden.quelle
Python, 71
7278BytesKeine Rekursion, probiert einfach alle Basen aus und gibt eine Reihe von denen aus, die funktionieren.
Es ist verlockend , zu kodieren
b
undd
in einer einzigen Zahl, aber es dauert zu viele klammern Ausdrücke sie zu extrahieren. 77 Bytes:72 Bytes:
Gibt den ersten aus
b
, der funktioniert, oder0
falls keiner funktioniert.Eine Wiederholungseinheit
x
vond
Stellenc
in der Basisb
hat einen Wertx==c*(b**d-1)/(b-1)
. Äquivalentx*(b-1)==c*(b**d-1)
.Der Wert
c
muss seinx%b
die letzte Ziffer sein. Ich sehe jedoch keine Möglichkeit,d
arithmetisch zu bestimmen , sodass der Code alle Möglichkeiten ausprobiert, um festzustellen , ob einer von ihnen funktioniert.Gespeichert 5 Bytes durch Kopieren Dennis Tricks des Gebens einer Falsey ausgegeben , wenn
b
erreicht ,x-1
indem die Ausgabe Modulo unterx-1
. Ein weiteres Byte, das von Dennis gespeichert wurde, erinnert mich daran, dass Exponentiation aus unerklärlichen Gründen eine höhere Priorität hat~
.Eine gleichlange Lösung mit
in
stattany
.quelle
Ruby, 50 Bytes
Ich würde diesen nervigen Raum wirklich gerne entfernen, aber als Neuling in Ruby bin ich mit seinen syntaktischen Macken immer noch nicht vertraut.
quelle
b?
dies ein gültiger Methodenname, sodass Sie den Speicherplatz nicht entfernen können.Emojicode , 214 Bytes
(77 Zeichen):
Gibt die Ergebnisse in Basis 9 aus.
Ich habe vor, seit ein paar Wochen Code-Golf mit Emojicode zu spielen, aber die Sprache ist erst seit kurzem stabil genug, um tatsächlich mit 😉 zu arbeiten. Als Bonus nutzt diese Frage die Funktionalität, die Emojicode eigentlich wirklich gut kann: Ganzzahlen in anderen Basen darstellen.
Ungolfed (👴 ist ein Zeilenkommentar in Emojicode)
quelle
Python 2, 79 Bytes
Probieren Sie es auf Ideone .
Idee
Jedes Wiederholungszeichen x der Basis b> 1 und der Ziffer d <b erfüllt das Folgende.
Da d <b , ist die Abbildung (b, d) ↦ cb + d injektiv.
Da b, x> 1 ist , gilt c <x , also gilt cb + d <cb + b = (c + 1) b ≤ xb .
Dies bedeutet, dass wir , um geeignete Werte für c und d für eine gegebene Basis b zu finden , alle i in [0,…, bx) durchlaufen und prüfen können, ob (b - 1) x == (i% b) (b i / b - 1) .
Code
Das genannte Lambda f testet, ob (b - 1) x in der Menge {(i% b) (b i / b - 1) | 0 ≤ i <bx} , beginnend mit dem Wert b = 2 .
Wenn der Test erfolgreich war, geben wir b zurück .
Andernfalls rufen wir f erneut auf, wobei das gleiche x und b um 1 erhöht werden .
Da b schließlich x - 1 erreichen kann , nehmen wir das Endergebnis Modulo x - 1 , um in diesem Fall 0 zurückzugeben . Beachten Sie, dass dies nicht passiert, wenn b = 2 die Bedingung erfüllt, da es ohne Rekursion zurückgegeben wird. Die Frage garantiert jedoch, dass in diesem Fall b = 2 <x - 1 ist.
quelle
Perl 6,
454342 BytesErläutert
Als Referenz ist eine Variable
$^x
in{ ... }
dasselbe wie doing-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
gibt Ihnen eine umgekehrte Liste von Ziffern / 'Ziffern' für die$n
Basis$b
Polymod (Real): Die Polymod-Methode ähnelt fast einer leistungsstärkeren Version der Python-
divmod
Funktion.$n.polymod(*@args)
dividiert $ n durch jeden Wert in * @ args, fügt den Rest ($n mod $x
) zur zurückgegebenen Liste hinzu und verwendet den Quotienten für die nächste Division. Ich habe das Gefühl, dass ich es schlecht erklärt habe. Hier sind einige Beispiele (geschrieben in Perl 6, aber sauber genug, um von den meisten verstanden zu werden, wie ich hoffe):quelle
grep
Methode anstelle derfirst
Methode verwenden.Dyalog APL , 28 Bytes
{
...⍵
...}
anonyme Funktion angewandt werden , umx
(dargestellt durch⍵
)b←1+⍳⍵-3
ganze Zahlen von 2 - ⍵-2 gespeichert , wie esb
⍵{
...}¨
für jedes Element in b (⍵
), die Funktion anzuwenden{
...}
mit x als linkem Argumente⍺
⍵⊥⍣¯1⊢⍺
convert x auf diese Basis1=≢∪
1 ist gleich die tally der eindeutigen Ziffer?b/⍨
Elemente von b sind wahr (dass es nur eine einzige Ziffer gibt).Beispielfälle
Wenn keine Basis existiert, ist die Ausgabe leer (was falsch ist), wie durch dieses Programm gezeigt werden kann:
Dies druckt 'Falsch'
quelle
Pyth,
2619 BytesProbieren Sie es hier aus!
Ich werde eine Erklärung hinzufügen, nachdem ich das gespielt habe.Schauen Sie sich diese Antwort für eine kürzere Implementierung und Erklärung an.quelle
90
und91
in meinen Beispielen vergessen habe!MATL ,
15 bis14 BytesDas funktioniert mit aktuellen Version (14.0.0) der Sprache / des Compilers.
Wenn keine Basis existiert, ist die Ausgabe leer (was falsch ist).
Probieren Sie es online!
quelle
Mathematica, 55 Bytes
Anonyme Funktion, nicht zu kompliziert. Filtert einfach die Basen basierend auf der Wiederholbarkeit heraus.
quelle
Python 2, 75 Bytes
Ein Port meiner rubinroten Antwort. Gibt alle gültigen Basen aus, sofern vorhanden.
quelle
Julia, 45 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und ein Ganzzahl-Array zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu. Es werden alle anwendbaren Basen oder ein leeres Array zurückgegeben. Es gibt keine Probleme mit großen Basen.
Zuerst generieren wir den Inklusionsbereich [2, n - 2], wobei n die Eingabe ist. Wir haben dann
filter
die Liste nur für ganze Zahlen b, für die n in der Basis b weniger als 2 eindeutige Ziffern hat. Dazu erhalten wir für jede Ganzzahl b im Bereich die Ziffern von n in der Basis b als Array unter Verwendung vondigits
, erhalten eindeutige Elemente unter Verwendung von∪
und erhalten den Index des letzten Elements (dh die Länge) unter Verwendung vonendof
.quelle
Brachylog , 12 Bytes
Probieren Sie es online! (als generator!)
Übernimmt die Eingabe über die Eingabevariable und gibt eine Basis über die Ausgabevariable aus, falls dies möglich ist. Andernfalls schlägt dies fehl. Gleichzeitig funktioniert es auch als Generator der eine Liste aller Basen ausgibt, wobei diese Liste leer sein kann.
Im Idealfall könnte dies so aussehen
ḃ↙.=&>>
, dass möglicherweise die Generatorfunktionalität in dieser oder einer ähnlichen Form geopfert wird (da dies letztendlich unärgerlich werden würde), aber ab sofort sind 12 Byte die kürzesten, die ich weiß, wie ich sie bekomme.quelle
Rubin ,
4643 BytesVerwendet die in Ruby 2.4 eingeführte Funktion Integer # digits , um eine manuelle Teilung zu vermeiden.
-3 Bytes dank @Jordan.
Probieren Sie es online!
quelle
05AB1E , 7 Bytes
Gibt alle möglichen Werte oder eine leere Liste als Falsey-Wert aus (obwohl technisch gültige Ausgaben auch Falsey sind, da nur
1
in 05AB1E Wahrheit ist und alles andere Falsey).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Perl 5
-Minteger -na
, 63 BytesProbieren Sie es online!
Gibt alle möglichen Antworten oder nichts aus, wenn keine Lösung vorhanden ist.
quelle