Tembel golf için kod


10

Bu kod golfundaki amacınız iki dizgi almaktır languageve code (bunun için yazdığınız golf kodu çok satırlıysa, bu değişken çok satırlı olacaktır.) Ve bir tam sayı bytes. Bir programlama dili değişkenlerini, aldığı bayt sayısını ve kodun kendisini temsil ederler.

Bundan sonra, bunu bir golfçünün yaptığı gibi biçimlendireceksiniz.

Çıktı değişkeni, adlandırılan çok satırlı bir dizedir answer.

Çok satırlı dizeleri şunlarda kullanabilirsiniz:

Arama yaparsanız Yığın taşması , bunu destekleyen daha programlama dilleri bulmak mümkün olmalıdır.

İşte çıktı işaretlemesinin bir şablonu. codeDeğişken bir kod bloğu ve ikinci seviye başlığı vardır.

## {language}, {bytes} bytes

     {code}

Markdown ayrıştırıcısına yapıştırıldığında çıktının nasıl görüneceği aşağıda açıklanmıştır.

{dil}, {bayt} bayt

    {code}

Değişkenlerin, kod golf girişinizi kodladığınız dil, aldığı bayt sayısı ve bunun gerçek kodu olarak zaten doldurulduğu varsayılmaktadır.

Kodun çıktısının başka bir örneği, bu kez değişkenler dolduruldu:

## JavaScript, 1337 bytes

document.getElementById("foo").innerHTML = bar;

İşte bir blok alıntı olarak sürüm:

JavaScript, 1337 bayt

    document.getElementById("foo").innerHTML = bar;

Aşağıdaki JavaScript kodu gibi <p>kimliğe göre HTML'deki bir öğenin metnini ayarlamanın bir yolunu kullanırsanız, baytlar kodunuzdan çıkarılabilir result:

document.getElementById("result").innerHTML = answer;

Bunun çalışması için JSFiddle'ın<p id="result"></p> HTML bölümüne de eklediğinizden emin olun .

puanlama

Tüm soruları gibi, en az bayt kullanan kod en iyisidir.


3
Will {code}hiç bir satırlı kod olacak?
Adnan

8
"Değişkenler, kod golf girişinizi kodladığınız dil, aldığı bayt sayısı ve bunun gerçek kodu olarak doldurulur." Bunu bir kine varyasyonu olarak yorumlayan tek kişi ben miyim?
primo

2
Cevaplar tamamen farklı iki problem çözdüğü için, bunu belirsiz olarak bekletiyorum. Netleştirmek olsun lütfen language, bytesve codegirdi veya bu olmadığı bir olduğunu quine böyle şeyler çözme kodun kendisini aynı olmalıdır varyant. (Ve eğer öyleyse, doğrudan veya dolaylı olarak bu kaynak kodu okumaya izin verilip verilmeyeceği ve kine yerleşiklerine izin verilip verilmeyeceği.)
Martin Ender

2
Adnan'ın girdinin codekendisinin satır besleme içerip içermeyeceği sorusunu da netleştirebilir misiniz ?
Martin Ender

2
@Peanut kafam karıştı. codeÇok satırlı olmayacağını varsayabilir miyiz , değil mi? Lütfen itiraz metninde belirtin
Luis Mendo

Yanıtlar:



8

Java, 70 bayt

String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}

b[0]Dil adı, b[1]bayt sayısı ve b[2]kod olduğunu varsayar .

79 baytlık bağımsız bir programla sonuçlanacak şekilde 9 baytlık bir maliyete neden olur:

class a{String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}}

Eşdeğer monolitik program 103 bayt uzunluğundadır:

interface a{static void main(String[]A){System.out.print("## "+A[0]+", "+A[1]+" bytes\n\n    "+A[2]);}}

Monolitik olan, komut satırı bağımsız değişkenleriyle çalışır ve bunların bağımsız olmayan program gibi olduğunu varsayar:

  • İlk argüman dil adı
  • İkinci argüman bayt sayısıdır
  • Üçüncü argüman kod

Java (lambda ifadesi), 56 48 bayt

(b)->"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];

Bu bir java.util.function.Function<String[], String>.


Bu programların / işlevlerin hiçbiri çok satırlı dizeleri işlemez. Bunu yapmak için, sadece b[2]ve A[2]ile değiştirin b[2].replace("\n","\n ")ve A[2].replace("\n","\n ")- 23 bayt ekler.


