Buat output dua kali panjang kode

85

Tantangan

Tulis program lengkap yang menulis dua kali lebih banyak byte ke output standar sebagai panjang program.

Aturan

  • Program harus menulis karakter ASCII ke output standar.

  • Isi dari output tidak masalah.

  • Outputnya, diukur dalam byte, harus tepat dua kali panjang program, juga diukur dalam byte, kecuali jika Anda memenuhi bonus.

  • Setiap baris baru yang tertinggal dimasukkan dalam jumlah byte keluaran.

Bonus

Program Anda secara opsional dapat mengambil nomor n,, sebagai masukan. Jika demikian, output harus persis n * program lengthbyte. Anda dapat mengasumsikan bahwa n akan selalu menjadi bilangan bulat positif. Jika tidak ada input yang disediakan, nharus default ke 2.

Jika Anda melakukan ini, Anda dapat mengurangi 25 byte dari skor Anda.

Kemenangan program terpendek.

Batasan

  • Tidak ada celah standar.

  • Panjang program minimal harus 1 byte.

  • Tidak menambahkan spasi putih yang tidak perlu ke kode sumber untuk mengubah panjangnya. Demikian pula, komentar tidak masuk hitungan.

  • Kecuali Anda memenuhi bonus, program tidak boleh menerima input. Jika Anda memenuhi bonus, integer harus menjadi satu-satunya input.

Skor terendah (panjang program dalam byte - bonus) menang.

Jawaban terpendek untuk setiap bahasa menang untuk bahasa itu .

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

# Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Daniel M.
sumber
1
Untuk bonus, apakah output harus tepat n * program lengthbyte, atau apakah itu minimum?
xnor
2
Itu harus tepat
Daniel M.
3
Sepertinya potongan kode harus dimodifikasi untuk menangani skor negatif.
El'endia Starman
40
Bonus -25 pada dasarnya wajib untuk beberapa bahasa, karena memungkinkan mereka mencapai skor negatif. Di masa depan, saya sarankan menggunakan bonus persen, atau hanya membuat bonus pertanyaan jika Anda benar-benar ingin jawaban untuk itu. Atau, tidak punya bonus.
xnor
4
Untuk "tidak ada input yang diberikan", apakah kita mengasumsikan string kosong dilewatkan? Saya tidak bisa melihat bagaimana orang akan berurusan dengan pengguna tidak pernah mengetikkan input dan program hanya menunggu.
xnor

Jawaban:

138

HQ9 + , 2 byte

QQ

output

QQQQ

Saya pikir tidak dilarang di sini.

randomra
sumber
14
Ini mungkin tidak dilarang, tapi itu tidak terlalu antar ... tunggu, bagaimana bisa mendapat delapan upvotes?
John Dvorak
58
@ JanDvorak Sebanyak yang saya tidak suka HQ9 +, ini bagi saya adalah penggunaan kreatif. Penggunaan ini kemungkinan besar tidak dibayangkan ketika HQ9 + dibuat, yang lebih dari yang dapat dikatakan dari sebagian besar program Hq9 + lainnya. +1 dari saya.
Trauma Digital
13
Saya bahkan tidak tahu bahwa Q mencetak “kode sumber program”. Saya pikir itu baru saja mencetak Q. Bagus sekali untuk mengetahui perbedaan krusial!
Timwi
7
@ LegionMammal978 Secara teknis ini adalah tantangan keluaran konstan, yang berarti bahasa non-pemrograman diperbolehkan.
spaghetto
3
Ini memiliki 120 suara. 1.200 rep untuk mengetik QQke juru bahasa.
Stan Strum
95

Shakespeare, 768

Ya, Shakespeare tidak banyak bahasa golf. Output 1.536 ruang.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

Edit: 256

Oke, saya akan benar-benar golf itu. Perhatikan bahwa hal di atas tidak dikompilasi dalam implementasi Shakespeare yang ada karena saya menulisnya dengan susah payah (tetapi siap untuk mempertahankan kebenarannya.)

