Kleiner Denksport- (und Logik?-) Thread

Rätsel und Online-Spiele im Forum
Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28750
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Kleiner Denksport- (und Logik?-) Thread

#821

Beitrag von FireBird » Mo 22. Okt 2012, 18:27

Deine Lebenserfahrungen sind bei dem Test nicht gefragt. :wink:

Benutzeravatar
TV-Junkie
Alteingesessener
Alteingesessener
Beiträge: 28022
Registriert: Sa 16. Jun 2007, 19:10
Receivertyp: VU+ Duo4K, Ultimo4K und Uno4KSE
Receiverfirmware: VTI 15.xx ausser der Uno 4K SE
Wohnort: Düsseldorf

AW: Kleiner Denksport- (und Logik?-) Thread

#822

Beitrag von TV-Junkie » Mo 22. Okt 2012, 18:41

Och schade, ich dachte, ich könnte mal was sinnvolles Beitragen :und_weg:
Gruß Ha-Jü
----------------------------------------------------------------------------------------------
Zum Tippspiel BuLi 2019/2020 hier entlang
Und wer Lust auf tippen beim DFB Pokal hat, darf sich hier austoben
Viel Spaß

Sat-Anlage: Astro CAS 90 mit Kathrein UAS 584 LNB (20Jahre alt und noch immer Top in Schuss :D ), Jultec JPS0506-8T Unicable Multischalter sowie UM/VF West Kabelanschluß
Installierte Plugins:OScam (incl OScam-Butler), LV4, SmartEPG VU+, ansonsten nix, was VTI nicht schon selbst mitbringt :)

Benutzeravatar
Anthea
Boarddoktor

<div title=Kreativer Administrator><b>Boarddoktor</b></div>
Beiträge: 10662
Registriert: Mo 5. Dez 2005, 13:15
Receivertyp: TF7700HDPVR, SRP-2100, SRP-2410CI+Eco
Receiverfirmware: aktuell :)
Wohnort: Fürth
Kontaktdaten:

AW: Kleiner Denksport- (und Logik?-) Thread

#823

Beitrag von Anthea » Mo 22. Okt 2012, 21:39

Die Gegenstände sind nur zufällig gewählte Namen für irgendetwas. Völlig Realitätsfern, wie jede reine Logik ;)

Benutzeravatar
alex
Typographisch harmonysierter Selbstreiniger

<div title=Prof. Dr. h. c. Cäs... Alex>Typographisch harmonysierter Selbstreiniger</div>
Beiträge: 2284
Registriert: Do 15. Dez 2005, 16:10
Receivertyp: SRP-2410
Receiverfirmware: 1.08.01 vom 29.09.11
Wohnort: Bischweier

AW: Kleiner Denksport- (und Logik?-) Thread

#824

Beitrag von alex » Di 23. Okt 2012, 10:08

Anthea hat geschrieben:dementsprechend kann man über 6 genauso diskutieren.


Stimmt, war mir noch gar nicht aufgefallen. In jedem Fall bin ich beruhigt, dass du das mit 3 und 9 genauso siehst. Ich hab es jedenfalls nicht geschafft, die (allesamt "logisch" nicht vorbelasteten) Mitdiskutierer davon zu überzeugen, dass die Musterlösung an dieser Stelle nicht korrekt ist. Selbst ein praktisches Gegebeispiel mit Glas- und Kunststoffflaschen hat nicht geholfen :rolleyes:
Alex

HD unbedingt, aber HD+ könnt ihr behalten.

Topfield SRP-2410, LG 55EF950V, Panasonic DMP-BDT220, Dune HD Solo Lite, Onkyo TX-NR545 + Canton Movie Set (AV 700, 2× Plus XL, 2× Plus X, AS 25 SC), Logitech Harmony 555, Fire TV Stick 4K Max
AS-TAPs: PowerRestore, IQTuner, FastSkip
2× SRP-2401CI+ Eco

karlek
Super-Freak
Super-Freak
Beiträge: 3767
Registriert: Do 27. Aug 2009, 23:32
Receivertyp: TF5500PVR (506) [STUPIDsEB2]
TF7750 (E2)
Receiverfirmware: 03.01.2007
Wohnort: BW

