もう1つのLULと私は外出している


57

チャレンジの説明

人気のあるストリーミングサイトtwitch.tvの一部のチャンネルでは、人々がチャットでスパムする傾向がある一般的なメッセージは、人々をスパム「LUL」に誘惑します

One more LUL and I'm out

LULは、ストリームでおかしなことが起こったことを表現するために使用される一般的なエモートです。

すぐにミームがその可能性を示し、コピーパスタのパロディが続いた:

One more "One more LUL and I'm out" and I'm out

これは、それ自体にネストされた同じメッセージです。負でない整数を指定するとNN以下のパターンに従って、ネストされたLULパスタ自体を出力します。

標準の規則が適用され、バイト単位の最短コードが優先されます。

サンプル入出力

0: One more LUL and I'm out
1: One more "One more LUL and I'm out" and I'm out
2: One more "One more "One more LUL and I'm out" and I'm out" and I'm out
...
7: One more "One more "One more "One more "One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out

ノート

  • 先頭/末尾の改行が許可されます
  • 大文字を保持する必要があります
  • あなたのコードは完全なプログラムまたは機能であるかもしれません
  • 印刷する代わりに、選択した言語で文字列またはそれに相当するものを返すことができます
  • インデックスの1代わりに0

6
"開始と終了も追加できますか?
ロッド

8
@ロッド:いいえ、できません。
shooqie

27
この挑戦のタイトルはオランダ語話者にとって非常に厄介です
...-PA71

5
@Pakkしかし、それは本当です。私はLULを見て、私はここから
離れて

7
これはYOLOに拡張することができますYou Only YOLO once --> YOYOLOO. You Only YOYOLOO Once --> YOYOYOLOOO、など
DJMcMayhem

回答:


24

Python 2、56バイト

lambda x:('"One more '*x+'LUL'+' and I\'m out"'*x)[1:-1]

オンラインでお試しください!
1インデックス付き


3
[1:-1]は最後に開始と終了で二重引用符をトリムすると仮定しますか?
Nzall

@Nzall正確に
ロッド

x = 0の場合、これは「U」になりますが、「もう1つのLULと私は外に出ます」になります。
ウォルフラム

3
@Wolfram 1インデックス、回答にこの情報を追加
ロッド

18

JavaScript、57 56 54 52バイト

f=q=>`One more ${q?`"${f(q-1)}"`:"LUL"} and I'm out`

テストスニペット:

f=q=>`One more ${q?`"${f(q-1)}"`:"LUL"} and I'm out`
<input type=number min=0 oninput=o.textContent=f(+this.value)>

<p id=o>

何らかの理由で、入力がの場合、スナックスニペットはバグがありますが0、それ以外の場合は機能します。次のように呼び出しf(4)ます。

説明

f=q=>                      //declares a function f with argument q
`One more ... and I'm out` //hardcoded string
 ${q?`"${f(q-1)}"`:"LUL"}  // does recursion based on q
                           // if q is true, ie not 0, recurse
                           // else return "LUL"

最初inputは無効なHTML属性です。これを削除したい場合があります。第二に、数値ではなく文字列として入力を受け取るためです。そう"0"しながら、truthyある0falsyです。それを処理する最も簡単な方法は、渡すときの+前に置くthis.valueことです。
パトリックロバーツ

@PatrickRobertsありがとう、なぜ余分なinputフィールドがあるのか​​わかりません:)
Kritixi Lithos

素敵な、私はおそらく使用してみました.replace
-ETHproductions

数値が負の場合、スタックはオーバーフローします。
Programmer5000

それは問題ではないので、@ programmer500入力番号が非負であることが与えられる
KritixiのLithos

11

Befunge、91バイト

&:00p10p>"tuo m'I dna "1v
09p00-1<^g09p01-1_v#:g0<<vg
>>00g:#^_$>:#,_@  >$"LUL">" erom enO"

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

これは、さまざまなコンポーネントパーツが強調表示されたソースコードの内訳です。

実行パスが強調表示されたソースコード

*繰り返し回数Nを読み取り、それを2回繰り返してメモリに保存します。
*次に、最初のNをカウントダウンし、「and I'm out」の複数のコピーを逆順にスタックにプッシュします。追加の各コピーは、引用符で前のコピーと分離されます。引用は、シーケンスで生成されます90g(基本的にはソースの最初の行からコピーを読み取ります)。これが最も簡単な方法だからです。
*この最初のループが完了したら、「LUL」をスタックにプッシュします(技術的にはこれは逆ですが、回文の場合は明らかに違いはありません)。
*次に、別のループがあり、右の境界線を越えてプレイフィールドの左に回り込み、再び戻ります。今回は2番目のNをカウントダウンしています、「もう1つ」の複数のコピーをスタックにプッシュします(再び逆に)。また、追加のコピーはそれぞれ引用符で前のコピーから分離されます。
*2番目のループが完了すると、フレーズ全体が(逆に)スタック上にあるため、単純に書き出す必要があります。


