再有一个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-pasta嵌套时间。

应用标准规则,以字节为单位的最短代码获胜。

样品输入/输出

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
对于荷兰讲者来说,这项挑战的标题非常尴尬……
Pakk

5
@Pakk但这是真的。我看到一个LUL,我不在这里……
steenbergh

7
:这可以扩展到永乐You Only YOLO once --> YOYOLOO. You Only YOYOLOO Once --> YOYOYOLOOO
DJMcMayhem

Answers:


24

Python 2,56个字节

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

在线尝试!
它是1索引的


3
我假设[1:-1]结尾处的会在开头和结尾处删除双引号?
Nzall '17

@Nzall准确
Rod

对于x = 0,这将给出“ U”,但应给出“再有一个LUL,我就退出了”。
Wolfram

3
@Wolfram它是1索引的,将此信息添加到了答案
Rod Rod

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虽然0是falsy。处理此问题的最简单方法是在通过时将其+放在前面this.value
帕特里克·罗伯茨

@PatrickRoberts谢谢,我不知道为什么会有额外的input字段:)
Kritixi Lithos

很好,我可能会尝试使用.replace
ETHproductions

当数字为负数时,堆栈溢出。
程序员

@ programmer500输入数字被指定为非负数,因此这不是问题
Kritixi Lithos 17-4-6

11

Befunge,91字节

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

在线尝试!

这是源代码的细分,突出了各个组成部分。

突出显示执行路径的源代码

*我们从读取重复计数N开始,并将其两个副本存储在内存中。
*然后,我们倒数第一个N,将“ and I's out”的多个副本反向推入堆栈。每个其他副本都与之前的副本分开,并带有引号。报价是按顺序生成的90g(基本上是从源代码的第一行读取副本),因为这样做是最短的方法。
*一旦第一个循环完成,我们将“ LUL”推入堆栈(从技术上讲这是相反的,但是当它是回文式时,显然没有什么区别)。
*然后,我们有另一个循环,环绕右边界,到达运动场的左侧,然后再次返回。这次我们倒数第二个N,将“一个”的多个副本推入堆栈(再次反向)。同样,每一个额外的副本都与之前的副本分开并带有引号。
*一旦第二个循环完成,整个短语现在都在堆栈中(相反),因此我们只需要写出来即可。


很高兴使用get来推动"。感谢您的解释
MildlyMilquetoast'1

6

05AB1E30 29字节

…LULIF“"One€£ ÿ€ƒ I'm€Ä"“}}¦¨

在线尝试!

不同的字符串类型似乎不能很好地混合,因此出于某种原因,我需要结束循环两次。


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

N次将“ LUL”替换为整个字符串。

有人打高尔夫更好吗?

在线尝试!

非常感谢Kritixi Lithoshvd,谢谢。


@Kritixi现在有一个摘要。
马修·罗

比较短。而且我认为您可能需要将<string>import语句包括在bytecount中,但不确定
Kritixi Lithos

您也可以将其更改for(int i=0;i<x;i++)for(int i=0;i++<x;)
Kritixi Lithos'1

此外,r.find("L")短于r.find("LOL")2个字节:)
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”,因此您可能会消除更改文本和挖掘一些字节的灵活性。无论如何,不​​错的解决方案+1
Farhan Anam

2
@FarhanAnam我认为这是一个很好的入门文章,然后我将进行编辑,但是发布后,我看到有人发布了更好的答案,无论我多么努力打高尔夫球,我总是以他们的答案告终。因此,我认为我应该将它留在这里以保持灵活性,以便有人可以从中获得乐趣。

5

V39 37字节

在@KritixiLithos的帮助下,两个字节提出替换方法

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

在线尝试!

十六进制转储:

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";}

取消测试,并进行以下测试:

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个字节。
凯文·克鲁伊森

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

更改stringvar保存两个字节。
devRicher

@devRicher不能,因为我要声明2个变量
TheLethalCoder

@Bob我已经在使用它,不确定是否可以在其他地方使用
TheLethalCoder

抱歉,我没有注意到。
鲍勃(Bob)

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字节

感谢Martin Ender节省了1个难以找到的字节!

""<>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]]&
Martin Ender

啊哈![[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)。真好 嵌套的插入的字符串听起来确实有些虚假,但是看起来像是在三进制上首先使它窒息。
鲍勃(Bob)

@Bob我要使其生效的问题是因为引号,或者至少是我认为引起的原因,所以我似乎无法删除第一个string.Format并嵌套它们
TheLethalCoder

怎么样$“再来一次{(n <1?” LUL“:$” \“ {m(-n)} \”“)},我出去了
卢克

@Luc你尝试过吗?Cos,我确定我做了类似的事情,但是没有用。现在在我的手机上无法测试
TheLethalCoder

您可以在任何情况下都可以用+替换string.Format以获取73个字符:
Chris F Carroll


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字节

“还有一个递归函数,我出局了”

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引号。
Zgarb

使用易于从0开始建立索引f -1="LUL",但我看不到如何在没有大量新符号的情况下删除多余的引号。
Wolfram

1

Ruby,70个字节

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

只需循环一次它给出的数量,就每次都通过格式字符串围绕最后一个字符串。

索引从1开始。


1

堆叠,54字节

('"One more ' ' and I''m out"')*'LUL'join'^.|.$'εrepl

在这里尝试!“函数”的用法示例:

1
('"One more ' ' and I''m out"')*'LUL'join'^.|.$'εrepl
out

56字节之一:

@n'One more LUL and I''m out':@o['LUL' '"'o'"'+ +repl]n*

1

Python 3,68字节

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


这会提供错误的输出。您是*a不是要说*5
mbomb007'1

是的,我做到了,谢谢,我没有意识到我会说的
sonrad10

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

您可以使用W-1而不是-1保存一个字节
Business Cat

1
这里有一些其他技巧可以进一步缩短此时间:tio.run/nexus/cjam#@6 / ... ...我首先尝试\"通过使用单个字符串并"在两端添加来避免使用`。然后,我需要分割长度为和不能使用的字符串/,因为第一部分较短。所以我用换行符作为分隔符并做了N/。由于我们现在在列表中都有这两个部分,因此我们可以轻松地一次重复两个部分f*。,并LUL在最后插入一个简单的join(*)。
Martin Ender

太酷了,但是它看起来像完全不同的解决方案,而不是进一步缩短它:)这是我在CJam上的第一个程序,所以我不知道这些技巧,谢谢。我应该将此解决方案添加到答案中吗?
Wolfram

@Wolfram由您决定。我很高兴您能使用它(否则我不会发表评论;)。
马丁·恩德

@Wolfram很好的第一步!
Simmons,


1

Mathematica,65 63字节

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

注意到挑战两个字节就可以进行1索引。


1

的PHP

您好,到目前为止,我发现有两种方法可以做到这一点。

替换方式为1索引(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中,程序几乎总是比函数短。
Titus

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

切达 71字节

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

在线尝试!


也许尝试使用_ f ->可能节省一些字节的语法进行递归
Downgoat

嗯,我不太了解该语法的工作原理,在文档中也找不到它或任何示例。
帕维尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.