AW: Kleiner Denksport- (und Logik?-) Thread

#825

Beitrag von karlek » Di 23. Okt 2012, 17:09

Ich hätte es ja mit Mengenlehre versucht.
Am Beispiel 3)

- Die Menge der Zangen ist eine Teilmenge der Künstler. (Alle Frauen sind Menschen.)
- die Menge der nicht malen könnenden Künstler ist ebenso eine Teilmenge der Künstler.
(Manche Menschen können nicht Auto fahren.)
Sind die beiden Mengen disjunkt, ist die Aussage (Also können Frauen nicht Auto fahren.) falsch.
Receiver: 5500PVR mit WD3200AVJB, 7750HDPVR mit WDC WD10EADS-00L, 6000Fe
TAPs: Deselect v1.1 ° AutoReboot V2.2a ° Power Restore V0.7.6 ° AutoDST / 3PG V0.3 ° Automove V1.9 [60] ° SmartCut 01.03.11 (4) ° Nice Display 2.1 ° 3PG 1.29(rc4) ° Euro-Stirf v1.32 ° Radiotext 0.56 ° Filer v2.31 ° WSSkiller V2.12d ° SDS V1.3e ° Standby v1.8
Samsung UE 40 B6000
PS3
Harmony 555

Benutzeravatar
TV-Junkie
Alteingesessener
Alteingesessener
Beiträge: 28022
Registriert: Sa 16. Jun 2007, 19:10
Receivertyp: VU+ Duo4K, Ultimo4K und Uno4KSE
Receiverfirmware: VTI 15.xx ausser der Uno 4K SE
Wohnort: Düsseldorf

AW: Kleiner Denksport- (und Logik?-) Thread

#826

Beitrag von TV-Junkie » Di 23. Okt 2012, 17:13

karlek hat geschrieben:Ich hätte es ja mit Mengenlehre versucht.
Am Beispiel 3)

- Die Menge der Zangen ist eine Teilmenge der Künstler. (Alle Frauen sind Menschen.)
- die Menge der nicht malen könnenden Künstler ist ebenso eine Teilmenge der Künstler.
(Manche Menschen können nicht Auto fahren.)
Sind die beiden Mengen disjunkt, ist die Aussage (Also können Frauen nicht Auto fahren.) falsch.

soll ich da wieder von meiner Lebenserfahrung berichten :u: :und_weg:
Ne, ich lasse es mal :angel:
Gruß Ha-Jü
----------------------------------------------------------------------------------------------
Zum Tippspiel BuLi 2019/2020 hier entlang
Und wer Lust auf tippen beim DFB Pokal hat, darf sich hier austoben
Viel Spaß

Sat-Anlage: Astro CAS 90 mit Kathrein UAS 584 LNB (20Jahre alt und noch immer Top in Schuss :D ), Jultec JPS0506-8T Unicable Multischalter sowie UM/VF West Kabelanschluß
Installierte Plugins:OScam (incl OScam-Butler), LV4, SmartEPG VU+, ansonsten nix, was VTI nicht schon selbst mitbringt :)

Benutzeravatar
ewgh
Ex-Downgraded to 224 Postings
Ex-Downgraded to 224 Postings
Beiträge: 11063
Registriert: Fr 9. Dez 2005, 13:07
Wohnort: CH-8592

AW: Kleiner Denksport- (und Logik?-) Thread

#827

Beitrag von ewgh » Mi 24. Okt 2012, 14:50

Ich verstehe die Argumentationen z.T. nicht. Anthea sagt:
Über 3 kann man diskutieren. ...
Bei diesen "Logikspielereinen" handelt es sich um Folgerungen. Diese sind zwingend richtig oder falsch; ein "Könnte-sein" hat keinen Platz.

zu 3:

"Einige Vögel sind Schraubenzieher. Einige Schraubenzieher spielen Flöte. Also spielen einige
Vögel Flöte."

"Einige Vögel" impliziert, dass es Vögel gibt, welche die Schraubenzieher-Eigenschaft besitzen. Die Schnittmenge zwischen der Menge der Vögel und der Menge der Schraubenzieher ist also nicht leer.
Die gleiche Überlegung gilt für die Menge der Vögel und die Menge der Flötisten.