getを使用して"。説明をありがとう
-MildlyMilquetoast


6

C ++、118 + 16 = 134バイト

auto L(int x){std::string k="One more LUL and I'm out",r=k;for(int i=0;i++<x;)r.replace(i*10-1,3,'"'+k+'"');return r;}

#include<string> -+16

「LUL」を文字列全体にN回置き換えます。

誰もがより良いゴルフを持っていますか?

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

Kritixi Lithoshvdに感謝します。


@Kritixiこれでスニペットができました。
マシュー

これは短いです。そして、私はあなたが含める必要がかもしれないと思う<string>ことを確認、:バイトにimport文をない
KritixiのLithos

また、あなたは変更することができますfor(int i=0;i<x;i++)for(int i=0;i++<x;)
KritixiのLithos

さらに、2バイトr.find("L")より短くなりr.find("LOL")ます:)
Kritixi Lithos

再帰バージョン:オンラインでお試しください! また、追加のものにTIOのヘッダーとフッターを使用して、コードをバイトカウントでカウントすることもできます。
nmjcman101

5

Javascript(ES6)、68バイト

f=(x,y="LUL")=>~x?f(--x,`"One more ${y} and I'm out"`):y.slice(1,-1)

のように呼び出しf(n)ます。

f(n, "LUL")また、LULを好きなように呼び出して、LULを任意の単語に置き換えることもできます。


質問は「LUL」だけを要求するので、おそらくテキストを変更していくつかのバイトをゴルフアウトするという柔軟性を排除できます。とにかく素敵なソリューション、+ 1
ファーハンアナム

2
@FarhanAnamこれは最初に編集する良い投稿だと思いましたが、投稿した後、誰かがより良い回答を投稿しているのを見て、ゴルフをどれだけ頑張ったとしても、いつも彼らの答えになりました。だから、誰かに楽しんでもらうために、ここに柔軟性を残しておくべきだと思った。

5

V39 37バイト

@KritixiLithosの助けを借りて、置換メソッドを思いついた2バイト

iOne more LUL and I'm outÀñÓLUL/"."

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

Hexdump:

00000000: 694f 6e65 206d 6f72 6520 4c55 4c20 616e  iOne more LUL an
00000010: 6420 4927 6d20 6f75 741b c0f1 d34c 554c  d I'm out....LUL
00000020: 2f22 122e 22                             /".."

それはLULであり、LOLではありません;)
geisterfurz007

4

Java、79 77バイト

ゴルフ:

String f(int l){return"One more "+(l<1?"LUL":'"'+f(l-1)+'"')+" and I'm out";}

Ungolfed、テストあり:

public class OneMoreLulAndImOut {

  public static void main(String[] args) {
    OneMoreLulAndImOut obj = new OneMoreLulAndImOut();
    for (int i = 0; i < 8; ++i) {
      System.out.println(Integer.toString(i) + ": " + obj.f(i));
    }
  }

  String f(int l) {
    return "One more " + (l < 1 ? "LUL" : '"' + f(l - 1) + '"') + " and I'm out";
  }    
}

プログラム出力:

0: One more LUL and I'm out
1: One more "One more LUL and I'm out" and I'm out
2: One more "One more "One more LUL and I'm out" and I'm out" and I'm out
3: One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out
4: One more "One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out" and I'm out
5: One more "One more "One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out
6: One more "One more "One more "One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out
7: One more "One more "One more "One more "One more "One more "One more "One more LUL and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out" and I'm out

両方"\""'"'(単一の文字)に変更して、2バイト節約できます。
ケビンCruijssen

1
@KevinCruijssenありがとう、私は私が逃した何かがあることを知っていました。

3

Python、79バイト

他の答えよりも長いですが、再帰的なソリューションを実行したかっただけです。

x='"One more %s and I\'m out"'
f=lambda n,s=x:n and f(n-1,s%x)or(s%"LUL")[1:-1]

オンラインで試す


3

C#、125バイト

n=>{string f="One more {0} and I'm out",s=f;for(int i=0;i++<n;)s=string.Format(s,$"\"{f}\"");return string.Format(s,"LUL");};

...の代わりに文字列補間を使用できるかどうか疑問に思うFormat
ボブ

