Geben Sie bei einer Zahl von 1 bis 24 die Kusszahl nach bestem Wissen aus (einige Zahlen haben mehr als eine akzeptable Ausgabe). Kenntnisse der Geometrie sind nicht erforderlich, da die Ergebnisse alle nachstehend aufgeführt sind.
Auf der Wikipedia-Seite zum Problem mit der Kissing Number :
Eine Kusszahl ist definiert als die Anzahl nicht überlappender Einheitskugeln, die so angeordnet werden können, dass sie jeweils eine andere Einheitskugel berühren
Das heißt, wie viele Einheitskugeln können eine Einheitskugel berühren, ohne dass sich eine davon überlappt? Die Frage wird im N-dimensionalen Raum gestellt, wobei unter einer Kugel eine N-1-dimensionale Kugel verstanden wird.
Beispielsweise:
- Im zweidimensionalen Raum kann ein Einheitskreis 6 andere Einheitskreise berühren.
- Im dreidimensionalen Raum kann eine Einheitskugel 12 andere Einheitskugeln berühren.
Die Wikipedia-Seite listet Werte für den 1- bis 24-dimensionalen Raum auf. Einige von diesen sind jedoch noch nicht genau bekannt, so dass nur eine untere und obere Schranke angegeben sind. Die Tabelle wird hier reproduziert, so dass sie unabhängig von einer zukünftigen Einschränkung der Bereiche aufgrund neuer Beweise unverändert bleibt. Lösungen werden an dieser festen Tabelle gemessen, auch wenn die Wikipedia-Seite in Zukunft geändert wird.
Grenztabelle
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
Eingang
Die Dimension: Eine ganze Zahl von 1 bis 24 (einschließlich).
Hier gibt "Ganzzahl" an, dass die Eingabe keinen Bruchteil hat - es kann sein 2
oder 3
aber nie 2.5
. Eine Lösung kann Eingaben beispielsweise immer noch als Float oder als Zeichenfolge annehmen.
Ausgabe
Eine Zahl im relevanten Bereich von der Untergrenze bis zur Obergrenze für diese Eingabe (einschließlich).
Die Ausgabe muss deterministisch sein (immer dieselbe für dieselbe Eingabe).
Die Ausgabe muss eine Ganzzahl sein. Zum Beispiel für die Eingabe 5
der möglichen gültigen Ausgänge sind 40
, 41
, 42
, 43
, 44
. Beachten Sie, dass dies eine Einschränkung des Werts und nicht des Typs ist. Es ist akzeptabel, einen Schwimmer zurückzugeben, vorausgesetzt, er hat einen Bruchteil von Null. Zum Beispiel 41.5
wäre nicht gültig, 41.0
wäre aber gültig.
Wertung
Das ist Code-Golf . Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Code. Für jede Sprache ist der Gewinner die Lösung mit der niedrigsten Punktzahl.
quelle
Antworten:
Julia 0,6 , 52 Bytes
Probieren Sie es online!
Wie?
Maschinelles lernen! (Ein bisschen. Vielleicht. Nicht wirklich. )
c
ceil
quelle
MLBase
!!! J / k, die Linien um ML sind verschwommen wie immer, aber wahrscheinlich ist zu einfach das Etikett für maschinelles Lernen zu verdienen. Andererseits ist es immer nützlich, ein Schlagwort zu verwenden!x86,
62595350 BytesMeine Lösung verwendet eine Byte-Nachschlagetabelle und eine Verschiebung um 2 (keine FP-Berechnungen). Die Abmessungen 9 bis 23 bieten genügend Spielraum für das Schalten. Eingabe in
eax
und Ausgabe inecx
.-3 durch tauschen
eax
undecx
dacmp $imm, %al
ist kürzer alscmp $imm, %cl
.-4 durch nicht die N = 24 separat Fall der Behandlung , aber die Anpassung an alle Zeiten 1024 Fälle anwenden.
-2 von nicht früh zurückkehren (dumm)
-3 durch Verwendung der Tabelle als Versatz und
movzbl
anstelle von Nullstellen mitxor
Hexdump (Tabelle in
.text
statt.data
)quelle
.rodata
nicht.data
einfügen. (Oder anscheinend unter Windows.rdata
). Der.rodata
Abschnitt wird als Teil des Textsegments verknüpft.shl
, besonders wenn Ihre Nummer nicht signiert ist (Sie haben sie frühermovzbl
geladen, nichtmovsbl
). Natürlichsal
ist es nur ein anderer Name für den gleichen Opcode. gcc gibt es aussal
, aber es ist ziemlich selten, es in handgeschriebenem Code zu sehen.JavaScript (ES6), 60 Byte
Probieren Sie es online!
Wie?
Alle anderen Ausdrücke werden rekursiv berechnet unter Verwendung von:
was zu folgenden Verhältnissen führt:
Das Endergebnis ist schließlich unbearbeitet und wird zurückgegeben.
Zusammenfassung der Ergebnisse
Ungefähre Ergebnisse werden mit 2 Dezimalstellen angegeben.
quelle
Jelly ,
2926 BytesProbieren Sie es online!
Wie es funktioniert
quelle
JavaScript (Node.js) ,
12099 Byte21 Bytes gelöscht. Große Reduzierung dank des Vorschlags von tsh, ein Loch am Anfang des Arrays einzufügen (zwei Bytes von
n-1
bis sparenn
und auf runde Zahlen innerhalb der Unter- und Obergrenze abzielen, wodurch sie von der Festkommanotation wie1154
zur Exponentialnotation verkleinert werden mögen2e3
.Mein ursprüngliches Ziel war es, zu zeigen, wie leicht die "dumme" Art sein würde (z. B. ohne echte Mathematik, wie Arnauld's Antwort). Es ist beeindruckend, dass es noch Raum gab, sie ohne Transformationen oder Berechnungen zu verkleinern.
Probieren Sie es online!
Zweimal so lang wie Arnauld's Antwort, 0 Grad Komplexität.
JavaScript (Node.js) ,
129128 Byte(-1 Byte dank Vorschlag zur Bitverschiebung)
Probieren Sie es online!
Um den Anforderungen des Interesses gerecht zu werden, habe ich die Logik aus der x86-Antwort gestohlen und daraus das Array erstellt. Es 9 Bytes länger machen. Aber etwas interessanter.
quelle
f=
, ändern(x)
zux
, fügen Sie ein Loch und Änderungx-1
zux
. TIO ; und vielleicht runden sie TIO 99 BytesRunen, 173 Bytes
(Beachten Sie, dass die untere rechte Ecke für Bytes gezählt werden sollte: Sie sind implizit mit Leerzeichen gefüllt.)
TIOs Exe benötigt ein Update , auf das sich diese Antwort stützt (und ich repariere ein paar andere Lücken, bevor ich Dennis auffordere, es wieder aufzubauen). Fügen Sie jedoch einen Wert ein (stellen Sie sicher, dass Sie in den Zeilen 2 und 3 Leerzeichen einfügen, wenn Sie mehr als ein Zeichen für den Wert in der ersten Zeile verwenden). So schreiben Sie die benötigten Werte am einfachsten:
Probieren Sie es online!
Funktionell ist dies eine Portierung der Julia-Antwort von Sundar (aber Runic hat keinen Befehl zum Verschieben
e
auf den Stack (oder wirklich einen Dezimalwert), sodass eine Annäherung erforderlich war). Die Näherung füre
Eingaben unter 8 ist genauer, da der Genauigkeitsverlust zu Werten führt, die außerhalb des zulässigen Bereichs der Ausgaben liegen (z. B.7
125 ergeben würden).Ceil()
wurde durch Konvertieren in ein Zeichen und dann zurück in eine Zahl erreicht (dies schlug bei außergewöhnlich großen Werten fehl, so dass ich es bei 40k durch 100 teilen ließ, die Konvertierung in und zurück durchführte und dann wieder mit 100 multiplizierte).Wahrscheinlich gibt es einige Zimmer , die Anordnung zu vereinfachen (zB den Einstiegspunkt vertikal verlaufende , unten oder die Suche nach einem Weg , um die Annäherungen zu komprimieren
e
), aber ich bin glücklich , mit nur in der Lage sein zu tun , um die Berechnung.161 Bytes.
Dolmetscher Update:
Mit der Push-Fixing-Eingabe verfügt Runic nun über mehrere mathematische Funktionen und die Möglichkeit, Zeichenfolgen doppelt zu analysieren. Das wird diese Antwort erheblich vereinfachen, aber ich werde es so belassen, wie es ist, um den Aufwand zu demonstrieren, den ich in sie gesteckt habe meine To-Do-Liste, hatte aber Exp, Abs, Log usw. nicht berücksichtigt und hatte keine Charaktere mehr). TIO sollte in den nächsten 24-48 Stunden aktualisiert werden, je nachdem, wann Dennis es sieht.
212,+16,+1c2*,+1cX,+
würde sich1'eA
mit diesem Interpreter-Update auf -> reduzieren .A
Fügt ein Zeichen und einen Wert hinzu und führt eine mathematische Operation für diesen Wert basierend auf dem aufgetauchten Zeichen durch (e
in diesem Fall istExp()
undExp(1)
gibt e zurück ).quelle