Di bawah ini diterjemahkan ke C dengan satu peringatan di spl-1.2.1, dan menghasilkan 512 spasi:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.
Luke
sumber
15
Saya akan memberi +1 jika Anda benar-benar bermain golf ini.
lirtosiast
1
Apa jenis ilmu sihir ini? Aku bahkan tidak tahu benda seperti itu ada ...
Malavos
10
Woah, kau pegolf itu. Surga suci.
Malavos
2
@Malavos Saya hanya bercanda tentang cara Anda salah mengeja sihir, maaf - baik apa dan mana yang mungkin ok
cat
2
Tidak, saya meminta maaf kepada Anda jika saya terdengar ofensif atau defensif. Saya hanya membuat referensi ke Futurama! :) Pada catatan serius, saya masih terkejut dengan jawaban ini. Kami membutuhkan lebih banyak dari yang ada di situs.
Malavos
69

Ingat, 17 byte

................!

16 NOOP. Kemudian debugger !dipanggil dan membuang memori ke konsol. Memori kosong, tetapi panjang header 34 byte:

-- STATE DUMP --
----------------

Coba di sini .

mınxomaτ
sumber
13
Ini adalah salah satu jawaban keren IMO.
kucing
67

Mathematica REPL, 1 byte

#

Cetakan #1.

alephalpha
sumber
14
Pertanyaannya adalah untuk "menulis program lengkap"; ini hanya cuplikan REPL.
LegionMammal978
60

CJam, -17 byte

r2e|i8,*

Kode sumber panjangnya 8 byte dan memenuhi syarat untuk bonus -25 byte .

Cobalah online di juru bahasa CJam .

Bagaimana itu bekerja

r         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.
Dennis
sumber
4
Sampah. Sudah selesai dilakukan dengan baik.
The_Basset_Hound
1
Bagaimana itu byte negatif?
Nick T
3
@NickT 8 byte (kode sumber) - 25 byte (bonus).
Dennis
16
Anda dapat menyimpan beberapa juta salinannya jika Anda kehabisan ruang disk.
Robert Fraser
Tidak, saya pikir metadata akan membuatnya positif
CalculatorFeline
47

Python 2.6, 10

print`-.1`

Cetakan -0.10000000000000001, yaitu 20 karakter.

Perhatikan bahwa string repr menunjukkan lebih presisi. print-.1hanya memberi -.1, dan print.1/3memberi 0.0333333333333hanya 13 digit akurasi.

Tidak
sumber
5
Ini tidak lagi berfungsi di Python 2.7 atau 3.1.
Anders Kaseorg
@AndersKaseorg Jadi repl.it salah, kalau begitu?
mbomb007
2
@ mbomb007 Ternyata. GitHub menyarankan itu bukan satu-satunya hal yang salah tentang itu. Ideone setuju dengan CPython.
Anders Kaseorg
Komentar yang sama dengan jawaban Anda yang lain: bukankah ini mencetak baris tambahan, menghasilkan 21 byte output?
Martin Ender
1
Maksudmu print`+.1`?
mbomb007
46

Seed , 10 byte

4 56111240

Ini mengkompilasi ke program Befunge (ditemukan oleh brute force)

9k.@

yang menghasilkan 20 byte berikut saat dijalankan (diuji dalam CCBI, perhatikan ruang trailing):

0 0 0 0 0 0 0 0 0 0 

Menjadi tidak terbiasa dengan Befunge 98, saya harus memeriksa spesifikasi beberapa kali untuk yang satu ini:

  • k tampaknya cukup rusak bagi saya, mengeksekusi sekali lagi daripada yang dimaksudkan karena IP pindah ke instruksi yang berulang
  • Tumpukan Befunge 98 memiliki nol tanpa batas di bagian bawah
  • . output sebagai angka, diikuti oleh spasi
Sp3000
sumber
18
.... Aku .... hanya .... tidak bisa.
Daniel M.
44

R, 3 2 byte

Kode

!0           # NOT FALSE

Keluaran

TRUE

Wow, akhirnya R, akhirnya.

Tampaknya {}bekerja juga, hasilnyaNULL

Bonus 33 16 byte:

Kode

rep(1,number*16)