に変更stringvarて、2バイトを保存します。
devRicher

@devRicherは、私は2つの変数を宣言していない可能性があるため
TheLethalCoder

私はすでにそれを使用しています@Bob、わからない私は他の場所でそれを使用することができるかどうか
TheLethalCoder

おっと、気づかなかった、ごめんなさい。
ボブ

3

C、140 111バイト

ゴルフの質問への私の最初の試み..ゴルフ:

#define F printf(
#define P 1&&putchar(34)
int a=0;void q(n){a=a?a:n,n?n>0?F"One more "),n-P:n?n+P,F" and I'm out"):0:F"LUL"),n+a?q(n-1):0;}

q(0)はLULを与えるだけなので、間違った出力であることに気付きました。次の試み:

#define o(Q) O(Q,n?34:0);
#define O printf
void q(int n){o("One more %c")n?q(n-1):O("LUL"),o("%c and I’m out")}

サンプルプログラム(OSXのGCCでテスト済み):

#define o(Q) O(Q,n?34:0);
#define O printf
void q(int n) {o("One more %c")n?q(n-1):O("LUL"),o("%c and I’m out")}

int main() {
    q(0),putchar('\n');
    q(1),putchar('\n');
    q(2),putchar('\n');
    q(3),putchar('\n');

    return 0;
}

出力する

One more LUL and I’m out
One more "One more LUL and I’m out" and I’m out
One more "One more "One more LUL and I’m out" and I’m out" and I’m out
One more "One more "One more "One more LUL and I’m out" and I’m out" and I’m out" and I’m out

3

Mathematica、69 68バイト

見つけにくい1バイトを保存してくれたMartin Enderに感謝します!

