Bir tane daha LUL ve ben yokum


57

Meydan açıklaması

Twitch.tv adlı popüler bir akış sitesindeki bazı kanallarda, insanların sohbetlerde spam gönderme eğiliminde olduklarını belirten yaygın bir mesaj olan kişiler "LUL" mesajlarını spam gönderir

One more LUL and I'm out

LUL , akışta komik bir şey olduğunu ifade etmek için kullanılan popüler bir ifadedir .

Kısa süre sonra rutubetli memler potansiyellerini ve kopyalanan makarnanın bir parodisini gösterdi:

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

Aynı mesaj kendi içinde yuvalanmış. Negatif olmayan bir tamsayı verildiğinde N, Naşağıdaki deseni izleyerek LUL-makarnanın kendi iç içe geçmiş zamanlarını kendiniz verin .

Standart kuralları uygulanır, bayt cinsinden en kısa kod kazanır.

Örnek giriş / çıkış

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

notlar

  • Lider / takip eden yeni hatlara izin verilir
  • Büyük harf kullanımı korunmalı
  • Kodunuz tam bir program veya işlev olabilir
  • Yazdırmak yerine, seçtiğiniz dilde bir dize ya da eşdeğerini geri döndürebilirsiniz.
  • Yerine dizin 1oluşturabilirsiniz0

6
"başlangıçta ve sonda da ekleyebilir miyim ?
Rod

8
@Rod: Hayır, yapamazsınız.
shooqie

27
Hollandalı konuşmacılar için bu zorluğun başlığı çok garip ...
Pakk

5
@Pakk Ama bu doğru. Bir LUL görüyorum, ve ben burdayım ...
steenbergh

7
Bu You Only YOLO once --> YOYOLOO. You Only YOYOLOO Once --> YOYOYOLOOO
YOLO'ya

Yanıtlar:


24

Python 2 , 56 bayt

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

Çevrimiçi deneyin!
1 indeksli


3
[1:-1]Sonunda başlangıçta ve sonunda çift tırnak keser varsayalım ?
Nzall

Tam olarak @Nzall
Rod

X = 0 için bu 'U' verir, ancak "Bir tane daha LUL ve dışarıdayım" vermelidir.
Wolfram

3
@Wolfram 1 indeksli, cevaba bu bilgiyi ekledi
Rod

18

JavaScript, 57 56 54 52 bayt

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

Test Parçacığı:

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>

Bir nedenden ötürü, atıştırma pasajı, giriş olduğunda engelleyici oluyor 0, ancak bu başka türlü çalışıyor. Öyle çağır f(4).

açıklama

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"

Öncelikle inputgeçersiz bir HTML özelliği, bunu kaldırmak isteyebilirsiniz. İkincisi, girişin bir sayı değil bir dize olarak alınmasıdır. Öyleyse "0"sahtekarlık ise 0sahtekarlıktır. Bunu yapmanın en kolay yolu, onu geçerken +önüne koymaktır this.value.
Patrick Roberts

@PatrickRoberts Teşekkürler, neden fazladan bir alanım olduğunu bilmiyorum input:)
Kritixi Lithos

Güzel, muhtemelen kullanmayı denerdim .replace.
ETH Sunumları

Sayı negatif olduğunda yığın taşması.
programmer5000

@ programmer500 Girdi numarasının negatif olmadığı bir sorun olmadığından verildi
Kritixi Lithos

11

Befunge, 91 bayt

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

Çevrimiçi deneyin!

Bu, kaynak kodun çeşitli bileşen parçalarının vurgulanmasıyla birlikte dökümüdür.

Yürütme yolları vurgulanmış olarak kaynak kodu

*Tekrar sayısını N okuyarak ve iki kopyasını belleğe kaydederek başlıyoruz .
*Daha sonra ilk N geri sayım yaparız , "ve ben dışarıdayım" ın birden çok kopyasını tersten yığının üzerine iteriz. Her ek kopya bir alıntı ile bir öncekinden ayrılmıştır. Alıntı, sıra ile üretilir 90g(temelde kaynağın ilk satırından bir kopya okunur), çünkü bunu yapmanın en kısa yolu.
*Bu ilk döngü tamamlandığında, "LUL" yu istifin üzerine itiyoruz (teknik olarak bu ters, ancak bir palindrome olduğunda açıkça bir fark yaratmıyor).
*Sonra, sağ sınır boyunca, oyun alanının soluna ve sonra tekrar geri sararak başka bir döngümüz var. Bu sefer ikinci N'yi geri sayıyoruz."Bir tane daha" birden fazla kopyasını yığına (yine tersine) iterek. Ve yine, her bir ek kopya bir alıntı ile bir öncekinden ayrılmıştır.
*İkinci döngü tamamlandığında, tüm cümle şimdi yığında (tersi), bu yüzden yazmamız yeterli.


