unterschiedlich lange Wörter gleichmäßig in X Zeilen ausgeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • unterschiedlich lange Wörter gleichmäßig in X Zeilen ausgeben

    Hallo,

    ein Array mit einzelnen, unterschiedlich langen Wörtern, steht zur Verfügung.

    Code:
    Array ( [0] => It [1] => PageMaker [2] => Not [3] => Aldus [4] => Electronic 
    [5] => Scrambled [6] => To [7] => Lorem [8] => The [9] => Of [10] => Recently [11] => Type 
    [12] => Book. [13] => Took [14] => Software [15] => Lorem [16] => Unknown [17] => Since 
    [18] => Only [19] => The [20] => Was [21] => Ipsum. [22] => Survived [23] => Five [24] => And 
    [25] => With [26] => Been [27] => Is [28] => The [29] => Lorem [30] => More 
    [31] => Ipsum [32] => It [33] => Ipsum [34] => Centuries, [35] => Ever [36] => Also ); // usw.
    Jetzt suche ich eine Funktion, die bei Übergabe von dem Array und einem Integer $anzahl_zeilen, mir die Wörter "gleichmäßig" (aber in beliebiger Reihenfolge!) in $anzahl_zeilen Zeilen ausgibt. Dabei brauchen (sollen) keine Leerzeilen zwischen den Wörtern stehen.

    Also angenommen, ich will 3 gleichmäßige Zeilen haben, dann könnte die Ausgabe z. B. etwa so sein (bei einem verkürzten Array von oben):
    Code:
    ScrambledTheOfIt
    FiveWithBeenAlso
    MoreCenturiesNot
    Jedoch sollen alle Wörter verwendet werden! Falls es nicht ganz aufgeht gleichmäßige Zeilen zu erzeugen, macht es auch nichts, wenn irgendwo ein Zeichen mehr ist.

    Wer kann mir da helfen? Hat jemand einen Ansatz für mich?


    Also wie ich die Anzahl aller Zeichen des Arrays rankomme, ist mir klar. Dann kann ich durch $anzahl_zeilen teilen und erhalte die Anzahl an Zeichen, die in jeder Zeile stehen sollten. Aber was bringt mir das dann? Wie kann ich das auf das Array "anwenden"?

    edit: Innerhalb eines Wortes soll natürlich nicht umgebrochen werden.
    Zuletzt geändert von Boron; 09.09.2008, 01:29.

  • #2
    Jetzt suche ich eine Funktion,
    Die wird es nicht geben.

    Wer kann mir da helfen? Hat jemand einen Ansatz für mich?
    Mich wundert, dass du nicht erstmal mit einem eigenen Ansatz kommst.

    Also für das Problem gibt es sicher schon algos, eine Möglichkeit die ich mir vorstellen könnte, ist die folgende:

    Wörter der länge nach in arrays packen:

    $words[2] = array(0 => 'It', 6=> 'To');
    $words[3] = array(2=> 'Not');
    ...

    Und dann ballerst du die von lang nach kurz raus.

    Hat zunächst den Nachteil, dass oben links die langen wörter stehen und unten rechts die kurzen.

    Wenn das relevant ist, dann kann aber natürlich zeilenweise noch mal kräftig durchmischen. Und wenn es noch ausgeglichener sein soll, dann verteilst du die Wörter halt einzeln, immer ein Wort pro Zeile.

    Denkbar wäre auch, dass man von klein nach groß die Wörter verteilt und ggf. zwei Wörter durch ein größeres ersetzt.

    Oder oder oder...

    Du hast keine Angabe darüber gemacht, wie oft ein Wort verwendet werden darf. Das eröffnet natürlich weitere Möglichkeiten.

    Da sich mir der Sinn des ganzen noch nicht erschließt, investiere ich jetzt erstmal nichts mehr in diese Spielerei.

    Ansätze hast du jetzt erstmal. Da kannst du sicher noch experimentieren. Ich verschiebe auch mal nach BS, denn ein PHP-Problem ist hier wirklich nicht zu erkennen.

    Kommentar


    • #3
      Eine Möglichkeit:

      aus Wikipedia
      Als Ozonloch wird eine ungewöhnlich starke, geographisch abgegrenzte Abnahme der Ozonschicht bezeichnet, die auf chemischen Abbauprozessen beruht. Das Ozonloch wurde Ende der 1970er Jahre zunächst nur über der Südpolarregion, später auch über der Nordpolarregion beobachtet. Natürliche geringfügige Schwankungen in der Ozonschicht, die vermutlich durch die Sonnenaktivität hervorgerufen werden, sind schon länger bekannt.
      wird zu:

      Code:
      NordpolarregionSonnenaktivitätstarke
      AbbauprozessenSüdpolarregionOzonloch
      hervorgerufenungewöhnlichabgegrenzte
      geographischgeringfügigeSchwankungen
      OzonschichtOzonschichtbezeichnetwird
      chemischenbeobachtetNatürlicheberuht
      vermutlichOzonlochzunächstAbnahmeAls
      bekannt1970erspäterwerdenlängerwurde
      JahredurchschoneineEndeüberauchüber
      sindderdieaufDasdernurderderderdiein
      Ist jetzt ungemischt. Und auch mit nord-süd-Gefälle. Habe ja beschrieben, wie man es vermeiden kann.

      Kommentar


      • #4
        Danke!

        Wörter nach Länge sortieren ist echt ne gute Idee, allerdings würd ich sie dann zeilenweise ausgeben bzw. erstmal in ein Array packen, dann kann man später innerhalb einer Zeile nochmal die Wörter mischen. Jedes Wort sollte auch nur einmal verwenden werden, aber auch alle Wörter.

        Es war in der Tat nur eine Spielerei.

        Ich wollte ein CD Cover erstellen, bei dem Künstlernamen und Songtitel wild durcheinander gemischt werden. Aber richtig wild. Also jedes Wort wird hergenommen und irgendwo reingewürfelt.

        Code:
        $songs = array(
                array('artist' => 'Carl Douglas', 'title' => 'Kung Fu Fighting'),
                array('artist' => 'The Rolling Stones', 'title' => 'I Can\'t Get No Satisfaction'),
                // usw.
                      );
        Aber ich hab das Cover jetzt doch manuell erstellt, da ich schnell eingesehen habe, dass der Programmieraufwand doch sehr groß ist



        Wer Lust am Rätseln hat, kann ja mal versuchen, alle 37 Songtitel (eigtl. alles sehr bekannte Lieder) aus diesem Textknäuel herauszufinden:

        TalkingNur...MenkeTearsBlueTwistBeKungWhoTanita
        StelterBlitzTheDreamsOfSatisfaction&PurpleLoveIRain
        OnStephanFireIchSmokeNurFräuleinJimiTheTretboot
        EinDavisSternenhimmelAshfordToMarkusGeneration
        DeepCan'tPureInMyJ.WorldToAthenRollingEurythmics
        SobrietyWorryCommonPaulNuAufDoorsGoldenerThe
        HaareForPrinceMr.ThunderstruckMadJoachimCarnes
        BobbyDerInBruttosozialproduktFearsCan'tFightingIm
        BallroomSturzflugSkandalAmHighwayInHallUKWDoor
        FuSweetGetHappyKahDon't99BerndISommersprossen
        LivingEyesGeierDieCarlAllesManeaterPrinzenRemmler
        TheLebenNextTikaramLightGeklautSmokieHubertAlice
        ModernBlockbusterShoozGeilsNenaWaitSweetNacht3
        HatLustHellReiterAC/DCWittKeineHendrixHab'IchBand
        YoungDerSpiderPurpleCentrefoldPurple&TheSkyWater
        SolidOatesBrustPeopleReiterVogelMcFerrinGangBette
        SimpsonNoDouglasMySterneSeenotMySperrbezirkKim
        LuftballonsHazeAllesStonesSpaßWillMurphyEnde
        Ja, hier wurden wirklich alle Wörter zerpflückt, Interpreten und Titel.

        Interpreten wurden max. einmal genannt!
        Nochn Hinweis: Obwohl es alles sehr bekannte Lieder sind, sollte man sich vorstellen, dass es zwei CDs sind

        Bitte nichts zum Musikgeschmack sagen, diese Zusammenstellung ist für jemand ganz besonderen

        Ich hoffe, es findet jemand Gefallen an diesem Rätsel.

        Beim angehängten Bild lassen sich die Wörter, die zu den Interpreten und die, die zu den Songtiteln gehören, leichter unterscheiden. Lösungen werden auch per Mail an boron ät dark-brightness.de entgegengenommen.
        Angehängte Dateien

        Kommentar


        • #5
          Naja, viel aufwand war es jetzt nicht.

          Kommentar

          Lädt...
          X