ALGORITHMEN - Teil XVII: Im Gruselkeller der Hirnwindungen

    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

      Abt. Noch mehr Rätsel - NmR 32 "Guten Tag, Herr Kaprekar!"
      =======================================
      Das Spiel geht so:
      0. SetUp: Wähle eine vierstellige Zahl mit verschiedenen Ziffern!
      1. Bilde aus diesen Ziffern die größtmögliche Zahl (G) und die kleinstmögliche Zahl (K)
      3. Bilde die Differenz D = G - K
      4. Verändert sich das Ergebnis D gegenüber der Vorrunde, mach mit den neuen Ziffern weiter bei 1.
      5. Ändert sich das Ergebnis nicht mehr (das sollte nach spätestens 7 Runden der Fall sein), schreibe die Endzahl auf und sag laut und deutlich: "Guten Tag, Herr Kaprekar!"
      6. Versuche es mit einer anderen Ausgangszahl: Es wird am Ende stets Herrn Kaprekars Zahl herauskommen! Die Quizfrage: Wie lautet diese Zahl? (Ohne Google & Co bitte!!!)

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

    • Neu

      Abt. Noch mehr Rätsel - NmR 32 ´Besuch in der Keksfabrik´
      ============================================
      Vier Brüder nahmen an der Exkursion in eine Keksfabrik teil. Und was wäre so ein Besuch ohne Verkostung dieser köstlichen Backwerke? Am Ende stellte man fest: Zusammen haben sie 11 Kekse gegessen. Jeder aß zumindest ein Keks, aber alle aßen verschieden viele Kekse. Drei der Brüder aßen zusammen 9 Kekse, wovon einer genau 3 Kekse bekam. Frage: Wie viele Kekse aß der, der die meisten Kekse gegessen hat?
    • Neu

      Zunächst: Es muss heißen: "Jeder aß zumindest einen Keks"

      Lösung:

      Spoiler anzeigen
      Einer aß 2 Kekse. Von den restlichen Brüdern aß einer 3 Kekse. Bleiben 6 Kekse für die beiden übrigen Brüder. Da die Anzahl unterschiedlich sein muss, bleibt hier nur die Aufteilung 1 und 5 Kekse. Also hat der Verfressenste 5 Kekse in sich hinein gestopft!


      Gruß
      Roland
      (... und schon ist die Frühstückspause vorbei.)
      Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD / ATI Radeon HD4770 512 MB / Windows 7(32) - XProfan X4
      AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


      http://www.xprofan.de
    • Neu

      Sorry @RGH, kann meine Herkunft eben nicht verleugnen: In Österreich heißt es "Das Keks" und "Der Gehalt", ausserdem wird z.B. in Wien etwas verwendet und nicht verwandt. Verwandte gibt es trotzdem. Und wenn diese Kinder haben, gehen die nicht "zur Schule", sondern auch in die Schule, nämlich hinein. Ausserdem bekommen sie dort nicht Zensuren, sondern Noten, z.B. einen Einser (stat ne Eins), einen Vierer oder gar einen Fünfer (= die schlechteste Note, auch Pinsch oder Fleck genannt). Und wenn hier jemand Sahne bestellt, bekommt er vom Herrn Ober (-Kellner) ein Kännchen Obers und Datumszu:schlag auf der Rechnung. Während man in Wien keine Pampelmusen kennt, kann man - EU sei Dank - inzwischen schon mal Tomaten und Kartoffeln bekommen statt Paradeiser und Erdäpfel. Dufte, wa? = Leiwond, Oida! Und Wiener Würstchen heissen Frankfurter oder "A Paarl". Neulich hatten sie an einem Standl (Würstelbude) "Currywurst" im Angebot, ich hatte aber auf derart Exotisches keinen Bock. Und so ginge das noch stundenlang weiter, wäre nicht inzwischen das ...

      Lösungsprogramm zu NmR-32.2 fertig, das RGHs Ergebnis voll bestätigt:
      =======================

      Quellcode

      1. WindowTitle "NmR 32: Besuch in der Keksfabrik"
      2. CLS:declare b1&,b2&,b3&,b4&
      3. 'Vier Brüder haben zusammen 11 Kekse gegessen. Jeder (von 4) aß zumindest ein Keks, 11-4=7 max.
      4. Whileloop 1,7:b1&=&Loop
      5. :Whileloop 1,7:b2&=&Loop:case b2&=b1&:continue 'aber alle aßen verschieden viele Kekse:1,2,3,4
      6. :Whileloop 1,7:b3&=&Loop:case b3&=b1&:continue:case b3&=b2&:continue
      7. :whileloop 1,7:b4&=&Loop:case b4&=b1&:continue:case b4&=b2&:continue:case b4&=b3&:continue
      8. if b1&+b2&+b3&+b4&=11 'Vier Brüder haben zusammen 11 Kekse gegessen.
      9. if (b1&+b2&+b3&=9) 'Drei der Brüder aßen zusammen 9 Kekse (1 von 4 nicht dabei!)
      10. if (b1&=3) or (b2&=3) or (b3&=3) 'wovon einer (dieser drei) genau 3 Kekse bekam.
      11. show 1,1,1,0
      12. endif
      13. elseif (b1&+b2&+b4&=9)
      14. if (b1&=3) or (b2&=3) or (b4&=3)
      15. show 1,1,0,1
      16. endif
      17. elseif (b1&+b3&+b4&=9)
      18. if (b1&=3) or (b3&=3) or (b4&=3)
      19. show 1,0,1,1
      20. endif
      21. elseif (b2&+b3&+b4&=9)
      22. if (b2&=3) or (b3&=3) or (b4&=3)
      23. show 0,1,1,1
      24. endif
      25. endif
      26. endif
      27. endwhile:endwhile:endwhile:endwhile
      28. print "---";:beep:waitinput:end
      29. proc show :parameters i1&,i2&,i3&,i4&
      30. font 0:case i1&:font 1:print " ",b1&,
      31. font 0:case i2&:font 1:print b2&,
      32. font 0:case i3&:font 1:print b3&,
      33. font 0:case i4&:font 1:print b4&,
      34. var max&=0 'Wie viele Kekse aß der, der die meisten Kekse gegessen hat?
      35. case b1&>max&:max&=b1&
      36. case b2&>max&:max&=b2&
      37. case b3&>max&:max&=b3&
      38. case b4&>max&:max&=b4&
      39. font 0:print " max.: ";max&
      40. endproc
      Alles anzeigen
      Gruss

      P.S.: Im Urlaub sind Frühstückspausen eben länger :-D

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

    • Neu

      Abt. Noch mehr Rätsel - NmR 33 "Flugsicherheit"
      ===================================
      Ein Student wird am Flughafen beim Versuch erwischt, eine Bombe an Bord zu schmuggeln. Zur Rede gestellt, meint er: "Ich wollte nur sicherer fliegen!" - "Wie das?" fragt der Kommissar. "Eine Untersuchung hat ergeben, daß die Wahrscheinlichkeit, dass eine Bombe an Bord ist, 0.001 Prozent beträgt. Die Wahrscheinlichkeit aber, daß gleich zwei Bomben an Bord sind, ist dann natürlich halb so groß!". "Da hast Du aber in der Vorlesung nicht gut aufgepasst!" meint der Kommissar, und die Handschellen klicken. Frage: Wie hoch ist die Wahrscheinlichkeit, daß zwei Bomben an Bord sind?
    • Neu

      Lösung zu NmR 32.1 "Kaprekar-Zahl"
      ----------------------------------

      Quellcode

      1. Windowtitle upper$(" K a p r e k a r - K o n s t a n t e e r z e u g e n")
      2. font 2:declare z$,a$,b$,c$,d$,t$, g!,k!,d!,da!
      3. set("decimals",0):cls
      4. AppendMenuBar 100," STARTZAHL ist eine 4-stellige Zahl, in der"+ \
      5. " höchstens 2 x 2 Ziffern gleich sind.\n"
      6. Begin:
      7. print "\n Deine Startzahl bitte: ";:input z$:print
      8. case len(z$)<>4:goto "Begin":casenot val(left$(z$,1)):goto "Begin"
      9. whileloop 7
      10. a$=mid$(z$,1,1):b$=mid$(z$,2,1):c$=mid$(z$,3,1):d$=mid$(z$,4,1)
      11. if a$>b$:t$=a$:a$=b$:b$=t$:endif
      12. if a$>c$:t$=a$:a$=c$:c$=t$:endif
      13. if a$>d$:t$=a$:a$=d$:d$=t$:endif
      14. if b$>c$:t$=b$:b$=c$:c$=t$:endif
      15. if b$>d$:t$=b$:b$=d$:d$=t$:endif
      16. if c$>d$:t$=c$:c$=d$:d$=t$:endif
      17. g!=val(d$+c$+b$+a$):k!=val(a$+b$+c$+d$)
      18. d!=g!-k!:print tab(3);g!,"-",tab(10);k!,"=";tab(17);d!
      19. case da!=d!:break
      20. da!=d!:z$=str$(d!)
      21. endwhile
      22. print "\n Kaprekar-Konstante: ";d!
      23. sound 2000,40
      24. goto "Begin"
      Alles anzeigen
    • Neu

      Abt. Barnsley-Fraktale
      =================
      Der englsche Mathematiker Michael Barnsley beschäftigte sich in seiner 1993 erschienenen Veröffentlichung mit Fraktalen, die in der Natur vorkommen. Als eines der ersten Studienobjekte zeigte er die Algorithmen auf, nach denen Farne (Farn, englisch: fern, ist die älteste Blattpflanze) aufgebaut sind.
      Als Rosetta code-Übung wurde das in vielen Programmiersprachen realisiert, nun auch in XProfan ;-)
      Gruss

      Quellcode

      1. WindowTitle "Barnesley´s Fractal-Farnblatt"
      2. 'Q:http://rosettacode.org/wiki/Barnsley_fern
      3. 'Details: https://en.wikipedia.org/wiki/Barnsley_fern
      4. WindowStyle 24:font 2:Randomize
      5. Window 0,0-%maxx,%maxy:cls 0:showmax
      6. declare ende&,xh&,yh&,xn!,yn!,xnp1!,ynp1!,R!,sx!,sy!,dx&,gn&,vz&
      7. xh&=width(%hwnd)\2:yh&=height(%hwnd)*0.9
      8. Nochmal:
      9. WHILELOOP 35
      10. dx&=xh&*(1-2*rnd())
      11. sx!=64-Rnd(40) 'Zoomx
      12. sy!=64-Rnd(20) 'Zoomy
      13. gn&=35+Rnd(200):vz&=1-2*rnd(2)
      14. xn!=0 : yn!=0 'Startposition
      15. usepen 0,2,rgb(0,gn&,0)
      16. Whileloop 10000
      17. RndCaller
      18. line (xh&+dx&+sx!*xn!*vz&),(yh&-sy!*yn!) - (xh&+dx&+sx!*xn!*vz&+1),(yh&-sy!*yn!)
      19. xn!=xnp1!:yn!=ynp1!
      20. Endwhile
      21. ENDWHILE
      22. CLS 0
      23. Goto "Nochmal"
      24. proc RndCaller
      25. R!=100*rnd()
      26. if R!<=1 :ƒ1
      27. elseif R!<=8 :ƒ3
      28. elseif R!<=15:ƒ4
      29. else :ƒ2
      30. endif
      31. endproc
      32. proc ƒ1 '(chosen 1% of the time)
      33. xnp1! = 0
      34. ynp1! = 0.16*yn!
      35. endproc
      36. proc ƒ2 '(chosen 85% of the time)
      37. xnp1! = 0.85*xn! + 0.04*yn!
      38. ynp1! = -0.04*xn! + 0.85*yn! + 1.6
      39. endproc
      40. proc ƒ3 '(chosen 7% of the time)
      41. xnp1! = 0.2*xn! - 0.26*yn!
      42. ynp1! = 0.23*xn! + 0.22*yn! + 1.6
      43. endproc
      44. proc ƒ4 '(chosen 7% of the time)
      45. xnp1! = -0.15*xn! + 0.28*yn!
      46. ynp1! = 0.26*xn! + 0.24*yn! + 0.44
      47. endproc
      Alles anzeigen
    • Neu

      Lösung zu NmR 33 ´Flugsicherheit´:
      --------------------------------------
      Die Überlegung ist natürlich Nonsens: Das Risiko wurde ja über ALLE bekannten Fälle einer langen Beobachtungsperiode ermittelt. Da sind Einzelereignisse wie "Ich hier und jetzt nehme ein Bömbchen mit" auch alle schon enthalten. Der angenommene Wert war übrigens rein hypothetisch und ist in der Praxis noch viel niedriger.
    • Neu

      Abt. 100 Türen
      ==========
      Die Rosetta code Aufgabe "100 Doors" dient u.a. zum Vergleich der Arraylisten-Handhabung in verschiedenen Programmiersprachen. 100 Türen sind entweder aufzumachen (wenn sie zu sind) oder zuzumachen (wenn sie offen sind). Es gibt 100 Durchgänge, wobei im ersten Durchgang jede Tür, im 2. Durchgang jede 2. Tür, im 3. Durchgang jede 3. Tür etc. bis zum 100. Durchgang ihren Zustand wechseln soll. Anbei mein Versuch dazu. Die Türen sind anfangs geschlossen.
      Gruss

      P.S.: Offen bleiben übrigens Türen mit sog. Perfekten Quadratzahlen als Nummern, also 0², 1², 2², 3², 4² ... etc., soferne man bei 0 zu zählen beginnt.

      Quellcode

      1. WindowTitle "100 Doors"
      2. 'http://rosettacode.org/wiki/100_doors
      3. WindowStyle 24
      4. Window 0,0 - %maxx,%maxy
      5. font 1
      6. declare s%,Door%[99]
      7. whileloop 0,99
      8. s%=&Loop+1
      9. print &Loop;":";tab(7);
      10. Show
      11. casenot %csrlin mod 50:waitinput 10000
      12. whileloop 0,99,s%
      13. Door%[&Loop]=not(Door%[&Loop])
      14. endwhile
      15. endwhile
      16. print mkstr$("-",160)
      17. font 2
      18. print "100: ";
      19. Show
      20. print " where 1 = Open, 0 = Closed"
      21. print
      22. Waitinput
      23. Waitinput
      24. End
      25. Proc Show
      26. Whileloop 0,99
      27. print Door%[&Loop];
      28. endwhile
      29. print
      30. EndProc
      Alles anzeigen

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