Bir itme almak için güzel bir kullanım ". Açıklama için teşekkürler
MildlyMilquetoast

6

05AB1E , 30 29 bayt

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

Çevrimiçi deneyin!

Farklı sicim tipleri iyi karışmaz gibi görünüyor, bu yüzden bazı nedenlerden dolayı döngüyü iki kere sonlandırmam gerekiyor.


6

C ++, 118 + 16 = 134 bayt

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" kelimesini N kere bütün dizeye değiştirir.

Daha iyi golf oynayan var mı?

Çevrimiçi deneyin!

Massive teşekkür Kritixi Lithos ve KKH için, ah, Massive yardım.


@Kritixi Şimdi bir pasajı var.
Matthew Roh

Bu daha kısa. Ve sanırım <string>ithalat ifadesini yazılan tarihe dahil etmeniz gerekebilir , emin değilim
Kritixi Lithos

Ayrıca değiştirebilir for(int i=0;i<x;i++)içinfor(int i=0;i++<x;)
Kritixi Lithos

Ek olarak, 2 bayttan r.find("L")daha kısadır r.find("LOL"):)
Kritixi Lithos

Özyinelemeli sürümü: Çevrimiçi deneyin! Ayrıca TIO'daki üstbilgi ve altbilgiyi ek şeyler için kullanabilir ve ardından kodunuzu yalnızca bayt sayımında sayabilirsiniz.
nmjcman101

5

Javascript (ES6), 68 Bayt

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

Gibi ara f(n).

Buna benzer şekilde arayabilir f(n, "LUL")ve LUL'u istediğiniz kelimeyle değiştirebilirsiniz.


Soru sadece "LUL" istediğinden, metni değiştirme ve bazı baytları atma esnekliğini ortadan kaldırabilirsiniz. Yine de güzel bir çözüm, +1
Farhan Anam,

2
@FarhanAnam Bunun daha sonra düzenleyeceğim iyi bir başlangıç ​​yazısı olduğunu düşündüm, ancak gönderdikten sonra birisinin daha iyi bir cevap verdiğini gördüm ve golf oynamak için ne kadar uğraştığım önemli değil, her zaman cevaplarının üzerinde durdum. Bu yüzden burada sadece esneklikle bırakmam gerektiğini düşündüm, böylece birileri onunla biraz eğlensin.

5

V , 39 37 bayt

İkame metodunu bulmak için @KritixiLithos yardımı ile iki byte

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

Çevrimiçi deneyin!

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 ve LOL değildir;)
geisterfurz007

4

Java, 79 77 bayt

golfed:

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

Ungolfed, test ile:

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

Program çıktısı:

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 bayt kaydetmek için her ikisini "\""de '"'(tek karakter) olarak değiştirebilirsiniz.
Kevin Cruijssen

1
@KevinCruijssen teşekkürler, özlediğim bir şey olduğunu biliyordum.

3

Python, 79 bayt

Diğer cevaplardan daha uzun olsa da, özyinelemeli bir çözüm yapmak istedim.

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]

Çevrimiçi deneyin


3

C #, 125 bayt

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

Eğer kullanabilirsiniz acaba dize interpolasyon yerine Format...
Bob

İki bayt kaydetmek stringiçin değiştirin var.
devRicher

@devRicher 2 değişken
bildirdiğim için yapamam

@Bob Ben zaten kullanıyorum, başka bir yerde kullanabilir miyim emin değilim
TheLethalCoder

Hata! Fark etmedim, üzgünüm.
Bob

3

C, 140 111 bayt

Golf sorusundaki ilk girişimim .. Golf:

#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) sadece LUL verdiği için yanlış çıktı olduğunu farkettim. Bir sonraki girişim:

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

Örnek program (OSX’te GCC ile test edilmiştir):

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

Çıktı verir

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 bayt

Martin Ender'e, bulması zor 1 byte kaydettiği için teşekkür ederiz!

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

Adsız işlev, negatif olmayan bir tamsayı argümanı alarak ve bir dize döndürür. Nestilk argümana art arda bir fonksiyon uygular; Bu durumda, işlev argümanını uygun kelimeler ve tırnak işaretleri ile çevrelemektir. Zamanlardan başlıyoruz "LUL"ve tekrarlıyoruz N+1; Bu, tüm ifadeyi içine alan istenmeyen tırnak işaretleriyle sonuçlanır, ancak [[2]]yalnızca aralarındakileri tutar. Sonunda, ""<>sonuçta yoğun şekilde iç içe geçmiş listeyi tek bir dizeye dönüştürür.

Önceki gönderi:

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

1
Başlayarak byte'ı tıraş etmeyi başardı LUL:""<>Nest[{q="\"",{"One more ",#," and I'm out"},q}&,"LUL",#+1][[2]]&
Martin Ender

Aha! [[2]]! İşte bu ilk istenmeyen alıntıların üstesinden gelmek: D
Greg Martin

3

C #, 119 85 71 bayt

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