Keluaran

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Mutador
sumber
2
Saya harap menggunakan nama "angka" untuk variabel tidak setara dengan "menambahkan spasi putih yang tidak perlu ke kode sumber"
Mutador
26

Matlab, 7 5 byte

2 byte lebih sedikit, terima kasih ke @ flawr!

123;3

Keluaran:

masukkan deskripsi gambar di sini

Outputnya berisi , jadi 10 byte.newline ans = newline newline 3 newline

Luis Mendo
sumber
1
Semoga saja tidak ada yang format compactdefault :)
Sanchises
2
@sanchises :-) Ya, itu tergantung pada bagaimana preferensi Matlab telah ditetapkan. Tetapi format looseapakah preferensi default
Luis Mendo
2
Bagaimana dengan 123;4? Apakah tiga byte lebih pendek =)
flawr
@ flawr Ide bagus! Posting sendiri!
Luis Mendo
Tidak, terlalu banyak terinspirasi oleh jawaban Anda =)
flawr
25

JavaScript, 2 byte!

Bahkan lebih pendek dari solusi 3 byte:

!0

Kembali truesetelah berjalan.

Unihedron
sumber
2
Anda harus mencatat bahwa ini hanya berfungsi di lingkungan
REPL
21

Python 2, 11

print`id`*1

Cetak representasi string dari built-in id, yaitu 22 karakter:

<built-in function id>

The *1adalah untuk mendapatkan kode untuk 11 karakter. Anda juga bisa melakukannya print id;00.

Alternatif 11 yang lebih membosankan adalah:

print'1'*22
print 9**21
Tidak
sumber
Saya telah bermain-main dengan angka-angka kompleks, tetapi sayangnya print.8/-9jsatu karakter pendek
Sp3000
Apakah ini tidak mencetak baris baru, sehingga jumlah byte output menjadi 23?
Martin Ender
1
@ MartinBüttner Aturan itu diedit kemudian, tetapi mengubahnya menjadi print id,;1cukup untuk menekan baris baru. Itu tidak menambahkan spasi tambahan juga.
xnor
@ xnor print 9**21tidak berfungsi. Ini 21 karakter. print 9**23bekerja meskipun
Koishore Roy
18

dc, 10 - 25 = -15

2?A*Ar^1-n

Mengambil baris kosong untuk "tidak ada input".

Menghitung 10 ^ (10 * n) - 1, di mana n adalah input, atau 2 jika input kosong. Mencetak string 9s dari panjang yang diperlukan.

  • 2 tekan 2 ke tumpukan jika input kosong
  • ? tekan input ke tumpukan
  • Adorong 10 ke tumpukan (dc memiliki pintasan A- Funtuk 10 - 15)
  • * pop dua kali dan gandakan (gandakan input dengan 10)
  • A dorong 10 ke tumpukan
  • r membalikkan dua elemen tumpukan teratas
  • ^ exponentiate 10 ^ (10 * input)
  • 1- kurangi 1 dari atas tumpukan
  • n cetak tanpa baris baru.
Trauma Digital
sumber
dang, itu sangat pintar. Dan beruntung dengan panjang kode di sana :) Tapi mungkin Anda harus menambahkan sedikit penjelasan untuk yang belum tahu. Dan menurut saya jumlah baris baru, jadi sebaiknya Anda gunakan nsaja p.
daniero
17

TI-Basic, 3 byte

1ᴇ5

Cetakan 100000.

Deusovi
sumber
Sebenarnya, saya pikir baris baru akan masuk hitungan, jadi Anda bisa melakukannya 0untuk 1 byte.
lirtosiast
1
Bagaimana dengan ᴇ3? Dan @ lirtosiast, karena TI-Basic tidak memiliki baris baru, saya ragu tentang itu.
Jakob
16

Brainfuck, 14 byte

+++++++[....-]

Ini adalah latihan matematika kecil. Mari kita tunjukkan jumlah +karakter dalam kode dengan a, dan jumlah .karakter berdasarkan b.