Şu anda onaylamak için bir bilgisayarın yanında değilim, ancak \tiki satırdan sonra 4 boşluğun yerini alacak bir şey kullanamaz mısınız?
R. Kap

@ R.Kap Bazen boşluk yerine sekme kullanmak SE'de karışıklık yaratır.
user8397947

Ah, anlıyorum. Bayt sayısı \t4 boşluk değil , dikkate alınıyor mu?
R. Kap

3
Parenleri lambda üzerinde kaybet; sadece iki bayt kaydedebilirsiniz b->.
Brian McCutchon

2
Birden fazla kod satırı varsa ne olur?
Neil

5

V , 24 bayt

Sonunda bir boşluk olduğunu unutmayın.

Bu program {code}birden fazla satırda olmayacak varsayımını yapar .

Op açıkladı, "kod" çok satırlı bir dize olabilir. Bu 24 baytlık sürüm çalışır:

2é#á $á,JA bytes
vGî4é 

Bu yazdırılamaz bir karakter içerdiğinden, okunabilir sürüm:

2é#á $á,JA bytes
<esc>vGî4é<space>

<esc>Değişmez kaçış karakteri nerede , ör 0x1B.


1
Her zaman Jolf ve V arasında sürekli bir mücadele gibi görünüyor ...: 3
Conor O'Brien

4

Python 3,5, 40 33 bayt:

