Die Aufgabe
Wenn Sie eine positive Ganzzahl eingeben n
(von 1 bis einschließlich zum Grenzwert Ihrer Sprache), geben Sie die maximale Anzahl eindeutiger positiver Ganzzahlen zurück oder geben Sie sie aus n
.
Testfälle
Lassen Sie f
eine gültige Funktion definieren entsprechend der Aufgabe:
Die Reihenfolge für f
, beginnend mit 1:
1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, ...
Als größerer Testfall:
>>> f(1000000000) // Might not be feasible with brute-forcers
44720
Code testen
Für alle nicht explizit angegebenen Testfälle sollte die Ausgabe Ihres Codes mit den folgenden Ergebnissen übereinstimmen:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println((int) Math.floor(Math.sqrt(2*x + 1./4) - 1./2));
}
}
code-golf
math
number-theory
integer
integer-partitions
Addison Crump
quelle
quelle
Antworten:
05AB1E , 4 Bytes
Probieren Sie es online!
Perfektes Werkzeug für den Job.
ÅT
ergibt die Liste der Å ll T riangular Zahlen bis zu und einschließlich N (schließt leider auch 0, sonst wäre es 3 Bytes),g<
das Len bekommt g es th und dekrementiert.quelle
Gelee ,
65 BytesProbieren Sie es online!
Etwas effizient. Diese Sequenz wird bei Dreieckszahlen inkrementiert, sodass nur gezählt wird, wie viele Dreieckszahlen kleiner als n sind .
Erläuterung:
quelle
Haskell , 26 Bytes
-2 Bytes dank H.PWiz.
Probieren Sie es online!
Dies gibt das n-te Element der ganzen Zahlen zurück, wobei jedes i i + 1- mal repliziert wird .
quelle
succ
steht fürsuccessor
.Brain-Flak , 36 Bytes
Probieren Sie es online!
Dies verwendet dieselbe Struktur wie der Standard-Divisionsalgorithmus, außer dass der "Divisor" jedes Mal inkrementiert wird, wenn er gelesen wird.
quelle
Pari / GP , 19 Bytes
Probieren Sie es online!
quelle
Brain-Flak , 82 Bytes
Leerzeichen für "Lesbarkeit" hinzugefügt
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Gelee , 9 Bytes
Probieren Sie es online!
Das ist länger als bei
Dennisund DJs, aber diesmal mit Absicht . Sehr sehr effizient .quelle
M
.R , 28 Bytes
Probieren Sie es online!
Erzeugt den Vektor der
1
wiederholten2
Male,2
wiederholten3
Male, ...,n
wiederholtenn+1
Male und nimmt dasnth
Element. Dies führt zu einem Speicherfehler, entweder weil1:n
die Liste zu groß ist oder weil die wiederholte Liste mitn*(n+1)/2 - 1
Elementen zu groß ist.R 29 Bytes
Probieren Sie es online!
Berechnet den Wert direkt unter Verwendung der in der Antwort von Alephalpha gefundenen Formel . Abgesehen von der möglichen numerischen Genauigkeit sollte dies ohne Probleme funktionieren.
R , 30 Bytes
Probieren Sie es online!
Zählt die Dreieckszahlen kleiner oder gleich
n
. Dies wird möglicherweise Speicherfehler, wenn1:n
groß genug ist - zum Beispiel1e9
wirft esError: cannot allocate vector of size 3.7 Gb
.quelle
APL (Dyalog) , 8 Bytes
Probieren Sie es online!
quelle
TI-Basic, 12 Bytes
quelle
JavaScript (Node.js) , 18 Byte
Probieren Sie es online!
quelle
floor((sqrt(8x+4)-1)/2)
ob (Ihre Formel) undfloor((sqrt(8x+1)-1)/2)
(richtige Formel) für alle das gleiche Ergebnis liefernx
.Japt , 8 Bytes
Geschlossene Rezepturlösung.
Versuch es
Erläuterung
Multiplizieren Sie mit 8, addieren Sie 1 (
Ä
), erhalten Sie die Quadratwurzel (¬
), subtrahieren Sie 1 (É
) und teilen Sie das Ergebnis durch 2 (z
).Alternativ 8 Bytes
Port der Jelly-Lösung von DJMcMayhem .
Versuch es
Generieren Sie ein Array von Ganzzahlen (
õ
) von 1 bis zur Eingabe, reduzieren Sie (å
) kumulativ durch Addition (+
) und zählen Sie (è
) die Elemente, die kleiner oder gleich (§
) der Eingabe (U
) sind.quelle
Befunge,
3220 BytesProbieren Sie es online!
quelle
Brain-Flak ,
705648 BytesProbieren Sie es online!
Erläuterung
Der Hauptteil davon ist der folgende Ausschnitt, den ich geschrieben habe:
Dies wird nichts bewirken, wenn die TOS positiv ist, und wird ansonsten die Stapel wechseln. Es ist super Stapel unsauber, aber es funktioniert. Jetzt subtrahiert der Hauptteil des Programms immer größere Zahlen von der Eingabe, bis die Eingabe nicht mehr positiv ist. Wir starten den Akkumulator bei 1, indem wir jeweils 1 mehr als den Akkumulator von der Eingabe abziehen.
Wir können das oben in das Snippet einfügen
Das wird in einer Schleife ausgeführt, bis wir die Stapel wechseln. Sobald die Schleife beendet ist, holen wir den Akku, indem wir die Stapel tauschen und den Müll entfernen.
quelle
Pyth , 7 Bytes
Probieren Sie es online!
Halten Sie die ganzzahligen Partitionen, die
I
nicht über die Deduplizierung variieren, gefilterth
Filter aufl
Länge.Gültigkeitsnachweis
Nicht sehr streng und nicht gut formuliert.
Let A = a 1 + a 2 + ... + a n und B = b 1 + b 2 + ... + b m sein , zwei verschiedene Partitionen derselben ganze Zahl N . Wir gehen davon aus, dass A die längste eindeutige Partition ist. Nachdem wir B dedupliziert haben , dh mehrere Vorkommen derselben Ganzzahl durch nur eines ersetzt haben, wissen wir, dass die Summe von B kleiner als N ist . Wir wissen aber auch, dass das Funktionsergebnis (nicht ausschließlich) zunimmt, sodass wir daraus die längste eindeutige Partition A ableiten können Enthält immer mindestens die gleiche Anzahl von Elementen wie die Anzahl der eindeutigen Elemente in anderen Partitionen.
quelle
Dreieckigkeit , 49 Bytes
Probieren Sie es online!
Wie es funktioniert
Dreieckigkeit erfordert, dass der Code eine dreieckige Verteilung der Punkte aufweist. Das heißt, die Länge jeder Zeile muss gleich der Anzahl der mit 2 multiplizierten und dekrementierten Zeilen sein, und jede Zeile muss (auf jeder Seite) eine Anzahl von Punkten aufweisen, die ihrer Position im Programm entspricht (die unterste Zeile ist Zeile 0). die darüberliegende ist Zeile 1 und so weiter). Es gibt nur ein paar Befehle, und alle Zeichen, die nicht auf der Seite "Wiki / Befehle" aufgeführt sind, werden als "No-Op" behandelt (irrelevante Punkte wirken sich auf das Programm in keiner Weise aus, solange sich die Gesamtform ändert des Programms bleibt rechteckig).
Beachten Sie, dass ich bei Befehlen mit zwei Argumenten in der gesamten Erläuterung a und b verwendet habe . In diesem Sinne wollen wir uns ansehen, was das eigentliche Programm macht, nachdem wir alle überflüssigen Zeichen entfernt haben, die das Auffüllen ausmachen:
Eine alternative und kürzere Lösung, wenn keine Polsterung erforderlich wäre:
Probieren Sie es online!
quelle
PowerShell 3.0, 45 Byte
Der Mathematik-Aufruf tut weh und die Rundung von PSs Bank ist der eigentliche Teufel (daher muss Regex abgeschnitten werden, um ein Byte zu speichern), aber das scheint in Ordnung zu sein.
quelle
Java (JDK) , 28 Byte
Probieren Sie es online!
Weil das Beispiel wirklich nicht gut war: p
Credits
quelle
Gelee , 7 Bytes
Läuft ungefähr in O (2 n ) Zeit.
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES7),
22 bis19 Byte-3 Bytes dank ETHproductions.
Versuch es
Erläuterung
Multiplizieren Sie die Eingabe mit 8 und addieren Sie 1, erhöhen Sie diese auf die Potenz von 0,5, geben Sie uns die Quadratwurzel, subtrahieren Sie 1 und verschieben Sie das Ergebnis bitweise nach rechts um 1.
quelle
n=>(8*n+1)**.5-1>>1
es, 3 Bytes zu sparen? (nicht getestet)Python 2/3, 32 Bytes
Python-Implementierung der Formel für geschlossene Formulare
Die Ganzzahldivision
//2
rundet in Richtung Null, ist also nichtfloor( )
erforderlichquelle
from math import sqrt
funktionieren? Wenn ja, sollte es in den bytecount aufgenommen werden. (In diesem Falllambda n:int((math.sqrt(1+8*n)-1)//2) import math
ist es etwas kürzer. )Haskell , 28 Bytes
Ein bisschen langweilig, aber es ist
ziemlich kürzer als die andere Haskell-Lösung undhat einen wirklich schönen, pointfree Ausdruck. Leider könnte ich es nicht kürzer machen, ohne dass das Typensystem im Weg wäre:Probieren Sie es online!
Punktfrei, 33 Bytes
Alternativ 33 Bytes
Gleiche Länge wie die Pointfree-Version, aber viel interessanter.
quelle
Milchstraße , 12 Bytes
Erläuterung
quelle
Pyt ,
75 BytesErläuterung:
Schneller, aber längerer Weg
Pyt ,
119 BytesErläuterung:
Alternativer Weg - Hafen von Shaggys Antwort
Pyt ,
87 Bytesquelle
J , 11 Bytes
Probieren Sie es online!
quelle
*
, um 1Leerzeichen , 111 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erklärung im Pseudocode:
Verwendet die Formel:
HINWEIS: In Whitespace ist keine Quadratwurzel integriert, daher müssen wir dies manuell tun.
quelle
Vitsy , 16 Bytes
Probieren Sie es online!
Könnte auch meinen eigenen Beitrag zur Mischung hinzufügen. Dies ist kürzer als die Partitionsiterationslösung in Vitsy.
quelle
Oase , 14 Bytes
Probieren Sie es online!
Wie?
Dies ist eine rekursive Lösung, die das Ergebnis erhöht, wenn sie auf einen Dreieckindex stößt, der mit 0 für die Eingabe 0 beginnt.
quelle
Perl 5
-p
, 19 (++) BytesProbieren Sie es online!
quelle
Ruby , 27 Bytes
Drei zum Preis von einem. Ich bin enttäuscht, dass ich nicht kürzer werden kann.
Probieren Sie es online! (Um die Funktion auszuwählen, fügen Sie f = davor hinzu.)
quelle