ALGORITHMEN - Teil XXIV: Eins zu Null für Binärcode!

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Neu

      Selten genug ...

      Abt. ALR-64 ´Nuremberger Konditoren´
      =========================
      Fünf Nürnberger Konditor-Lehrlinge backen Lebkuchen und treffen sich danach zum Verkosten. Jeder gibt jedem anderen einen seiner Lebkuchen. Danach isst jeder all jene Lebkuchen, die er bekommen hat. Dadurch verringert sich die Gesamtzahl der Lebkuchen um die Hälfte. Wie viele Lebkuchen wurden insgesamt gebacken?
    • Neu

      Lösung zu ALR-64
      --------------------
      Oldi-40 hat recht:
      Spoiler anzeigen

      Bekommen und gegessen = 1
      __ A B C D E
      ___ ^ ^ ^ ^
      A>0 1 1 1 1
      B>1 0 1 1 1
      C>1 1 0 1 1
      D>1 1 1 0 1
      E>1 1 1 1 0
      Gegeben und gegessen wurden also 5*5 - 5 = 20 Lebkuchen.
      Da das die Hälfte der gebackenen Lebkuchen war, wurden ursprünglich 40 Lebkuchen gebacken.


      P.S.: ALR 62 und 63 sind dzt. noch offen!
    • Neu

      Abt. Vintage-Game WUMPUS
      ==================

      Quellcode

      1. WindowTitle " J A G ' D E N W U M P U S"
      2. WindowStyle 24
      3. CLS
      4. Font 2
      5. Randomize
      6. Declare RO&[20,3],LO&[20],WPOS&
      7. declare i&,j&,T&,i$,k$
      8. Declare L&,ARROWS&,DATA$
      9. Proc MON :parameters x&
      10. return (X&=LO&[RO&[L&,1]]) OR (X&=LO&[RO&[L&,2]]) OR (X&=LO&[RO&[L&,3]])
      11. Endproc
      12. Proc CHK :parameters x&
      13. return (X&=RO&[L&,1]) OR (X&=RO&[L&,2]) OR (X&=RO&[L&,3])
      14. EndProc
      15. Proc FLUTTER
      16. Repeat
      17. L&=RND(19)+1
      18. UNTIL I&<>L&
      19. EndProc
      20. ' Erzeuge das Höhlensystem:
      21. DATA$="2,6,5,3,8,1,4,10,2,5,2,3,1,14,4,15,1,7,17,6,8,7,2,9,18,8,10,9,3,11"+\
      22. "19,10,12,11,4,13,20,12,14,5,11,13,6,16,14,20,15,17,16,7,18,17,9,19,18,11,20,19,13,16"
      23. Whileloop 20:i&=&Loop
      24. LO&[I&]=0
      25. Whileloop 3:j&=&Loop
      26. RO&[I&,J&]=Val(Substr$(Data$,3*(i&-1)+j&,","))
      27. Endwhile
      28. Endwhile
      29. WPOS&=RND(19)+2
      30. LO&[WPOS&]=1
      31. Whileloop 2,5:i&=&Loop
      32. Repeat
      33. T&=RND(19)+2
      34. UNTIL LO&[T&]=0
      35. LO&[T&]=I&
      36. Endwhile
      37. START:
      38. ARROWS&=5 'Anzahl Pfeile
      39. L&=1 'Start-Location = Höhle 1
      40. CLS 0
      41. ' Hauptschleife
      42. WHILE 1
      43. case %csrlin>12:cls 0
      44. color 10,0
      45. PRINT
      46. PRINT " Du bist in Höhle ";L&;"."
      47. PRINT " Tunnels führen zu den Höhlen ";RO&[L&,1];", ";RO&[L&,2];" und ";RO&[L&,3];"."
      48. PRINT
      49. color 0,14
      50. Case MON(1):PRINT " In der Nähe stinkt etwas bestialisch!"
      51. Case MON(2) OR MON(3):PRINT " Du hörst etwas flattern."
      52. Case MON(4) OR MON(5):PRINT " Ein eiskalter Wind bläst aus einer angrenzenden Höhle."
      53. color 3,13
      54. PRINT " Pfeil schiessen oder weiterMarschieren? [S,M]"
      55. Repeat
      56. K$=Upper$(GETKEY$())
      57. UNTIL (K$="S") OR (K$="M")
      58. print
      59. IF K$="M" ' Move
      60. color 0,15
      61. print " Zu Höhle Nr. ?",:INPUT I&
      62. print
      63. IF CHK(I&)
      64. L&=I&
      65. ELSE
      66. PRINT " Geht nicht."
      67. ENDIF
      68. ELSE ' Shoot
      69. color 2,14
      70. PRInt " In welche Höhle schießen?",:INPUT I&
      71. print
      72. IF CHK(I&)
      73. IF LO&[I&]=1
      74. color 4,11
      75. PRINT " DU HAST DAS WUMPUS-MONSTER ERLEGT!"
      76. PRINT " Gratulation, du hast gewonnen!"
      77. BREAK
      78. ELSE
      79. color 11,4
      80. PRINT " Pfeile treffen nicht so genau -"
      81. print " versuche es in einer anderen Höhle..."
      82. IF RND(4)<3
      83. color 5,12
      84. PRINT " Du hast den Wumpus geweckt und vertrieben."
      85. LO&[WPOS&]=0:WPOS&=RO&[WPOS&,RND(2)+1]:LO&[WPOS&]=1
      86. ENDIF
      87. Dec ARROWS&
      88. IF ARROWS&=0
      89. color 12,5
      90. PRINT " Du hast leider keine Pfeile mehr!"
      91. BREAK
      92. Endif
      93. ENDIF
      94. ELSE
      95. color 0,15
      96. PRINT " Nicht möglich."
      97. ENDIF
      98. ENDIF
      99. SELECT LO&[L&]
      100. CASEof 1:color 13,2:PRINT " Der Wumpus hat dich soeben GEFRESSEN!":BREAK
      101. CASEof 2,3:color 2,13:PRINT " Eine Riesenfledermaus trägt dich woanders hin!":I&=L&
      102. FLUTTER
      103. OTHERWISE
      104. ENDSELECT
      105. IF (LO&[L&]=4) OR (LO&[L&]=5)
      106. color 4,10
      107. PRINT " Du fällst ins Bodenlose..."
      108. Print " Dein Leben ist verwirkt! "
      109. BREAK
      110. Endif
      111. ENDWHILE
      112. Color 15,0:Print:Print "Nochmal?",:Input i$
      113. case upper$(i$)="J":goto "START"
      114. print " Danke für das Spiel! Bye!"
      115. waitinput 1500
      116. END
      Alles anzeigen

      P.S.: Leidlich getestet, eigentlich nur Bastelware!
    • Neu

      Abt. Vintage Computing: Textfont-Zeichensätze kombinieren
      ======================================
      Font 0 ist bekanntlich kleine Standardschrift, mit Font 2 kann man dann Fettschrift simulieren. Daß Font 1 auch interessante Mathematik-Symbole enthält, gerät angesichts moderner Windows-Zeichensätze immer mehr in Vergessenheit. Für kleine, schnell entworfene Programme ist das aber nicht uninteressant - deshalb das nachstehende Progrämmchen, das im Laufe der Zeit nebenbei entstand.
      Gruss (mit 2 ss, - meine Hausorthographie ;-)

      Quellcode

      1. WindowTitle "Mathematische Symbole ohne guten Zugriff"
      2. '=====================================================
      3. WindowStyle 24:CLS:print
      4. AppendMenuBar 100," Font- Chr$() Beschreibunng"
      5. Font 1:print " 1- 9 ",Chr$( 9),:Font 0:print " Kleiner Kreis, "
      6. Font 1:print " 1- 11 ",Chr$(11),:Font 0:print " männlich, "
      7. Font 1:print " 1- 12 ",Chr$(12),:Font 0:print " weiblich, "
      8. Font 1:print " 1 -15 ",Chr$(15),:font 0:print " Operator (Sonne), "
      9. Font 1:print " 1- 19 ",Chr$(19),:font 0:print " Doppelfakultät, "
      10. Font 2:print " 2- 20 ",Chr$(20),:font 0:print " Pi-Symbol, "
      11. Font 1:print " 1- 21 ",Chr$(21),:font 0:print " Paragraph, "
      12. Font 2:print " 2- 21 ",Chr$(21),:font 0:print " Basis-Symbol (Inv.T), "
      13. Font 1:print " 1- 24 ",Chr$(24),:font 0:print " Hochpfeil, "
      14. font 1:print " 1- 26 ",Chr$(26),:font 0:print " Folgepfeil, "
      15. font 1:print " 1- 27 ",chr$(27),:font 0:print " Linkshinweispfeil, "
      16. font 1:print " 1- 29 ",Chr$(29),:font 0:print " Kleine Äquivalenz, "
      17. font 1:print " 1-127 ",Chr$(127),:font 0:print " Haus, "
      18. font 1:print " 1-120 ",Chr$(120),:font 0:print " Mal-Kreuz, "
      19. font 1:print " 1-134 ",Chr$(134),:font 0:print " Angström, "
      20. Font 2:print " 2-164 ",Chr$(164),:font 0:print " Allg.Währungssymbol, "
      21. font 2:print " 2-168 ",chr$(168),:font 0:print " Oberpunkte, "
      22. font 1:print " 1-159 ",chr$(159),:font 0:print " Funktionssymbol, "
      23. font 2:print " 2-166 ",chr$(166),:font 0:print " Teilt-symbol, "
      24. font 2:print " 2-169 ",Chr$(169),:font 0:print " Copyright, "
      25. Waitinput:CLS:print
      26. font 1:print " 1-172 ",chr$(172),:font 0:print " 1/4 , "
      27. font 1:print " 1-171 ",chr$(171),:font 0:print " 1/2 , "
      28. font 2:print " 2-190 ",chr$(190),:font 0:print " 3/4 , "
      29. font 2:print " 2-172 ",chr$(172),:font 0:print " Non-Symbol, "
      30. font 2:print " 2-171 ",chr$(171),:font 0:print " sehr viel kleiner als, "
      31. font 1:print " 1-175 ",chr$(175),:font 0:print " sehr viel größer als, "
      32. font 2:print " 2-174 ",chr$(174),:font 0:print " Registered Trademark, "
      33. font 2:print " 2-177 ",chr$(177),:font 0:print " +\-, "
      34. font 2:print " 2-176 ",chr$(176),:font 0:print " Grad \ hoch 0, "
      35. font 2:print " 2-185 ",chr$(185),:font 0:print " hoch 1, "
      36. font 2:print " 2-178 ",chr$(178),:font 0:print " hoch 2, "
      37. font 2:print " 2-179 ",chr$(179),:font 0:print " hoch 3, "
      38. font 2:print " 2-215 ",chr$(215),:font 0:print " Mal-Kreuz, "
      39. font 2:print " 0-216 ",:font 0:print chr$(216),:font 0:print " Durchmesser klein, "
      40. font 2:print " 2-248 ",:font 2:print chr$(248),:font 0:print " Durchmesser fett, "
      41. font 2:print " 2-216 ",chr$(216),:font 0:print " Gestrichene Null, "
      42. font 2:print " 2-226 ",chr$(226),:font 0:print " Tau-Symbol, "
      43. font 1:print " 1-228 ",chr$(228),:font 0:print " Sigma\Summe, "
      44. font 1:print " 1-236 ",chr$(236),:font 0:print " Unendlich, "
      45. font 1:print " 1-238 ",chr$(238),:font 0:print " Element von, "
      46. Waitinput:CLS:print
      47. font 1:print " 1-239 ",chr$(239),:font 0:print " Schnittmenge, "
      48. font 1:print " 1- 85 ",chr$( 85),:font 0:print " Vereinigt mit, "
      49. font 1:print " 1-240 ",chr$(240),:font 0:print " Äquivalenz gross, "
      50. font 1:print " 1-241 ",chr$(241),:font 0:print " +\- , "
      51. font 1:print " 1-242 ",chr$(242),:font 0:print " größer-gleich, "
      52. font 1:print " 1-243 ",chr$(243),:font 0:print " kleiner-gleich, "
      53. font 1:print " 1-244 ",chr$(244),:font 0:print " Oberteil Integral, "
      54. font 1:print " 1-179 ",Chr$(179),:font 0:print " Mittelteil Integral, "
      55. font 1:print " 1-245 ",chr$(245),:font 0:print " Unterteil Integral, "
      56. font 2:print " 2-247 ",chr$(247),:font 0:print " Divisor, "
      57. font 1:print " 1-247 ",chr$(247),:font 0:print " Ungefähr gleich, "
      58. font 1:print " 1-251 ",chr$(251),:font 0:print " Wurzelsymbol, "
      59. font 1:print " 1-234 ",Chr$(234),:font 0:print " Ohm, "
      60. font 2:print " 2-124 ",chr$(124),:font 0:print " Betrag-Strich, "
      61. font 2:print " 2-183 ",chr$(183),:font 0:print " Mittlerer Punkt, "
      62. font 1:print " 1-216 ",chr$(216),:font 0:print " ungleich, "
      63. Waitinput
      64. Window 0,0-%maxx,%maxy
      65. Cls
      66. whileloop 0,255
      67. font 0:print " ";&loop;" ";CHR$(&Loop),
      68. font 1:print chr$(&Loop),
      69. font 2:print chr$(&Loop),
      70. case %pos>140:print "\n"
      71. endwhile
      72. waitinput
      Alles anzeigen
    • Neu

      Abt. XProfan-Methodenvergleich "Wert auf 1 Byte beschränken"
      ========================================

      Brainfuck-Quellcode

      1. Goto "init":weitr:
      2. tm&=&gettickcount
      3. WHILELOOP 100000
      4. v&=ord(chr$(&Loop))
      5. WEND
      6. tm&=&gettickcount-tm&
      7. print " ",tm&," ",
      8. tm&=&gettickcount
      9. WHILELOOP 100000
      10. v&=&Loop & 255
      11. WEND
      12. tm&=&gettickcount-tm&
      13. print tm&
      14. tm&=&gettickcount
      15. WHILELOOP 100000
      16. v&=ord(chr$(&Loop))
      17. WEND
      18. tm&=&gettickcount-tm&
      19. print " ",tm&," ",
      20. tm&=&gettickcount
      21. WHILELOOP 100000
      22. v&=&Loop & 255
      23. WEND
      24. tm&=&gettickcount-tm&
      25. print tm&
      26. print "OK"
      27. waitinput
      28. end
      29. init:
      30. cls:font 0
      31. declare v&,tm&
      32. WindowTitle " METHODENVERGLEICH "Wert auf 1 Byte beschränken""
      33. AppendMenuBar 100," Werte für 100000 Zuweisungen in [ms]"
      34. Print
      35. print " ORD(CHR$(X&)) vs. X& AND 255"
      36. print " ----------------------------"
      37. goto "weitr"
      Alles anzeigen
    • Neu

      P.S. zu oben: Auch das "Ins-Leere und zurückshiften" (x& << 24)>>24 hat sich als zeitraubend erwiesen. Am Schnellsten ist offenbar doch die gute alte "x& & 255"-Funktion (im Programm korrekt, in der Überschrift leider als AND beschrieben - das liefert aber Logikwerte zurück!)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

    • Neu

      Lösung zu ALR-62 ´2020´
      Spoiler anzeigen

      Wie lautet die von links gelesen erste Stelle der kleinstmöglichen natürlichen Zahl, deren Ziffernsumme 2020 ergibt?
      Überlegung: Das muss eine verdammt lange Zahl aus vielen Ziffern sein. Am kürzesten wird sie wohl, wenn wir die höchste Ziffer, also 9, aneinanderreihen. Das soll dann zusammen mit der ersten Ziffer von links die Summe 2020 ergeben.
      Wievielmal werden wir 9 brauchen? Wahrscheinlich 2020 / 9 = 224.44444444444444 mal. 224 * 9 ist aber erst 2016, somit lautet die Antwort: Die erste Ziffer von links muss die Summe 2016 auf 2020 ergänzen, also 4 betragen.


      P.S.: ALR-63 ist weiter offen.
    • Neu

      Abt. ALR-64 ´Friedhofskerzen´
      ===================
      Pastor Josua Bschistibohabicek hat zwei Friedhofskerzen mit unterschiedlichen Höhen und Durchmessern erstanden. Die erste Kerze brennt lt. Aufschrift 6 Stunden, die zweite 8 Stunden lang. Er zündet an benachbarten Gräbern binnen kurzer Zeit beide Kerzen an - drei Stunden später sind beide Kerzen gleich hoch. Frage: In welchem Verhältnis standen die Kerzenlängen beim Kauf zueinander?