怪しげに幸せなレニーの顔の暴徒を作る(͡°͜ʖ͡°)


25

私はRedditの奇妙なスレッドを通り抜けていましたが、これに遭遇しました:

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

やや不審に笑っている人々のグループを表している。

(ただし、以下の課題では、課題の作成中に右目左のスペースが何らかの形で削除されました。仕様に注意してください)。


あなたの目標はn、次のルールで笑顔のレニーの顔のグループを作成することです。

  1. 深さ1では、顔全体(( ͡° ͜ʖ ͡°))が表示されます。
  2. 深さ2では、半分の面が表示されます。左側には、顔の半分を少し上回ります(( ͡° ͜ʖ)。ただし、右側には右側が表示され、口は省略されています(ʖ ͡°)
  3. どれより深く、そして唯一の頭と目の側面が示され(されている( ͡°͡°)。頭の目と左側の間にスペースはありませんが、外見にもかかわらず、そこにある、右側にはスペース。間隔が原因で͡どの文字物事を少し混乱させる。

入力:

  • n、表示する顔の深さのレイヤー数を示します。
  • nは常に範囲内にあります0 <= n <= 500。この範囲外のものを処理する必要はありません。
  • n0が面を持たない代わりに1つの面を意味するように、1でオフセットすることができます。ただし、-1を処理する必要があります。

出力:

  • 文字列、文字配列、またはリモートで比較可能なもの(Python / Javascriptの1文字の文字列のリストなど)。直接印刷することもできます。末尾の空白は問題ありません。

完全なプログラムまたは機能を送信できます。


どのキャラクターが関係しているかを見るのは難しいので、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]

テストケース:

face_crowd(0)
''

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

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

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

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

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

これは非常に素朴な再帰的リファレンス実装です(私のGithubに投稿されています)。わかりやすくするために、できるだけわかりやすくするようにしました。しかし、多くの重複があります

人々が参照を見たくない場合にスポイラーでラップしたかったので、それを外部に投稿しましたが、それはコードのコピーを複雑にします。私はそれが本当にチャレンジにとって重要ではないことを理解しているので、それが下がっても大したことではありません。


これはコードゴルフなので、各言語の最小バイト数が優先されます。


11
TIOでレンダリングすると、さらに疑わしく見えます。:p
Arnauld

仕様とテストケースは一貫していないようです。仕様には、後者の深さの右側部分の先頭にスペースがありますが、テストケースにはありません。
tjjfvi

@アーナルドああすごい。ええ、どこでも少し違うように見えます。
発がん性物質


1
@Arnauld URL版も大好きです。-͡
valが

回答:


14

Haskell89 87 80バイト

xnorのおかげで7バイトオフ

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

オンラインでお試しください!

開始するにはx、便宜上、文字列に(͡°͜ʖ͡°)を割り当てます。

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

次に、回答のリストを作成し、インデックスを作成して解決策を見つけます。これは、リストの最初の2つの要素として最初の2つの答えをハードコーディングし、最初の4文字と最後の4文字を3番目の答え全体の文字列の前後に追加する関数を繰り返すことによって行われます。

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

また(#)、指定された量の(͡°͜ʖ͡°)を文字列の前後に追加する特別な機能もあります。

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

8

JavaScript(ES6)、66バイト

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

オンラインでお試しください!

または、次のスニペットを使用して、より良いレンダリングを試してください。

コメント済み

次のコードでは"eEMN"、書式設定を保持するために、文字セット(それぞれ眉、目、口、鼻)を使用しています。

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

Excel、85バイト

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

の素朴なソリューションn>10テストケースの処理には2回目の繰り返しが必要です。


最後が必要REPTですか?
ニール

最後REPT0ケースはケースを処理するために必要です。
ヴェルニッシュ

5

Retina 0.8.2、56バイト

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

オンラインでお試しください!説明:

.+
$*< $&$*>

頬を生成しますが、使用<sおよび>のでね(sおよび)sが引用符で囲む必要があります。中央のスペースは、中央の男性の鼻と左目との間になります。

 >>
 >ʖ >

真ん中の男の左に男がいる場合、その男に鼻と左目との間にスペースを与えます。

<(?=<? )
< ͜ʖ

真ん中の男に口と鼻を、もしあれば右に男を追加します。右に男の左目が見えないので、彼はスペースを必要としません。そして、最初の段階で中央の男にスペースを与えました。

<
( ͡°

右の頬を固定し、右目を追加します。

>
͡°)

左頬を固定し、左目を追加します。


1
@Arnauld Phew、少し時間がかかりましたが、たった1バイト余分に修正することができたと思います!
ニール


4

Inform 7、262バイト

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 "".

これは、Inform 7の関数のオーバーロードを利用します。最も具体的なオーバーロードが実行され、引数として数値(任意の整数)をとる関数は、引数として数値2(そして2つだけ)をとる関数よりも限定的ではありません。

"([x]"のようにテキストの一部が繰り返されますが、これは独自の関数として抽象化される可能性があります。新しい関数は、非ASCII文字用のバイトを節約するようです。なぜなら、それらを印刷するための構文は、関数定義の構文よりもさらに冗長だからです。

これを実行する定型文:

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

7を選択した負でない整数に置き換えます。


Informの回答を見てうれしいです!
ヒラメ

3

スタックス、42 バイト

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

実行してデバッグする

WindowsのFirefoxでは動作しないようです。しかし、それは、モノスペースのFFデフォルトフォントがCourierであるためです。これは、これらの派手なUnicode修飾子などをサポートしていないようです。おもう。





2

Java 7、133 90 89バイト

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

@Arnauldの再帰的なJavaScript回答のポート。これは、Java 8+ラムダを使用した最初の最初の試行よりも短いためです。

オンラインでお試しください。

説明:

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

、41バイト

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

オンラインでお試しください!deverbosifierは何らかの理由で2番目の文字列を引用しようとしますが、必要ではないようですが、必要に応じて詳細バージョンを示します。説明:

Nθ

面の数を入力します。

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

顔の左側を印刷します(表示されている右側)。これらは、ʖ ͡°)最大2回繰り返される文字列で構成され、その後、最初の2文字を含まない文字列が残りの回数繰り返されます。

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

顔の右側を印刷します(表示されている左側)。これらは(逆の)文字列で構成されますʖ͜ °͡ (最大2回繰り返される構成され、最初の2文字を含まない文字列は残りの回数繰り返されます。

よく見ると、中央の顔の鼻が2回生成されていることがわかります。そのため、重複するように印刷しています。


1

Python 3、80文字、86バイト

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

オンラインでお試しください!

入力するには、3を必要な入力に変更し、-1をそのままにします。

誰かが文字数を減らす入力を行うより良い方法を知っているなら、私に知らせてください。

ここでは何も特別なことはしていません。文字列のスライシングとブール値の乱用だけです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.