Ще один 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, виведіть вкладені Nчасом макарони 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
@Rod: Ні, ти не можеш.
shooqie

27
Назва цього виклику дуже незручна для німецьких мовців ...
Пакк

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 Точно
Rod

Для x = 0 це дає "U", але має дати "Ще один LUL і я вийшов".
Вольфрам

3
@Wolfram Це 1-індексація, додав цю інформацію у відповідь
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"є істинна, а 0помилкова. Найпростіший спосіб впоратися з цим - поставити +перед, this.valueколи ви проходите його.
Патрік Робертс

@PatrickRoberts Спасибі, я не знаю, чому у мене зайве inputполе :)
Kritixi Lithos

Добре, я, мабуть, спробував би використовувати .replace.
ETHproductions

Стек переповнюється, коли число від’ємне.
програміст5000

@ programmer500
Введений номер

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, натиснувши кілька копій "Ще однієї" на стек (знову в зворотному порядку). І знову кожен додатковий примірник відокремлюється від попереднього цитатою.
*Після того, як другий цикл буде завершений, вся фраза зараз знаходиться в стеці (зворотним ходом), тому нам просто потрібно її виписати.


Гарне використання get to push a ". Дякую за пояснення
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 Lithos та hvd , за, о, Масивну допомогу.


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

Це коротше. І я думаю, що вам може знадобитися включити <string>імпорт імпорту до облікового запису, не впевнений
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

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

Пітон, 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

Математика, 69 68 байт

Дякуємо Мартіну Ендеру за збереження 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]]&
Мартін Ендер

Ага! [[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і
вкладати

Як щодо $ "ще один {(? П <1" LUL ": $" \ "{т (- п)} \" ")} і я з"
Люк

@Luc ти це спробував? Тому що я впевнений, що я зробив щось подібне, і це не спрацювало. На моєму телефоні зараз не можна перевірити
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

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

Зіставлено, 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

Пітон 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<

Спробуйте в Інтернеті

Безголівки:

" 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 Це залежить від вас. Я радий за те, що ви користуєтесь цим (інакше я б не коментував;)).
Мартін Ендер

@Wolfram приємного першого зусилля! Ви, мабуть, отримаєте багато користі, переглянувши відповідь Мартіна
A Simmons


1

Математика, 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

Безголівки:

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.