Construye una multitud de caras lenny sospechosamente felices (͡ ° ͜ʖ ͡ °)


25

Estaba pasando por un hilo extraño en Reddit, y me encontré con esto:

(͡ ° (͡ ° ͜ʖ (͡ ° ͜ʖ ͡ °) ʖ ͡ °) ͡ °)

Representa a un grupo de personas que sonríen de forma algo sospechosa.

(Sin embargo, en el desafío a continuación, los espacios a la izquierda de los ojos derechos se soltaron de alguna manera mientras escribía el desafío. Tenga en cuenta la especificación).


Tu objetivo es crear un grupo de rostros sonrientes ncon las siguientes reglas:

  1. En la profundidad uno, ( ͡° ͜ʖ ͡°)se muestra una cara completa ( ).
  2. En la profundidad dos, se muestran medias caras. En el lado izquierdo, se representa un poco más de la mitad de la cara ( ( ͡° ͜ʖ). Sin embargo, a la derecha, se muestra el lado derecho y se omite la boca ( ʖ ͡°))
  3. Un poco más profundo, y solo se muestran los lados de la cabeza y los ojos ( ( ͡°y ͡°). Hay un espacio entre el ojo y el lado izquierdo de la cabeza, pero a pesar de las apariencias, no hay espacios en el lado derecho. El espacio se debe al ͡carácter que se mete un poco con las cosas.

Entrada:

  • n, que muestra cuántas capas profundas de caras mostrar.
  • nsiempre estará en el rango 0 <= n <= 500. No es necesario que maneje nada fuera de este rango.
  • npuede ser compensado por 1 para que 0 signifique una cara en lugar de ninguna cara. Sin embargo, deberá manejar -1.

Salida:

  • Una cadena, una matriz de caracteres o cualquier cosa remotamente comparable (como una lista de cadenas de un solo carácter en Python / Javascript). También se puede imprimir directamente. El espacio en blanco al final está bien.

Puede enviar un programa completo o una función.


Dado que es difícil ver qué personajes están involucrados, aquí está presentado en Python:

>> [ord(c) for c in '( ͡° ͜ʖ ͡°)']
[40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41]

>> [ord(c) for c in '( ͡°( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°)͡°)͡°)']
[40, 32, 865, 176, 40, 32, 865, 176, 40, 32, 865, 176, 32, 860, 662, 40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41, 662, 32, 865, 176, 41, 865, 176, 41, 865, 176, 41]

Casos de prueba:

face_crowd(0)
''

face_crowd(1)
'( ͡° ͜ʖ ͡°)'

face_crowd(2)
'( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°)'

face_crowd(5)
'( ͡°( ͡°( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°)͡°)͡°)͡°)'

face_crowd(10)
'( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)'

face_crowd(500)
'( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)͡°)'

Aquí hay una implementación de referencia recursiva extraordinariamente ingenua (publicada en mi Github). Traté de mantenerlo lo más claro posible para mayor claridad; pero hay mucha duplicación

Lo publiqué externamente porque quería envolverlo en un spoiler en caso de que la gente no quisiera ver una referencia, pero eso complica la copia del código. Creo que en realidad no es importante para el desafío, por lo que no es un gran problema si se cae, puedo pegarlo aquí si se considera importante.


Este es el código de golf, por lo que gana el menor número de bytes en cada idioma.


11
Parece aún más sospechoso cuando se procesa en TIO. : p
Arnauld

La especificación y los casos de prueba parecen ser inconsistentes; la especificación tiene un espacio al comienzo de la parte derecha de las últimas profundidades, mientras que los casos de prueba no.
tjjfvi

@Arnauld Oh wow. Sí, en todas partes parece mostrarlo un poco diferente.
Carcigenicate


1
@Arnauld Me encanta la edición de URL también: -͡-͜ʖ-͡
val dice Reinstate Monica

Respuestas:


14

Haskell , 89 87 80 bytes

7 bytes de descuento gracias a xnor

(!!)$"":x:iterate(4#8)(7#6$x)
x="( ͡° ͜ʖ ͡°)"
(a#b)y=take a x++y++drop b x

Pruébalo en línea!

Para comenzar, asignamos (͡ ° ͜ʖ ͡ °) a una cadena xpor conveniencia.

x="( ͡° ͜ʖ ͡°)"

Luego construimos una lista de las respuestas y la indexamos para encontrar la solución. Esto se hace codificando las dos primeras respuestas como los dos primeros elementos de la lista y luego iterando una función que agrega los primeros 4 caracteres y los últimos 4 caracteres al frente y al reverso de la cadena a través de la tercera respuesta.

(!!)$"":x:iterate(4#8)(7#6$x)

También tenemos la función especial (#)que agrega una cantidad específica de (͡ ° ͜ʖ ͡ °) al frente y al reverso de una cadena:

(a#b)y=take a x++y++drop b x

8

JavaScript (ES6), 66 bytes

f=n=>n?"( ͡°"+(--n>1?f(n):" ͜ʖ"+(n?f(n)+"ʖ ":" "))+"͡°)":""

Pruébalo en línea!

O pruébelo con el siguiente fragmento para una mejor representación.

Comentado

En el siguiente código, usamos el conjunto de caracteres "eEMN"(ceja, ojo, boca y nariz, respectivamente) para preservar el formato.

f = n =>           // f is a recursive function taking the number n of remaining
                   // faces to draw
  n ?              // if n is greater than 0:
    "( eE" + (     //   append the left cheek + a space + the left eye
      --n > 1 ?    //   decrement n; if it's still greater than 1:
        f(n)       //     append the result of a recursive call
      :            //   else (n = 0 or 1):
        "MN" + (   //     append the mouth and the nose
          n ?      //     if n = 1:
            f(n)   //       append the result of a recursive call
            + "N " //       followed by the nose + a space
          :        //     else (n = 0):
            " "    //       append a space and stop recursion
        )          //
    )              //
    + "eE)"        //   append the right eye + the right cheek
  :                // else:
                   //   the special case n = 0 is reached only if the original
    ""             //   input is 0; just return an empty string

6

Python 3 , 75 bytes

f=lambda i:L[:7+~2%~i]+f(i-1)+L[6+2%i:]if i>1else L*i
L='( ͡° ͜ʖ ͡°)'

Pruébalo en línea!

-6 bytes gracias a xnor


66
Hice una búsqueda de fuerza bruta y descubrí que 4+3*(i<3)puede ser 7+~2%~iy 8-2*(i<3)puede ser 6+2%i.
xnor

@xnor Brillante, gracias!
Jitse

6

Excel, 85 bytes

=IF(A1>1,REPT("( ͡°",A1-1)&" ʖ( ͡° ͜ʖ ͡°)ʖ "&REPT("͡°)",A1-1),REPT("( ͡° ͜ʖ ͡°)",A1))

Solución ingenua para n>1. Se requiere una segunda repetición para manejar el caso de 0prueba.


¿Necesitas lo último? REPT ?
Neil

El último REPTes necesario para manejar el 0caso.
Wernisch

5

Retina 0.8.2 , 56 bytes

.+
$*< $&$*>
 >>
 >ʖ >
<(?=<? )
< ͜ʖ
<
( ͡°
>
͡°)

Pruébalo en línea! Explicación:

.+
$*< $&$*>

Genere las mejillas, pero use <s y >s porque sería necesario citar (sy )s. Un espacio en el medio termina entre la nariz del hombre del medio y el ojo izquierdo.

 >>
 >ʖ >

Si el hombre en el medio tiene un hombre a su izquierda, dele a ese hombre una nariz y un espacio entre él y su ojo izquierdo.

<(?=<? )
< ͜ʖ

Agregue la boca y la nariz al hombre en el medio y al hombre a su derecha si corresponde. No vemos el ojo izquierdo del hombre a su derecha, por lo que no necesita un espacio, y le dimos un espacio al hombre en el medio en la primera etapa.

<
( ͡°

Fija las mejillas correctas y agrega los ojos correctos.

>
͡°)

Arregla las mejillas izquierdas y agrega los ojos izquierdos.


1
@Arnauld Phew, me tomó algo de tiempo, ¡pero creo que pude arreglarlo solo por un byte extra!
Neil


4

Informar 7 , 262 bytes

To say x:say "[Unicode 865][Unicode 176]".
To say y:say Unicode 860.
To say z:say Unicode 662.
To say p (N - number):say "( [x][p N minus 1][x])".
To say p (N - 2):say "( [x] [y][z][p 1][z][x])".
To say p (N - 1):say "( [x] [y][z] [x])".
To say p (N - 0):say "".

Esto aprovecha la sobrecarga de la función de Inform 7: se ejecutará la sobrecarga más específica y la función que toma un número (cualquier número entero) como argumento es menos específica que la función que toma el número dos (y solo dos) como argumento .

Hay algunos fragmentos de texto repetidos, como "([x]", que podrían abstraerse como funciones propias, pero I7 es tan detallado que definir una nueva función requiere más bytes de los que ahorraría. ¡Los únicos lugares que definen un La nueva función parece guardar bytes para los caracteres no ASCII, ya que la sintaxis para imprimirlos es aún más detallada que la sintaxis para las definiciones de funciones.

Boilerplate para ejecutar esto:

Foo is a room. When play begins: say p 7.

Reemplace 7 con un entero no negativo de su elección.


Es bueno ver una respuesta Inform!
Flounderer

3

Stax , 42 bytes

ü/┐▐Φd¬•U►^τ∩█┴êZ3↔uº'µ3ó(▀◄Ü▒iÇÆ'[∞_¥▄>A√

Ejecutar y depurarlo

Creo que parece no funcionar en Firefox en Windows. Pero eso es solo porque la fuente predeterminada FF para monoespacio es Courier, que parece no admitir estos elegantes modificadores Unicode o lo que sea. Yo creo que.





2

Java 7, 133 90 89 bytes

String f(int n){return--n<0?"":"( ͡°"+(n>1?f(n):" ͜ʖ"+(n>0?f(n)+"ʖ ":" "))+"͡°)";}

Puerto de la respuesta recursiva de JavaScript de @ Arnauld , ya que es más corto que mi primer intento inicial de usar una lambda Java 8+.

Pruébalo en línea.

Explicación:

String f(int n){               // Recursive method with integer parameter & String return-type
  return--n                    //  Decrease the input by 1 first
           <0?                 //  And if the input is now -1:
              ""               //   Return an empty string
             :                 //  Else:
             "( ͡°"             //   Return the left part of Lenny's face
             +(n>1?            //   And if the modified input is larger than 1:
                   f(n)        //    Append a recursive call with this now decreased input
                  :            //   Else (the input is here either 0 or 1):
                   " ͜ʖ"        //    Append Lenny's nose
                   +(n>0?      //    And if the input is larger than 0 (thus 1):
                         f(n)  //     Append a recursive call
                         +"ʖ " //     As well as the right part of its nose
                        :      //    Else (thus 0):
                         " "   //     Append a space instead
            ))+"͡°)";}          //   And also append the right part of Lenny's 



1

Carbón , 41 bytes

NθP⭆θ✂ʖ ͡°)⊗‹¹ι←⭆θ✂ʖ͜ °͡ (∧‹¹ι³

Pruébalo en línea! El desverbosificador intenta citar la segunda cadena por alguna razón, pero no parece ser necesario, pero aquí está la versión detallada si la desea. Explicación:

Nθ

Ingrese el número de caras.

P⭆θ✂ʖ ͡°)⊗‹¹ι

Imprima los lados izquierdos de las caras (a nuestra derecha como las vemos). Estos consisten en la cadena ʖ ͡°)repetida hasta dos veces, y luego esa cadena sin los dos primeros caracteres repite el número restante de veces.

←⭆θ✂ʖ͜ °͡ (∧‹¹ι³

Imprima los lados derechos de las caras (a nuestra izquierda como las vemos). Estos consisten en la cadena (invertida)ʖ͜ °͡ ( repetida hasta dos veces, y luego esa cadena sin los dos primeros caracteres repite el número restante de veces.

Los más observadores entre ustedes habrán notado que la cara central tiene su nariz generada dos veces, por lo que estoy imprimiendo de tal manera que se superponen.


1

Python 3 , 80 caracteres, 86 bytes

x='( ͡° ͜ʖ ͡°)'
n=3-1
print(x[:4]*(n-1)+x[:7]*(n!=0)+x+x[6:]*(n!=0)+x[8:]*(n-1))

Pruébalo en línea!

Para poner la entrada, cambie el 3 a la entrada que desee, dejando el -1 solo.

Si alguien sabe una mejor manera de hacer una entrada que reduzca el recuento de caracteres, hágamelo saber.

No pasa nada lujoso aquí, solo corte de cuerdas y abuso de booleanos

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.