Kode ini menghasilkan a*bbyte, dengan nilai dari abawah ke 1(ini adalah byte non-ASCII, tetapi tampaknya OK sesuai dengan spesifikasi). Panjang kode adalah a+b+3. Jadi kita punya

a*b = 2 * (a+b+3)

Mencoba nilai yang berbeda untuk adan b, kami melihat bahwa minimum untuk a+b+3tercapai

a = 4       or       a = 7
b = 7                b = 4
anatolyg
sumber
Seorang programmer veteran brainfuck akan menemukan +[[>....]-<<+]opsi.
orthoplex
@orthoplex Ketika saya membaca komentar Anda, saya segera portmanteau akan brainfuck dan programmer: brainfucker
Poke
15

gs2 , -18 bytes

CP437 :W↕0!↨.2

Hex dump: 57 12 30 21 17 2e 32

Wmembaca angka dari STDIN ke dalam daftar. ↕0menambahkan 2 ke daftar, dan !mengekstrak elemen pertama. Kemudian ↨.(daftar [0,1,2,3,4,5,6]) diulangi ( 2) berkali-kali.

Ini sangat mirip dengan jawaban CJam Dennis - gs2 hanya menggabungkan rdan imenjadi satu byte.

Catatan : Saya harus memperbaiki bug dalam gs2implementasi agar ini berfungsi: sebelumnya, setiap program memiliki baris baru tersembunyi pada hasilnya, yang sepenuhnya tidak disengaja. Itu hanya muncul setelah saya mencoba untuk menyelesaikan program ini (bahasa ini dirancang untuk golf anarki, yang mengabaikan jalur baru di semua masalah), dan saya hanya mendorong perbaikan untuk dikuasai sekarang, jadi jangan ragu untuk mengambil jawaban ini dengan sebutir butir garam.

Lynn
sumber
1
Jawaban GS2 pertama yang saya lihat yang tidak memiliki karakter setelan kartu!
Cyoce
14

Perl 5, 16 byte - 25 = -9

$_ =$]x($_*2||4)

Ini adalah pendekatan yang aneh untuk masalah ini.

Jalankan dengan -pargumen baris perintah.

Saya melihat jawaban Perl di bawah ini yang menggunakan variabel khusus untuk mencetak lebih banyak teks - dan dengan demikian mempersingkat jumlah byte mereka. Jadi saya menggunakan variabel khusus yang jauh lebih verbose. Mencetak 8 karakter dengan nama variabel 2 karakter. Jadi, dengan hitungan byte 16 (diisi dengan satu karakter spasi putih untuk membuatnya 16), ia mencetak 2 * $], di mana $]versi Perl dicetak sebagai 5.xxxxxx, tergantung pada versi Perl Anda. Tanpa input, ia mencetaknya empat kali, sama dengan 8*4atau 32, yang dua kali lipat jumlah byte kode.

Saya suka Perl.

Codefun64
sumber
Saya pikir ini gagal untuk input kosong. Sesuai aturan, jika tidak ada input yang diberikan, kelipatan akan default ke 2.
Alex A.
@AlexA. Sial, aku merindukan itu. Baru mengenal kode golf. Sunting masuk, tetapi jawaban saya memiliki banyak karakter sekarang karena saya tidak tahu bagaimana melakukan ini secara lebih kreatif di perl :(
Codefun64
2
Hai, ada beberapa tips yang mungkin membantu Anda di sini, secara default dalam skrip program, popdan shiftbekerja pada @ARGV(dalam submereka bekerja @_) sehingga Anda bisa melakukan sesuatu seperti $n=pop||2mendapatkan blok kode pertama, dan Anda memiliki ;}pada akhirnya , yang hampir selalu bisa hanya }untuk menyelamatkan yang lain. Sesuatu yang mungkin membantu Anda menghemat lebih banyak karakter adalah operator pengulangan string x, pertimbangkan print 1x20atau sesuatu seperti itu ... :) Semoga membantu!
Dom Hastings
@DomHastings Man, terima kasih! Saya mendapatkannya total 2 byte karena bantuan Anda :) Terima kasih banyak atas saran Anda.
Codefun64
1
Saya pikir Anda dapat mempersingkat ini print"n"x(21*pop||42). Jalankan di baris perintah denganperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1
14

