Das Neun-Muster

9

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 .

InitializeSahib
quelle
1
Muss die Ausgabe ein Array sein oder reichen die Zahlen für sich aus (wie die Pyth-Antwort)?
David
2
Es steht Ihnen frei, sich nur auf vollständige Programme oder nur Funktionen zu beschränken. Es gibt jedoch eine Diskussion über Meta der Standardeinstellungen, die nützliche Hintergrundinformationen für den Fall liefert, dass dies Ihre Entscheidung für zukünftige Herausforderungen beeinflusst. Standardmäßig akzeptieren Herausforderungen beide, damit mehr Sprachen miteinander konkurrieren können.
Trichoplax
1
Es gibt auch Standardeinstellungen für Eingabe und Ausgabe . Auch hier müssen Sie ihnen nicht folgen, dies dient nur dazu, Sie zu informieren.
Trichoplax
3
-1 für beliebige Array- und Funktionsanforderungen, wodurch verhindert wird, dass Sprachen ohne Array- / Listentyp oder Funktionen miteinander konkurrieren.
Mego
4
Außerdem sollten Sie die Teilnehmer in Bytes und nicht in Zeichen bewerten. Wir haben eine Sandbox , in der Sie Feedback zu Ihrem Beitrag erhalten können, bevor er online geht.
Loovjo

Antworten:

11

MarioLANG, 659 621 591 582 556 543 516 458 418 401 352 308 369 Bytes

Rundung 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