( Mego'dan bazı açıklamalar sayesinde -7 bayt )

lambda*f:'## %s, %s bytes\n\n\t%s'%f

Girdileri biçimdeki konum bağımsız değişkenleri olarak alan <function name>(String, Number, String)ve çok satırlı bir dize çıkaran anonim bir lambda işlevi .

Çevrimiçi Deneyin! (Ideone)


2
Parametre listesini yapar *fve tupleçağrıyı bırakırsanız birkaç bayt tıraş edebilirsiniz.
Mego

@Mego Ne yazık ki, bu işe yaramıyor, ben TypeError: not enough arguments for format stringböyle çalıştırdığımda elde ediyorum.
R. Kap

Denediğimde iyi çalışıyor - bir liste argümanı yerine konumsal argümanlar almanız gerekiyor. Ayrıca, arasında boşluk bırakın #ve %.
Mego

@Mego Wow, bu çok garip, çünkü Python 3.5.1 ile PyCharm'da denediğimde bir hata alıyorum. Bu beni çok karıştırdı. Ayrıca, #lambda ile lambda arasındaki boşluk gereklidir, ya da sanırım.
R. Kap

@Mego Güncellendi.
R. Kap

4

JavaScript (ES6), 56 bayt

(l,b,c)=>`## ${l}, ${b} bytes

`+c.replace(/^/gm,`    `)

Ayrıca, kahkahalar için, benim için kendini biçimlendiren bir cevap:

JavaScript (ES6), 68 bayt

f=_=>`## JavaScript (ES6), ${`${f}`.length+3} bytes\n\n    f=${f};`;

Sonucunu yazdırın f().


@PatrickRoberts Oops, aslında uzunluğu kontrol etmedim, sadece kopyalayıp yapıştırdım, daha sonra için 6 bayt ekledim (ES6). (Cᴏɴᴏʀ O'Bʀɪᴇɴ neden sadece uzunluğu değiştirmekle uğraştı?)
Neil

4

C #, 40 38 bayt

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c;

Girdi ve çıktının dizgiler olduğu C # lambda.


C #, 59 bayt

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c.Replace("\n","\n\t");

Çok satırlı bir cevapla.


C #, 71 bayt

Kendini basan 38 baytlık çözüm

()=>$"## C#, 38 bytes\n\n\t"+@"(a,b,c)=>$""## {a}, {b} bytes

\t""+c;";

Onları çevrimiçi deneyin


3

Mathematica, 40 bayt

Print["## ",#,", ",#2,"bytes

    ",#3]&

Anonim işlev. Dili, bayt sayısını alır ve girdi olarak programlar ve gövdeyi STDOUT'a yazdırır.


2

Jolf, 24 22 bayt

"## ¦i, ¦j Ξ/u3

    ¦

Burada açıklanacak fazla bir şey yok. ¦enterpolasyonlu girdi anlamına gelir.

Burada deneyin! Bağlantıdaki giriş için çıktı:

## Jolf, 24 bytes

    some filler code I think

Girdi aşağıdaki gibidir:

name

number

"code"

1

MATL , 28 27 bayt

@ NinjaBearMoneky'nin önerisi sayesinde 1 bayt kaydedildi

35tOj', 'j' bytes'10t4Z"j&h

Çevrimiçi deneyin!

Kod bloğu tek bir satırda olmalıdır.

açıklama

35t           % Push 35 (ASCII for '#') twice
0             % Push 0. When converted to char, it will be displayed as a space
j             % Input string (language name)
', '          % Push this string
j             % Input string (byte count)
' bytes'      % Push this string
10t           % Push 10 (ASCII for linefeed) twice
4Z"           % Push string containing four spaces
j             % Input string (code)
&h            % Concatenate everything into a string. Implicitly display

0

Ortak Lisp, 57 bayt

(lambda(L b c)(format()"## ~A, ~A bytes~%~%    ~A"L b c))

Ayrıca, eğlence için, aşağıda kendi başına bir başlık yazdıran bir kod snippet'i bulunmaktadır.

Ortak Lisp, 146 bayt

#1=(PROGN
(SETF *PRINT-CIRCLE* T)
(LET ((S (FORMAT NIL "~S" '#1#)))
  (FORMAT NIL "## Common Lisp, ~A bytes~%~%    ~A" (LENGTH S) S)))


0

hashmap , 29 bayt.

"## "i", "h" bytes.\n\n    "i

(Bu yazıyı programla birlikte yazdım, ancak \ n \ 'den kaçmak zorunda kaldım)
Açıklama:

"## "                         Push string
     i", "                    Push input and string
          h" bytes.\n\n    "i Push input as number and string, then the input.

0

CJam , 26 23 bayt

@NinjaBearMonkey'e 3 bayt kaldırdığı için teşekkürler!

'#_Sl',Sl" bytes"N_S4*l

Kod bloğu tek bir satırda olmalıdır.

Çevrimiçi deneyin!

açıklama

'#_S       e# Push character "#" twice, then a space
l          e# Read line from input
',S        e# Push a comma, then a space
l          e# Read line from input
" bytes"   e# Push this string
N_S4*      e# Push newline twice, then four spaces
l          e# Read line from input. Implicitly display 

23 bayt:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey

@NinjaBearMonkey Teşekkürler! Düzenlenen. Bu fikir diğer cevabım için de bir bayt kurtardı
Luis Mendo

0

Pyke, 25 bayt

"##"Q", "z" bytes"skd4*z+

Burada deneyin!

Veya

Pyke, 0 bayt

Burada deneyin! - cevaplamayı kopyala düğmesini tıklayın;)

DÜZENLEME - Bu sadece web sitesinin bir özelliği, hile (ya da en azından ben öyle düşünürdüm) çünkü bir AST'yi ayrıştırmaz ve web programı, dil ile çok fazla etkileşime girmediği için muhtemelen dilin bir parçası olarak kabul edilmez. (Pyke yorumlayıcısını çalıştırmasına rağmen)


0 bayt sürümünü çalıştıran nedir?
haykam

Cevaba ekleyebilir misiniz? Bunu saymıyorum ama yine de orada tutabilirsiniz.
haykam

Hey muddyfish, bunları iki cevaba ayırabilir misin?
haykam

@haykam bu bir yanıtı kabul etmek amacıyla ise, ben 0 bayt çözüm aslında Pyke kullanarak sayılır ve çok göğüslü hissediyor sanmıyorum
Mavi

Bu cevabı kabul etmeyeceğim.
haykam

0

Perl 5, 35 bayt

Tam bir program, girişi tersine komut satırı bağımsız değişkenleri olarak alır. -M5.01Ücretsiz olan gerektirir .

say pop.', '.pop.' bytes

    '.pop

0

Emacs Lisp, 97 bayt

(lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))

Ayrıca, bazen tırnaklardan kaçmak zor olabileceğinden ve ne olmadığı için, dizeyi panoya kopyalayan bir kullanım örneği. (Bölgeyi işaretle ve kullanM-: )

Emacs Lisp, 184 bayt

(kill-new ((lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))"Emacs Lisp"(buffer-substring-no-properties(region-beginning)(region-end))))
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.