@Luc sayesinde 14 bayt kaydedildi


Çalışıyor gibi görünüyor (LINQPad üzerinden). Güzel. İç içe geçmiş dizgiler biraz yumuşak görünüyor, ancak ilk önce üçlü boğuluyor gibi görünüyor.
Bob

@Bob'u işe almaya çalışıyorum problemi alıntılar yüzünden ya da en azından buna neden olduğunu düşündüğümden kaynaklanıyor, bu yüzden ilkini çıkarıp string.Formatonları yuvalayamıyor
gibiyim

$ "Bir tane daha {(n <1?" LUL ": $" \ "{m (- n)} \" ")} ve ben yokum"
Luc

@ Luc bunu denedin mi? Çünkü benzer bir şey yaptığım ve işe yaramadığıma eminim. Şu an telefonumda test edemiyorum
TheLethalCoder

Herhangi bir durumda string.Format 'ı + ile 73 karakter elde etmek için değiştirebilirsiniz:
Chris F Carroll


2

R, 97 bayt

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 bayt

"Bir özyinelemeli işlev ve ben çıktım"

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

Düzenleme: Özyinelemeli olmayan bir yaklaşımın biraz daha kısa olduğu ortaya çıkar:

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 bayt

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

Açık dize girişimi. Tekrarlar "One moreve and I'm out"tam olarak + 1 kez girdi, aralarında bir arada LUL, ardından ilk ve son teklifi kaldırır.


1

Haskell, 51 bayt

1'den indeksler.

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

7
Bu, yanlış LULtırnak işaretleri yazdırıyor gibi görünüyor .
Zgarb

0 kullanarak dizin oluşturmak kolaydır f -1="LUL", ancak bir sürü yeni sembol olmadan ek tırnakların nasıl kaldırılacağını göremiyorum.
Wolfram

1

Ruby, 70 bayt

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

Her seferinde bir biçim dizgisi ile son dizgiyi çevreleyen basitçe, verilen miktar için döngüler.

Dizin birinden başlıyor.


1

Yığılmış, 54 bayt

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

Burada dene! "Function" kullanımı örneği:

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

56 bayt için bir tane:

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

1

Python 3, 68 Bayt

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


Bu yanlış çıktı verir. *aBunun yerine mi demek istediniz *5?
mbomb007

Evet yaptım, teşekkürler, şunu koymayı fark
etmemiştim

1

CJam, 51 49 bayt

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

Çevrimiçi deneyin

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

WBir bayt kaydetmek için -1 yerine kullanabilirsiniz
Business Cat

1
İşte bundan başka bu kısaltmak için diğer bazı hileler şunlardır: tio.run/nexus/cjam#@6/... ... Ben kaçınmaya çalışan tarafından başlatılmış \"tek bir sicim sahip ve ekleyerek "hem biter `. Sonra uzun bir süre yapamadığım ipi bölmem gerekiyordu /, çünkü ilk kısım daha kısa. Bu yüzden ayırıcı olarak linefeed kullandım ve yaptım N/. Artık bir listede her iki bölüme de sahip olduğumuz için, ikisini bir kerede kolayca tekrar edebiliriz f*. Ve LULsonunda basit bir join ( *) ile eklenir .
Martin Ender

Bu çok güzel, ama bunu daha da kısaltmaktan tamamen farklı bir çözüm gibi görünüyor :) Bu CJam'daki ilk programım, bu yüzden bu hileleri bilmiyordum, teşekkürler. Bu çözümü cevaba eklemeli miyim?
Wolfram

@Wolfram Bu size kalmış. Bunu kullanmana sevindim (aksi halde yorum yapmazdım;)).
Martin Ender

@Wolfram güzel bir ilk çaba! Martin'in cevabını kullanarak muhtemelen çok faydalanacaksınız
A Simmons 15


1

Mathematica, 65 63 Bayt

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

İki baytlık meydan okumayı fark ederek 1-indekslemeye izin verir.


1

PHP

Merhaba, bunu yapmanın iki yolunu buldum.

Değiştirme yolu 1 indeksli (121 bayt) .

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

Özyinelemeli yol (86 bayt) .

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

PHP'de programlar neredeyse her zaman işlevlerden daha kısadır.
Titus,

1

C ++, 80 + 16 = 96 bayt

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

Özyinelemeli olarak çağırır ve dize ekleme kullanır. Oldukça yalındır. Başka ne söyleyebilirim ki? Ungolfed versiyonu bile aslında bir astar.

Çevrimiçi deneyin!


1

Çedar , 71 bayt

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

Çevrimiçi deneyin!


Belki _ f ->bazı baytları kurtarabilecek sözdizimi ile özyinelemeyi deneyin
Downgoat

Ah, bu sözdiziminin nasıl çalıştığını gerçekten bilmiyorum ve dokümanlardaki örnekleri bulamıyorum.
Pavel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.