Еще один 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

Который является тем же сообщением, вложенным в себя. Если задано неотрицательное целое число N, выведите сами вложенные LUL-макароны N, следуя приведенной ниже схеме.

Применяются стандартные правила , выигрывает самый короткий код в байтах.

Пример ввода / вывода

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
Название этого вызова очень неудобно для говорящих на нидерландском языке ...

5
@Pakk Но это правда. Я вижу LUL, и я ухожу отсюда ...
Steenbergh

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», но должно давать «Еще один LUL, и меня нет».
Вольфрам

3
@Wolfram Это 1-indexed, добавил эту информацию в ответ
Род

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"что правдиво, пока 0фальшиво. Самый простой способ справиться с этим - поставить +перед собой, 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 и сохранения его двух дубликатов в памяти.
*Затем мы начинаем обратный отсчет первого N , помещая несколько копий «и я вышел» в стек в обратном порядке. Каждая дополнительная копия отделяется от предыдущей цитатой. Кавычка генерируется с последовательностью 90g(в основном, чтение копии из первой строки источника), так как это самый короткий способ сделать это.
*Как только этот первый цикл завершен, мы помещаем «LUL» в стек (технически это наоборот, но это, очевидно, не имеет значения, когда это палиндром).
*Затем у нас есть еще один цикл, переходящий через правую границу, слева от игрового поля, а затем снова обратно. На этот раз мы считаем второй N, помещая несколько копий «Еще один» в стек (снова в обратном порядке). И снова, каждая дополнительная копия отделяется от предыдущей цитатой.
*После завершения второго цикла вся фраза находится в стеке (в обратном порядке), поэтому нам просто нужно выписать ее.


Приятно использовать толчок ". Спасибо за объяснение
MildlyMilquetoast

6

05AB1E , 30 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

заменяет "LUL" на всю строку N раз.

У кого-нибудь есть лучшие гольфы?

Попробуйте онлайн!

Огромное спасибо Kritixi Lithos и hvd за огромную помощь.


@Kritixi Теперь у него есть фрагмент.
Мэтью Рох

Это короче. И я думаю, что вам может понадобиться включить <string>оператор импорта в bytecount, не уверен
Kritixi Lithos

Кроме того, вы можете изменить for(int i=0;i<x;i++)наfor(int i=0;i++<x;)
Kritixi Lithos

Кроме того, 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
Фархан Анам

2
@FarhanAnam Я думал, что это хороший стартовый пост, который я затем отредактирую, но после того, как я написал, я увидел, что кто-то опубликовал лучший ответ, и как бы я ни старался сыграть в него, я всегда получал ответ. Так что я подумал, что мне следует оставить это здесь с гибкостью, чтобы кто-то повеселился с этим.

5

V , 39 37 байт

Два байта с помощью @KritixiLithos для разработки метода подстановки

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

Ява, 79 77 байт

Golfed:

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
Боб

Изменить, stringчтобы varсохранить два байта.
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")}

Пример программы (протестирован с GCC на OSX):

#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 байт

Спасибо Мартину Эндеру за сохранение одного труднодоступного байта!

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

Сохранено 14 байтов благодаря @Luc


Похоже, это работает (через LINQPad). Приятно. Вложенные вставленные строки звучат немного ненадежно, но похоже, что сначала они задыхаются от троичного.
Боб

@ Боб, проблема, с которой я пытаюсь заставить его работать, заключается в кавычках, или, по крайней мере, я думаю, что именно это и вызывает их, поэтому я не могу удалить первое string.Formatи
вставить

Как насчет $ "Еще один {(n <1?" LUL ": $" \ "{m (- n)} \" ")} и я ухожу"
Люк

@ Люк, ты пробовал это? Потому что я уверен, что сделал что-то подобное, и это не сработало. На моем телефоне сейчас так не могу проверить
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)}

Ungolfed:

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

Луа, 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 moreи and 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

Python 3, 68 байт

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


Это дает неверный вывод. Вы имели в виду *aвместо *5?
mbomb007

Да, я сделал, спасибо, я не понял, что я это поставил
sonrad10

1

CJam, 51 49 байтов

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

Попробуйте онлайн

Ungolfed:

" 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, чтобы сохранить один байт
Business Cat

1
Вот некоторые другие приемы, чтобы сократить это далее: tio.run/nexus/cjam#@6/… ... Я начал с того, что старался избегать \", имея одну строку и добавляя "к обоим концы с `. Затем мне нужно было разделить строку, что я не мог сделать с длиной и /, потому что первая часть короче. Поэтому я использовал перевод строки в качестве разделителя и сделал N/. Поскольку теперь у нас есть обе части в списке, мы можем легко повторить их обе сразу f*. И LULвставляется в конце с помощью простого соединения ( *).
Мартин Эндер

Это круто, но это больше похоже на совершенно другое решение, чем сокращение этого дальше :) Это моя первая программа на CJam, так что я не знал этих трюков, спасибо. Должен ли я добавить это решение к ответу?
Вольфрам

@Wolfram Это зависит от вас. Я рад, что вы используете его (иначе я бы не прокомментировал;)).
Мартин Эндер

@ Вольфрам, приятное первое усилие! Вы, вероятно, получите много пользы, пройдя через ответ Мартина
A 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 программы почти всегда короче функций.
Тит

1

C ++, 80 + 16 = 96 байт

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

#include<string> - +16

Ungolfed:

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

Я не совсем знаком с тем, как работает этот синтаксис, и я не могу найти его или каких-либо примеров в документации.
Павел
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.