Escribir un programa o función que toma en una cadena de caracteres -=o.
, donde los -=o
's y .
' S siempre se alternan, un personaje a otro. La cadena tendrá una longitud impar mayor que uno y siempre comenzará y terminará en uno de -=o
.
Básicamente, la entrada se verá como una línea de caras de emoticones que comparten ojos en varios estados de somnolencia, p. Ej.
o.=.=.-.-.o.o
Su objetivo es imprimir o devolver la cara que sea la más soñolienta o la más despierta (depende de usted cuál elija). Si hay varias opciones para saber quién está más somnoliento / más despierto, cualquiera de ellas puede salir.
Hay nueve caras distintas y cinco niveles de somnolencia:
-.- 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
En caso de que no esté claro, el porcentaje de somnolencia se calcula asignando 1
a -
completamente dormido, 0.5
a =
medio dormido y 0
a o
despierto. Entonces, la suma de los dos valores oculares divididos por dos es el porcentaje.
El código más corto en bytes gana.
Casos de prueba
Más somnoliento
-.- 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 =.-
Más despierto
-.- 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
-.-
Respuestas:
Pyth,
1210 bytesEsto imprime el emoticon más somnoliento. Verifique todos los casos de prueba a la vez en el Compilador Pyth .
El crédito va a @ Sp3000 por la idea de utilizar la clasificación .
Cómo funciona
fuente
hS%2.:z3
?=.-
estar más somnolientos que-.o
, pero están ordenados de otra manera. Había cometido el mismo error.Python 2,
5453 bytesEsta es una función que devuelve la cara que está más despierta.
Muchas gracias a xnor por proporcionar muchos trucos tácticos para acortar mi algoritmo original.
fuente
max
lugar de iterar a través de:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, ya que=.-
vs-.o
es la excepción a la regla de clasificación.,key=sorted
que sería una solución, pero esto son 11 caracteres, por lo que el tuyo es probablemente más cortoCJam, 12 bytes
Esto imprime el emoticon más somnoliento. Pruebe este violín o este conjunto de pruebas en el intérprete de CJam.
El crédito va a @ Sp3000 por la idea de utilizar la clasificación .
Cómo funciona
fuente
Dyalog APL,
3528 bytesEsta es una función monádica que toma la cadena a la derecha y genera la cara más somnolienta.
fuente
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
también es innecesario.Prólogo,
205189 bytesCódigo
Explicación
Ejemplo
Editar: se guardaron 16 bytes al unificar las cláusulas r con OR.
fuente
Clojure, 82 bytes
Bonificación: la siguiente función más pequeña imprime la misma cara, ¡pero con más estilo!
Prueba aquí.
fuente
Ruby, 59 bytes
La función devuelve la cara más somnolienta, usando el truco de clasificación.
Llamado así:
Funciona en un orden de ojos incómodo debido a la clase interna de ojos:
fuente
Minkolang 0.12 , 119 bytes
Al principio, intenté hacer esto corto y realmente golfista. Me di por vencido y fui por algo un poco más "divertido", pero aún relativamente golfístico.
Pruébalo aquí!
Explicación
Pero realmente, ¡haz clic en el enlace de arriba y haz clic Slow! De todas formas...
Esto omite el
fv
, que será importante más adelante.Lo único que hizo fue poner un
^
lado de las caras que coincidían. Entonces, el cuadro de código podría verse así:Sin los comentarios, por supuesto. Ahora, el
40w
agujero de gusano envió el puntero de instrucciones av
, que inmediatamente lo redirigeF
. Ahora,F
es un comando "gosub". Es como un goto, pero puedes volver a donde lo llamaste. En el momento en queF
se encuentra, la pila es[3,1]
, por lo que salta al1
(tal vez) en la segunda fila. Mientras el contador del programa se dirigía hacia abajo, continúa, empujando1
s en la pila a lo largo del camino. Es decir ... hasta que golpea a^
, en cuyo punto se redirige hacia arriba, donde empuja a cada uno1
nuevamente. Luegof
, el puntero de instrucción golpea , lo que restaura su posición y dirección (cuandoF
se encontró anteriormente). Por conveniencia, tomaré el siguiente código y cambiaré su diseño. (Los</\
servir para redirigir el puntero de instrucciones según sea necesario.)De hecho, estoy un poco orgulloso de cómo utilicé varias funciones exclusivas de Minkolang que nunca antes había usado. Principalmente el ternario y el gosub. De todos modos, ahí lo tienes!
fuente
C, 70 bytes
La función devuelve la cara más despierta. Modifica la cadena de entrada en su lugar, para devolver una cadena terminada en nulo.
fuente
Python 2/3, 54
56bytesSolo quería tomar una táctica alternativa a la respuesta recursiva de xsot.
Esto toma la mejor (¿o la peor?) Tupla de pares de ojos adyacentes y los une.
Reemplace max con min para devolver el sueño más (ya que esto devuelve el más despierto)
Parece funcionar, usando la siguiente prueba:
Lo que da el siguiente resultado:
fuente
f=
requiere la parte como parte del tamaño del código para este desafío? Si no hago eso, creará el lambda y luego lo tiraré inmediatamente de nuevo ...f=
continuación, el consenso actual parece ser que las funciones anónimas están bien por defecto, lo que puede caer elf=
en este caso ( xsot lo necesita ya que es recursivo)Brachylog , 10 bytes
Pruébalo en línea!
Traducido de la respuesta Pyth de Dennis.
fuente
Mathematica, 61 bytes
Va por el más somnoliento.
fuente
%
que se basa.F # 60
Devuelve la cara más despierta (cambia
max
pormin
la más dormida)fuente
Perl 5, 127 bytes
(Estoy seguro de que se puede hacer más brevemente). Cómo funciona:
--pos
hace).fuente
ES6,
8172 bytesProbablemente requiere Chrome 45 o Firefox 41.
Gracias a @ETHproductions por guardar 9 bytes.
fuente
"=.-"
debe cambiarse con"-.o"
; lo mismo con"=.o"
y"o.-"
. Además, puede guardar algunos bytes colocando todo en una cadena, separados por comas y utilizando.split`,`
.> <> , 55 bytes
Pruébalo aquí!
Salidas cara más despierto.
Dado que los valores ASCII para -, = yo aumentan respectivamente, podría usar eso para mi ventaja. Básicamente, agrega los valores de la parte del ojo actual y anterior, verifique si es un valor más alto que antes, si lo es, guarda el nuevo valor y actualiza la cara que representa, luego realiza un bucle hasta el final de la entrada. Luego sale la cara que queda. (Estoy muy contento de lo bien que todo el código encaja en su lugar)
fuente
Perl 5
-MList::Util=max -p
, 68 bytesPruébalo en línea!
Toma cada conjunto de tres caracteres, ignora el
.
del medio, asigna la suma de los otros dos a un número entero en el rango 0-4, concatena eso al frente de la cara del emoticón y luego lo ordena por eso. Agarra la última entrada (la más despierta), elimina el número del frente y lo emite.fuente