""<>Nest[{q="\"",{"One more ",#," and I'm out"},q}&,"LUL",#+1][[2]]&

名前のない関数は、負でない整数引数を取り、文字列を返します。Nest関数を初期引数に繰り返し適用します。この場合、関数は引数を適切な単語と引用符で囲む必要があります。開始して"LUL"N+1時間を繰り返します。その結果、フレーズ全体を不要な引用符で囲みますが、フレーズ[[2]]間のもののみを保持します。最後に""<>、結果としてネストされたリストを単一の文字列に変換します。

以前の提出:

""<>Nest[{o,q="\"",#,q,a}&,{o="One more ","LUL",a=" and I'm out"},#]&

1
出発したバイトを剃り落とすするマネージドLUL""<>Nest[{q="\"",{"One more ",#," and I'm out"},q}&,"LUL",#+1][[2]]&
マーティン・エンダー

あぁ![[2]]!D:それはそれらの最初の望ましくない引用符を回避する方法です
グレッグ・マーティン

3

C#、119 85 71バイト

string m(int n)=>$"One more {(n<1?"LUL":$"\"{m(--n)}\"")} and I'm out";

@Lucのおかげで14バイト節約


動作しているようです(LINQPad経由)。いいね 入れ子になった文字列は少し曖昧に聞こえますが、最初に3成分にチョークがかかっているように見えます。
ボブ

私はそれが動作するように取得しようとしたんだ問題を@Bobするために引用符であり、あるいは少なくともそれは私が最初に削除するように見えることはできません私はそれを引き起こしていると考えているstring.Formatと巣にそれらを
TheLethalCoder

どの程度$ "もう一つの{(N <1?" LUL ":$" \ "{M( - n)は} \" ")}と私はアウトだ"
リュック

@Lucやってみた?Cos似たようなことをしたと思うが、うまくいかなかった。今そうテストすることはできません、私の携帯電話に
TheLethalCoder

あなたはどのような場合には73個の文字を取得するために+とString.Formatのを置き換えることができます
クリス・F・キャロル


2

R、97バイト

function(n){s="One more LUL and I'm out";while(n){s=sub("LUL",paste0('"',s,'"'),s);n=n-1};cat(s)}

ゴルフをしていない:

function(n) {
  s = "One more LUL and I'm out";
  while(n) {
    s = sub("LUL", paste0('"', s, '"'), s);
    n = n - 1
  };
  cat(s)
}

2

R、100 97 92バイト

「もう1つの再帰関数と外出中」

f=function(n)paste("One more",`if`(n<1,"LUL",paste0('"',f(n-1),'"')),"and I'm out");cat(f(scan()))

編集:非再帰的なアプローチがわずかに短いことが判明しました:

x="One more ";y=" and I'm out";cat(x,rep(c('"',x),n<-scan()),"LUL",rep(c(y,'"'),n),y,sep="")




1

Lua、101バイト

i,f,g='"One more ',' and I\'m out"',io.read()+1 print((i:rep(g).."LUL"..f:rep(g)):sub(2,g*24-(g-2)))

明らかな文字列の試み。繰り返し"One moreand I'm out"正確に入力+ 1回、LUL中間に、最初と最後の引用符を削除します。


1

Haskell、51バイト

1からのインデックス。

f 0="LUL";f n="One more \""++f(n-1)++"\" and I'm out"

7
これはLUL、引用符を誤って印刷するようです。
ズガルブ

を使用して0からインデックスを作成するのは簡単f -1="LUL"ですが、新しいシンボルの束なしに余分な引用符を削除する方法がわかりません。
ウォルフラム

1

ルビー、70バイト

def l x,t="LUL";x.times{t='"One more %s and I\'m out"'%t};t[1..~1];end

指定された量だけループし、毎回フォーマット文字列を介して最後の文字列を囲みます。

インデックスは1から始まります。



1

Python 3、68バイト

def f(a):return('"One more '*a+'LUL'+(' and I%sm out"'%"'")*a)[1:-1]


これにより、誤った出力が生成されます。の*a代わりに*5
mbomb007

はい、私はそうしました、ありがとう、私はそれを置くことに
気がつき

1

CJam、51 49バイト

" and I'm out\"""\"One more "li1+_@*"LUL"+1>@@*W<

オンラインで試す

ゴルフをしていない:

" and I'm out\""   "\"One more " // Push two strings to the stack
     l i 1 +                     // Read a number and add 1
     _ @                         // Copy number and rise '"One more ' to the top
     *                           // Multiply '"One more ' by a number
     "LUL" +                     // Add "LUL"
     1>                          // Chop the first quote
     @@                          // Push the result down
     *                           // Multiply ' and I\'m out"' by a number
     W<                          // Chop the last quote

W1バイトを節約するために-1の代わりに使用できます
Business Cat

1
これをさらに短くするためのいくつかの他のトリックを次に示します。tio.run / nexus / cjam#@6/ …... 最初に\"、単一の文字列を使用して"両端にを追加することで回避しようとしました`。次に/、最初の部分が短いため、長さとでできなかった文字列を分割する必要がありました。それで、私はセパレーターとしてラインフィードを使用しましたN/。リストには両方の部分が含まれているため、を使用して両方の部分を一度に簡単に繰り返すことができますf*。そして、LULは単純な結合(*)で最後に挿入されます。
マーティンエンダー

それはクールですが、これをさらに短縮するよりも完全に異なるソリューションのように見えます:)これはCJamでの私の最初のプログラムなので、これらのトリックを知りませんでした、ありがとう。このソリューションを答えに追加する必要がありますか?
ウォルフラム

@Wolframそれはあなた次第です。私はあなたがそれを使ってうれしいです(そうでなければ私はコメントしなかったでしょう;))。
マーティンエンダー

@Wolfram素敵な最初の努力!マーティンの答え
シモンズ


1

Mathematica、65 63バイト

Nest["\"One more "<>#<>" and I'm out\""&,"LUL",#]~StringTrim~_&

チャレンジに気付くことで2バイトずれているため、1インデックスが可能です。


1

PHP

こんにちは、私はこれまでに2つの方法を見つけました。

置換方法1-indexed (121バイト)

function f($x){$v='One more LUL and i\'m out';$t=$v;for($i=1;$i<=$x;$t=str_replace('LUL','"'.$t.'"',$v),$i++);return $t;}

再帰的な方法(86バイト)

function r($n){$v=($n==0)?'LUL':'"'.r($n-1).'"';return'One more '.$v.' and i\'m out';}

PHPでは、プログラムはほとんどの場合関数よりも短くなります。
タイタス

1

C ++、80 + 16 = 96バイト

std::string L(int c){return"One more "+(c?'"'+L(--c)+'"':"LUL")+" and I'm out";}

#include<string> -+16

ゴルフをしていない:

std::string LUL(int count) {
    return "One more " + (count? ('"' + LUL(--count) + '"') : "LUL") + " and I'm out";
}

自身を再帰的に呼び出し、文字列の追加を使用します。かなり簡単です。他に何が言えますか?未使用バージョンでも、本質的に1つのライナーです。

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


1

チェダー、71バイト

i->('One more "'*i).slice(0,-1)+'LUL '+('and I\'m out" '*i).slice(0,-2)

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


たぶんと再帰してみてください_ f ->いくつかのバイトを保存することが構文
Downgoat

ええと、私はその構文がどのように機能するかについてあまり詳しくないので、ドキュメントでその構文や例を見つけることができません。
パベル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.