Saya gandakan sumbernya, Anda gandakan hasilnya!

127

Tugas Anda, jika Anda ingin menerimanya, adalah menulis sebuah program yang menghasilkan bilangan bulat positif (lebih tinggi dari 0). Bagian yang sulit adalah jika saya menduplikasi kode sumber Anda, hasilnya harus dua kali lipat dari integer asli.

Aturan

  • Anda harus membangun program lengkap . Artinya, output Anda harus dicetak ke STDOUT.

  • Sumber awal harus minimal 1 byte.

  • Kedua bilangan bulat harus berada di basis 10 (mengeluarkannya di basis lain atau dengan notasi ilmiah dilarang).

  • Program Anda tidak boleh mengambil input (atau memiliki input kosong yang tidak digunakan).

  • Mengeluarkan bilangan bulat dengan spasi tambahan / spasi dibolehkan.

  • Anda mungkin tidak menganggap baris baru antara salinan sumber Anda.

  • Ini adalah , jadi kode terpendek (asli) di setiap bahasa menang!

  • Berlaku celah default .

Contoh

Katakanlah kode sumber Anda ABCdan output yang sesuai adalah 4. Jika saya menulis ABCABCdan menjalankannya, hasilnya harus 8.

Papan peringkat

Ini menggunakan tata letak menggunakan @ manatwork .

Tuan Xcoder
sumber
2
@ Mr.Xcoder Maka saya hanya perlu memasukkan satu di sumber saya sendiri.
steenbergh
3
@ Mr.Xcoder Saya pikir Anda seharusnya mencegah membaca kode sumber Anda sendiri.
caird coinheringaahing
1
Hanya perlu bekerja ketika dua kali lipat ? Kita tidak perlu untuk mendukung n banyak doubling?
Cody Grey
6
@Daniel Katakanlah sumber Anda adalah `` (program kosong) dan ia menghasilkan 5. Jika Anda menggandakannya, sumber Anda adalah `` (program kosong) dan itu menghasilkan 5juga, apa pun yang Anda lakukan. Yang sedang berkata, program kosong digandakan masih program kosong, dan selalu menghasilkan output yang sama, kecuali untuk kasus di mana program kosong berarti sesuatu yang lain (generator angka acak, misalnya), yang tidak dapat tetap valid.
Tn. Xcoder
1
Ini seharusnya tidak sulit untuk esolang yang secara otomatis membuang bagian atas tumpukan setelah penghentian program.
MD XF

Jawaban:

152

Python 2 , 33 byte

print len(open(__file__).read())#

Cobalah online!

Coba gandakan

Python 3 , 28 byte

print(len(*open(__file__)))#

Cobalah online!

Coba gandakan

Penjelasan

Hal ini membuka source code menggunakan open(__file__)dan mendapat panjangnya menggunakan lenyang #mencegah kode tambahan dari sedang dibaca. Ketika sumbernya berlipat ganda maka panjangnya juga.

Sriotchilism O'Zaic
sumber
28
Wow, saya terkejut ... Itu sangat brilian!
Tn. Xcoder
2
32 byte . Bekerja dengan menggunakan mode append, mengatur posisi saat ini ke akhir file. tell()mengembalikan posisi saat ini dalam file
Halvard Hummel
@HalvardHummel Bagus. Namun saya tidak punya niat memperbarui jawaban ini. Jika Anda ingin mempostingnya sendiri, ini menurut saya berbeda.
Sriotchilism O'Zaic
@WheatWizard Itu bisa dimengerti, saya membuat jawaban yang
Halvard Hummel
96

Jelly , 1 byte

Cobalah online!

atau Coba dua kali lipat!

Saya tidak tahu bagaimana ini bekerja, tetapi ternyata itu berhasil.

DJMcMayhem
sumber
55
Saat itu ketika Anda tidak tahu apa yang Anda tulis ...
Tn. Xcoder
2
Sialan, aku baru saja memikirkan ini 8 menit terlambat.
HyperNeutrino
17
Semua tautan membutuhkan argumen. Jika elemen pertama rantai adalah nilad, hasilnya menjadi argumen dan tautan dieksekusi secara monadik. Jika tidak ada nilad terkemuka, sebagai gantinya 0 digunakan.
Dennis
65

Google Sheets, 11 5 Bytes

Rumus lembar kerja anonim yang tidak mengambil input dan output ke dalam sel yang menyimpan rumus