Da die beiden Schnittmengen disjunkt (siehe karlek) sein können, ist die Folgerung falsch!

Ähnliche Überlegungen gibt es auch für andere dieser Folgerungen.


zu 2:

"Alle Stöcke lieben Hunde"

Was ist hier Subjekt, was Objekt?!

Doch, unabhängig davon, gibt es auch hier entweder ein wahr oder falsch!
Gruss
ewgh

Benutzeravatar
alex
Typographisch harmonysierter Selbstreiniger

<div title=Prof. Dr. h. c. Cäs... Alex>Typographisch harmonysierter Selbstreiniger</div>
Beiträge: 2284
Registriert: Do 15. Dez 2005, 16:10
Receivertyp: SRP-2410
Receiverfirmware: 1.08.01 vom 29.09.11
Wohnort: Bischweier

AW: Kleiner Denksport- (und Logik?-) Thread

#828

Beitrag von alex » Mi 24. Okt 2012, 17:33

[quote="ewgh"]gibt es auch hier entweder ein wahr oder falsch![/quote]

Stimmt, die c)-Antworten sind alle überflüssig. Was sind denn bitte immer die "beiden Antworten" von denen da die Rede ist? Es gibt immer zwei Bedingungen und eine Schlussfolgerung, letztere kann dann falsch oder richtig sein.
Alex

HD unbedingt, aber HD+ könnt ihr behalten.

Topfield SRP-2410, LG 55EF950V, Panasonic DMP-BDT220, Dune HD Solo Lite, Onkyo TX-NR545 + Canton Movie Set (AV 700, 2× Plus XL, 2× Plus X, AS 25 SC), Logitech Harmony 555, Fire TV Stick 4K Max
AS-TAPs: PowerRestore, IQTuner, FastSkip
2× SRP-2401CI+ Eco

Benutzeravatar
ewgh
Ex-Downgraded to 224 Postings
Ex-Downgraded to 224 Postings
Beiträge: 11063
Registriert: Fr 9. Dez 2005, 13:07
Wohnort: CH-8592

AW: Kleiner Denksport- (und Logik?-) Thread

#829

Beitrag von ewgh » Mi 24. Okt 2012, 17:41

Was sind denn bitte immer die "beiden Antworten" von denen da die Rede ist? Es gibt immer zwei Bedingungen und eine Schlussfolgerung, letztere kann dann falsch oder richtig sein.
Antwort 1: wahr
Antwort 2: falsch ;)

NB:

Ich hab' nochmals nachgesehn. Richtigerweise müsste ich schreiben:

Antwort 1: stimmt
Antwort 2: stimmt nicht
Zuletzt geändert von ewgh am Mi 24. Okt 2012, 17:52, insgesamt 1-mal geändert.
Grund: NB
Gruss
ewgh

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#830

Beitrag von hagge » Do 15. Nov 2012, 10:55

Mal eine kleine Programmierknobelaufgabe.

Gesucht ist eine Funktion (in C), die in einem String alle führenden Slashes und alle führenden einzelnen Punkte überspringt, wenn diese von Slashes gefolgt werden, und den Reststring zurückgibt. So etwas kommt zum Beispiel beim Parsen von Pfadnamen vor.

Das Ganze soll so effizient wie möglich sein, also möglichst keine doppelten Auswertungen. Ein Zugriff auf den String gilt somit als "teuer" (langsamer Speicherzugriff) und soll möglichst nicht mehrfach auf das gleiche Zeichen erfolgen. Lokale Variablen sind "billig" (schnelle Prozessorregisterzugriffe) und können beliebig genutzt werden. Dass der Compiler ggf. von sich aus mehrfache Speicherzugriffe wegoptimieren kann, soll hier mal vernachlässigt werden. Es soll also schon vom C-Code aus möglichst optimal sein.

Beispiele:

Code: Alles auswählen