Pyth , 10 9 - 25 = -16

-1 oleh Dennis

**N9?zvz2

Mencetak [input] * 9 karakter kutipan, atau 2 * 9 jika input kosong.

isaacg memiliki jawaban yang lebih pendek di sini

Pyth , 1 byte

T

Cetakan 10. Ini adalah variabel bawaan yang menginisialisasi ke 10.

lirtosiast
sumber
Akan berguna jika .x bekerja dengan kesalahan. Apakah ada alasan mengapa tidak?
lirtosiast
2
Tebakan terbaik saya adalah yang Qmenyebabkan Pyth untuk mengevaluasi input sebelum kode aktual dieksekusi. **N9.xvz2berfungsi seperti yang diharapkan, tetapi tidak lebih pendek dari **N9?zvz2.
Dennis
2
Setiap baris baru yang tertinggal dimasukkan dalam jumlah byte keluaran. Toutput 10dan baris baru. Gunakan d, ini adalah ruang yang menambahkan baris baru
Stan Strum
9

Macaroni 0.0.2 , 23 karakter

print tobase pow 32 9 2

Mencetak 32 9 dalam biner, yang kebetulan ternyata 46 karakter panjangnya (itu 1000000000000000000000000000000000000000000000), tanpa baris tambahan.

Gagang pintu
sumber
9

JavaScript, 4 byte

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Saya pikir ini adalah solusi JS sesingkat mungkin tanpa ES6: P

Unihedron
sumber
Versi NodeJS apa yang Anda miliki? Ini tidak bekerja dengan milikku.
Dennis
1
Ini juga berfungsi pada konsol Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1
Baris baru yang tertinggal harus dimasukkan dalam panjang output.
lirtosiast
Node.js v0.10.40tidak mencetak apa-apa karena tidak ada perintah cetak. Apakah Anda memiliki versi Node.js yang berbeda atau apakah ini hanya berfungsi di shell yang mencetak evaluasi suatu baris? (dalam hal ini saya tidak berpikir jawaban ini akan valid).
Nateowami
4 byte? Tolong buat ini benar-benar seperti, ukuran yang benar.
Bintang OS
9

C, 27 25

main(){printf("%50f",0);}

Terima kasih @Titus untuk merobohkan 2 byte


Dan untuk solusi 16 byte saya yang tidak bersaing di C, buka di sini: https://codegolf.stackexchange.com/a/111330/16513

^ Saya katakan non-bersaing karena kode kesalahan mungkin bisa bergantung pada kompiler Anda, Juga perhatikan saya menggunakan GCC dalam solusi itu. Juga saya tidak yakin apakah itu melanggar aturan 1 atau tidak, saya pikir itu mungkin jadi saya melanjutkan dan menandainya tidak bersaing.

Albert Renshaw
sumber
1
Saya tidak berpikir itu dianggap sebagai program C yang valid tetapi main(){printf("%0.XXf",0);}berfungsi.
wefwefa3
2
@ Zona Tidak, C memiliki aturan "deklarasi implisit" yang biasanya memungkinkan Anda menggunakan hal-hal tanpa sepatutnya #include. Kompiler akan memancarkan peringatan, dan terkadang akan macet, tetapi biasanya akan berfungsi .
anatolyg
1
@AlbertRenshaw Juga, saya tidak berpikir itu berfungsi di sini .
Zereges
1
Perhatikan bahwa 27 * 2! = 38.
mbomb007
1
@ Zona. Kode ini tidak menunjukkan perilaku tidak terdefinisi. Fitur "pernyataan implisit" dan "tipe pengembalian implisit" tidak digunakan lagi dalam standar terbaru, tetapi penggunaannya masih diizinkan dan hasilnya didefinisikan dengan baik. Ada beberapa keadaan dalam penggunaan fitur-fitur tersebut yang menyebabkan perilaku tidak terdefinisi, tetapi kode ini tidak melibatkan hal-hal tersebut.
Peter
7

V , 2 Bytes

Ini output

ÿÿÿÿ

Cobalah online!

Penjelasan

