Einführung
Ich bin neulich beim Fernsehen über dieses (nutzlose) Muster gestolpert. Ich habe es "das 9-Muster" genannt, weil die erste Zahl, die es verwendet hat, 9 war. Der Kern davon ist, dass Sie eine Zahl eingeben (sagen wir x ) und dann zurückkommen:
- x
- x + ( x / 3) [nennen wir das y ]
- zwei Drittel von y [nennen wir das z ]
- z + 1
Wenn ich also die Zahl 9 als x in dieses Muster einfügen würde, würde Folgendes herauskommen:
- 9 ( 9 )
- 12 ( 9 + 9/3 ) [9 über 3 ist 3 und 9 + 3 ist 12]
- 8 ( 12 mal zwei Drittel) [ein Drittel von 12 ist 4 und 4 * 2 ist 8]
- 9 ( 8 + 1 ist 9)
Herausforderung
Schreiben Sie mir eine Funktion (in einer beliebigen Programmiersprache), die eine Zahl aufnimmt und anhand des Musters ein ganzzahliges Array ausgibt.
Etwas wie dieser Pseudo-Code:
function ninePattern(int myInt) returns IntegerArray {
int iterationA = myInt + (myInt / 3);
int iterationB = iterationA * (2 / 3);
int iterationC = iterationB + 1;
IntegerArray x = [myInt, iterationA, iterationB, iterationC];
return x;
}
Klarstellungen
In den Kommentaren zu den Spezifikationen der Frage wurden Diskussionen ausgelöst. Dieser Abschnitt soll einige davon verdeutlichen.
"Besser in Bytes als in Zeichen zählen"
Ich habe Charaktere ausgewählt, weil es (zumindest für mich) einfacher wäre, sie zu beurteilen. Natürlich kann ich das jetzt nicht ändern. (viele Antworten sind bereits veröffentlicht)
"Runden"
Die Rundung folgt diesem Reim:
Wenn es 5 oder mehr ist, erhöhen Sie die Punktzahl.
Wenn es 4 oder weniger ist, lassen Sie es ruhen
Einfach ausgedrückt, wenn es sich um 4,7 oder 3,85 handelt, runden Sie sie auf 5 bzw. 4 ab.
Beispiele
Input => Result
9 => [9, 12, 8, 9]
8 => [8, 11, 7, 8]
6 => [6, 8, 5, 6]
23 => [23, 31, 21, 22]
159 => [159, 212, 141, 142]
Wenn die Zahlen jedoch etwa 2,3 oder 10,435446 betragen, runden Sie sie auf 2 bzw. 10.
"Sprachunterstützung"
Es steht Ihnen frei, Funktionen und / oder Arrays NICHT zu verwenden, WENN UND NUR WENN die Sprache Ihrer Wahl sie nicht unterstützt. Wenn dies der Fall ist (auch wenn dadurch die Anzahl Ihrer Zeichen erhöht wird), müssen Sie sie verwenden .
quelle
Antworten:
MarioLANG,
659621591582556543516458418401352308369 BytesRundung ist ziemlich teuer: /
Probieren Sie es online aus
Nun, das hat mehr Spaß gemacht als erwartet, das ist wahrscheinlich nicht optimal, aber ich denke, ich komme dorthin.
Erklärungszeit:
(für die 352- Byte-Version)
Zuerst bekommen wir das Argument und drucken es aus:
einfach genug
Wir gehen dann zum Hauptteil des Programms über: der Divisionseingabe / 3
Das ist eine leicht modifizierte Umwandlung der Brainfuck-Division
die für die Eingabe nehmen
und gib dir zurück
Sobald wir die Division erhalten haben, verwenden wir sie, um die Summe von n und n / d zu erhalten und sie zu drucken
wir müssen dann eine andere Division machen: (2 * (n + n / d)) / 3
so erhalten wir (2 * (n + n / d)
und setzen Sie es mit 3 zurück in die Division
An diesem Punkt explodiert alles, Mario steckt in einer Endlosschleife und teilt sich für immer in immer größere Zahlen.
und um zu beheben, dass wir einen Weg brauchen, um zwischen der ersten und der zweiten Division zu unterscheiden, endet es damit, dass wir, oh Freude, einen Weg haben
Grundsätzlich schauen wir, ob das x in
ist 0, wenn es bedeutet, dass wir in der ersten Liga sind
Andernfalls befinden wir uns in der zweiten Division und drucken nur das Ergebnis der Division aus. Fügen Sie 1 hinzu und drucken Sie es dann erneut aus
und voilà einfach wie Torte.
quelle
Emotinomicon 99 Bytes, 33 Zeichen
Erläuterung:
quelle
MATL, 14 Bytes
Probieren Sie es online aus
Ziemlich einfach,
v
verkettet den Stapel zu einem Array.Xo
konvertiert in einen ganzzahligen Datentyp, und alle Operationen danach sind ganzzahlige Operationen.quelle
Cheddar , 27 Bytes
$0
ist variabel mit Eingabe. Cheddar ist einfach keine Golfsprache ¯ \ _ (ツ) _ / ¯, auch dies ist nicht konkurrierend, da Cheddars Eingabefunktionalität nach dieser Herausforderung erstellt wurde.Ungolfed:
quelle
Java,
86828485 ZeichenDer Buchstabe
d
direkt nach einer Ganzzahl macht die Ganzzahl adouble
.Ungolfed:
Ohne die Klasse (
class c{}
8 Zeichen lang) wird sie auf 76 Zeichen verkleinert:Genauere Version in 110 Zeichen (118 mit der Aufzählung) - es wird
float
s verwendet, weil niemand Platz zum Casting hatMath#round(double)
:quelle
I + (I / 3)
die Verwendung einer Ganzzahldivision, was bedeutet, dass Brüche verworfen werden und das Ergebnis daher nicht richtig gerundet wird.Java,
5680 BytesWie einige Benutzer betonten, rundet diese Lösung (wie andere in Java) Daten nicht richtig. Jetzt präsentiere ich eine etwas längere Lösung, die das richtige Ergebnis liefern sollte
oder 60 Bytes Lamda-Version
Golfversionund ungolfed
oder 36 Bytes als Lambda definiert
quelle
Java, 64 Bytes
Anmerkungen
Ungolfed
Ausgabe mit i = 9
quelle
Scratch, 33 Bytes
Fragt nach Eingabe, setzt
a
auf gerundete Eingabe, setztb
undc
auf ihre jeweiligen Änderungen, sagt dann alle vier durch Kommas getrennten Zahlen.quelle
Java 8 Lambda,
109817975 ZeichenWeil ... Sie wissen ... sogar Java Golf spielen kann ...
Lambda ungolfed in die Klasse:
Ich gehe davon aus, dass ich Longs verwenden darf, da diese ebenfalls vom Typ Integer sind. Leider muss man ganze Zahlen richtig runden und daher funktioniert eine "kurze" Besetzung nicht. Durch die Verwendung von Longs müssen wir die Rundungsergebnisse nicht auf Ints zurücksetzen.Aktualisieren
Mit dem netten kleinen + 0,5 und dem anschließenden Casting-Trick behalten wir die richtige Rundung bei und sparen 2 Zeichen!
Auch dieser Trick erfordert nicht länger die Verwendung von Long, so dass wir wieder auf Ints-Rasur von 4 weiteren Zeichen umschalten können.
quelle
a->{
und das Finale}
für -5 Bytes entfernen können .Mathematica - 21 Bytes
Ich habe gerade Mathematica von meinem Bruder RPi bekommen, also probiere es zum Spaß aus und was gibt es Schöneres als eine PPCG-Herausforderung.
Definiert eine anonyme Funktion. Probieren Sie es aus wie:
quelle
Python 3, 45 Bytes
Sehen Sie diesen Code auf ideone.com
quelle
Lua, 52 Bytes
Dieses Programm nimmt eine Zahl per Befehlszeilenargument und gibt das entsprechende Array zurück. Programme in lua sind technisch gesehen Funktionen, da der Interpreter sie immer in eine Funktion einkapselt. Dies ist auch diese Mechanik, die verwendet wird, wenn Sie Codes in anderen Dateien "aufrufen" (sie verwendet grundsätzlich
loadfile
/dofile
).quelle
Eigentlich 21 Bytes
Dieses Programm deklariert eine Funktion, die die erforderlichen Operationen für den obersten Stapelwert ausführt.
Probieren Sie es online aus! (Das Extra
.
am Ende wertet die Funktion aus und druckt das Ergebnis aus.)Erläuterung:
quelle
Mathcad, [tbd] Bytes
Die Mathcad-Codegolf-Byte-Äquivalenz muss noch ermittelt werden. Bei einer Tastaturanzahl als grobes Äquivalent beträgt die Lösung ca. 40 Byte.
quelle
05AB1E , 15 Bytes
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online aus! .
quelle
Pyke, 11 Bytes
Probieren Sie es hier aus!
quelle
Javascript, 50 Bytes
Ich konvertiere meine Java-Lösung in JavaScript und überfliege sie ein wenig.
quelle
C ++ 0x -
95102185189109129 ZeichenDegolfed
quelle
p+(p/3)*(2/3)
wasp+(2*p/9)
statt(p+(p/3))*(2/3)
Erlang, 80 Bytes
Speichern Sie zum Ausführen als f.erl , kompilieren Sie die Funktion und rufen Sie sie auf. Es wird eine Liste von Ints zurückgegeben:
Beachten Sie, dass Erlang int s automatisch in ASCII-Zeichen konvertiert , wenn Sie sich im ASCII-Wertebereich befinden, da Erlang keinen Zeichentyp hat . Wenn Sie die Funktion mit 100 aufrufen, erhalten Sie die bessere Lesbarkeit [100,133,88,89] .
Ungolfed:
quelle
Erlang, 46 Bytes
Antwort inspiriert von @ fxk8y (Ich konnte keinen Kommentar zu seiner Antwort posten)
Sie können die Ergebnisse auch sehen mit:
quelle
Pyth, 20 Bytes
Erläuterung:
Hier testen
quelle
Jolf, 17 Bytes
Definiert eine Funktion
Ώ
. Es nimmt implizit Eingaben entgegen und dient somit auch als vollständiges Programm. Probieren Sie es hier aus!quelle
Mathematica, 51 Bytes
Anonyme Funktion, die der aktuellen (zum Zeitpunkt der Veröffentlichung) Version der Veröffentlichung entspricht und eine Rundung bei jedem Schritt impliziert.
FoldList
ist eine typische Operation in der Programmierung. Es wird als aufgerufenFoldList[f, list]
und wendet die Funktion mit zwei Argumentenf
wiederholt auf das Ergebnis (oder das erste Element der Liste in der ersten Iteration) an, wobei das nächste Element der Liste als zweites Argument verwendet wird.Ungolfed:
#2 @ # &
ist eine anonyme Funktion, die ihr zweites Argument auf das erste anwendet. Daher besteht das Listenargument vonFoldList
aus den aufeinanderfolgenden Funktionen, die auf die Eingabe angewendet werden sollen.Da die Eingabe eine Ganzzahl ist und die Teilungen durch 3 sind, wird es niemals ein Ergebnis wie 4,5 geben. Daher müssen Sie sich keine Gedanken über Rundungsregeln machen, wenn die letzte Ziffer a ist
5
: Sie liegt immer deutlich näher an der einen oder anderen Ganzzahl.quelle
Dyalog APL , 33 Bytes
quelle
Desmos, 37 Bytes
Probieren Sie es online aus
Yay für unkonventionelle Sprachen!
quelle
CJam, 21 Bytes
Feedback ist willkommen
Erläuterung
qi__
- Lesen Sie die Eingabe als Ganzzahl und duplizieren Sie sie zweimal3D/+mo
- Teilen Sie eine Instanz der Eingabe durch 3 und fügen Sie sie dann der zweiten Instanz hinzu, um y zu erstellen_2d3/*i
- Dupliziere y und multipliziere es mit .6Bearbeiten: Ich habe vergessen, die ersten drei zu einem Double zu machen, daher war das Programm kaputt. Fest.
quelle
Axiom, 59 Bytes
Prüfung
quelle
PHP, 60 Bytes
Probieren Sie es online aus!
quelle
PHP, 67 Bytes
quelle