1.  ///abc/def      --> abc/def         führende Slashes entfernen
2.  ./abc/def       --> abc/def         führende einzelne Punkte entfernen
3.  .abc/def        --> .abc/def        aber nur wenn sie zwischen Slashes stehen
4.  ./abc//./def    --> abc//./def      Nur am Anfang entfernen
5.  /.//././abc/def --> abc/def         Auch beliebige Mischungen müssen wegfallen
6.  /./.abc/def     --> .abc/def        Hier darf der Punkt vor abc nicht wegfallen
7.  /./.././abc/def --> .././abc/def    Mehrfache Punkte müssen auch bleiben 
8.  .////.          --> (leerer String) Ein Punkt kann auch am Ende des Strings stehen
9.  ./////          --> (leerer String) ebenso ein Slash
Klingt einfach? Dachte ich auch. Bis ich nach einer halben Stunde immer noch keine so wirklich elegante Lösung hatte. Also probiert es mal aus. Hier als Beispiel die Funktion, wenn man nur alle führenden Slashes entfernen wollte, das wäre in der Tat einfach.

Code: Alles auswählen

char *skip(char *p)
{
    while (*p == '/')
        p++;

    return p;
}
Der zweite Teil mit dem Punkt und die Effizienzanforderung machen das Ganze kompliziert.

Anmerkung: Wie in C üblich ist der String mit einem 0-Byte abgeschlossen.

Gruß,

Hagge
Zuletzt geändert von hagge am Do 15. Nov 2012, 11:09, insgesamt 6-mal geändert.

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28750
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Kleiner Denksport- (und Logik?-) Thread

#831

Beitrag von FireBird » Do 15. Nov 2012, 12:14

Zumindest liefert das folgende das von Dir gewünschte Ergebnis. Ob es Dir aber gefällt... :wink:

Code: Alles auswählen

char *skip(char *p)
{
    while((*p == '/') || (p[0] == '.' && (p[1] == '/' || p[1] == '\0')))
        p++;

    return p;
}
Man könnte p[0] und p[1] noch in zwei lokale Var schreiben, dann gibt es jeden Speicherzugriff nur ein Mal.

Code: Alles auswählen

char *skip(char *p)
{
  char a, b;

  while(((a = *p) == '/') || (a == '.' && ((b = p[1]) == '/' || b == '\0')))
    p++;

  return p;
}
Zuletzt geändert von FireBird am Do 15. Nov 2012, 12:18, insgesamt 2-mal geändert.

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#832

Beitrag von hagge » Do 15. Nov 2012, 12:20

Schon mal ein guter Ansatz. Das mit den beiden Variablen wäre dann der nächste Schritt (ah, OK, sehe gerade dass Du nacheditiert hast).

Was hier aber noch ein Problem ist, ist dass ein Slash hinter einem Punkt im nächsten Schleifendurchlauf nochmal ausgewertet wird, also insgesamt zweimal.

Hagge
Zuletzt geändert von hagge am Do 15. Nov 2012, 12:28, insgesamt 3-mal geändert.

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28750
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Kleiner Denksport- (und Logik?-) Thread

#833

Beitrag von FireBird » Do 15. Nov 2012, 12:21

Die optimierte Routine wurde noch nacheditiert.

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28750
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Kleiner Denksport- (und Logik?-) Thread

#834

Beitrag von FireBird » Do 15. Nov 2012, 12:30

Irgendwelche Doppelzugriffe wird man nicht verhindern können. Hier sorgt die innere Schleife für den Sonderfall "Mehrere-Slashes" für ein schnelles Incrementierens des Pointers.

Code: Alles auswählen

char *skip(char *p)
{
  char a, b;

  while(((a = *p) == '/') || (a == '.' && ((b = p[1]) == '/' || b == '\0')))
  {
    if(a == '/')
      while(p[1] == '/')
        p++;
    p++;
  }

  return p;
}

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#835

Beitrag von hagge » Do 15. Nov 2012, 12:37

FireBird hat geschrieben:Irgendwelche Doppelzugriffe wird man nicht verhindern können.

Ah, jetzt dringst Du langsam zum eigentlichen Problem der Aufgabe durch. :) Doch, es geht.

Hagge

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28750
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Kleiner Denksport- (und Logik?-) Thread

#836

Beitrag von FireBird » Do 15. Nov 2012, 12:47