Ini adalah jawaban yang benar-benar gila, dan bekerja dengan menyalahgunakan bagian dalam V. Pada dasarnya cara kerjanya adalah itu ÿadalah perintah dalam V yang menandakan program sudah selesai, dan semua perintah yang tertunda harus diselesaikan. Kalau tidak, beberapa akhiran implisit tidak akan berfungsi, dan interpretasi akan lebih sering menggantung. Perintah ini secara otomatis dikirim beberapa kali pada akhir program, dan sebagian besar waktu tidak berpengaruh pada output.

éadalah perintah yang memasukkan satu karakter. Namun, ia melakukannya dengan mengambil byte mentah, jadi itu tidak menafsirkan ÿsebagai "akhir", itu menafsirkannya sebagai "ini adalah karakter yang perlu Anda masukkan." membuatnya memasukkan karakter ini 4 kali, bukan satu.

DJMcMayhem
sumber
7

bash, 11 byte

Berikut ini adalah penggunaan yang ironis dari alat kompresi data :) ...

gzip -f<<<2

Berikut ini adalah hex dump dari output (22 byte) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....
Wossname
sumber
Ini menghasilkan 22 byte "extended ASCII" (mis. 8 bit per karakter). Ini sepertinya memenuhi definisi OP tentang ASCII jika Anda membaca komentar di posting Pertanyaan.
Wossname
Di TIO saya mendapat 16, tetapi pada mesin linux saya, saya mendapat 34
Stan Strum
@StanStrum, saya tidak tahu apa itu TIO, tetapi 34 di linux itu aneh. Mungkin Anda memiliki gzip alias menggunakan switch yang berbeda ke normal?
Wossname
Saya tidak tahu apakah itu masalahnya, tapi itu aneh. Saya akan mencobanya pada beberapa LiveCD untuk melihat apakah saya mengacaukannya dengan salah satu program saya @Wossname
Stan Strum
1
Saya bukan orang itu, dan saya tidak akan mengambil keuntungan dari tyvm yang baru saya dapatkan. Saya akan melihat apakah saya dapat membuat versi yang berfungsi pada instalasi Linux saya
Stan Strum
6

dc, 19 - 25 = -6

2?19*[1n1-d0<l]dslx

Mengambil nomor (2 didorong ke stack sebagai cadangan) dan mengalikannya dengan 19. Mencetak 1(tidak ada baris baru) dan mengurangi nomor tersebut. Loop sementara jumlahnya lebih besar dari 0.

daniero
sumber
6

C ++, 80 byte

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

perhatikan karakter baris baru adalah dua karakter. (jika Anda tidak menginginkannya, ubah i <20 menjadi i <= 19 untuk kembali ke jumlah byte yang sama.)

Output sampel (akan berubah setiap saat)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

alamat memori 8 karakter yang sama 20 kali.

Liam
sumber
Beberapa petunjuk bermain golf: satu forloop lebih pendek dari satu whileloop dan memungkinkan Anda menjatuhkan kawat, itu sedikit lebih murah untuk digunakan cstdiodan hanya printfsebuah string, dan Anda tidak perlu mengembalikan apa pun.
Luke
Anda dapat menghapus pendekatan Anda menjadi 63 byte: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Tetapi sudah ada jawaban yang lebih pendek dengan pendekatan yang sedikit berbeda.
movatica
6

CJam, -9

q_,{i}{;2}?G*'X*

Penjelasan

  • q_,

Membaca seluruh input dan mendorongnya, lalu mendorong panjangnya.

  • {i}{;2}?

Jika panjang input lebih dari nol, konversikan ke integer. Kalau tidak, pop input dan tekan 2.

  • G*

Tekan 16 (panjang program), lalu gandakan dengan 2 jika tidak ada input, atau oleh input.

  • 'X*

Tekan X dan gandakan dengan bagian atas tumpukan.

