Davon inspiriert . Es gibt eine Zahl, die entweder als Ganzzahl, Zeichenfolge oder als Array von Ziffern angegeben wird (Ihre Wahl). Suchen Sie die Basis, in der die Darstellung der Zahl die meisten "4" hat, und geben Sie diese Basis zurück.
Zahlenergebnis 624 5 444 10 68 16
Beschränkungen:
- Die zurückgegebene Basis sollte nicht größer als die Eingabe sein.
- Zahlen kleiner oder gleich abs (4) sollten nicht als gültige Eingabe angesehen werden, daher sind undefinierte Rückgaben akzeptabel
[1,15,3,64,43]
für eine Zahl in der Basis80
. Sie geben nur die Basisnummer aus, sodass Sie jede Basis von2
bis technisch testen könnenn
.1
,2
und3
, die in jeder Basis die gleiche Anzahl von "4" (0) haben? Außerdem haben viele Zahlen in vielen Basen die gleiche Anzahl von "4" (z. B.4
in jeder Basis> 5,44
in jeder Basis> 45,14
in Basis 9 oder in jeder Basis> 15 usw.). Sollte die richtige Antwort die kleinste Basis mit der größten Anzahl von "4" sein?Antworten:
APL (
3119)Testet nun alle möglichen Basen.
Erläuterung:
⍳K←⎕
: Benutzereingaben lesen, in K speichern. Erstellen Sie eine Liste von 1 bis K, die als Grundlage für den Versuch dienen.{
...}¨
: Führen Sie für jede davon die folgende Funktion ausK⊤⍨K⍴⍵
: Kodiere K in diese Basis und gib eine Liste von Ziffern (als Zahlen) pro Basis an. Verwenden Sie K-Ziffern (eine große Überschätzung, aber es spielt keine Rolle, da die nicht verwendeten ohnehin alle Null sind).4=
: Sehen Sie, welche davon gleich 4 sind+/
: summiere diese, jetzt wissen wir, wie viele vier pro Basis⊃⍒
: Geben Sie die Indizes der Liste an, wenn sie nach unten sortiert sind, sodass der Index der größten Liste vorne steht. Nehmen Sie den ersten Punkt dieser Liste.quelle
⍨
GolfScript, 30 Zeichen
Funktioniert für jede Basis - testen Sie den Code online .
Kommentar: Diese Lösung basierte auf der Originalversion der Frage. Es kann daher eine Basis zurückgeben, die größer als die Eingabe ist, z. B. gibt es für die Eingabe 4 korrekt die Basis 5 zurück - die nach den neuen Regeln nicht mehr gültig ist.
quelle
GolfScript (23 Zeichen)
oder
oder
Beachten Sie, dass dies von stdin eingegeben wird: Für einen fairen Vergleich mit Howards GolfScript-Version ziehen Sie ein Zeichen ab.
Howard weist darauf hin, dass sich die Regeln geändert haben, und es ist nicht sehr logisch, dass sie jetzt
4
als mögliche Eingabe ausgeschlossen werden, wenn sie eine gültige Ausgabe haben (eine ganze Zahl größer als 4). Um auch diesen Fall abzudecken, sind 2 zusätzliche Zeichen erforderlich, die auf verschiedene Arten hinzugefügt werden können:oder
ein paar der offensichtlichen zu sein.
quelle
Python 2.x, 77 Zeichen
Funktioniert bis zur Basis 98 und höchstens 98 Ziffern lang.
quelle
J, 38 Zeichen
Verwendung:
quelle
VBA, 121
Verwendung:
?k(num)
=k(A1)
quelle
For w=5To a
Mathematica 59
Code
Geben wir der obigen Funktion einen Namen.
Erläuterung
Count[IntegerDigits[n,k],4]
: Zähle die Anzahl der Vierer in der Basis k- Darstellung von n .Sort
die Basen von den wenigsten bis zu den meisten 4ern.Einige spezielle Nummern
Wenden wir whichBase nun auf die folgenden Spezialnummern an.
Wenn Sie jede Zahl in die entsprechende Basis umwandeln, werden Sie sehen, was an ihnen besonders ist.
quelle
n
. AußerdemMaximalBy
hilft es wirklich, es auf 49 Bytes zuMaximalBy[Range[a=#],a~IntegerDigits~#~Count~4&]&
Japt
-h
, 10 Bytes444
in base10
ist,[4,4,4]
was die Zahl und Ziffer4
3-mal enthält, aber444
in base100
ist,[4,44]
was auch die Ziffer4
3-mal enthält, aber nur einmal als Zahl. Angesichts der erwarteten Ausgabe in der Herausforderung für den444
Testfall, würde ich vermuten, dass wir die Nummer 4 zählen:Versuch es
Aber wenn wir sind Zählen der Ziffer 4 dann:
Versuch es
quelle
C - (114 Zeichen)
Alles in allem ist es golferischer Ruhm:
Und etwas ungolfed:
Nur zum Spaß hier ist die Ausgabe für die Zahlen
[0,127]
(dies sind die größten Basen unter der Eingabenummer selbst).quelle
R -
148137 Zeichen(also weit weg vom Rest der Konkurrenz aber trotzdem)
Transformieren Sie die Eingabe von Basis 10 in alle Basen von 4 bis n (mit Modulo-
%%
und Ganzzahldivision%/%
) und wählen Sie den Index der ersten mit den meisten 4s.quelle
J Übersetzung von @marinus 'APL-Lösung:
Nur aus Interesse, hier sind einige Werte:
Es gibt die kleinste Basis aus, die eine Fourier-Transformation ergibt. Für die letzten Werte in der Tabelle sehen die Darstellungen wie „4n“ aus (z. B. 31 in Basis 7 ist „43“).
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Gibt "alle" Basen bis zu N aus, was die meisten 4 ergibt. Wenn Sie eine maximale oder minimale Basis wünschen, fügen Sie
Ṁ
(max) bzw.Ṃ
(min) hinzu.Wie es funktioniert
quelle
05AB1E ,
109 Bytes-1 Byte dank @Cowabunghole .
Wenn mehrere Basen die gleiche Anzahl von 4s haben, wird die kleinste ausgegeben (dh dies
16
führt zu einer möglichen Ausgabe6
,12
wäre aber auch eine solche gewesen).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Qƶà
durchk>
? dh den 0-basierten Index des Maximums finden und diesen erhöhen?C # mit Linq 273
oder
Ziemlich sicher, dass die Anzahl der Variablen reduziert werden kann und die if's in? S konvertiert werden können. Naja...
quelle
C # (
482~ 423 Bytes)Erster Versuch einer "Golf" -Lösung. Ich habe im Grunde den gleichen Algorithmus wie die VBA oben verwendet. Ich könnte wahrscheinlich einige Bytes speichern, die die Konvertierungsfunktion inlinen oder den Namen verkürzen. Wie ich bereits sagte, ist dies ein erster Versuch, seien Sie also bitte vorsichtig.
Mit Leerzeichen:
quelle
namespace
erforderlich ist. Alle Namen sollten ein einzelnes Zeichen sein, einschließlichProgram
undcBase
. Und ja, du solltest inline seincBase
. Kombinieren Sie auch Deklaration und Initialisierung, dhint c=0,m=0
.int
Parameter entgegennimmt undint
Parameter ohneMain
Methode zurückgibt , und das Zeichen count your score aufzurufen.Burlesque - 28 Bytes
Probieren Sie es online aus.
quelle
k , 18 Bytes
Probieren Sie es online!
quelle
Perl 6 , 44 Bytes
Probieren Sie es online!
Guter alter Polymod .
quelle
Schale , 9 Bytes
Probieren Sie es online!
quelle