;>>[![              [( [( [<result
:"==#======================"======
)   -[!)>>[![        [<((((!   
)   )"#="==#=========="====#
+(  +>) )  +>(+)[!)+))!
+(  )-+ )  -"====#====#
+   >!>)!  >! -  <
    "#"=#  "#===="
 !
=#

Das ist eine leicht modifizierte Umwandlung der Brainfuck-Division

[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]

die für die Eingabe nehmen

n 0 d 0 0 

und gib dir zurück

0 n d-n%d n%d n/d 

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)

;>>[![              [( [( [<    !+(((-<
:"==#======================"===)#====="
)   -[!)>>[![        [<((((!    >))) [!(((
)   )"#="==#=========="====#   ="=====#==:
+(  +>) )  +>(+)[!)+))! 2*2n/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

x 0 n d-n%d n%d n/d 

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.

Ätherfrosch
quelle
Willkommen bei PPCG!
Erik der Outgolfer
Rundet nicht auf die in der Frage angegebenen Spezifikationen ab (natürlich habe ich sie aktualisiert, nachdem Sie Ihre Antwort veröffentlicht haben, aber Sie sollten Ihre Antwort zumindest aktualisieren, um sie an die neuen Spezifikationen anzupassen)
InitializeSahib
Getan. Während wir über den Testfall sprechen, sollten Sie 10 hinzufügen, um eine Zahl zu erhalten, die Sie bei der ersten Operation abrunden.
Ätherfrosch
9

Emotinomicon 99 Bytes, 33 Zeichen

😷😭,😲🆙🆙😼🆙😨😎⏬😎🆙😍➗➕🆙😨😎⏬😎😉✖😍➗🆙😨😎⏬😎😅➕😨

Erläuterung:

😷                                 clear output
 😭                                begin quote string
  ,                               
   😲                              end quote string
    🆙                             duplicate top of stack
     🆙                            duplicate top of stack
      😼                           take numeric input
       🆙                          duplicate top of stack
        😨                         pop N and output as a number
         😎                        reverse stack
          ⏬                       pops and outputs top of stack as character
           😎                      reverse stack
            🆙                     duplicate top of stack
             😍                    push 3 to the stack
              ➗                   divide top two elements on stack
               ➕                  add top two elements on stack
                🆙                 duplicate top of stack
                 😨                pop N and output as a number
                  😎               reverse stack
                   ⏬              pops and outputs top of stack as character
                    😎             reverse stack
                     😉            push 2 to the stack
                      ✖           multiply top two elements on stack
                       😍          push 3 to the stack
                        ➗         divide top two elements on stack
                         🆙        duplicate top of stack
                          😨       pop N and output as a number
                           😎      reverse stack
                            ⏬     pops and outputs top of stack as character
                             😎    reverse stack
                              😅   push 1 to the stack
                               ➕  add top two elements on stack
                                😨 pop N and output as a number
Bálint
quelle
3
Yay für unkonventionelle Sprachen! : P
user48538
4

MATL, 14 Bytes

Xot4*3/tE3/tQv

Probieren Sie es online aus

Ziemlich einfach, vverkettet den Stapel zu einem Array. Xokonvertiert in einen ganzzahligen Datentyp, und alle Operationen danach sind ganzzahlige Operationen.

David
quelle
3
Die Spezifikation besteht darin, ein Array zurückzugeben, nicht nur das Endergebnis.
Wert Tinte
3
Lol auch bei denen, die zum Löschen in <2 Minuten
David
@ David D: Ich glaube nicht, dass ich
Löschstimmen
@ David hat Ihre Antwort als mein Beileid bewertet :)
InitializeSahib
1
Ich bin mir ziemlich sicher, dass dies auch keine Funktion ist. Korrigieren Sie mich, wenn ich falsch liege.
Maltysen
4

Cheddar , 27 Bytes

b=8/9*$0
[$0,$0+$0/3,b,b+1]

$0ist variabel mit Eingabe. Cheddar ist einfach keine Golfsprache ¯ \ _ (ツ) _ / ¯, auch dies ist nicht konkurrierend, da Cheddars Eingabefunktionalität nach dieser Herausforderung erstellt wurde.

Ungolfed:

IterationB := 8 / 9 * $0  // 8/9ths of the Input
[ $0,                     // The input
  $0 + $0 / 3,            // Input + (Input/3)
  IterationB,             // (see above)
  IterationB + 1          // above + 1
]
Downgoat
quelle
1
Freudentränen! Es ist so weit gegangen! : D
Conor O'Brien
3

Java, 86 82 84 85 Zeichen

class c{int[]i(int I){int a=I+(I/3),b=(int)(a*(2d/3d));return new int[]{I,a,b,b+1};}}

Der Buchstabe ddirekt nach einer Ganzzahl macht die Ganzzahl a double.

Ungolfed:

class c{
    int[] i(int I) {
        int a = I + (I / 3),
            b = (int)(a * (2d / 3d));
        return new int[]{I, a, b, b + 1};
    }
}

Ohne die Klasse ( class c{}8 Zeichen lang) wird sie auf 76 Zeichen verkleinert:

int[]i(int I){int a=I+(I/3),b=(int)(a*(2d/3d));return new int[]{I,a,b,b+1};}

Genauere Version in 110 Zeichen (118 mit der Aufzählung) - es wird floats verwendet, weil niemand Platz zum Casting hat Math#round(double):

int[]i(int I){float a=I+(I/3f),b=(a*(2f/3f));return new int[]{I,Math.round(a),Math.round(b),Math.round(b+1)};}
user8397947
quelle
Ich denke, ich sollte Pyth lernen.
user8397947
5
+1, weil du weißt, Java
James
1
@dorukayhan Weird, ich scheine einen Fehler zu bekommen, wenn ich versuche, dies in Eclipse auszuführen. Es kann nicht von double in int konvertiert werden. Ich werde sehen, ob ich morgen herausfinden kann, wo das Problem liegt.
Loovjo
1
Ich habe gerade den Code
behoben
1
Ich sehe, aber es gibt keine korrekten Ergebnisse für Eingaben wie 8 oder 10. Die erste Addition funktioniert nicht richtig, ebenso wie I + (I / 3)die Verwendung einer Ganzzahldivision, was bedeutet, dass Brüche verworfen werden und das Ergebnis daher nicht richtig gerundet wird.
Frozn
3

Java, 56 80 Bytes

Wie 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

int[]h(int a){int[]b={a,Math.round(a+a/3f),a=Math.round(a*8f/9),++a};return b;}

oder 60 Bytes Lamda-Version

a->new int[]{a,Math.round(a+a/3f),a=Math.round(a*8f/9),++a}

Golfversion

int[]g(int a){int[]b={a,a+a/3,a*8/9,a*8/9+1};return b;}

und ungolfed

int[] g(int a) {
        int[] b = { a, a + a / 3, a * 8 / 9, a * 8 / 9 + 1 };
        return b;
    }

oder 36 Bytes als Lambda definiert

a->new int[]{a,a+a/3,a*8/9,a*8/9+1}

user902383
quelle
Hat nicht die von der Frage geforderte Rundung.
Marv
1
Wie @Marv erwähnte, funktioniert diese Frage nicht richtig, z. B. für Eingabe 8 wäre das erwartete Ergebnis [8,11,7,8], aber es ist [8,10,7,8]
Frozn
warum abstimmen? Ich habe es behoben und es funktioniert jetzt richtig?
user902383
Entschuldigen Sie die Ablehnung, nachdem Sie sie behoben haben. Das Downvote ist jetzt gesperrt, daher kann ich es nicht entfernen, es sei denn, Sie nehmen eine Änderung an Ihrer Antwort vor (jede geringfügige Änderung ist ausreichend)
edc65
@ edc65 ok, fertig
user902383
2

Java, 64 Bytes

int[]f(int i){return new int[]{i,i+=i/3+0.5,i-=i/3-0.5,i+=1.5};}

Anmerkungen

  • Dies hat die erforderliche Rundung eingebaut, nicht sicher, ob Sie es kürzer machen können, wenn Sie es mit der Lösung von @ user902383 mischen.

Ungolfed

int[] f(int i) {
    return new int[]{
            i, 
            i += i / 3 + 0.5, 
            i -= i / 3 - 0.5, 
            i += 1.5};
}

Ausgabe mit i = 9

[9, 12, 8, 9]
Marv
quelle
1
+1. Cuz, weißt du, Java
user48538
Wie in der Lösung von user902383 funktioniert dies nicht richtig, z. B. für 8 erwartete [8,11,7,8], aber [8,10,7,8] für 6 erwartete [6,8,5,6] aber ist [6,8,6,7]
Frozn
3
@Frozn diese Lösung funktioniert auch nicht richtig, und für Testfälle, die Sie gaben, geben Sie das gleiche Ergebnis zurück wie meine alte Lösung ideone.com/LVK8FU
user902383
2

Scratch, 33 Bytes

Skript
Fragt nach Eingabe, setzt aauf gerundete Eingabe, setzt bund cauf ihre jeweiligen Änderungen, sagt dann alle vier durch Kommas getrennten Zahlen.

Wettermann115
quelle
2

Java 8 Lambda, 109 81 79 75 Zeichen

Weil ... Sie wissen ... sogar Java Golf spielen kann ...

a->{int b=(int)(.5+a*4./3),c=(int)(.5+b*2./3);return new int[]{a,b,c,++c};}

Lambda ungolfed in die Klasse:

class C {  
   static int[] a(int a) {
        int b = (int) (.5 + a * 4. / 3),
            c = (int) (.5 + b * 2. / 3);
        return new int[]{a, b, c, ++c};
    }
}

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.

Frozn
quelle
Willkommen bei PPCG!
Erik der Outgolfer
Danke :) Ich habe die Fragen hier schon eine Weile verfolgt und mir gedacht, dass dies eine Frage sein könnte, an der ich teilnehmen könnte, obwohl die Antwort länger ist, als ich erwartet hatte.
Frozn
Ich werde "+1", in der Hoffnung, dass Sie das obligatorische "weil ... Sie wissen ... Java!"
Olivier Dulac
@Frozn Ich bin nicht sicher, ob Sie das a->{und das Finale }für -5 Bytes entfernen können .
Erik der Outgolfer
@OlivierDulac Noch nicht :)
Erik der Outgolfer
1

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.

{#,4#/3,8#/9,8#/9+1}&

Definiert eine anonyme Funktion. Probieren Sie es aus wie:

In[26]:= x:={#,4#/3,8#/9,8#/9+1}&                                             

In[27]:= x[9]                                                                 

Out[27]= {9, 12, 8, 9}
Maltysen
quelle
Gibt dies als Ergebnis ganze Zahlen oder Brüche?
David
@ David Ganzzahlen, sofern die Ergebnisse nicht nicht ganzzahlig sind, in diesem Fall Brüche.
Maltysen
1

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).

m=math.floor x=...z=m(x*8/9)return{x,m(x*4/3),z,z+1}
Katenkyo
quelle
1

Eigentlich 21 Bytes

`;;3@/+;32/*;uk1½+♂≈`

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:

`;;3@/+;32/*;uk1½+♂≈`
 ;;                    make two copies of x
   3@/+                divide by 3, add that to x to get y
       ;32/*           make a copy of y and multiply by 2/3 to get z
            ;u         make a copy of z and add one
              k        push stack as a list
               1½+     add 0.5 to each element
                  ♂≈   apply int() to each element (make integers from floats by flooring; this is equivalent to rounding half-up because of adding 0.5)
Mego
quelle
1

Mathcad, [tbd] Bytes

Geben Sie hier die Bildbeschreibung ein


Die Mathcad-Codegolf-Byte-Äquivalenz muss noch ermittelt werden. Bei einer Tastaturanzahl als grobes Äquivalent beträgt die Lösung ca. 40 Byte.

Stuart Bruff
quelle
1

Pyke, 11 Bytes

D}[}3/bD)[h

Probieren Sie es hier aus!

            - implicit input()
D           - a,b = ^
 }          - b*=2
  [}3/bD)   - macro:
   }        -   tos*=2
    3/      -   tos/=3
      b     -   tos = round(tos)
       D    -   old_tos = tos = tos
            - macro
         [  - macro
          h - d +=1
Blau
quelle
1

Javascript, 50 Bytes

Ich konvertiere meine Java-Lösung in JavaScript und überfliege sie ein wenig.

var r=Math.round,g=a=>[a,r(a+a/3),a=r(a*8/9),++a]
user902383
quelle
1

C ++ 0x - 95 102 185 189 109 129 Zeichen

int * n(int p){static int a[3];a[0]=p;a[1]=round(p+(p/3));a[2]=round((a[1]/3)*2);a[3]=a[2]+1;return a;}
  • Dies erfordert, dass der cmath- Header funktioniert.

Degolfed

#include <cmath>
int * ninePattern(int p) {
        static int a[3]; // pattern array
        a[0] = p; // sets first iteration
        a[1] = round(p + (p / 3)); // sets second iteration
        a[2] = round((a[1] / 3) * 2); // sets third iteration
        a[3] = a[2] + 1; // sets fourth iteration
        return a; // returns array
}
InitializeSahib
quelle
2
Sie sind kein C ++ - Experte, können es aber verkürzen, indem Sie bereits berechnete Werte, die Sie im Array haben, wiederverwenden. Möglicherweise können Sie auch Leerzeichen zwischen) und {weiß nicht, wie streng C ++ ist.
Frozn
Sind die letzten beiden in der aktuellen Version korrekt? Weil ich gerade gesehen habe, wie du berechnet hast, p+(p/3)*(2/3)was p+(2*p/9)statt(p+(p/3))*(2/3)
Frozn
Es stellte sich heraus, dass es ein Fehler von meiner Seite war. Ich habe - 1 anstelle von +1 für die letzte Iteration gesetzt: P
InitializeSahib
0

Erlang, 80 Bytes

-module(f).
-export([f/1]).
f(X)->Y=X+(X/3),Z=trunc(Y*(2/3)),[X,trunc(Y),Z,Z+1].

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:

fxk8y@fxk8y:/home/fxk8y/Dokumente/erlang/pcg# erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-    threads:10] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> c(f).
{ok,f}
2> f:f(9).
"\t\f\b\t"
3>

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:

-module(f).
-export([f/1]).

f(X) ->
  Y = X+(X/3),
  Z = trunc(Y*(2/3)),
  [X, trunc(Y), Z, Z+1].
fxk8y
quelle
0

Erlang, 46 Bytes

Antwort inspiriert von @ fxk8y (Ich konnte keinen Kommentar zu seiner Antwort posten)

F=fun(X)->Z=round(X*4/9),[X,Z*3,Z*2,Z*2+1]end.

Sie können die Ergebnisse auch sehen mit:

2> io:fwrite("~w~n", [F(9)]).                         
[9,12,8,9]
ok
Dominik Pawlak
quelle
0

Pyth, 20 Bytes

m.RdZ[Jc*4Q3Kc*2J3hK

Erläuterung:

            (Implicit print)
m           For each d in array, d =
.RdZ        Round d to zero decimal places
[           The array of
  J         The result of setting J to
    c       The float division of
      *4Q   Input * 4
      3     and 3
            ,
  K         The result of setting K to
    c       The float division of
      *2J   J * 2
      3     and 3
            , and
  hK        K + 1.
            (Implicit end array)

Hier testen

RK.
quelle
0

Jolf, 17 Bytes

Ώ‘Hγ+H/H3Βώ/γ3hΒ’

Definiert eine Funktion Ώ. Es nimmt implizit Eingaben entgegen und dient somit auch als vollständiges Programm. Probieren Sie es hier aus!

Conor O'Brien
quelle
Jolf wird ESMin langsam bestätigt ??? : P
Downgoat
@ Upgoat ey es ist griechisch. Und wieder Mitternacht. : P
Conor O'Brien
> _> oh. Es tut mir sehr leid, wenn ich dich
aufgeweckt habe
@ Upgoat noch nicht eingeschlafen;)
Conor O'Brien
: | idk wenn es gut ist, dass ich dich
geweckt habe
0

Mathematica, 51 Bytes

FoldList[#2@#&,{#,Round[4#/3]&,Round[2#/3]&,#+1&}]&

Anonyme Funktion, die der aktuellen (zum Zeitpunkt der Veröffentlichung) Version der Veröffentlichung entspricht und eine Rundung bei jedem Schritt impliziert.

FoldListist eine typische Operation in der Programmierung. Es wird als aufgerufen FoldList[f, list]und wendet die Funktion mit zwei Argumenten fwiederholt 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 von FoldListaus den aufeinanderfolgenden Funktionen, die auf die Eingabe angewendet werden sollen.

FoldList[#2 @ # &,
  {#, (* note the absence of '&' here, 
         this '#' stands for the argument
         of the complete function and is 
         covered by the & at the end      *)
   Round[4 # / 3] &, (* anonymous function that rounds 4/3 of its input *)
   Round[2 # / 3] &, (* ditto, 2/3 *)
   # + 1 &           (* add one function *)
  }] &               (* and the '&' makes the entire 
                        thing an anonymous function,
                        whose argument is the '#' up
                        at the top.                  *)

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.

LLlAMnYP
quelle
0

Dyalog APL , 33 Bytes

(⌽,{1+⊃⍵})∘{⍵,⍨3÷⍨2×⊃⍵}(3÷⍨4∘×),⊢
Adam
quelle
0

CJam, 21 Bytes

qi__3d/+mo_2d3/*i_)]`

Feedback ist willkommen

Erläuterung

  • qi__ - Lesen Sie die Eingabe als Ganzzahl und duplizieren Sie sie zweimal
  • 3D/+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 .6
  • _)] `- Duplizieren, inkrementieren, in Array einschließen, als Array drucken (wegen des Operators` nicht im Code :()

Bearbeiten: Ich habe vergessen, die ersten drei zu einem Double zu machen, daher war das Programm kaputt. Fest.

The_Basset_Hound
quelle
0

Axiom, 59 Bytes

g(x)==round(x)::INT;f(x)==[x,a:=g(x+x/3.),b:=g(a*2./3),b+1]

Prüfung

(3) -> [[i,f(i)] for i in [9,8,6,23,159]]
   (3)
   [[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]]]
                                                      Type: List List Any
RosLuP
quelle
0

PHP, 60 Bytes

print_r([$a=$argn,$b=round($a+$a/3),$c=round($b*2/3),$c+1]);

Probieren Sie es online aus!

Jörg Hülsermann
quelle
Sie können ein Byte ausschalten, indem Sie $ a * 4/3 ausführen.
jstnthms
0

PHP, 67 Bytes

function f($x){return [$x,$y=round($x*4/3),$z=round($y*2/3),$z+1];}
jstnthms
quelle