ALGORITHMEN - Teil XVIII: Neueste Fortschritte in Künstlicher Dummheit

    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.

    • AHT schrieb:

      RGH schrieb:

      die exe die umbenannte prfrun32.exe mit dem compilierten Programm als Ressource.
      Also ist es im Prinzip ab X3 nicht mehr nötig, Icons vor der Compilierung in die PRFRUN32.EXE einzufügen - man könnte die Resourcen auch nachträglich bearbeiten. Sehe ich das so richtig?Ist dann ja eigentlich genau so wie bei Autoit.
      Das ist korrekt! Zumal ab X3 ja Ressourcen aus RES-Dateien auch diekt beim kompilieren eingebunden mit $RES werden können.

      Gruß
      Roland
      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
    • Abt. Dritte Industrielle Revolution
      =========================
      Jeremy Rifkin ist als Zukunftsforscher und Berater von Angela Merkel, der EU-Kommission und der Chinesischen Regierung sowie als Autor von rund 20 Büchern zur wirtschaftlichen Entwicklung inzwischen ein Begriff. Wer halbwegs gut in Englisch ist, der sollte sich seinen Vortrag über die kommende Sharing-Economy anhören. Nebenbei stampft er das herkömmliche Betriebswirte-Wissen in Grund und Boden. Der Mann weiß wovon er spricht: LINK

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

    • Abt. Rosetta Code "Count the coins"
      ===========================
      Im Gegensatz zum Titel geht es nicht um Münzen-zählen, sondern um "Alle Möglichkeiten, einen Herausgabebetrag zusammenzustellen aufzählen". In der Praxis kommt wohl eher die Aufgabe, mit einer bestimmten Kassenfach-Belegung möglichst vielen Kunden herausgeben zu können, ohne ständig neue Münzrollen aufbrechen zu müssen (- also ein statistisches Problem) zum tragen - darum geht´s hier also NICHT. Für Benchmarking-Zwecke taugt die Aufgabe aber, wobei im nachstehenden Progi nur ein sehr naiver Brute-force Ansatz umgesetzt wurde. Wer sich für intelligentere Lösungen interssiert, sei auf die Seite mit dem Rosetta code verwiesen.
      Gruss

      Quellcode

      1. WindowTitle "Rosetta code: Count the coins"
      2. '(CL) CopyLeft 2018-09 by p.specht, Vienna/EU
      3. 'OHNE JEDE GEWÄHR!
      4. 'http://rosettacode.org/wiki/Count_the_coins
      5. 'There are four types of common coins in US currency:
      6. ' quarters (25 cents)
      7. ' dimes (10 cents)
      8. ' nickels ( 5 cents) and
      9. ' pennies ( 1 cent )
      10. 'There are six ways to make change for 15 cents:
      11. ' A dime and a nickel 10 + 5 (2)
      12. ' A dime and 5 pennies 10 + 1+1+1+1+1 (6)
      13. ' 3 nickels 5 + 5 + 5 (3)
      14. ' 2 nickels and 5 pennies 5 + 5 + 1+1+1+1+1 (7)
      15. ' A nickel and 10 pennies 5 + 1+1+1+1+1 + 1+1+1+1+1 (11)
      16. ' 15 pennies 1+1+1+1+1 + 1+1+1+1+1 + 1+1+1+1+1 (15)
      17. 'Task
      18. 'How many ways are there to make change for a dollar using these common coins?
      19. '(1 dollar = 100 cents).
      20. 'Optional
      21. 'Less common are dollar coins (100 cents); and very rare are half dollars (50 cents).
      22. 'With the addition of these two coins, how many ways are there to make change for $1000?
      23. '(Note: The answer is larger than 2^32).
      24. Declare Wert&,w$,Sum&,count&,ECent&,Zweierl&,Fuenferl&
      25. Declare Zehnerl&,Zwanzgerl&,Fufzgerl&,Euro&,Zweuro&
      26. REPEAT
      27. CLS:font 2:count&=0:Sum&=0
      28. Print "\n Betrag [< 5 Euro] = ";:input w$:case w$>""
      29. Sum&=val(w$)*100:print
      30. Whileloop 0,sum&\200:Zweuro&=&Loop
      31. Whileloop 0,sum&\100:Euro&=&Loop
      32. Whileloop 0,sum&\50:Fufzgerl&=&Loop
      33. Whileloop 0,sum&\20:Zwanzgerl&=&Loop
      34. Whileloop 0,sum&\10:Zehnerl&=&Loop
      35. Whileloop 0,sum&\5:Fuenferl&=&Loop
      36. Whileloop 0,sum&\2:Zweierl&=&Loop
      37. Whileloop 0,sum&:ECent&=&Loop
      38. Wert&=Ecent&+Zweierl&*2+Fuenferl&*5+Zehnerl&*10+\
      39. Zwanzgerl&*20+Fufzgerl&*50+Euro&*100+Zweuro&*200
      40. case Wert&>Sum&:Break
      41. if Wert&=Sum&
      42. if Sum&<=200
      43. print " ";
      44. case Zweuro&:print Zweuro&,"Zweuro",
      45. case Euro&:print Euro&,"Euronen",
      46. case Fufzgerl&:print Fufzgerl&,"Fufzgerl",
      47. case Zwanzgerl&:print Zwanzgerl&,"Zwanzgerl",
      48. case Zehnerl&:print Zehnerl&,"Zehnerl",
      49. case Fuenferl&:print Fuenferl&,"Fuenferl",
      50. case Zweierl&:print Zweierl&,"Zweierl",
      51. case ECent&:print ECent&,"EuroCent",
      52. print
      53. else
      54. locate 3,2:print int(count&+1);
      55. endif
      56. inc count&:BREAK
      57. endif
      58. Endwhile
      59. Endwhile
      60. Endwhile
      61. Endwhile
      62. Endwhile
      63. Endwhile
      64. Endwhile
      65. Endwhile
      66. print "\n Das sind ",count&,"Arten um",format$("0.00",sum&/100),"Euro zu bilden!"
      67. waitinput
      68. UNTIL 0
      Alles anzeigen

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

    • Abt. Teiler einer Zahl ermitteln
      =======================
      Und wieder eine Rosetta code-Aufgabe, diesmal mit Zahlentheoretischer Beschleunigung falls keine explizite Aufzählung der Teiler erforderlich ist.
      Gruss

      P.S.: Langsam stellt sich die Frage, ob wir die XProfan-Lösungen bei Rosetta einreichen sollten ...

      Quellcode

      1. WindowTitle upper$("Rosetta code: Teiler einer Zahl ermitteln")
      2. 'Q: http://rosettacode.org/wiki/Proper_divisors#Number_Theoretic
      3. '1. Create a routine to generate all the proper divisors of a number.
      4. ' Use it to show the proper divisors of the numbers 1 to 10 inclusive.
      5. '2. Find the number in the range 1 to 20000 with the most proper divisors and
      6. ' show the number and just the count of how many proper divisors it has.
      7. 'Soll-Ausgabe:
      8. '1:
      9. '2: 1
      10. '3: 1
      11. '4: 1 2
      12. '5: 1
      13. '6: 1 2 3
      14. '7: 1
      15. '8: 1 2 4
      16. '9: 1 3
      17. '10: 1 2 5
      18. '18480 with 79 divisors
      19. Main:
      20. CLS:font 2
      21. declare max&,i&,v&:var max_i& = 1
      22. Whileloop 10:i&=&Loop
      23. print format$(" %d: ",i&);
      24. proper_divisors(i&,1)
      25. Endwhile
      26. print "\n 2. Teil der Aufgabe: ...\n"
      27. Whileloop 20000:i&=&Loop
      28. v& = countProperDivisors(i&)
      29. if v&>=max&
      30. max& = v&
      31. max_i& = i&
      32. endif
      33. Endwhile
      34. print "\n Die meisten Teiler im Bereich 1 bis 20000 hat die Zahl\n"
      35. print format$(" %d",max_i&),"mit",format$("%d",max&),"Teilern."
      36. sound 1000,100
      37. Waitinput
      38. END
      39. Proc proper_divisors :parameters n&,pflag&
      40. declare i&,count&
      41. Whileloop n&-1:i&=&Loop
      42. ifnot n& mod i&:inc count&
      43. case pflag&:print format$("%d ",i&);
      44. Endif
      45. Endwhile
      46. case pflag&:print "\n"
      47. return count&
      48. Endproc
      49. Proc countProperDivisors :parameters n&
      50. declare i&,count& : var prod& = 1
      51. while not(n& mod 2)
      52. inc count&
      53. n&=n&\2
      54. Endwhile
      55. prod&=prod&*(1+count&)
      56. i&=3
      57. while sqr(i&)<n&
      58. count& = 0
      59. while not(n& mod i&)
      60. inc count&
      61. n&=n&\i&
      62. endwhile
      63. prod&=prod&*(1+count&)
      64. inc i&,2
      65. endwhile
      66. case n&>2:prod&=prod&*2
      67. return prod&-1
      68. Endproc
      69. ProgEnd
      Alles anzeigen
    • Abt. Neues vom Voynich Manuskript
      ===========================
      An diesem vermutlich zwischen 1404 und 1438 entstandenen handschriftlichen Buch, das heute in der Yale-Universität aufbewahrt wird, bissen sich Kryptologen und Fachleute aus verschiedensten Disziplinen bisher die intellektuellen Zähne aus. Nun aber scheint einem türkischen Elektrotechniker und seinen beiden Söhnen der Durchbruch gelungen zu sein: Das Manuskript scheint in einer sehr altem Turksprache gehalten und konnte - nach nunmehr 600 Jahren - zu etwa 30% entziffert werden. Bemühungen zur weiteren Vervollständigung sind im Gange. Es könnte sich um eine einmalige Sammlung des gesamten Wissens der Entstehungszeit handeln - sowas wie die Wikipedia der damaligen Zeit.
      Gruss

      P.S.: Wer sich für ein Faximile des Manuskripts als pdf interessiert: LINK
    • Lösung zu UnvmR 34:
      --------------------
      Spoiler anzeigen

      Die vierstellige Zahl besteht aus vier ungeraden Ziffern. Davon gibt es 5: 1,3,5,7,9.
      Die erste bis dritte Ziffer können also jeweils aus 5 Ziffern bestehen, die vierte kann nur 5 sein (= 1 Möglichkeit) - weil: Eine Zahl ist restlos durch 5 teilbar, wenn die Einerstelle entweder 0 oder 5 ist. Da Null als gerade Zahl gilt, fällt diese Mögliheit weg. Daher gibt es 5 * 5 * 5 * 1 = 125 vierstellige Zahlen mit ausschließlich ungeraden Ziffern, die durch 5 teilbar sind.
    • Abt. UnvmR 36 ´Spendabler Centurio´
      ============================
      Centurio Pleitius will seine 200 Männer für Tapferkeit belohnen. Dazu schreitet er die Reihe ab und gibt erst mal jedem eine Sesterze. Dann holt er wieder Geld, schreitet die Reihe von der selben Seite ab und gibt jedem zweiten eine Sesterze. Dann holt er wieder Geld und gibt jedem 3. eine Sesterze, etc. etc. Zu allerletzt bekommt also nurmehr der 200ste eine Sesterze.
      Frage 1: Wieviele Sesterzen bekommt jener, der an der 120sten Stelle steht.
      Frage 2: Wer bekommt die meisten Sesterzen?
    • Lösung zu UnvmR 35
      --------------------

      Quellcode

      1. WindowTitle "UnvmR 35-Löser"
      2. cls
      3. font 2
      4. declare s&,w&,a&,b&,c&,d&,su&
      5. whileloop 1,9,1:a&=&Loop
      6. whileloop 0,9,1:b&=&Loop
      7. whileloop 0,9,1:c&=&Loop
      8. whileloop 0,9,1:d&=&Loop
      9. w&=a&*1000+b&*100+c&*10+d&
      10. locate 1,1:print w&,
      11. ifnot a& mod 2
      12. ifnot b& mod 2
      13. ifnot c& mod 2
      14. ifnot d& mod 2
      15. ifnot w& mod 5
      16. inc su&
      17. locate 5,5:print su&,
      18. endif
      19. endif
      20. endif
      21. endif
      22. endif
      23. endwhile
      24. endwhile
      25. endwhile
      26. endwhile
      27. print
      28. font 0
      29. whileloop 2,8,2
      30. whileloop 0,8,2
      31. whileloop 0,8,2
      32. inc s&
      33. endwhile
      34. endwhile
      35. endwhile
      36. print " Probe 1:",s&
      37. print " Probe 2:",4*5*5*1
      38. waitinput
      39. End
      Alles anzeigen
    • Lösung zu UnvmR 36
      --------------------
      Spoiler anzeigen

      Antwort 1: An Position 120 landen 16 Sesterzen, weil dort jedesmal eine Sesterze landet, wenn die Positionszahl dividiert durch die Rundenzahl keinen Rest ergibt. Beweis:

      Quellcode

      1. WindowTitle "UnvmR 36-Löser"
      2. Window 0,0-%maxx,%maxy-40
      3. Declare s&[200],i&
      4. Whileloop 1,200:i&=&Loop
      5. Whileloop i&,200,i&
      6. s&[&Loop]=s&[&Loop]+1
      7. usepen 0,2,rgb(0,180,i&)
      8. case i&=120:usepen 0,2,rgb(180,0,0)
      9. case i&=180:usepen 0,2,0
      10. line 40,40+&Loop*3 - 40+s&[&Loop]*50,40+&Loop*3
      11. Endwhile
      12. Endwhile
      13. font 2:locate 31,108:print s&[120]
      14. locate 2,2
      15. print "Probe: ";
      16. var sum&=0
      17. whileloop 200
      18. casenot 120 mod &Loop:inc sum&
      19. endwhile
      20. print sum&
      21. waitinput
      22. End
      Alles anzeigen
      Die Anwort auf Frage 2 hängt ebenfalls von der Anzahl der Teiler aller Zahlen zwischen 1 und 200 an und kann daher mit dem angepassten Programm aus Beitrag #126 ermittelt werden: Position 180 hat die meisten Teiler = 18 Sesterzen!
    • Lösung zu UnvmR 37
      ----------------------
      Spoiler anzeigen
      1) Arithmetisch:
      x [Eur] = Originalpreis + Originalpreis * 4 %
      x [Eur] = Originalpreis * 1.04
      x [Eur] = Originalpreis * 104 / 100

      x *100 [Eurocent] = Originalpreis * 104 / 100
      x [Eurocent] = Originalpreis * 104 / (100 * 100)
      x [Eurocent] = Originalpreis * 104 / 10000
      x [Eurocent] = Originalpreis * 52 / 5000
      x [Eurocent] = Originalpreis * 26 / 2500
      x [Eurocent] = Originalpreis * 13 / 1250
      1250 Eurocent = Originalrpeis * 13

      12.50 * Eur = Originalrpeis * 13
      Da 13 prim ist, gibt es keine weiter Kürzung.
      Die einzige Möglichkeit zur Erfüllung dieser Gleichung ist daher:
      12.50 * x = Originalrpeis * 13
      12.50 * 13 = 12.50 * 13
      ==> Originalpreis war 12.50 Eur,
      Gesuchter Preis x = 13,-- Eur.

      ----------------------------------
      Probe: 12.50 * 1.04 = 13 , q.e.d.

      2) EDV-Lösung:

      Quellcode

      1. WindowTitle "UnvmR 37-Löser"
      2. cls:set("decimals",15):font 1
      3. print "\n Berechnung laeuft ..."
      4. declare a&,b&,c&,d!
      5. whileloop 0,9:b&=&Loop
      6. whileloop 0,9:c&=&Loop
      7. whileloop 0,1000:a&=&Loop
      8. d!=(a&+b&/10+c&/100)*1.04
      9. if (d!=int(d!)) and ((c&>0) or (b&>0))
      10. print "\n ";d!;" = ";a&;",";b&;c&;" * 1.04"
      11. sound 2000,200
      12. waitinput
      13. end
      14. endif
      15. endwhile
      16. endwhile
      17. endwhile
      18. beep
      19. print "---"
      20. waitinput
      21. End
      Alles anzeigen