Wie kann ich in Brainfuck ne Variable durch 2 teilen?



  • Hi,

    kann dir nicht genau sagen, wie das geht.

    Hier aber ein Link, in dem so einiges (auch dividieren) erklaert wird

    http://www.tiamatix.net/brainfuck/Brainfuck.txt
    [/nachtrag]
    mfg
    v R

    [ Dieser Beitrag wurde am 20.10.2002 um 01:27 Uhr von virtuell Realisticer editiert. ]



  • Hmm, mit 5 multiplizieren (5 mal addieren) und die letzte Stelle auf 0 bringen.



  • Jo. Feine Links. Thx.

    Original erstellt von Doktor Prokt:
    Hmm, mit 5 multiplizieren (5 mal addieren) und die letzte Stelle auf 0 bringen.

    Netter Versuch. Aber durch 10 teilen zu müssen, um die letzte stelle auf 0 zu bringen, vereinfacht das Problem nur unwesentlich.



  • Original erstellt von volkard:
    **Jo. Feine Links. Thx.

    [quote]Original erstellt von Doktor Prokt:
    [qb]Hmm, mit 5 multiplizieren (5 mal addieren) und die letzte Stelle auf 0 bringen.**

    Netter Versuch. Aber durch 10 teilen zu müssen, um die letzte stelle auf 0 zu bringen, vereinfacht das Problem nur unwesentlich.[/QB][/QUOTE]

    Naja, war auch nur so eine Idee, für die Bauernmethode hat das jedenfalls prima geklappt 🙂



  • Hmm... ich würde das so machen:

    1. Zu dividierende Zahl in ein anderes Feld kopieren.
    2. Das nächste Feld auf 0 bringen.
    3. Eine Schleife, bei der die Kopie der zu dividierenden Zahl jeweils um 2 vermindert wird, und das Feld, welches zuvor auf 0 gesetzt wurde um eins erhöht wird.

    lg, phreaking

    EDIT: Ein Problem gibt es nur, wenn die zu dividierende Zahl nicht gerade ist 😞

    [ Dieser Beitrag wurde am 20.10.2002 um 12:42 Uhr von phreaking editiert. ]



  • für gerade zahlen (ungetestet):

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

    ups das ist ja das selbe wie phreakings 🙂

    [ Dieser Beitrag wurde am 20.10.2002 um 17:32 Uhr von japro editiert. ]

    [ Dieser Beitrag wurde am 20.10.2002 um 17:33 Uhr von japro editiert. ]



  • Original erstellt von japro:
    **für gerade zahlen (ungetestet):
    **

    Es geht mir um die Kalenderaufgabe des buha-coding-contests. hab deswegen gestern mit bf angefangen.
    Da muß ich /4 und %7 schaffen für zahlen, die nicht glatte vielfache sind.
    Am besten wohl gleich für beliebige Zahlen.



  • Habs geschafft

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

    Und wer den Code haben mag, wie ich ihn geschrieben hab (ist eigentlich eher forth, aber naja, in bf kann man ja nix entwickeln.):

    // divisor=5 dividend=2
    PUSHZERO result           >
    DUP2 count                <[->>+>+<<<]>>>[-<<<+>>>]<
    DEC count                 -
    // divisor=5 dividend=2 result=0 (count=2) tmp
    go divisor                <<<
    while divisor             [
     go count                  >>>
     DUP1 tmp                  [->+>+<<]>>[-<<+>>]<
     NOT tmp                   >+<[[-]>-<]>[-<+>]<
     IF tmp                    [[-]
      go result                 <<
      INC result                +
      DUP2 count                <[->>+>+<<<]>>>[-<<<+>>>]<
      go tmp                    >
     ENDIF tmp                 ]
     go count                  <
     DEC count                 -
     go divisor                <<<
     DEC divisor               -
    ENDWHILE divisor          ]
    // (divisor=0) dividend=2 result=0 count=?
    go result                 >>
    add to divisor            [-<<+>>]
    go count                  >
    sub from dividend         [-<<->>]
    go dividend               <<
    DEC dividend              -
    


  • BTW : Wird Brainfuck bei dem Coding-Contest eigentlich akzeptiert?! 😉



  • Original erstellt von Gregor:
    BTW : Wird Brainfuck bei dem Coding-Contest eigentlich akzeptiert?! 😉

    Wenn die sehen, wie viel Mühe ich mir gemacht hab, werden sie's schon akzeptieren, hoff ich.



  • Original erstellt von volkard:
    **```
    // divisor=5 dividend=2
    PUSHZERO result >
    DUP2 count <[->>+>+<<<]>>>[-<<<+>>>]<
    DEC count -
    // divisor=5 dividend=2 result=0 (count=2) tmp
    go divisor <<<
    while divisor [
    go count >>>
    DUP1 tmp [->+>+<<]>>[-<<+>>]<
    NOT tmp >+<[[-]>-<]>[-<+>]<
    IF tmp [[-]
    go result <<
    INC result +
    DUP2 count <[->>+>+<<<]>>>[-<<<+>>>]<
    go tmp >
    ENDIF tmp ]
    go count <
    DEC count -
    go divisor <<<
    DEC divisor -
    ENDWHILE divisor ]
    // (divisor=0) dividend=2 result=0 count=?
    go result >>
    add to divisor [-<<+>>]
    go count >
    sub from dividend [-<<->>]
    go dividend <<
    DEC dividend -

    Ahhhhhhhhhhhhh!!!!! IGITT! That really fucks your brain!



  • Keine Sorge, wird akzeptiert, aber ich denke auf die Auflösung wirst du etwas länger warten müssen als normal 😃



  • @volkard: hol dir den bfa.



  • Original erstellt von Mr. N:
    @volkard: hol dir den bfa.

    Das würde doch gegen den "Ehren-Codex" verstoßen!



  • was ist ein ehren-kodex?
    ne, mal im ernst: mvr ist doch besser als > 😉



  • Naja, da gehts um die Ehre :D, bei sowas mogelt man doch nicht.



  • mogeln? wolltest du einen mcdonalds simulator in reinem bf schreiben?



  • lol der mc-donalds simulator hat schon was, hab mich beömmelt.

    naja, das wäre schon ziemliches gemogle, wenn man so ein prog in einem basic-slang schreiben und das mit dem bfa in ein bf-file umwandeln würde.



  • ich dachte auch dran, mir nen kleinen makrocompiler mit bf-ausgabe zu basteln, bin aber zum schluß gekommen, daß das gar nicht notwendig ist. was wirklich wh tut, ist daß es keine nette ersetzung von arrays gibt (oder ich noch keine fand). aber hier tuts ja auch switch. und dafür hab ich was.



  • es ist vollbracht.
    mit kommentaren 20k.
    ohne kommentare 7k.
    ich hab die kalenderaufgabe in bf gelöst und eingeschickt.
    *ganz stolz sei*


Anmelden zum Antworten