Ich ändere meine Behauptung. :) Wenn a == '/' ist, dann wird der zweite Teil der äusseren while-Schleifenabfrage - und somit das p[1] - nicht mehr ausgeführt. Damit gibt es auch keinen Doppelzugriff auf die selbe Speicherstelle. Das fällt sicher nicht unter Deine Compiler-Optimierungsregel :wink: .
Zuletzt geändert von FireBird am Do 15. Nov 2012, 12:52, insgesamt 2-mal geändert.

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#837

Beitrag von hagge » Do 15. Nov 2012, 13:00

Ok, wieder etwas besser. Zwei Dinge stören mich noch: einmal wird das a zweimal auf Gleichheit mit '/' abgefragt, was zwar laut meiner Bedingungen erlaubt wäre, was man aber auch noch vermeiden kann. Aber das wichtigere ist, dass in Deiner Version eine '\0' hinter einem Punkt immer noch zweimal abgefragt wird, nämlich nochmal im nächsten Schleifendurchlauf.

Edit: halt stopp, Deine Änderung löst das Problem mit der doppelten Auswertung von / hinter einem Punkt ja auch noch nicht. Wenn man ./ im String hat, dann erkennt die äußere while-Schleife das und geht in die Schleife rein, aber da das erste Zeichen ja kein / ist, wird p einfach nur um 1 erhöht. Somit wird das / im nächsten Schritt nochmal neu abgefragt.

Hagge
Zuletzt geändert von hagge am Do 15. Nov 2012, 14:11, insgesamt 1-mal geändert.

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#838

Beitrag von hagge » Do 15. Nov 2012, 14:27

Auch bei mir Kommando zurück. Diese neue Version von Dir ist *nicht* besser. Je länger ich es mir überlege ist die innere Schleife bei Deiner letzten Version völlig unnötig da und verlangsamt alles nur. Denn genau wie Du sagst wird die while-Bedingung kurz ausgewertet, also nur der Vergleich von a mit / ausgeführt, wenn a tatsächlich ein / enthält. Dann war der vorherige Teil, der einfach in der Schleife nur p inkrementiert hat, schneller als jetzt eine zusätzliche Abfrage mit der inneren Schleife.

Beispiel: ////

vorheriger Ablauf ohne innere Schleife:
if ((a = *p)=='/'), p++, if ((a = *p)=='/'), p++, if ((a = *p)=='/'), p++, if ((a = *p)=='/'), p++, if ((a = *p)=='/'), return p

jetziger Ablauf mit innerer Schleife:
if ((a = *p)=='/'), if (a=='/'), if (p[1]=='/'), p++, if (p[1]=='/'), p++, if (p[1]=='/'), p++, p++, if ((a = *p)=='/'), return p

Vorher: 5 Vergleiche, jetzt: 6 Vergleiche. Insofern: diese Optimierung ist gar keine.

Hagge

Benutzeravatar
hagge
Jung-Guru
Jung-Guru
Beiträge: 1921
Registriert: Fr 9. Dez 2005, 15:43
Receivertyp: SRP-2401CI+, TF5000PVR
Wohnort: Stuttgart

AW: Kleiner Denksport- (und Logik?-) Thread

#839

Beitrag von hagge » Fr 16. Nov 2012, 09:24

Na, will noch jemand anders ran oder soll ich auflösen?

Hagge

Benutzeravatar
Anthea
Boarddoktor

<div title=Kreativer Administrator><b>Boarddoktor</b></div>
Beiträge: 10662
Registriert: Mo 5. Dez 2005, 13:15
Receivertyp: TF7700HDPVR, SRP-2100, SRP-2410CI+Eco
Receiverfirmware: aktuell :)
Wohnort: Fürth
Kontaktdaten:

AW: Kleiner Denksport- (und Logik?-) Thread

#840

Beitrag von Anthea » Fr 16. Nov 2012, 10:10

Hm.

Code: Alles auswählen

char *skip ( char *p)
{
  int source=0;
  while(1)
  {
    switch(p[source])
    {
      case '.':
      case '/':
        break;
      default:
        return &p[source];
    }
    source++;
  }
}
Zuletzt geändert von Anthea am Fr 16. Nov 2012, 10:14, insgesamt 1-mal geändert.

Antworten

Zurück zu „Spielereien“