Jeszcze jeden LUL i nie ma mnie

57

Opis wyzwania

Na niektórych kanałach popularnego serwisu streamingowego twitch.tv powszechna wiadomość, że ludzie spamują na czacie, aby nakłonić innych do spamowania „LUL” to

One more LUL and I'm out

LUL to popularna emotka używana do wyrażenia, że ​​w strumieniu wydarzyło się coś śmiesznego.

Wkrótce wilgotne memy pokazały swój potencjał i powstała parodia kopiowanego makaronu:

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

To jest ta sama wiadomość zagnieżdżona w sobie. Biorąc pod uwagę nieujemną liczbę całkowitą N, wyprowadzaj Nczas zagnieżdżenia makaronu LUL sam w sobie zgodnie z poniższym wzorem.

Obowiązują standardowe zasady , wygrywa najkrótszy kod w bajtach.

Przykładowe wejście / wyjście

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

Notatki

  • Wiodące / końcowe znaki nowej linii są dozwolone
  • Wielkie litery muszą być zachowane
  • Twój kod może być pełnym programem lub funkcją
  • Zamiast drukowania możesz zwrócić ciąg znaków lub jego odpowiednik w wybranym języku
  • Państwo może indeks z 1zamiast0
shooqie
źródło
6
czy mogę dodać również "na początku i na końcu?
Rod
8
@Rod: Nie, nie możesz.
shooqie,
27
Tytuł tego wyzwania jest bardzo niewygodny dla osób mówiących po holendersku ...
Pakk
5
@Pakk Ale to prawda. Widzę LUL i jestem stąd ...
steenbergh
7
Można to rozszerzyć na YOLO: You Only YOLO once --> YOYOLOO. You Only YOYOLOO Once --> YOYOYOLOOOitd.
DJMcMayhem

Odpowiedzi:

24

Python 2 , 56 bajtów

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

Wypróbuj online!
Jest indeksowany 1

Pręt
źródło
3
Zakładam, że [1:-1]na końcu przycina podwójne cudzysłowy na początku i na końcu?
Nzall
@Nzall Precisely
Rod
Dla x = 0 daje to „U”, ale powinno dać „Jeszcze jeden LUL i nie ma mnie”.
Wolfram
3
@Wolfram Jest 1-indeksowany, dodał tę informację do odpowiedzi
Rod
18

JavaScript, 57 56 54 52 bajty

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

Fragment testowy:

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>

Z jakiegoś powodu fragment kodu przekąski jest błędny, gdy dane wejściowe są dostępne 0, ale działa to inaczej. Nazwij to jak f(4).

Wyjaśnienie

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"
Kritixi Lithos
źródło
Po pierwsze, inputjest to nieprawidłowy atrybut HTML, który może chcieć go usunąć. Po drugie, ponieważ pobiera dane wejściowe jako ciąg, a nie liczbę. Tak "0"jest prawdą, podczas gdy 0jest fałszem. Najłatwiejszym sposobem na poradzenie sobie z tym jest postawienie +przed sobą, this.valuekiedy go mijasz.
Patrick Roberts,
@PatrickRoberts Dzięki, nie wiem, dlaczego mam dodatkowe inputpole :)
Kritixi Lithos
Fajnie, prawdopodobnie spróbowałbym użyć .replace.
ETHproductions
Stos przepełnia się, gdy liczba jest ujemna.
programista
@ programmer500 Podany numer wejściowy ma być nieujemny, więc nie stanowi to problemu
Kritixi Lithos
11

Befunge, 91 bajtów

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

Wypróbuj online!

Jest to podział kodu źródłowego z wyróżnieniem różnych części składowych.

Kod źródłowy z podświetlonymi ścieżkami wykonania

