Golf kode untuk yang malas


10

Tujuan Anda dalam golf kode ini adalah untuk mengambil dua string, languagedan code (jika kode golf yang Anda tulis untuk ini adalah multiline, maka variabel ini akan menjadi multiline.) , Dan satu integer bytes,. Mereka mewakili variabel untuk bahasa pemrograman, jumlah byte yang dibutuhkan, dan kode itu sendiri.

Setelah itu, Anda akan memformatnya seperti pegolf kode melakukannya.

Variabel output adalah string multiline yang disebut answer.

Anda dapat menggunakan string multiline pada:

Jika Anda mencari Stack Overflow , Anda seharusnya dapat menemukan lebih banyak bahasa pemrograman yang mendukungnya.

Berikut ini adalah template dari penurunan harga output. The codevariabel dalam sebuah blok kode, dan ada header tingkat kedua.

## {language}, {bytes} bytes

     {code}

Berikut adalah hasil yang akan terlihat ketika disisipkan ke parser Markdown.

{bahasa}, {byte} byte

    {code}

Variabel diasumsikan sudah diisi sebagai bahasa yang Anda kodekan dalam entri kode golf Anda, jumlah byte yang dibutuhkan, dan kode aktual untuknya.

Berikut adalah contoh lain dari output sebagai kode, kali ini dengan variabel yang diisi:

## JavaScript, 1337 bytes

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

Ini adalah versinya sebagai blockquote:

JavaScript, 1337 byte

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

Bytes dapat dihapus dari kode Anda jika Anda menggunakan cara untuk mengatur teks <p>elemen dalam HTML dengan id result, seperti kode JavaScript berikut:

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

Pastikan juga menyertakan <p id="result"></p>bagian HTML di JSFiddle agar ini berfungsi.

Mencetak gol

Seperti semua pertanyaan , kode yang menggunakan jumlah byte paling sedikit adalah yang terbaik.


3
Apakah {code}akan menjadi kode multiline?
Adnan

8
"Variabel akan diisi sebagai bahasa tempat Anda memasukkan kode golf, jumlah byte yang diperlukan, dan kode aktual untuknya." Apakah saya satu-satunya yang menafsirkan ini sebagai variasi quine?
Primo

2
Karena jawaban menyelesaikan dua masalah yang sama sekali berbeda, saya menunda ini tidak jelas. Harap jelaskan apakah language, bytesdan codemerupakan input atau apakah ini merupakan varian quine di mana hal-hal itu harus cocok dengan kode penyelesaian itu sendiri. (Dan jika demikian, apakah secara langsung atau tidak langsung membaca bahwa kode sumber diperbolehkan, dan apakah built-in quine diperbolehkan.)
Martin Ender

2
Bisakah Anda juga mengklarifikasi pertanyaan Adnan apakah input codeitu sendiri dapat berisi umpan baris?
Martin Ender

2
@Peanut saya bingung. Bisakah kita berasumsi codetidak akan multiline, atau bukan? Harap tunjukkan bahwa dalam teks tantangan
Luis Mendo

Jawaban:



8

Java, 70 byte

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

Asumsikan b[0]adalah nama bahasa, b[1]adalah jumlah byte, dan b[2]adalah kode.

Membuatnya dapat dikompilasi biaya 9 byte, menghasilkan program 79-byte non-standalone:

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

Program monolitik setara adalah 103 byte:

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

Yang monolitik berfungsi dengan argumen baris perintah, dengan asumsi ini sama seperti program non-standalone:

  • Argumen pertama adalah nama bahasa
  • Argumen kedua adalah jumlah byte
  • Argumen ketiga adalah kode

Java (ekspresi lambda), 56 48 byte

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

Ini adalah java.util.function.Function<String[], String>.


Tidak satu pun dari program / fungsi ini yang menangani string multiline. Untuk melakukannya, cukup ganti b[2]dan A[2]dengan b[2].replace("\n","\n ")dan A[2].replace("\n","\n ")- melakukannya menambah 23 byte.


Saya tidak berada di dekat komputer sekarang untuk mengonfirmasinya, tetapi tidak bisakah Anda menggunakan \tatau sesuatu untuk mengganti 4 spasi setelah dua baris baru?
R. Kap

@ R.Kap Terkadang menggunakan tab alih-alih spasi membuat kekacauan di SE.
user8397947

Ah, begitu. Jadi apakah perhitungan byte mempertimbangkan \tdan bukan 4 spasi?
R. Kap

3
Kalahkan orangtua di lambda; Anda dapat menyimpan dua byte hanya dengan b->.
Brian McCutchon

2
Apa yang terjadi jika ada lebih dari satu baris kode?
Neil

5

V , 24 byte

Perhatikan bahwa ada spasi di akhir.

Program ini membuat asumsi bahwa {code}tidak akan ada beberapa baris.

Op telah mengklarifikasi, "kode" mungkin berupa string multiline. Versi 24 byte ini berfungsi:

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

Karena ini mengandung karakter yang tidak dapat dicetak, berikut ini adalah versi yang dapat dibaca:

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

Di mana <esc>karakter pelarian literal, mis 0x1B.


