Eingang:
Die Eingabe ist eine zufällige Anordnung von Nüssen (in Ihrer Sprache), die möglichen Nüsse folgen. In Ihrem Programm muss jede Art von Mutter dargestellt werden können, z. B. ein ganzzahliger Code. Das Programm muss in der Lage sein, ein Array beliebiger Größe und Konfiguration von Muttern zu verarbeiten.
Mögliche Muttern:
Kola nut
Macadamia
Mamoncillo
Maya nut
Mongongo
Oak acorns
Ogbono nut
Paradise nut
Pili nut
Pistachio
Walnut
Ausgabe:
Die Ausgabe muss so sortiert sein, dass keine benachbarten Muttern der gleichen Art vorhanden sind. Ist dies nicht möglich, sollte die Ausgabe ein leeres Array sein.
Beispieleingabe (vereinfacht):
["walnut", "walnut", "pistachio"]
Beispielausgabe:
["walnut", "pistachio", "walnut"]
Lösungen können das Array nicht einfach mischen, bis es zufällig eindeutig wird. Die Art muss deterministisch sein
perl6 -e 'my @a="aaaaabbbbccccdddee".comb;my @b = @a.pick(*) while @b.squish !== @a;say [~] @b'
baedcbdacdecbabaca
(3,3,2) kann ebenfalls zum Versagen führen.Antworten:
GolfScript,
42413738 ZeichenDer Code erwartet eine Eingabe an STDIN und gibt das Ergebnis an STDOUT aus, zB:
Das Skript wurde länger als erwartet, aber ich nehme an, dass es Raum für Verbesserungen gibt.
Bearbeiten: Der Fall einer Liste mit einem einzelnen Element kostet mich 1 Zeichen (der beste Vergleich, den ich finden konnte, ist der gleiche wie bei Peter).
quelle
$.,)2//zip
genau das hatte ich vor. Meine Interpretation der Spezifikation war, dass sie Eingaben in den Stapel aufnehmen und auf dem Stapel belassen könnte, also sollten wir vielleicht auf eine Klärung drängen.["walnut"]
im Abschnitt "Compare the First Two" ab.GolfScript, 32 Zeichen
Gleiches Eingabe- und Ausgabeformat wie Howards Lösung.
quelle
Brachylog v2, 10 Bytes
Probieren Sie es online!
Brute-Force-Lösung. (Dies ist eine Funktion, die erlaubt ist, weil die Herausforderung nicht "volles Programm" sagt.) Es ist auch meistens eine direkte Übersetzung der Spezifikation (die einzige feine Sache ist, dass ich es geschafft habe, die Dinge so anzuordnen, dass alle impliziten Einschränkungen in genau der angekommen sind richtige Stellen, so dass keine zusätzlichen Zeichen erforderlich sind, um sie zu disambiguieren).
Beachten Sie, dass dies ein allgemeiner Algorithmus zum Neuanordnen einer Liste ist, sodass sich keine zwei Elemente berühren. es kann Zeichenfolgendarstellungen der Elemente verarbeiten, und es kann auch ganzzahlige Codes verarbeiten. Es spielt also keine Rolle, wie "Ihr Programm jede Art von Nuss darstellen muss, z. B. einen Integer-Code". Anforderung aus der Frage wird interpretiert.
Erläuterung
quelle
J, 80 Zeichen
Nicht wirklich in der gleichen Liga wie Golfscript. Ich vermute, es gibt Gewinne zu erzielen, aber die 14 Zeichen, die benötigt werden, um die Liste in das Programm aufzunehmen,
[;.1' ',1!:1[1
sind ein großes Handicap.Grundsätzlich nimmt das Programm die Liste auf, gruppiert ähnliche Elemente, sortiert nach Anzahl der Elemente in jeder Gruppe absteigend und wechselt die Ausgabe zwischen der ersten und der zweiten Hälfte der Liste. Der Rest, wenn der Code überflüssige Elemente entfernt und entscheidet, ob die Liste eine gültige Ausgabe ist (Ausgabe unendlich,
_
wenn dies nicht der Fall ist).Beispiel:
Gruppe
(</.])
:sortieren
(\:#&.>)
:ravel
((],.|.)~>.@-:@#)
:quelle
Jelly , 14 Bytes
Probieren Sie es online!
Die letzten 6 Bytes können entfernt werden, wenn wir undefiniertes Verhalten für ungültige Eingaben haben können.
quelle
Stax , 10 Bytes
Führen Sie es aus und debuggen Sie es
Hier ist das gleiche Programm entpackt, ungolfed und kommentiert.
Führen Sie dieses aus
quelle