*Zaczynamy od odczytania liczby powtórzeń N i zapisania dwóch duplikatów w pamięci.
*Następnie odliczamy pierwsze N , wypychając wiele kopii „i nie ma mnie” na stosie w odwrotnej kolejności. Każda dodatkowa kopia jest oddzielona od poprzedniej cytatem. Cytat jest generowany z sekwencją 90g(w zasadzie odczytywanie kopii z pierwszego wiersza źródła), ponieważ jest to najkrótszy sposób, aby to zrobić.
*Po zakończeniu pierwszej pętli wciskamy „LUL” na stos (technicznie jest to odwrotnie, ale oczywiście nie ma znaczenia, gdy jest to palindrom).
*Następnie mamy kolejną pętlę, owijającą się przez prawą granicę, na lewo od pola gry, a następnie z powrotem. Tym razem odliczamy drugie N., wypychając wiele kopii „Jeszcze jednego” na stos (ponownie w odwrotnej kolejności). I znowu, każda dodatkowa kopia jest oddzielona od poprzedniej cytatem.
*Po zakończeniu drugiej pętli cała fraza znajduje się teraz na stosie (w odwrotnej kolejności), więc po prostu musimy ją zapisać.

James Holderness
źródło
Niezłe użycie get push ". Dzięki za wyjaśnienie
MildlyMilquetoast
6

05AB1E , 30 29 bajtów

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

Wypróbuj online!

Różne typy łańcuchów nie wydają się dobrze mieszać, więc z jakiegoś powodu muszę dwukrotnie zakończyć pętlę.

Emigna
źródło
6

C ++, 118 + 16 = 134 bajtów

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

zamienia „LUL” na cały ciąg N razy.

Czy ktoś ma lepsze golfa?

Wypróbuj online!

Ogromne podziękowania dla Kritixi Lithos i hvd za ogromną pomoc.

Matthew Roh
źródło
@Kritixi Teraz ma fragment kodu.
Matthew Roh
To jest krótsze. I myślę, że może być konieczne dołączenie instrukcji <string>importu do bajtu, nie jestem pewien
Kritixi Lithos
Ponadto można zmienić for(int i=0;i<x;i++)dofor(int i=0;i++<x;)
Kritixi Lithos
Dodatkowo r.find("L")jest krótszy niż r.find("LOL")o 2 bajty :)
Kritixi Lithos
Wersja rekurencyjna: Wypróbuj online! Możesz także użyć nagłówka i stopki w TIO do dodatkowych rzeczy, a następnie policzyć swój kod tylko w liczbie bajtów.
nmjcman101
5

JavaScript (ES6), 68 bajtów

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

Zadzwoń jak f(n).

Możesz także nazwać to jak f(n, "LUL")i zastąpić LUL dowolnym słowem, które chcesz.


źródło
Ponieważ pytanie dotyczy tylko „LUL”, prawdopodobnie możesz wyeliminować elastyczność zmiany tekstu i oddzielić kilka bajtów. W każdym razie fajne rozwiązanie, +1
Farhan Anam
2
@FarhanAnam Myślałem, że to dobry post, który potem zredaguję, ale po opublikowaniu zobaczyłem, że ktoś opublikował lepszą odpowiedź i bez względu na to, jak bardzo starałem się w golfa, zawsze otrzymałem odpowiedź. Pomyślałem więc, że powinienem zostawić to tutaj z elastycznością, aby ktoś mógł się z tym bawić.
5

V , 39 37 bajtów

Dwa bajty za pomocą @KritixiLithos do wymyślenia metody podstawiania

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

Wypróbuj online!

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                             /".."
nmjcman101
źródło
To LUL, a nie LOL;)
geisterfurz007
4

Java, 79 77 bajtów

Gra w golfa:

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

Nie golfowany, z testem:

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

Wyjście programu:

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

źródło
Możesz zmienić oba "\""na '"'(pojedyncze znaki), aby zapisać 2 bajty.
Kevin Cruijssen
1
@KevinCruijssen dzięki, wiedziałem, że coś mi umknęło.
3

Python, 79 bajtów

Chciałem tylko zrobić rozwiązanie rekurencyjne, mimo że jest ono dłuższe niż inne odpowiedzi.

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]

Wypróbuj online

mbomb007
źródło
3

C #, 125 bajtów

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");};
TheLethalCoder
źródło
Zastanawiam się, czy można użyć interpolacji ciągów zamiast Format...
Bob
Zmień, stringaby varzapisać dwa bajty.
devRicher
@devRicher Nie mogę, ponieważ deklaruję 2 zmienne
TheLethalCoder
@ Bob Już go używam, nie jestem pewien, czy mogę go użyć w innym miejscu
TheLethalCoder
Ups, nie zauważyłem, przepraszam.
Bob
3

C, 140 111 bajtów

Moja pierwsza próba pytania o golfa. Grał w golfa:

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