1
Tampaknya selalu seperti perjuangan terus-menerus antara Jolf dan V ...: 3
Conor O'Brien

4

Python 3.5, 40 33 byte:

( -7 bytes berkat beberapa klarifikasi dari Mego )

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

Fungsi lambda anonim yang mengambil input sebagai argumen posisional dalam format <function name>(String, Number, String)dan menghasilkan string multiline.

Cobalah secara Online! (Ideone)


2
Anda dapat memangkas beberapa byte jika Anda membuat daftar parameter *fdan menjatuhkan tuplepanggilan.
Mego

@Mego Sayangnya, itu tidak berhasil, seperti yang saya dapatkan TypeError: not enough arguments for format stringsetiap kali saya menjalankannya seperti itu.
R. Kap

Bekerja dengan baik ketika saya mencobanya - Anda harus mengambil argumen posisi alih-alih argumen daftar. Selain itu, Anda dapat menjatuhkan ruang antara #dan %.
Mego

@Mego Wow, itu sangat aneh, karena ketika saya mencobanya di PyCharm dengan Python 3.5.1, saya mendapatkan kesalahan. Itu sangat membingungkan saya. Juga, ruang antara #dan lambda diperlukan, atau jadi saya pikir.
R. Kap

@Mego Telah diperbarui.
R. Kap

4

JavaScript (ES6), 56 byte

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

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

Juga, untuk tertawa, inilah jawaban yang memformatnya sendiri untuk saya:

JavaScript (ES6), 68 byte

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

Cetak hasil f().


@ PatrickRoberts Ups, saya tidak benar-benar memeriksa panjangnya, saya hanya menyalin dan menempelnya, lalu menambahkan 6 byte untuk (ES6). (Mengapa Cᴏɴᴏʀ O'Bʀɪᴇɴ hanya repot untuk mengubah panjangnya?)
Neil

4

C #, 40 38 byte

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

C # lambda di mana input dan output adalah string.


C #, 59 byte

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

Dengan penanganan jawaban multiline.


C #, 71 byte

Solusi 38 byte yang mencetak sendiri

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

\t""+c;";

Cobalah secara online


3

Mathematica, 40 byte

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

    ",#3]&

Fungsi anonim. Membawa bahasa, jumlah byte, dan program sebagai input dan mencetak body ke STDOUT.


2

Jolf, 24 22 byte

"## ¦i, ¦j Ξ/u3

    ¦

Tidak banyak yang bisa dijelaskan di sini. ¦berarti input yang diinterpolasi.

Coba di sini! Output untuk input dalam tautan adalah:

## Jolf, 24 bytes

    some filler code I think

Input adalah sebagai:

name

number

"code"

1

MATL , 28 27 byte

1 byte disimpan berkat saran dari NinjaBearMoneky

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

Cobalah online!

Blok kode harus dalam satu baris.

Penjelasan

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

Gangguan Umum, 57 byte

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

Juga, untuk bersenang-senang, di sini di bawah ini adalah potongan kode yang mencetak header untuk dirinya sendiri.

Gangguan Umum, 146 byte

#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 byte.

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

(Saya menulis posting itu dengan program ini, tetapi saya harus melarikan diri \ n ke \\ n)
Penjelasan:

"## "                         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 byte

Terima kasih kepada @NinjaBearMonkey karena telah menghapus 3 byte!

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

Blok kode harus dalam satu baris.

Cobalah online!

Penjelasan

'#_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 byte:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey

@NinjaBearMonkey Terima kasih! Diedit. Gagasan ini menyimpan satu byte juga untuk jawaban saya yang lain
Luis Mendo

0

Pyke, 25 byte

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

Coba di sini!

Atau

Pyke, 0 byte

Coba di sini! - klik tombol salin jawaban;)

EDIT - Ini hanya fitur situs web, itu curang (atau setidaknya saya akan menganggapnya demikian) karena tidak pernah mem-parsing AST dan program web mungkin tidak dianggap sebagai bagian dari bahasa karena tidak banyak berinteraksi dengan bahasa. (meskipun menjalankan interpreter Pyke)


Apa yang membuat versi 0 byte berfungsi?
haykam

Bisakah Anda menambahkan itu ke jawabannya? Saya tidak menghitung itu tetapi Anda masih bisa menyimpannya di sana.
haykam

Haimuddyfish, bisakah Anda memisahkannya menjadi dua jawaban?
haykam

@haykam jika ini untuk tujuan menerima jawaban, saya lebih suka tidak karena saya tidak berpikir solusi 0 byte dianggap sebagai benar-benar menggunakan Pyke dan terasa terlalu chesty
Blue

Saya tidak akan menerima jawaban itu.
haykam

0

Perl 5, 35 byte

Program penuh, ini mengambil input sebagai argumen baris perintah dalam urutan terbalik. Ini membutuhkan -M5.01, yang gratis.

say pop.', '.pop.' bytes

    '.pop

0

Emacs Lisp, 97 byte

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

Juga, karena terkadang sulit untuk menghindari tanda kutip dan yang tidak, contoh penggunaan yang menyalin string ke clipboard. (Tandai wilayah dan gunakan M-:)

Emacs Lisp, 184 byte

(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))))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.