=4/(2

Sebagai formula tunggal ini mengevaluasi ke tumpukan panggilan yang terlihat sedikit seperti

=4/(2
=4/(2)
=4/2
=2
2

Namun ketika rumus lembar kerja ini digandakan, tumpukan panggilan ini dievaluasi menjadi

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

Tentu saja, implikasi dari penggunaan metode ini adalah bahwa sekali ini diulang lebih dari sekali, pada yang ketiga dan semua iterasi setelah masalah, tumpukan panggilan akan mencapai =4/(2=4)dan dengan demikian mengevaluasi ke bawah =4/0dan melemparkan #DIV/0!kesalahan

-6 byte dengan beralih ke aljabar dari =DIVIDE(4,2rumus

Taylor Scott
sumber
18
Tidak pernah diharapkan Google Sheets akan digunakan dalam kode golf. Solusi
cerdas
11
@ kode kode yang benar-benar menarik tentang ini adalah karena Excel melakukan kesalahan jika Anda mengecualikan trailing ), jawaban ini adalah satu-satunya jawaban Google Spread yang saya lihat yang tidak diterjemahkan ke dalam jawaban Excel
Taylor Scott
45

05AB1E , 2 byte

Asli

XO

Cobalah online!

Dua kali lipat

XOXO

Cobalah online!

Penjelasan

X mendorong 1 ke tumpukan.
O menjumlahkan tumpukan.

Emigna
sumber
48
XOXO, solusi bagus.
Tn. Xcoder
4
Anda melakukan itu dengan sengaja, sementara Anda tahu Anda juga bisa menggunakannya 1O!
Erik the Outgolfer
12
Di mana kalian menemukan bahasa konyol ini?
DavidB
7
@ DavidB Biasanya, mereka menulisnya.
Federico Poloni
3
@ David B Ya, orang menciptakan bahasa untuk codegolf, dan ya, mereka bisa mendapatkan skor yang sangat rendah, tetapi melakukan hal-hal konyol seperti menciptakan bahasa setelah tantangan untuk menyelesaikannya dalam 1 byte tidak diizinkan, dan pemrograman dalam bahasa ini biasanya jauh dari mudah.
Buah Esolanging
43

C (gcc), 37 byte

i;main(){putchar(i+49);}/*
i=1;//*///

File tidak mengandung baris baru.

Versi ganda, untuk penyorotan sintaks:

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

TIO tautan: tunggal , ganda .

Gagang pintu
sumber
3
Bisakah Anda jelaskan bagaimana cara kerjanya? mengapa komentar itu tidak pernah diomentari?
phil294
10
Ketika Anda menggandakan kode sumbernya, /*itu dikomentari oleh //, yang berarti berikut i=1ini tidak dikomentari . Ini lebih mudah dilihat jika Anda memasukkan versi kode yang berlipat ke dalam highlighter sintaksis
musicman523
1
Whoa, trik definisi sementara. Bagus.
aschepler
39

Hexagony , 7 byte

/)!@.).

Mencetak 1 secara teratur kemudian 2 kali lipat.

Cobalah online! atau Coba gandakan secara online!

Versi yang diperluas:

Reguler:

 / )
! @ .
 ) .

Dua kali lipat:

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

Program reguler mengikuti jalur: /)!.@yang menambah tepi memori (semua diinisialisasi ke nol) kemudian mencetak nilai numeriknya. Program ganda berikut: /.)/)!@yang menambah tepi dua kali sebelum mencetak, sebagai gantinya.

FryAmTheEggman
sumber
6
Wow kerja bagus. Saya menganggap Anda menemukan itu dengan tangan? Karena 6 byte berada dalam kisaran brute force, saya pikir saya akan mencobanya, dan sebenarnya ada solusi 4-byte: [@!)(dan beberapa 570 solusi 5-byte). Karena Anda benar-benar kesulitan mencari solusi dengan tangan, saya sangat senang Anda memposting solusi 4-byte.
Martin Ender
1
Jika Anda tertarik, berikut adalah daftar lengkap termasuk nomor yang dicetak: pastebin.com/TtRujjA4
Martin Ender
39

Python 2 , 21 byte

+1
if id:id=0;print 1

Cobalah online!

Dua kali lipat:

+1
if id:id=0;print 1+1
if id:id=0;print 1

Cobalah online!

Tidak
sumber
3
Sangat kreatif! Selamat!
Tn. Xcoder
Bagaimana jika digandakan dengan pergantian linefeed?
yeti
36

Braingolf , 1 byte

+

Cobalah online!

Sekarang kita bicara!

Output 20, atau 40ketika sumber digandakan.

Penjelasan

+ tentu saja adalah operator "penjumlahan", "tambah" atau "plus", di Braingolf, namun ia memiliki fungsi diad, monadik, dan niladik.

Ketika setidaknya ada 2 item di stack, itu diad, dan akan menjumlahkan 2 item teratas dari stack.

Ketika hanya ada 1 item di tumpukan, itu monadik, dan akan menggandakan item.

Ketika tidak ada item di stack, itu niladic, dan mendorong 20!

Mengapa itu mendorong 20? Ya karena program Braingolf kosong hanya mencetak baris baru, dan nilai ASCII dari baris baru adalah 10, jadi saya pikir saya akan membuat niladic +push 20 jadi sepertinya itu benar-benar menjadi monadik pada baris baru yang tersirat (meskipun tidak sama semua)

Karena itu:

+   No input
+   Niladic sum, Push 20
    Implicit output

Dan saat digandakan:

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output
Skidsdev
sumber
28

Haskell , 26 18 byte

main=print$0
 +1--

Cobalah online!

Dua kali lipat:

main=print$0
 +1--main=print$0
 +1--

Cobalah online!

Saya menemukan versi ini ketika menjawab versi tripple dari tantangan .


Versi 26 byte tanpa penyalahgunaan komentar:

main|n<-1,nmain<-2=print n

Cobalah online! Cetakan 1.

Dalam penjaga pola pengenal ndiatur ke 1dan nmainuntuk 2, lalu print ndicetak 1.

Program ganda:

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

Cobalah online! Cetakan 2.

Pada penjaga pola pertama ndiatur ke 1dan nmainke 2, namun pernyataan cetak telah menjadi print nmain, jadi 2dicetak. Karena deklarasi pengidentifikasi dalam penjaga pola mengevaluasi ke true, penjaga pola kedua tidak pernah dapat dijangkau.

Laikoni
sumber
23

Mathematica, 5 byte

(1+1)

output 2 dan (1 +1) (1 +1) output 4

dan tentu saja (karena banyak dari Anda bertanya)

Mathematica, 3 byte

(2)
J42161217
sumber
1
Apakah (2)bekerja?
geokavel
9
@geokavel 2dan sebuah ruang akan berfungsi, seperti yang akan +1tetapi perlu dicatat bahwa semua ini mengasumsikan lingkungan notebook Mathematica
Martin Ender
1
Jika Anda menjalankannya di Opencloud Mathematica Sandbox, satu spasi menjadi x, sehingga 2 menghasilkan 2dan 2 2 menjadi 2x2 yang mencetak 4. Anda dapat menambahkannya sebagai solusi alternatif.
Tn. Xcoder
2
(2)berfungsi juga.
Tn. Xcoder
6
2 berfungsi juga.
alephalpha
17

Brain-Flak , 6 byte

({}())

Cobalah online!

Penjelasan

Apa ini harus cukup jelas. {}meraih nilai dari tumpukan, yang secara implisit nol untuk memulai, ()menambahkan satu ke dalamnya dan (...)mendorong nilai. Pada run kedua karena sudah ada 1 pada stack ini hanya menambah 1 untuk membuatnya menjadi dua. Bahkan jika Anda menyalin kode nkali itu akan selalu ditampilkan n.

Sriotchilism O'Zaic
sumber
17

> <> , 7 6 byte

-1 byte terima kasih kepada Teal pelican

\ln;
0

Cobalah online!
Coba dua kali lipat!

Penjelasan

Saya menggunakan 0tetapi saya bisa juga menggunakan 1- 9, a- fkarena mereka semua mendorong nilai tunggal ke stack.

Tidak berlipat ganda:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

Dua kali lipat:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution
Borka223
sumber
5
Selamat datang di PPCG! Ini adalah jawaban pertama yang bagus, dengan penjelasan yang sangat matang dan kode yang baik. Anda mendapatkan upvote saya!
Tn. Xcoder
1
Saya baru saja melihat jawaban ini dan itu hebat! Peningkatan yang sangat baik pada jawaban pasangan> <> (termasuk punyaku!) - Lihat tautan TIO di sini; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Yang saya lakukan hanyalah memindahkan angka 0 ke spasi dan menghemat 1 byte. :)
Teal pelican
1
@Tealpelican, Terima kasih! Aku tidak percaya aku melewatkan perbaikan sederhana ini. (Sebenarnya saya bisa, saya tidak menggunakan> <> sangat banyak dan saya baru bermain golf!) Sejujurnya, saya tidak benar-benar melihat solusi lain secara rinci, saya melihat mereka relatif besar dan memutuskan untuk cobalah bermain golf karena akan lebih mudah untuk bersaing.
Borka223
1
Jawaban bagus! Hanya ingin menunjukkan bahwa ini menggunakan metode yang sama dengan jawaban Klein saya . (Tidak menuduh Anda menyalin saya. Jika ada orang yang menunjukkan dua jawaban yang sama.)
Sriotchilism O'Zaic
14

Retina , 3 byte


1

Cobalah online!

Cetakan 2. Menggandakannya mencetak 4.

The 1bisa diganti dengan cukup banyak hal lain.

Penjelasan


1

Mengganti input kosong dengan 1.


Menghitung jumlah kecocokan kosong 1yang dua (satu sebelum 1dan satu setelah itu).

Jika kita menggandakan program, kita mendapatkan tahap tambahan seperti yang pertama. Kali ini menyisipkan 1sebelum dan sesudah yang pertama, memberi 111. Ketika kami sekarang menghitung jumlah korek api dari regex kosong, kami mendapatkan empat dari mereka.

Martin Ender
sumber
14

Python REPL, 2 byte

Juga berfungsi di Pip, Dyalog APL, JavaScript, J, dan R

+1

Saya sedang membuat TIO sekarang saya tidak bisa mendapatkan pengganti python untuk bekerja di TIO

Sriotchilism O'Zaic
sumber
1
+1persis apa yang akan saya lakukan: P tapi sial, Anda ninja saya sekitar satu menit> <
HyperNeutrino
1
Ini juga berfungsi di Dyalog APL.
Sapi dukun
Polygolt
Mr. Xcoder
1
Tidak bisakah Anda menggunakan ini dan ini untuk REPL?
totallyhuman
1
Anda memiliki +1 saya.
Federico Poloni
12

Neim , 1 byte

>

Cukup tambahkan bagian atas tumpukan.

Tumpukan dapat dibayangkan sebagai jumlah nol yang tidak terbatas untuk memulai, jadi ini menambah nol untuk mendapatkan satu, dan dua kali lipat, menambahnya lagi untuk mendapatkan dua.

Cobalah online!

Solusi alternatif:

Menambahkan 2, bukan 1.

Okx
sumber
12

JavaScript, 38 byte

setTimeout('alert(i)',i=1)/*
i++//*///


setTimeout('alert(i)',i=1)/*
i++//*///setTimeout('alert(i)',i=1)/*
i++//*///

Benoit Esnard
sumber
1
Yang bagus! Bisakah kamu melakukannya i++?
Arnauld
@Arnauld: memang, terima kasih atas sarannya!
Benoit Esnard
12

Java8, 135 118 110 byte

Tunggal , cetak 8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Dua kali lipat , mencetak 16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Pratinjau preview, 118 byte

Tunggal , mencetak 1

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Dua kali lipat , mencetak 2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Bagaimana ini bekerja?

Java-compiler membuat satu file untuk setiap kelas dalam file sumber. Karena itu saya cukup memeriksa apakah ada sumber daya dengan nama B.class.


Jawaban Asli, 135 byte

Tunggal , mencetak 1

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

Dua kali lipat , mencetak 2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///
Edwardth
sumber
Apa yang Anda lakukan dengan komentar itu sangat keren. Tetapi apakah Anda benar-benar membutuhkan saluran baru?
vikarjramun
Oh nvm, tidak memperhatikan komentar satu baris di baris kedua
vikarjramun
11

Python 2 , 32 byte

print open(__file__,"a").tell()#

Cobalah online!

Kode sumber ganda

Penjelasan

Ini membuka file kode sumber dalam mode tambahkan

open(__file__,"a")

Kami kemudian menemukan posisi saat ini di file, ini akan berada di akhir file karena membuka dalam mode append

open(__file__,"a").tell()

Kami mencetak panjang ini

print open(__file__,"a").tell()

Dan tambahkan komentar, sehingga menggandakan kode sumber tidak mengeksekusi lebih banyak kode

print open(__file__,"a").tell()#
Halvard Hummel
sumber
9

Excel VBA, 12 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari dan output ke jangkauan [A1]. Nilai default dari rentang [A1]adalah ""(string kosong) dan setelah satu eksekusi berikut ini menetapkan ini untuk 1dan kenaikan 1dengan semua eksekusi berikutnya.

[A1]=[A1+1]:

Input output

Versi Tunggal

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

Versi Berganda

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2
Taylor Scott
sumber
8

Sekam , 3 byte

|1"

Cobalah online!

Gagasan orisinal, untuk apa yang telah saya lihat di jawaban lain.

Penjelasan

|dalam Husk adalah operator "atau" yang mengembalikan argumen keduanya jika benar, sebaliknya argumen pertama. Ketika diterapkan pada argumen dari tipe yang berbeda, pertama-tama ia mengubah semuanya menjadi angka: transformasi untuk string (dan daftar pada umumnya) dilakukan dengan menghitung panjangnya.

Dalam program asli kami menerapkan |ke 1 dan string kosong, yang akan dikonversi ke 0: hasilnya adalah 1.

Dalam program yang digandakan kita berlaku |untuk 1 dan string "| 1", yang dikonversi menjadi 2: hasilnya 2.

Leo
sumber
7

CJam, 3 byte

5],

Cobalah secara Online

Enkapsulasi 5 dalam array. Kembalikan panjang array. Saat Anda menduplikasi kode, panjang yang dikembalikan sebelumnya, 1, sudah ada di tumpukan, jadi Anda mendapatkan array [1,5], yang mengembalikan panjang 2.

geokavel
sumber
7

Wumpus , 4 byte

" O@

Cobalah online!

" O@" O@

Cobalah online!

Kode normal mencetak 32dan kode ganda dicetak 64.

Penjelasan

"berfungsi seperti halnya di banyak Fungeoids lainnya: ia mengaktifkan mode string, di mana setiap kode karakter individu didorong ke stack, alih-alih menjalankan perintah. Namun, berbeda dengan sebagian besar Fungeoids lainnya, lapangan bermain Wumpus tidak membungkus, sehingga IP sebaliknya akan memantulkan akhir dan memantul bolak-balik melalui kode.

Jadi untuk program tunggal, kode berikut ini sebenarnya dijalankan:

" O@O " O@

Tali mendorong 32, 79, 64, 79, 32. Maka ruang tidak melakukan apa-apa, Ocetakan 32, dan @mengakhiri program.

Untuk program yang digandakan, string dihentikan sebelum IP memantul kembali, sehingga kode hanya dilintasi satu kali:

" O@" O@

Kali ini, string mendorong 32, 79, 64, Omencetak 64dan @mengakhiri program.

Ini tampaknya menjadi satu-satunya solusi 4-byte.

Martin Ender
sumber
6

,,,, 2 byte

1∑

Penjelasan

1∑

1   push 1
 ∑  pop everything and push the sum of the stack
benar-benar manusiawi
sumber
Apakah saya melewatkan sesuatu atau tidakkah itu 3 untuk kode sumber berlipat ganda?
Taylor Scott
@ TaylorScott Maaf, saya seharusnya mencatat bahwa muncul semua elemen di stack.
totallyhuman
1
Itu jauh lebih masuk akal - terima kasih atas klarifikasi
Taylor Scott
Sigma adalah dua byte, bukan?
nishantjr
1
@nishantjr ,,, menggunakan halaman kode sendiri, yang ditautkan di header.
totallyhuman
6

Batch, 13 byte

@echo %~z0
:

Penjelasan: %~z0memperluas ke panjang file sumber, jadi menggandakan file hanya menggandakan panjangnya. Baris kedua mendefinisikan label kosong, yang tidak melakukan apa-apa. Ketika file digandakan, itu menjadi label yang @echo %~z0diganti, sedangkan baris ketiga adalah label kosong lainnya.

Neil
sumber
6

QBasic,  44  28 byte

Tidak ada baris baru di akhir. Output 4saat tunggal, 8saat digandakan.

4
READ x,y
?x+y
END
DATA 4,0

Penjelasan

Untuk versi tunggal:

  • 4 adalah nomor baris.
  • READ x,ymengambil dua nilai pertama dari DATApernyataan dan menyimpannya di xdan y. Jadi, xdapatkan 4dan ydapatkan 0.
  • ?x+y menambahkan dua angka dan mencetaknya.
  • END keluar dari program.

Dalam versi yang digandakan, DATApernyataan menjadi DATA 4,04, yang menetapkan 4untuk keduanya xdan y, dengan demikian menjadikannya x+ysama 8.

DLosc
sumber
6

Befunge-98 , 5 byte

90g.@

Cobalah online!

gmendapatkan nilai karakter pada koordinat (9, 0) di Funge-Space; .mencetaknya sebagai integer, dan @menghentikan program. Dalam versi un-doubled, (9, 0) berada di luar batas program, dan Funge-Space di luar program diinisialisasi ke nilai default spasi, jadi kami mencetak 32. Dalam versi doubled, (9, 0) adalah @karakter, jadi kami mencetak 64.

betaveros
sumber
Ini bukan yang saya harapkan jawaban Befunge-98 terbaik untuk terlihat seperti ... jawaban yang benar-benar kreatif!
MildlyMilquetoast
Saya berbicara terlalu cepat ;)
MildlyMilquetoast