Zrozumiałem, że jest to zły wynik, ponieważ q (0) po prostu daje LUL. Następna próba:

#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")}

Przykładowy program (przetestowany z GCC na 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;
}

Daje wynik

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
Ahemone
źródło
3

Mathematica, 69 68 bajtów

Podziękowania dla Martina Endera za uratowanie 1 trudnego do znalezienia bajtu!

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

Funkcja bez nazwy, która przyjmuje nieujemną liczbę całkowitą i zwraca ciąg znaków. Neststosuje funkcję wielokrotnie do początkowego argumentu; w tym przypadku funkcją jest otoczenie argumentu odpowiednimi słowami i cudzysłowami. Zaczynamy od czasów "LUL"iteracyjnych N+1; skutkuje to niechcianymi znakami cudzysłowu otaczającymi całą frazę, ale [[2]]zachowuje tylko to, co między nimi. Na koniec ""<>zamienia wynikową mocno zagnieżdżoną listę w pojedynczy ciąg.

Poprzednie zgłoszenie:

""<>Nest[{o,q="\"",#,q,a}&,{o="One more ","LUL",a=" and I'm out"},#]&
Greg Martin
źródło
1
Udało się ogolić bajt, zaczynając od LUL:""<>Nest[{q="\"",{"One more ",#," and I'm out"},q}&,"LUL",#+1][[2]]&
Martin Ender
Aha! [[2]]! Oto jak ominąć pierwsze niepożądane cytaty: D
Greg Martin
3

C #, 119 85 71 bajtów

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

Zaoszczędź 14 bajtów dzięki @Luc

TheLethalCoder
źródło
Wygląda na to, że działa (przez LINQPad). Miły. Zagnieżdżone wstawiane ciągi brzmią nieco niepewnie, ale wygląda na to, że najpierw dusi się w trójce.
Bob
@ Bob Problem, który próbuję sprawić, by zadziałał, wynika z cytatów, a przynajmniej tak myślę, że to powoduje, więc nie mogę usunąć pierwszego string.Formati zagnieździć ich
TheLethalCoder
Co powiesz na $ „Jeszcze jeden {(n <1?" LUL ": $" \ "{m (- n)} \" ")} i nie ma mnie
Luc
@Luc tego próbowałeś? Bo jestem pewien, że zrobiłem coś podobnego i to nie zadziałało. Na moim telefonie teraz nie mogę przetestować
TheLethalCoder
W każdym przypadku możesz zastąpić ciąg znaków. Sformatuj z +, aby uzyskać 73 znaki:
Chris F Carroll
2

R, 97 bajtów

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

Nie golfowany:

function(n) {
  s = "One more LUL and I'm out";
  while(n) {
    s = sub("LUL", paste0('"', s, '"'), s);
    n = n - 1
  };
  cat(s)
}
Sven Hohenstein
źródło
2

R, 100 97 92 bajtów

„Jeszcze jedna funkcja rekurencyjna i nie ma mnie”

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

Edycja: Okazuje się, że podejście nierekurencyjne jest nieco krótsze:

x="One more ";y=" and I'm out";cat(x,rep(c('"',x),n<-scan()),"LUL",rep(c(y,'"'),n),y,sep="")
Billywob
źródło
2

Rubinowy, 51 bajtów

Jeden indeksowany. Wypróbuj online

->n{['One more ']*n*?"+'LUL'+[" and I'm out"]*n*?"}
Wartość tuszu
źródło
2

PowerShell , 72 67 bajtów

"$('"One more '*($c=1+"$args"))LUL$(' and I''m out"'*$c)".Trim('"')

Wypróbuj online!

briantist
źródło
"$('"One more '*($c=1+"$args"))LUL$(' and I''m out"'*$c)".Trim('"')ogolone 5 za pomocą zaworu () zamiast łączyć pominąć END "„S
colsw
@ConnorLSW nice! dobry telefon, dziękuję
briantistka
1

Lua, 101 bajtów

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)))

Oczywista próba ciągu. Powtarza się "One morei and I'm out"dokładnie wprowadza + 1 razy, z LULodstępem pomiędzy, a następnie usuwa pierwszy i ostatni cytat.

devRicher
źródło
1

Haskell, 51 bajtów

Indeksy od 1.

f 0="LUL";f n="One more \""++f(n-1)++"\" and I'm out"
gntskn
źródło
7
To wydaje się niepoprawnie drukować LULw cudzysłowie.
Zgarb
Łatwo zrobić indeks od 0 za pomocą f -1="LUL", ale nie widzę, jak usunąć dodatkowe cudzysłowy bez wielu nowych symboli.
Wolfram
1

Rubinowy, 70 bajtów

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

Po prostu zapętla się podaną kwotę, otaczając ostatni ciąg za każdym razem ciągiem formatu.

Indeks zaczyna się od pierwszej.

NO_BOOT_DEVICE
źródło
1

Skumulowane, 54 bajty

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

Wypróbuj tutaj! Przykładowe użycie „funkcji”:

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

Jeden na 56 bajtów:

@n'One more LUL and I''m out':@o['LUL' '"'o'"'+ +repl]n*
Conor O'Brien
źródło
1

Python 3, 68 bajtów

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

sonrad10
źródło
To daje niepoprawne wyjście. Miałeś na myśli *azamiast *5?
mbomb007
Tak, zrobiłem to, dziękuję, nie zdawałem sobie sprawy, że to
powiem
1

CJam, 51 49 bajtów

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

Wypróbuj online

Nie golfowany:

" 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
Wolfram
źródło
Możesz użyć Wzamiast -1, aby zapisać jeden bajt
Business Cat
1
Oto kilka innych sztuczek, które mogą to jeszcze bardziej skrócić: tio.run/nexus/cjam#@6/ ... ... Zacząłem od unikania \"jednego łańcucha i dodania "do niego obu końców `. Potem musiałem rozdzielić strunę, czego nie mogłem zrobić z długością, a /ponieważ pierwsza część jest krótsza. Więc użyłem kanału jako separatora i tak zrobiłem N/. Ponieważ mamy teraz obie części na liście, możemy z łatwością powtórzyć obie z nich jednocześnie f*. I LULjest wstawiany na końcu prostym złączeniem ( *).
Martin Ender
To fajnie, ale wygląda bardziej na zupełnie inne rozwiązanie niż dalsze skracanie :) To mój pierwszy program na CJam, więc nie znałem tych sztuczek, dzięki. Czy powinienem dodać to rozwiązanie do odpowiedzi?
Wolfram
@Wolfram To zależy od Ciebie. Cieszę się, że go używasz (inaczej nie skomentowałbym;)).
Martin Ender,
@Wolfram miły pierwszy wysiłek! Prawdopodobnie wiele skorzystasz z odpowiedzi Martina
A Simmons,
1

Groovy, 54 bajty

{x->('"One more '*x+'LUL'+' and I\'m out\"'*x)[1..-2]}

Całkiem proste, takie same jak odpowiedź pytona, ale o 2 bajty krótsze. Jest również indeksowany 1.

Wypróbuj online!

Gurupad Mamadapur
źródło
1

Mathematica, 65 63 bajtów

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

Dwa bajty wyłączone, zauważając, że wyzwanie umożliwia indeksowanie 1.

Simmons
źródło
1

PHP

Witam, znalazłem do tej pory dwa sposoby na zrobienie tego.

Sposób zastępowania 1-indeksowany (121 bajtów) .

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

Sposób rekurencyjny (86 bajtów) .

function r($n){$v=($n==0)?'LUL':'"'.r($n-1).'"';return'One more '.$v.' and i\'m out';}
Antoine B.
źródło
W php programy są prawie zawsze krótsze niż funkcje.
Tytus
1

C ++, 80 + 16 = 96 bajtów

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

#include<string> - +16

Nie golfowany:

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

Wywołuje się rekurencyjnie i używa dodawania łańcucha. Całkiem prosto. Mam na myśli, co jeszcze mogę powiedzieć? Nawet wersja bez golfa jest w zasadzie jednowarstwowa.

Wypróbuj online!

BrainStone
źródło
1

Cheddar , 71 bajtów

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

Wypróbuj online!

Pavel
źródło
Być może spróbuj rekurencji ze _ f ->składnią, która może zaoszczędzić trochę bajtów
Downgoat
Nie jestem tak naprawdę zaznajomiony z tym, jak działa ta składnia i nie mogę jej znaleźć ani żadnych przykładów w dokumentacji.
Pavel