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?
    • Neu

      Lösung zu ALR-63 ´Display kaputt´
      ---------------------------------------
      Spoiler anzeigen

      7 2 4 3
      2 1 x 7
      y z 2 6
      ----------
      111 2 6
      Einerstelle: 3 + 7 + 6 = 16. Davon steht 6 schon dort - "1" wird an die Zehnerstelle übertragen.
      Die Rechnung für die Zehnerstelle sieht daher so aus: "1"+4+x+2=7+x=12 ==> x=5.
      2 stehen bereits in der 10er-Stelle der Summe, "1" wird in die 100er-Stelle übertragen.
      Die Rechnung für die 100er-Stelle sieht so aus: "1"+2+1+z = 4+z=11 ==> z=7.
      1 stet bereits in der 100er-Stelle der Summe. "1" wird in die 1000er-Spalte übertragen.
      Die Rechnung für die 1000er-Stelle sieht so aus: "1"+7+2+y = 11 ==> y=1
      Die fehlenden Ziffern können somit rekonstruiert werden: x=5, z=7, y=1; d.h. die korreke Anzeige sähe so aus:
      7243
      2157
      1726

      Probe: Summe = 11126
      q.e.d.
    • Neu

      ALR-64 ´Friedhofskerzen´
      Spoiler anzeigen

      Aufgabe:
      * zwei Friedhofskerzen mit unterschiedlichen Höhen und Durchmessern
      * Die erste Kerze (K1) brennt 6 Stunden,
      * die zweite (K2) 8 Stunden
      * zündet beide Kerzen an
      * drei Stunden später sind beide Kerzen gleich hoch.

      Frage: In welchem Verhältnis standen die Kerzenlängen beim Kauf zueinander?

      Logisch:
      1. Kerze 1 (K1) ist halb abgebrannt (3/6), K2 noch nicht (3/8) [std]
      2. Obwohl K2 nach 3 std gleich hoch ist, ist ihre Restzeit länger (5/8), ergo ist sie dicker

      Mathematische Beschreibung zur Länge:
      6*8=48
      3/6 K1 = Verbranntes K1 = 24/48 = 4/8 ihrer Ausgangshöhe
      3/8 K2 = Verbranntes K2 = 18/48 = 3/8 ihrer Ausgangshöhe


      Antwort: K1 war beim Kauf dünner und deutlich länger als K2.

      (Anm: Gefragt war nur das Verhältnis... WIE viel länger hängt von der Dicke ab und ist nicht ermittelbar)


      Rabe
      PS: "64" gibt es 2x... :-D
      Computer setzen logisches Denken fort!
      Unlogisches auch....

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von ravenheart ()

    • Neu

      ALR-64 (2) ´Nuremberger Konditoren´

      Spoiler anzeigen

      Fünf Nürnberger Konditor-Lehrlinge backen Lebkuchen und treffen sich danach zum Verkosten.

      Bedingungen:
      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.

      Frage: Wie viele Lebkuchen wurden insgesamt gebacken?

      Logisch:
      5 Bäcker = 4 Geber/Nehmer und man selber
      Man bekommt also 4 und gibt 4 (und isst 4)
      5x4 werden gegessen = -20
      Hälfte = 20, Gesamtzahl = 40

      Antwort: es wurden 40 Lebkuchen gebacken.


      Rabe
      Computer setzen logisches Denken fort!
      Unlogisches auch....
    • Neu

      Lösung zu ALR 64 mit dem Titel ´Friedhofskerzen´
      --------------------------------------------------------
      Spoiler anzeigen

      Kerze K1 hält 6 Stunden. Ihre gleichmäßige Längenverbrennungsgeschwindigkeit v1 = L1 [beispielsweise cm] / 6 Stunden = L1 / 6 [cm/h]
      Nach 3 Stunden ist sie S[cm] = L1 - L1 /6 [cm/h] * 3[h] lang.
      Kerze K2 hält 8 Stunden. Ihre gleichmäßige Längenverbrennungsgeschwindigkeit v2 = L2 [cm] / 8 Stunden = L2 /8 [cm/h].
      Nach 3 Stunden ist sie S[cm] = L2 - L2 /8 [cm/h] * 3[h] lang.

      Nach diesen 3 Stunden sind beide Kerzen lt. Angabe gleich lang, nämlich S[cm].
      Wir können also gleichsetzen:
      L1[cm] - L1 / 6 [cm/h] * 3[h] = L2 [cm] - L2 / 8 [cm/h] *3[h]


      L1 kommt links 2x vor, L2 rechts. Man darf herausheben:
      L1 * (1-1/6 * 3) = L2 * (1-1/8*3)
      L1 * (1-3/6) = L2 * (1-3/8)
      L1 * (1-1/2) = L2 * (8/8 - 3/8)
      L1 * 1/2 = L2 * 5/8
      L1/L2 = (5/8) / (1/2) = (5/8) * (2/1) = 5/8 * 2= 10/8 = 5/4
      Mit anderen Worten:
      L1 : L2 = 5 : 4.
      Antwort: Die Kerzenlängen verhalten sich wie 5 zu 4.
      Die Länge von K1 mit 6 Stunden Brenndauer ist offenbar länger und (bei gleichen Verbrennungsbedingungen - Dicke, Wachsart, Dochtdimensionen etc) dünner als Kerze 2 mit 8 Stunden Brenndauer.

      Fleissaufgabe: Da die Verbrennungsdauer unter gleichen Rahmenbedingungen wie Zylinderform durch das Wachsvolumen W1 und W2 bestimmt wird, kann man sich auch das Dickenverhältnis ausrechnen:
      W1/W2 = 6/8 = (d1^2*Pi/4 * L1) / (d2^2*Pi/4 * L2) ... Pi/4 kürzt sich weg, den Rest kann man aufteilen:
      = (d1^2)/(d2^2) * L1/L2 =
      = d1²/d2² * 5/4 = 6/8
      (d1/d2)² = 6/8 * 4/5
      d1/d2 = Sqrt(24/40)) = Sqrt(0,6)
      M.a.W.: Kerze K2 ist um etwa 29,1 % dicker als Kerze K1.
    • Neu

      Veto! Eine dickere Kerze mit gleichem Docht wie eine Dünnere brennt gar nicht komplett ab! Entweder brennt ein "Tunnel" hinein, oder sie läuft irgendwann aus.
      Gleichmäßig brennen Kerzen nur ab, wenn Docht und Kerzendurchmesser präzise aufeinander abgestimmt sind!

      8-)

      Rabe
      Computer setzen logisches Denken fort!
      Unlogisches auch....