The_Basset_Hound
sumber
@ThomasKwa Whoops. Memperbarui dalam detik.
The_Basset_Hound pada
Koma tidak diperlukan, namun Anda dapat menghindari "jika" sama sekali jika Anda melakukan logika "atau": q2e|iakan memberi Anda nomor yang Anda inginkan
aditsu
Anda juga dapat menggunakan S alih-alih 'X, satu-satunya masalah adalah bahwa output tidak akan terlihat sampai Anda memilihnya (well, jika Anda menjalankannya secara offline dan mengarahkan ulang ke file, itu bukan masalah)
aditsu
Uh .. tidak apa-apa, saya baru melihat jawaban Dennis sekarang: p
aditsu
Bahkan dengan syarat, Anda dapat mempersingkat ini. Anda tidak perlu menghitung panjangnya, karena string kosong sudah falsey. Anda juga tidak perlu melepas string kosong dari tumpukan, karena tidak berkontribusi pada output. Yang juga memungkinkan Anda untuk menghindari kawat gigi untuk cabang lain. Saya datang dengan ini sebelum saya melihat salah satu jawaban: r_{i}2?SB**.
Reto Koradi
6

> <> , 19 + 2 (-v flag) - 25 = -4 byte

l?!2f4+*v
-1o;!?::<

coba di sini!

Terima kasih Cole dan Sp3000

Pertama periksa panjang tumpukan, jika 0 menempatkan 2 di tumpukan. Lipat gandakan dengan 21 (panjang kode), lalu tampilkan representasi unicode dari angka tersebut dan kurangi dengan 1, putar hingga 0. (Anda harus memeriksa output untuk melihat karakter, karena browser tidak akan menampilkannya)

torcado
sumber
1
Ya, maaf merusak jawaban Anda (tetapi lebih pendek dari jawaban saya, jika itu membuat Anda merasa lebih baik). Sunting: whoops hit enter terlalu cepat, entri Anda seperti saat ini tidak valid berdasarkan aturan "Anda dapat mengasumsikan bahwa n akan selalu menjadi bilangan bulat positif. Jika tidak ada input yang diberikan, n harus default ke 2." Saya juga berpikir itu mungkin mencetak satu karakter terlalu banyak (Ini pergi dari 14 ke 0 yang merupakan 15 karakter menurut hitungan saya, bukan 14). Jika saya benar, l0=?2f6+*vsebagai baris pertama dan 1-::0=?;o>sebagai yang kedua harus membuatnya benar.
cole
Hm, tidak yakin apa yang Anda maksud. Seharusnya tidak mencetak 0 dalam hal apa pun. Menempatkan 2 sebagai output tumpukan awal (EDIT: hal-hal yang tidak dapat saya tempel) yang, setidaknya menggunakan penghitung char ini , adalah 28 karakter.
torcado
Saya mengerti apa yang Anda katakan sekarang. Saya menafsirkan "Program Anda secara opsional dapat mengambil angka, n, sebagai input" yang berarti bahwa jika inputnya adalah 2. Saya akan mengedit jawabannya, terima kasih! (juga saya dapat menyimpan beberapa dengan menggunakan string, bukan angka)
torcado
Senang membantu, terutama jika itu> <>.
cole
2
?!biasanya lebih baik daripada0=?
Sp3000
6

