Schreiben Sie ein Programm oder eine Funktion , die in einer Zeichenfolge des Zeichens nimmt , -=o.
wo die -=o
's und .
ist immer abwechseln, Zeichen zu Zeichen. Die Zeichenfolge hat eine ungerade Länge von mehr als eins und beginnt und endet immer in einer von -=o
.
Grundsätzlich sieht die Eingabe aus wie eine Reihe von Emoticon-Gesichtern, die Augen in verschiedenen Zuständen der Schläfrigkeit teilen, z
o.=.=.-.-.o.o
Ihr Ziel ist es, das Gesicht zu drucken oder zurückzugeben, das entweder das schläfrigste oder das wachste ist (es liegt an Ihnen, was Sie wählen). Wenn es mehrere Möglichkeiten gibt, wer am schläfrigsten oder am wachsten ist, kann eine davon ausgegeben werden.
Es gibt neun verschiedene Gesichter und fünf Schläfrigkeitsstufen:
-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy
Im Fall ist es nicht klar, wird der Müdigkeits Prozentsatz durch die Zuordnung berechnet , 1
um -
für voll schlafend, 0.5
um =
für halb im Schlaf, und 0
zu o
für wach. Dann ist die Summe der beiden Augenwerte geteilt durch zwei der Prozentsatz.
Der kürzeste Code in Bytes gewinnt.
Testfälle
Schläfrigste
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-
Die meisten wach
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o
-.-
Antworten:
Pyth,
1210 BytesDies druckt das schläfrigste Emoticon. Überprüfen Sie alle Testfälle gleichzeitig im Pyth-Compiler .
Die Idee, die Sortierung zu verwenden, geht an @ Sp3000 .
Wie es funktioniert
quelle
hS%2.:z3
?=.-
schläfriger sein wollen als-.o
, aber sie sind andersherum sortiert. Ich hatte den gleichen Fehler gemacht.Python 2,
5453 BytesDies ist eine Funktion, die das Gesicht zurückgibt, das am meisten wach ist.
Vielen Dank an xnor für die Bereitstellung vieler taktischer Tricks, um meinen ursprünglichen Algorithmus zu verkürzen.
quelle
max
anstatt es zuf=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, da=.-
vs-.o
die Ausnahme von der Sortierregel ist.,key=sorted
wäre eine Lösung, aber das ist 11 Zeichen, also ist deins wahrscheinlich kürzer.CJam, 12 Bytes
Dies druckt das schläfrigste Emoticon. Probieren Sie diese Geige oder diese Testsuite im CJam-Interpreter aus.
Die Idee, die Sortierung zu verwenden, geht an @ Sp3000 .
Wie es funktioniert
quelle
Dyalog APL,
3528 BytesDies ist eine monadische Funktion, die die Zeichenfolge rechts nimmt und das schläfrigste Gesicht ausgibt.
quelle
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
ist dies auch nicht erforderlich .Prolog,
205189 BytesCode
Erläuterung
Beispiel
Bearbeiten: 16 Bytes durch Vereinheitlichen von r-Klauseln mit OR gespeichert.
quelle
Clojure, 82 Bytes
Bonus: Die folgende kleinere Funktion druckt das gleiche Gesicht, aber mit mehr Stil!
Hier testen.
quelle
Ruby, 59 Bytes
Die Funktion gibt das schläfrigste Gesicht mit dem Sortiertrick zurück.
So genannt:
Funktioniert bei unangenehmer Augenordnung aufgrund von inneren Augen:
quelle
Minkolang 0,12 , 119 Bytes
Zuerst habe ich versucht, dies kurz und richtig golfen zu können. Ich gab auf und ging für etwas mehr "Spaß", aber immer noch relativ golfen.
Probieren Sie es hier aus!
Erläuterung
Aber wirklich, klicke auf den Link oben und klicke Slow! Sowieso...
Dies überspringt das
fv
, was später wichtig sein wird.Alles, was das tat, war
^
, die passenden Gesichter zu markieren. Die Codebox könnte nun so aussehen:Natürlich ohne die Kommentare. Jetzt hat das
40w
Wurmloch den Befehlszeiger an gesendetv
, der ihn sofort weiterleitetF
. NunF
ist ein "gosub" -Befehl. Es ist wie ein Goto, aber Sie können dorthin zurückkehren, wo Sie es genannt haben. Zum ZeitpunktF
, an dem der Stack angetroffen wird[3,1]
, springt er auf die1
(vielleicht) zweite Zeile. Während der Programmzähler nach unten wanderte, schob er1
s auf dem Weg auf den Stapel. Das heißt ... bis es auf ein trifft^
, an welchem Punkt es wieder nach oben umgeleitet wird, wo es jedesmal1
wieder drückt . Der Befehlszeiger dient dannf
, wodurch seine Position und Richtung wiederhergestellt werden (als erF
früher angetroffen wurde). Der Einfachheit halber nehme ich den folgenden Code und ändere sein Layout. (Das</\
dienen dazu, den Anweisungszeiger nach Bedarf umzuleiten.)Eigentlich bin ich ein bisschen stolz darauf, wie ich mehrere einzigartige Funktionen von Minkolang verwendet habe, die ich vorher noch nicht oft verwendet habe. Hauptsächlich das Ternäre und das Gosub. Wie auch immer, da hast du es!
quelle
C 70 Bytes
Die Funktion gibt das hellste Gesicht zurück. Es ändert die Eingabezeichenfolge an der richtigen Stelle, um eine nullterminierte Zeichenfolge zurückzugeben.
quelle
Python 2/3, 54
56BytesIch wollte nur eine Alternative zu xsots rekursiver Antwort suchen.
Dies nimmt das beste (oder das schlechteste?) Tupel benachbarter Augenpaare und verbindet sie miteinander.
Ersetzen Sie max durch min, um die schläfrigsten zu erhalten (da dies die wachsten Ergebnisse liefert).
Scheint mit dem folgenden Test zu funktionieren:
Was das folgende Ergebnis ergibt:
quelle
f=
Teil als Teil der Codegröße für diese Herausforderung erforderlich? Wenn ich das nicht tun , dass es die Lambda schaffen werde und dann sofort nur um es wegzuwerfen wieder ...f=
dann der aktuelle Konsens darüber , dass anonyme Funktionen sind in Ordnung standardmäßig zu sein scheinen, so dass Sie die Tropfen könnenf=
in diesem Fall ( xsot's braucht es, da es rekursiv ist)Brachylog , 10 Bytes
Probieren Sie es online!
Übersetzt aus Dennis 'Pyth-Antwort.
quelle
Mathematica, 61 Bytes
Geht für das schläfrigste.
quelle
%
das sie sich stützt.F # 60
Gibt das wachste Gesicht zurück (ändern
max
ummin
für das schläfrigste)quelle
Perl 5, 127 Bytes
(Ich bin sicher, dass es in Kürze machbar ist.) So funktioniert es:
--pos
macht).quelle
ES6,
8172 BytesBenötigt wahrscheinlich Chrome 45 oder Firefox 41.
Vielen Dank an @ETHproductions für die Einsparung von 9 Bytes.
quelle
"=.-"
sollte aber mit getauscht werden"-.o"
; das gleiche mit"=.o"
und"o.-"
. Möglicherweise können Sie auch einige Bytes speichern, indem Sie alles in eine durch Kommas getrennte Zeichenfolge setzen und verwenden.split`,`
.> <> , 55 Bytes
versuch es hier!
Gibt das meiste Wachgesicht aus.
Da die ASCII-Werte für -, = und o jeweils zunehmen, könnte ich das zu meinem Vorteil nutzen. Grundsätzlich werden die Werte des aktuellen und des vorherigen Augenteils addiert, überprüft, ob es sich um einen höheren Wert als zuvor handelt. Wenn dies der Fall ist, wird der neue Wert gespeichert und die entsprechende Fläche aktualisiert. Anschließend wird eine Schleife bis zum Ende der Eingabe ausgeführt. Gibt dann das verbleibende Gesicht aus. (Ich bin sehr erfreut darüber, wie gut der gesamte Code passt)
quelle
Perl 5
-MList::Util=max -p
, 68 BytesProbieren Sie es online!
Ergreift jede Gruppe von drei Zeichen, ignoriert die
.
in der Mitte, ordnet die Addition der beiden anderen zu einer Ganzzahl im Bereich von 0 bis 4 zu, verkettet diese mit der Vorderseite des Emoticon-Gesichts und sortiert sie danach. Nimmt den letzten Eintrag (meistens wach), entfernt die Nummer von vorne und gibt sie aus.quelle