aufrüsten
ALGORITHMEN - Teil XV : Das Müllen ist des Wandrers Lust
-
-
-
Abt. Geschmacksver(w)irrung
====================
Leider vertragen Header-Dateien keine wie auch immer gearteten Sonderzeichen (außer _ und "(" ). Sonst sähe der Inline-Programmfluss nahezu ungestört aus. Aber so: [Blockierte Grafik: https://data.motor-talk.de/data/galleries/0/47/4022/25892973/smiley-emoticons-doh-6705235385029219795.gif]
GrussCode
Alles anzeigen'--------------ASM40ßSUBST.HD--------------- 'Q: https://defuse.ca/online-x86-assembler.htm ADC_eax_ebx =DH "11D8" ; '-------------- END --------------- '------------STEST.PRF------------- Windowtitle "x86-Befehle nachrüsten" $H C:\Program Files (x86)\XProfanX4alpha\INCLUDE\ASM40ßSUBST.PH CLS ASM "plusCarry",2 mov eax,par1 mov ebx,par2 mov ecx,0 stc 'clc ~adc_eax_ebx ENDASM print hex$(plusCarry($40,$20)) waitinput End '---------END STEST.PRF----------
-
Abt. Weitere Rätsel WR 24: Wenn Murmeln murmeln
====================================Du hast Murmeln in den Farben Rot, Orange, Gelb, Grün, Blau und Violett.
Deren Anzahl bewegt sich zwischen Eins und Neun, jedoch gleicht keine Zahl einer anderen.
Finde heraus, wieviele von jeder Zahl - Dazu gibt es folgende Hinweise:
1) Die Anzahl an Roten plus Gelben plus Violetten gleicht der Zahl der Orangefarbenen plus Grünen plus Blauen.
2) Die Gesamtzahl der Roten plus Orangenen plus Gelben entspricht der Anzahl der Murmeln einer anderen Farbe.
3) Die Anzahlen an Orangenen, grünen und blauen Murmeln sind alle ungerade.
4) Es gibt weniger rote Murmeln als von jeder anderen Farbe.
5) Es gibt zwei Blaue mehr als Grüne.
6) Die violetten Murmeln stellen die größte Anzahl.
Viel Spass!
Gruss
-
Lösung zu WR 24 ´Murmeln´
==================
Das Lösungsprogramm bietet auch die Möglichkeit, sogenannte Sensitivitätsanalysen für die einzelnen Bedingungen zu machen: Wieviele Lösungen entstehen, wenn man eine (oder gleich mehrere) Bedingungen ausschaltet? Dadurch kommt man z.B. drauf, dass Bedingung 6 eigentlich überflüssig ist. Anders als für Computer ist das für die Erkenntnismechanismen des menschlichen Gehirns aber hilfreich. Wir sind halt keine Computer ...
GrussCode
Alles anzeigenWindowTitle "Rätsel WR 24: Wenn Murmeln murmeln" '=============================================== '0. Du wirst ein paar Zwischenvariablen brauchen: cls:font 2:declare Bed1&,Bed2&,Bed3&,Bed4&,Bed5&,Bed6&,rog& 'Du hast Murmeln in den Farben Rot, Orange, Gelb, Grün, Blau und Violett: Declare Rot&, Orange&, Gelb&, Grün&, Blau&, Violett& 'Deren Anzahl bewegt sich zwischen Eins und Neun. (&Loop) ' (case):Jedoch gleicht keine Zahl einer anderen. Bed3&=1 'Ungerade'...Eingearbeitet in Schleifenzähler! Whileloop 9:Rot&=&Loop '3) Die Anzahlen an Orangenen, grünen und blauen Murmeln sind alle ungerade: Whileloop 1,9,2:Orange&=&Loop:case (Orange&=Rot&):continue Whileloop 9:Gelb&=&Loop:case (Gelb&=Orange&) or (Gelb&=Rot&):continue '3) Die Anzahlen an Orangenen, grünen und blauen Murmeln sind alle ungerade: Whileloop 1,9,2:Grün&=&Loop:case (Grün&=Gelb&) or (Grün&=Orange&) or (Grün&=Rot&):continue '3) Die Anzahlen an Orangenen, grünen und blauen Murmeln sind alle ungerade: Whileloop 1,9,2:Blau&=&Loop:case (Blau&=Grün&) or (Blau&=Gelb&) or (Blau&=Orange&) or (Blau&=Rot&):continue Whileloop 9:Violett&=&Loop:case (Violett&=Blau&) or (Violett&=Grün&) or \ (Violett&=Gelb&) or (Violett&=Orange&) or (Violett&=Rot&):continue 'Finde heraus, wieviele von jeder Zahl - Dazu gibt es folgende Hinweise: '1) Die Anzahl an Roten plus Gelben plus Violetten gleicht der Zahl der Orangefarbenen plus Grünen plus Blauen. Bed1& = (Rot&+Gelb&+Violett&)=(Orange&+Grün&+Blau&) '2) Die Gesamtzahl der Roten+Orangenen+Gelben entspricht der Anzahl der Murmeln einer anderen Farbe. rog& = Rot&+Orange&+Gelb& Bed2& = ((rog&=Grün&) or (rog&=Blau&) or (rog&=Violett&)) '4) Es gibt weniger rote Murmeln als von jeder anderen Farbe. Bed4& = (Rot&<Gelb&) and (Rot&<Orange&) and (Rot&<Grün&) and (Rot&<Blau&) and (Rot&<Violett&) '5) Es gibt zwei Blaue mehr als Grüne. Bed5& = (Blau&=(Grün&+2)) '6) Die violetten Murmeln stellen die größte Anzahl. Bed6& = (Violett&>Rot&) and (Violett&>Gelb&) and (Violett&>Orange&) and (Violett&>Grün&) and (Violett&>Blau&) Lösung: IF Bed1& and Bed2& and Bed4& and Bed5& 'and Bed6& print "\n [Rot Orange Gelb Grün Blau Violett] = [", print Rot&, Orange&, Gelb&, Grün&, Blau&, Violett&,"]" sound 500,30 ENDIF 'Viel Spass! Endwhile:Endwhile:Endwhile:Endwhile:Endwhile:Endwhile 'Gruss Print "\n ---":beep:waitinput:end
-
Abt. Weitere Rätsel WR 25: ´Hydrokultur´
===========================
Auf einem See wächst eine schnellwachsende Seerosenart: Jeden Tag verdoppelt sie die bedeckte Oberfläche. An welchem Tag hat sie ein Achtel der Seefläche bedeckt? -
Lösung zu WR 25
===========Spoiler anzeigen
Sei X der Tag, an dem der See völlig zugewachsen ist: Dann hängt X vom Verhältnis der gesamten Seeoberfläche O zur mittleren Oberfläche einer Einzelpflanze E ab gemäß x = Log2(O/E).
Am Tag davor, x-1, war der halbe, am x-2 ein Viertel, an x-3 ein Achtel des Sees zugewachsen.
-
Abt. Weitere Rätsel WR 26 "Brotwächter"
==========================
Vier kämpfende Soldaten essen in 5 Tagen 7 Laibe Brot. Wieviel Brot brauchen dann 16 Wachsoldaten für 15 Tage, wenn ein Wachsoldat nur 3/4 soviel Brot isst wie ein kämpfender? -
Abt. Der ´Heavy_Hitters´ Algorithmus
========================
Der Heavy_Hitters Algorithmus will die Frage klären: Wer ist der (bzw wer sind die) DDoS-Blockierer?
Dazu zählt er die am Server eintrefenden gleichen URI aufwärts, dekrementiert aber (z.B. jeweils zwei) unterschiedliche URI anschließend, d.h.: Er lässt die URIs sozusagen gegeneinander antreten (ev. sogar gewichtet 2:1, 3:1 etc). Übrig bleibt ein "Sieger", meist die DDos-Attackierende(n) URIs.Wichtig ist allerdings, das in einem zweiten Zählvorgang zu verifizieren, da das Ergebnis auch vom Zufall der Reihenfolge des Eintreffens z.B. einer "braven" URI-Addresse abhängen kann. Erst dann wird man die URI automatisch sperren.
GrussP.S.: Für den zweiten Zählvorgang wurde z.B. vorgeschlagen, den Zählerstand des "Siegers" heranzuziehen: Liegt er über 50% der Stichprobe, sind größtenteils (aber nicht 100%ig) ungerechte Sperrungen verhindert. Vorteil: Schneller Test!
-
Abt. Morris Traversal
=============
Der Morris Traversal Algorithmus dient der Memory Leak- bzw. Stack-Overflow Erkennung und -Behebung. Stack Overflow wird ja von Hackern gerne ausgenützt, um root access zu bekommen. Das muss daher verhindert werden.Der Stack des Computers wird von der MMU in modernen Systemen als "stets ausgewogener Rot-Schwarz-Baum" verwaltet. Dennoch gibt es Betriebszustände, die temporär "unbalanced" sind - speziell bei raschen, tiefen Rekursionsalgorithmen. Einfacher Fall: Gibt es zB gerade keine linken Zweige des Rekursionsbaums, dann wird vom Betriebssystem (Oder von der Datenbanksoftware) eine Stackoptimierung vorgenommen, die rekursive Aufrufe in Loops verwandelt. Die Bereinigung wird schneller, und dadurch wird stack overflow verhindert.
Existieren aber linke Zweige, müsste der Prüf- und Bereinigungsalgorithmus sich stets "zuückhangeln", um weitere Zweige zu erreichen. Das dauert quadratisch mit der Baumtiefe - und schon ist der Bereinigungsalgorithmus überlastet (... was den Hacker sehr freut!)
Das Problem der Stackbereinigung wäre also einfacher und schneller lösbar, wenn man Rücksprung-Pointer zurück in die schon besuchten Astgabeln bzw. Wurzel hätte, noch besser aber, wenn man dort schon Zeiger auf die weiteren zu besuchenden Knoten hätte.
Der Morris-Traversal-Algorithmus schafft das elegant, in dem er den schon vorhandenen RECHTEN Pointer eines Zweig-Endes mit dem nächsten zu besuchenden Zweig verlinkt: Er macht die Baumstruktur dadurch zu einer linear abarbeitbaren Liste, wodurch Stacküberlastungen verhindert werden können. Schlaues Teil, was?
GrussP.S.: Gute Algorithmen-Links: CPP-Algorithmensammlung, CPPreference,
Youtube-Vortrag (engl.) zur STL Algorithmensammlung -
Lösung zu WR 26 ´Brotwächter´
--------------------------------------Spoiler anzeigen
15/5 = 3
16/4 = 4
3 * 4 = 12-fach für Kämpfer
12*3/4 = 9-fach für Wächter
Orig.7 * Faktor 9 = 63 Laib Brot
------------------------------------- -
Abt. Morley´s Miracle
==============
Beim ´Morley-Wunder´, entdeckt 1899, handelt es sich um ein Geometrisches Phänomen: Man nehme ein beliebiges Dreieck, teile alle Winkel in Drittel und zeichne Linien vom Eckpunkt über die Drittelungen gegen die Dreiecksmitte. Das "Wunder": In der Mitte ensteht aus den Schnittpunkten gegenüberliegender Linien stets ein REGELMÄSSIGES DREIECK (gleiche Seitenlänge). Das ist beweisbar, aber kaum verstehbar - deshalb "Miracle".
GrussP.S.: Ausprobieren! Verlängert man die Linien weiter, entstehen neun weitere Schnittpunkte, zwischen denen vier weitere gleichseitige Dreiecke entstehen! Ordnung aus dem ´Chaos´?
-
Abt. Matrix aus Excel-CSV mathematisch richtig indexiert einlesen
=========================================
grenzt scheinbar an eine Kunstform: Die mathematisch korrekte Indexierung in einer Matrix lautet bekanntlich M_Zeilenindex,Spaltenindex, und beide Indizes beginnen mit 1. Das wäre auch in XProfan im Prinzip realisierbar, obwohl dann wegen des Beginns bei 0 eine gewisse Platzverschwendung stattfinden würde. Bei berechneten Indizes in Assembler aber wäre das geradezu eine Katastrophe, deshalb wäre ich persönlich geneigt, von Null weg zu indizieren:
Declare M![Zeilenanzahl-1,Spaltenanzahl-1] mit Aufruf M![Zeile-1,Spalte-1]Größere Matrizen schreibt man besser gleich in Excel (oder Calc von OpenOffice) und exportiert diese als CSV mit Spaltentrenner ´|´ und Zeilentrenner (z.B. ´;´). Ein direktes Einlesen wollte mir bisher nicht gelingen, beide Programme verwenden Kompressionsalgorithmen. Beim Einlesen kann man aber wenigstens gleich die Beschreibung in Form von Zeilen- und Spaltenüberschriften loswerden, die bei der Berechnung in XProfan ohnehin nur lästig wären. (Wohlgemerkt, es geht natürlich um Operationen, die das Tabellenprogramm selbst nicht beherrscht, etwa Spannbaumoptimierung etc.)
GrussSpoiler anzeigen
Aus technischen Gründen landen nun die über eine bestimmte konstante Zeile laufende Spaltenindexe (Im Volksmund "Zeilenweises einlesen" genannt) NICHT hintereinander im Speicher! XProfan, aber z.B. auch Pascal und Fortran, halten Arrays SPALTENWEISE im Speicher: Erst wird die ganze Nullte Spalte eingelesen, dann die ganze Spalte 1 usw. Das ist für Assembler GUT, weil die Spaltenelemente dann für Operationen gemeinsam im schellen Cache gehalten werden können.
Die Übersetzung der Indizes in Speicherplatz-Adressen geht dann relativ einfach:
Basisadresse der Statisch definierten Matrix: Addr(M![0,0])
Laufindex = (Mathematischer_Spaltenindex-1)*Zeilenanzahl + (Mathematischher_Zeilenindex-1)
Adressversatz = Laufindex * 8Umgekehrt:
Mathematischer_Spaltenindex = Laufindex \ Zeilenanzahl + 1
Mathematischer_Zeilenindex = (Laufindex mod Zeilenanzahl) + 1
P.S.: Ach ja, hier das Programm:Code
Alles anzeigenWindowTitle "Excel-Matrix.CSV-Export mathematisch korrekt indexiert einlesen" WindowStyle 24:CLS:font 2 Declare data$,tst$[],zl$[],n&,m& data$="Tabelle|Über B1|Über C1|Über D1;"+\ "Seite A1|11|12|13;"+\ "Seite A2|21|22|23;"+\ "Seite A3|31|32|33;"+\ "Seite A4|41|42|43;"+\ "Seite A5|51|52|53" tst$[]=explode(data$,";"):n&=sizeof(tst$[])-1 clear zl$[]:zl$[]=Explode(tst$[1],"|"):m&=sizeof(zl$[])-1 declare M![n&-1,m&-1],i&,j& whileloop 0,n&-1:i&=&Loop clear zl$[]:zl$[]=Explode(tst$[i&+1],"|"):m&=sizeof(zl$[])-1 whileloop 0,m&-1:j&=&Loop M![i&,j&]=val(zl$[j&+1]) endwhile endwhile Set("Decimals",1) print "Numerischen Teil als Float ";n&;" X ";m&;"-Matrix eingelesen:\n" Whileloop 0,n&-1:i&=&Loop whileloop 0,m&-1:j&=&Loop Print M![i&,j&], endwhile:print endwhile:print waitinput end
-
Abt. Der PAC-MAN Algorithmus
===================
Eine sehr frühe Form von ´Künstlicher Intelligenz´ wurde beim Original des bekannten Spieles PAC-MAN realisiert. Dabei folgt jeder der ´Geister´ einer eigenen Bewegungsstrategie, die in diesem Youtube-Video (engl.) ausführlich erklärt wird. Faszinierend, aber bitte nicht nachprogrammieren! Fa. NAMCO ist da sehr empfiindlich!
GrussP.S.: Die Bewegungsmuster kann man hier studieren.
-
Abt. Lineare Dichte ganzzahliger Hochzahlergebnisse
=================================
Erst 2002, nach 150 Jahren, bewies Preda Mihailescu, deutsch-rumänischer Mathematiker, die Catalan´sche Vermutung (aufgestellt 1844 vom belgischen Mathematiker Eugene Charles Catalan), dass nämlich 3^2=9 und 2^3=8 die einzigen ganzzahligen Hochzahl-Ergebnisse sind, zwischen denen keine Lücke liegt (= deren Differenz 1 ist). Ähnliche Fragestellungen in der Zahlentheorie wurden in Europa bereits im 12. Jahrhundert behandelt - Gut Ding braucht eben Weile!
GrussP.S.: Die Ergebnisleiste beginnt mit: 1,4,8,9,16,25,27,32,36,49,...
(nämlich 1^1, 2^2, 2^3, 3^2, 2^4=4^2, 5^2, 3^3, 2^5, 6^2, 7^2, ...) -
Abt. Weitere Rätsel WR 27
=================
[Blockierte Grafik: http://members.aon.at/startup/x86_10-2017_90x91.gif]
In diesem GIF-Bild versteckt sich als RAW 90 x 91 Greyscalebytes abgespeichert ein mittels 7zip im GZ-Format (gzip)ter ASCII-Text (Windows .txt). Wer schafft es, die darin dargestellten 620 modernen x86-Befehle und deren Kurzbeschreibungen bei sich daheim sichtbar zu machen?
Die Testfrage lautet: Wie lautet der 16. Befehl
GrussP.S.: Sich von 0-Byte Meldungen nicht beirren lassen!
-
Abt. Beam me up, Scottie!
====================
Wer sich das Programm "ALGORITHMEN-Gesamtverzeichnis" aus Kapitel XIV/Beitrag 268 ("14__268") geholt hat, erfährt nach der Eingabe eines Suchbegriffes, in welchen Kapiteln und Beiträgen der "ALGORITHMEN"-Serie dieser Begriff vorkommt. Danach beginnt üblicherweise die relativ komplizierte Suche nach dem entsprechenden Beitrag im Forum.
Das folgende Progi vereinfacht diesen Prozess: Nach Eingabe des entsprechenden Kapitel/Seitencodes in der Form 00_000 öffnet das Programm die ensprechende Forums-Seite (enhält jeweils 20 Beiträge), die den gesuchten Beitrag enthält.
GrussP.S.: Bei älteren Beiträgen gab es mal eine Forums-Umstellung, sodaß ein Versatz der Beitragsnummer um 1 auftreten kann - Sorry, muß erst rauskriegen ab wann dieser Fehler auftritt. Eine spätere Programmversion wird das korrieren.
Code
Alles anzeigenWindowTitle "USER ZU ALGORITHMEN-KOLUMNE BEAMEN" Windowstyle 24:font 1:randomize:Cls rgb(200+rnd(56),200+rnd(56),200+rnd(56)) print:declare pre$,ref$[20],spec$,page$,sep$,cmd$,strg$ Start: pre$="https://www.paules-pc-forum.de/forum/thread/":sep$="__" spec$="/?pageNo=" ref$[20]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[19]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[18]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[17]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[16]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[15]="182578-algorithmen-teil-xv-das-m%C3%BCllen-ist-des-wandrers-lust" ref$[14]="181010-algorithmen-teil-xiv-jetzt-noch-irrer" ref$[13]="178809-algorithmen-und-anderes-zeug-teil-xiii" ref$[12]="177999-algorithmen-teil-xii-cogito-errare-est" ref$[11]="176290-algorithmen-teil-xi-genaue-planung-ersetzt-zufall-durch-irrtum/" ref$[10]="169601-algorithmen-teil-x-das-hat-uns-noch-gefehlt" ref$[9]="165777-algorithmen-teil-ix-computer-und-andere-haustiere" ref$[8]="164191-algorithmen-teil-viii-ein-bug-kommt-selten-allein" ref$[7]="160383-algorithmen-teil-vii-das-andere-m%C3%BCllspiel" ref$[6]="154195-algorithmen-teil-vi-der-ganz-normale-wahnsinn" ref$[5]="148495-algorithmen-teil-v-mathe-wahnsinn-co" ref$[4]="144226-algorithmen-teil-iv-software-spielereien" ref$[3]="141961-%C3%BCberfl%C3%BCssige-algorithmen-teil-iii-programme-die-die-welt-nicht-braucht" ref$[2]="140561-%C3%BCberfl%C3%BCssige-algorithmen-teil-ii-experimentalprogramme" ref$[1]="118421-%C3%BCberfl%C3%BCssige-algorithmen-programmierabfall" ref$[0]="118421-%C3%BCberfl%C3%BCssige-algorithmen-programmierabfall" Print " "+chr$(34)+"Algorithmen"+chr$(34)+"-Kapitelnummer __ Beitrag, [01__001]: "; input cmd$:case cmd$="":cmd$="15_001" page$="" if len(cmd$)>2 if (mid$(cmd$,len(cmd$),1)>"0") and (mid$(cmd$,len(cmd$),1)<="9") page$=mid$(cmd$,len(cmd$),1) else: page$="001":goto "weiter" endif if (mid$(cmd$,len(cmd$)-1,1)>="0") and (mid$(cmd$,len(cmd$)-1,1)<="9") page$=mid$(cmd$,len(cmd$)-1,1)+page$ else :goto "weiter" endif if (mid$(cmd$,len(cmd$)-2,1)>="0") and (mid$(cmd$,len(cmd$)-2,1)<="9") page$=mid$(cmd$,len(cmd$)-2,1)+page$ else: goto "weiter" endif else: page$="001" endif weiter: strg$=pre$+ref$[val(left$(cmd$,2))]+spec$+format$("000",(val(page$)-1)/20+1) print print chr$(34)+"C:\\Program Files (x86)\\Mozilla Firefox"+chr$(34)+" "+chr$(34)+strg$+chr$(34) print if ShellExec(strg$,"open",3) waitinput 5000 end else beep print "\n Hoppla, da stimmt was nicht ...\n" goto "Start" endif END
-
wird das korrieren.
kurieren
-
korrigieren (sorry, Typo)
P.S.: Hat denn wirklich niemand das GIF decodiert?
-
Lösung zu WR 26 (Falls es doch wer schafft):
--------------------------------------------------Spoiler anzeigen
Der 16. Befehl lautete
AESDECLAST : Perform Last Round of an AES Decryption Flow -
Abt. Weltformel der materiellen Physik
------------------------------------
Alle viel Grundkräfte und sämtliche Materieteilchen, die das Geschehen in unserer Ecke des Universums ausmachen, sind in folgender (mir reichlich unverständlicher) Formel zusammengeführt:
[Blockierte Grafik: http://members.aon.at/startup/MateriellePhysik.gif]
Die einzelnen Teilchen folgen einem Bezeichnungsschema, das folgende Kriterien aufweist:
[Blockierte Grafik: http://members.aon.at/startup/Carroll-Chart.gif]
Die mit 2. und 3. Generation bezeichneten Teilchen (bis auf die Neutrinos) sind jeweils um den Faktor ca. 200 schwerer als die vorige Generation, diese Teilchen sind aber derzeit nur bei CERN beobachtbar.Wollt ich nur mal gesagt haben .
GrussP.S. Quelle: Öffentlicher Youtube-Vortrag
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!