JavaScript (ES5), 68 byte - 25 bonus = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(Jika browser Anda tidak mengizinkan snippet berjalan karena alasan keamanan, coba biola ini http://jsfiddle.net/thePivottt/c3v20c9g/ )

Skrip ini hanya berfungsi di browser yang mengikuti setidaknya DOM3 (dengan Node.textContent) dan ECMAScript 5 (atau mungkin versi yang lebih lama). Saya mencoba untuk membuat ini sesuai standar dan kompatibel mungkin. Ini juga mengasumsikan bahwa skrip berada di scriptelemen pertama dokumen.

Ini sebenarnya menggabungkan beberapa salinan dari skrip itu sendiri, yang cukup mengagumkan . Perhatikan bahwa alat cuplikan pada SE menempatkan spasi kosong tambahan di sekitar skrip. Kita bisa mengabaikan spasi putih itu dengan .trim()tetapi saya tidak merasa perlu mengingat program ini sempurna tanpa campur tangan SE. Simpan saja file HTML5 ini jika Anda ingin melihatnya berjalan dengan sempurna.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Script ini menggunakan promptdan alertkarena console.logitu bukan bagian dari standar apa pun, bahkan jika sebagian besar browser modern menggunakannya. Jika jumlah pengulangan yang lewat bukan angka yang valid atau kosong, standarnya adalah 2. Jika inputnya angka desimal, program macet karena panjang array yang tidak valid.

Kode menggunakan beberapa fitur JavaScript yang menarik:

  • Array(1+(+prompt()||2))

    • Array(INT) menciptakan Array sel INT.

    • +prompt()mengambil input dan mengubahnya menjadi angka. Jika kita melewatkan input sebagai string, Arrayfungsi itu hanya akan membungkusnya dalam array satu elemen.

    • +prompt()||2mengembalikan input jika truthy , yang lain itu kembali 2.

    • Seluruh kode ini menciptakan array elemen N kosong, di mana N adalah satu lebih dari jumlah pengulangan yang diminta.

  • .join(document.scripts[0].textContent)

    • Metode array join(STRING)menciptakan string dengan menggabungkan semua sel, menempatkan STRING yang disediakan di antara nilai-nilai. Dalam program ini, ada N + 1 elemen kosong dalam array, atau tepatnya N di antara titik. Hasilnya akan berupa string yang berisi N kali STRING yang disediakan.

    • document.scripts[o]adalah <script>elemen pertama dari dokumen.

    • The textContentdari Nodekasus mengembalikan seluruh teks ditemukan di dalam mereka dan node anak mereka, termasuk script.

Kartu domino
sumber
Perhatikan bahwa jika Anda menggunakan ES6 str.repeatdan masih menampilkan kode itu sendiri, skornya turun menjadi 26, tapi agak terlalu membosankan: P
Domino
Erm, saya tidak tahu dari mana 26 berasal, sekarang saya mendapatkan 33. Saya mungkin harus tidur.
Domino
Perhatikan bahwa beberapa pengaturan browser dapat mencegah penggunaan prompt pada cuplikan. Anda mungkin harus menyimpannya untuk menjalankannya.
Domino
6

JavaScript ES6, 33 - 25 = 8

(a=2)=>Array(a*33).fill(0).join``

Cobalah online!

DankMemes
sumber
Sepertinya saya tidak bisa membuat kode ini berjalan di konsol. Apakah tepat? "Uncaught SyntaxError: Unken token =>"
Malavos
@Malavos Anda memerlukan peramban yang sesuai dengan es6 seperti Firefox terbaru. Chrome tidak mendukung default args afaik
DankMemes
Saya menggunakan UCBrowser, tapi itu benar! Ini berdasarkan chromium dan tokek. Mencobanya pada malam hari, mendapat "00000000000000000000000000000000000000000000000000000000000000000000000000". Bagus! Bisakah Anda menjelaskan kode Anda untuk saya? Saya seorang pemula.
Malavos
2
@Malavos Hardcoded 33sebenarnya adalah panjang kode. Itu menciptakan array baru dengan panjang di 33*amana aparameter input default ke 2 sesuai OP, mengisinya, dan mengembalikan string yang bergabung.
DankMemes
2
Dengan membuat array Anda dengan satu elemen tambahan, Anda dapat mengisinya dengan join Arrary(1+a*<length>)danjoin`0`
Shaun H
5

Julia, 42 byte - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

Ini membaca baris dari STDIN menggunakan readline(). Jika kosong, artinya tidak ada input yang disediakan, maka n didefinisikan sebagai input yang dikonversi ke integer. Jika tidak n adalah 2. Kami kemudian mencetak 42 n @ s ke stdout.

Alex A.
sumber
5

Perl, 18 - 25 = -7

print$=x(<>*9||18)

Variabel khusus $=, alias $FORMAT_LINES_PER_PAGE, memulai kehidupannya sebagai 60, dan oleh karena itu hanya perlu digandakan setengah kali dari byte yang dibutuhkan.

primo
sumber
1
Saya punya jawaban yang sangat mirip: print$=x9x(pop||2)bagus!
Dom Hastings