Tugas Anda, jika Anda ingin menerimanya, adalah menulis sebuah program yang menghasilkan bilangan bulat positif (lebih tinggi dari 0). Jika kode sumber digandakan output harus tetap sama. Bagian yang sulit adalah bahwa jika kode sumber diketik tiga kali (rangkap tiga?) Output akan dikalikan 3.
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.
Zero Leading hanya diperbolehkan jika jumlah digitnya konsisten, mis .: 001 - 001 - 003 atau 004 - 004 - 012
Anda tidak boleh mengasumsikan baris baru antara salinan sumber Anda.
Ini adalah kode-golf , jadi kode terpendek (asli) di setiap bahasa menang!
Berlaku celah default .
Contoh
Katakanlah kode sumber Anda Abc
dan output yang sesuai adalah 4
. Jika saya menulis AbcAbc
dan menjalankannya, hasilnya harus tetap 4
. Namun jika saya menulis AbcAbcAbc
dan menjalankannya, hasilnya harus 12
.
Tanpa malu-malu dicuri Berasal dari tantangan Tuan Xcoder
sumber
int i=1;print i;
) maka kode duplikat dari (int i=1;print i;int i=1;print i;
) harus menampilkan nomor yang sama dengan kode asli, dan ketika kode tersebut rangkap tiga ke (int i=1;print i;int i=1;print i;int i=1;print i;
) harus menunjukkan jumlahnya dikalikan 3Jawaban:
Wumpus , 6 byte
Cobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Cetakan
1
dan3
.Penjelasan
Saya menemukan satu ton solusi 6-byte dengan pencarian brute force, tetapi tidak ada untuk 5 byte. Itu tidak selalu berarti tidak ada pada 5 byte tetapi mereka mungkin akan menggunakan karakter aneh atau sesuatu.
Saya akhirnya memilih solusi ini karena tidak mencetak nol terkemuka (kebanyakan dari mereka lakukan) dan memiliki beberapa aliran kontrol yang menarik. Mari kita mulai dengan satu program:
Jadi kode yang dieksekusi adalah:
Cukup mudah. Sekarang program yang digandakan. Karena baris pertama ditambahkan ke baris kedua, kisi memanjang hingga lebar 5 (dan tinggi 3) yang mengubah aliran kontrol secara signifikan:
IP memutari loop itu tepat sekali, jadi kode yang dieksekusi adalah:
Akhirnya, program tiga kali lipat sangat mirip dengan yang dua kali lipat, tetapi kami mendapatkan beberapa perintah lebih penting ke baris ketiga:
Jadi kode yang dieksekusi adalah:
sumber
Sekam , 5 byte
Cobalah online!
Diulang dua kali!
Diulang tiga kali!
Penjelasan
Cukup sulit untuk membuat program berulang di Husk. Karena sistem tipe melarang fungsi yang dapat diterapkan pada dirinya sendiri, saya harus membiarkan bagian pertama mengevaluasi fungsi, dan sisanya mengevaluasi nilai, dan tipe built-in yang ada dirancang untuk mencegah hal ini. jenis ambiguitas. Token program adalah
K
, yang membangun fungsi konstan.K a b
setara dengana
.Σ
, yang mengambil bilangan bulat n dan mengembalikan bilangan segitiga ke- n .+
, yang menambahkan dua angka.1
, yang merupakan literal 1.Program asli ditafsirkan seperti ini:
Ini
(K+)
adalah fungsi tidak masuk akal yang dimakan oleh yang pertamaK
.Program yang diulang dua kali ditafsirkan seperti ini:
Fungsi dalam tanda kurung lagi dimakan oleh yang pertama
K
.Program berulang tiga ditafsirkan seperti ini:
sumber
K
dalam suatu program, ketikkan inferensi menjadi sangat lambat, karena masing-masing dari mereka berpotensi "memakan" sejumlah token dan penerjemah akan mencoba semua kombinasi ...Jelly ,
75 byteCobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Bagaimana itu bekerja
sumber
Haskell , 24 byte
Cetakan
1
: Coba online!Juga mencetak
1
: Coba online!Cetakan
3
: Coba online!sumber
Cubix , 5 byte
Cobalah online: sekali , dua kali , tiga kali .
Penjelasan
Cubix adalah bahasa berbasis tumpukan yang instruksinya melilit bagian luar kubus. Penting untuk dicatat adalah bahwa tumpukan awalnya diisi dengan nol tanpa batas, yang memungkinkan kita untuk "menarik nilai-nilai dari udara tipis" dengan operator daripada mendorongnya secara eksplisit.
Saya harus mengakui bahwa ini ditemukan oleh seorang brute-forcer; Saya tidak akan pernah menemukannya sendiri. Bahkan, @MartinEnder adalah orang yang meminta saya untuk mencoba kekerasan, karena ia telah mencari solusi ini tanpa keberuntungan. Ini adalah satu-satunya solusi yang ditemukan oleh brute-forcer, dan saya percaya itu adalah satu-satunya solusi terpendek di Cubix.
Program tunggal
Lihat saja!
Program asli cocok pada unit cube. Inilah jaring yang tidak dilipat:
IP (penunjuk instruksi) dimulai pada wajah paling kiri (
<
menuju) ke timur. The<
segera menunjuk itu barat, dan membungkus keP
.P
adalah exponentiation, dan karena tidak ada apa-apa di stack, interpreter mengeluarkan dua 0 s dan menghitung 0 0 , yaitu 1 menurut JavaScript.O
lalu cetak nilai ini, dan@
akhiri program.Program ganda
Lihat saja!
Program 10-byte terlalu panjang untuk dimasukkan ke dalam unit cube, dan karenanya diperluas ke ukuran-2 cube:
Seperti sebelumnya, IP dimulai di kiri atas wajah paling kiri. Kali ini, instruksi pertama adalah
P
, yang mendorong angka 1 seperti sebelumnya. Berikutnya adalah)
, yang menambah item teratas, mengubahnya menjadi 2 . Kemudian<
putar IP sekitar, dan hits)
lagi, mengubah 2 menjadi 3 .Di sinilah mulai menarik.
P
menaikkan item kedua dari atas ke kekuatan item pertama, yang memberi 0 3 = 0 . Kemudian IP membungkus ke wajah paling kanan dan melewati dua no-ops.
sebelum memukul yang lainP
. Di sini kita melihat kekhasan lain dari Cubix: operator biner (sepertiP
) tidak menghapus operan mereka dari stack. Jadi karena tumpukan sekarang[3, 0]
, kami menghitung 3 0 = 1 , yangO
menghasilkan, dan@
mengakhiri program.Program tiga kali lipat
Lihat saja!
Seperti halnya program ganda, triple bisa muat pada kubus ukuran-2:
Program ini dimulai dengan cara yang sama seperti sebelumnya:
P
push 1 ,)
increment,<
menunjuk IP barat,)
increment lagi, danP
sekarang push 0 . IP kemudian dililitkan ke sisi<
paling kanan, yang tidak melakukan apa-apa karena IP sudah menunjuk ke barat.Inilah satu perbedaan dari program ganda:
)
kenaikan 0 di atas tumpukan menjadi 1 . SaatP
melakukan keajaibannya lagi, kali ini menghitung 3 1 = 3 .O
keluaran dan@
berakhir, dan kami membuktikan secara meyakinkan bahwa ketiga kalinya memang pesona.sumber
Brain-Flak , 10 byte
Cobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Penjelasan:
Ketika kita menjalankan ini sekali, itu akan dimasukkan
(0 + 0 + 1) == 1
ke tumpukan alternatif. Berlari kedua kalinya, menempatkan hal yang sama ke tumpukan utama. Namun, jalankan yang ketiga kalinya, akan mengevaluasi ke(1 + 1 + 1) == 3
, dan mendorongnya ke tumpukan alternatif dan mencetak secara implisit.sumber
SQL,
252423 byte( -1 Byte Dihapus karakter yang salah ketik yang selalu komentar dan melakukan apa-apa )
( -1 Byte Berubah
SELECT
untukPRINT
seperti yang direkomendasikan oleh Razvan Socol )Cara kerjanya:
Di SQL, Anda dapat mengomentari tag komentar, seperti:
vs.
Kode pada 1 baris dengan komentar dikecualikan:
Iterasi pertama:
SELECT 2-1
Keluaran:1
Iterasi kedua:
SELECT 2-1*2+1
Output:1
Iterasi ketiga:
SELECT 2-1*2+1*2+1
Output:3
sumber
PRINT
bukannyaSELECT
akan menghemat byte tambahan.SOGL V0.12 ,
754 byteCoba di sini!
Coba dua kali lipat!
Coba tiga kali lipat!
Penjelasan:
sumber
ē1|
, tetapi ternyata tidak ada perintah untuk bitwise ATAU ...ē:2\+
: /05AB1E ,
65 byteCobalah online! atau Coba dua kali lipat! atau Coba tiga kali lipat!
Penjelasan
Tunggal:
0 + (0 % 2 == 0) -> 1
ganda:
1 + (1 % 2 == 0) -> 1
tiga kali lipat:
2 + (2 % 2 == 0) -> 3
sumber
% 2
dalam penjelasan rangkap tiga?2%_
benar?2 + (2 % 2 == 0) -> 2
tetapi2 + !(2 % 2 == 0) -> 3
(untuk penjelasan Anda).2%_
sama denganÈ
ya. Tidak yakin apa yang Anda maksud dengan penjelasannya.2+(2%2==0) = 2+(0==0) = 2+1 = 3
. Mungkin akan lebih jelas jika saya telah mengeksploitasi perhitungannya.> <> , 9 byte
Cobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Saya menemukan keberuntungan semacam ini, menggunakan filosofi bahwa "jika Anda membuat jalur ikan cukup berbelit-belit, akhirnya sesuatu akan berhasil". Versi asli dan dua kali lipat mencetak 5, dan versi tiga kali lipat mencetak 1 kemudian 5 untuk membuat 15 = 3 × 5. Berikut adalah versi yang dikalikan, untuk teliti Anda:
sumber
Python 2 ,
46 4539 byteTerinspirasi oleh jawaban Halvard . Saya senang bahwa tantangan saya menginspirasi yang baru, yang menurut saya lebih menarik. Disimpan 6 byte berkat Kevin Cruijssen .
Cobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Cara kerjanya (ketinggalan jaman)
Ketika digandakan, panjangnya menjadi 90 , tetapi kode baru diabaikan berkat
#
, jadik==90
dievaluasiTrue
. Boolean adalah subkelas dari bilangan bulat dalam Python, jadik>>True
sama dengank>>1
, yang pada dasarnya k / 2 = 45 . Ketika tiga kali lipat, kode baru sekali lagi diabaikan, maka panjang baru adalah 135 , yang tidak bisa digeser karenak==90
mengevaluasiFalse
, jadik>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
, dan k dicetak apa adanya.Python 2 , 36 byte
Ini adalah saran dari Aidan F. Pierce pada 38 byte, dan saya bermain golf dengan 2 byte. Saya tidak memposting ini sebagai solusi utama saya karena saya tidak memunculkannya sendiri.
Cobalah online! Coba dua kali lipat! Coba tiga kali lipat!
sumber
print open(__file__,"a").tell()/79*3|1#
mungkin?R ,
373128 byteTerima kasih kepada Giuseppe karena bermain golf dengan 3 byte terakhir.
(dengan baris baru tertinggal).
Coba sekali!
Cobalah dua kali!
Cobalah tiga kali!
Ini menggunakan
readLines()
trik dari jawaban Giuseppe untuk tantangan 8-bola , tempatstdin
pengalihan ke file sumber. Kode ini pada dasarnya hanya menghitung berapa banyak baris yang ada di bawah baris pertama dan output1
jika ada 1 atau 3 baris (yaitu kode tunggal atau dua kali lipat), atau3
jika ada 5 baris (yaitu kode tiga kali lipat).sumber
s
ini agar berfungsi dengan baik, TETAPI Anda harus dapat mengubahnya menjadi 28 byte dengan mengerjakan kembali beberapa perhitungan.%/%2
harus bekerjaHilang , 38 byte
Cobalah online!
Cobalah online!
Cobalah online!
Penjelasan
Lost adalah bahasa yang sangat menarik untuk tantangan ini. Teknik Hilang yang biasa adalah membangun "jebakan". Jebakan adalah bagian dari program yang dirancang untuk menangkap semua ips di satu tempat sehingga tumpukan mereka dapat dibersihkan dan mereka dapat dikontrol untuk pergi ke arah tertentu. Ini membuat program penulisan di Lost jauh lebih mudah dikelola. Namun karena program ini digandakan kita perlu menghindari duplikasi perangkap juga. Ini mengharuskan kami untuk merancang jebakan baru yang berfungsi dengan baik tetapi ketika digandakan hanya satu jebakan yang berfungsi. Ide dasar saya di sini adalah sebagai berikut
Sementara tumpukan tidak kosong,
?
akan menghapus item dan menyebabkannya melompat kembali ke awal jika item itu tidak nol. Kuncinya di sini adalah ketika ini menumpuk^^
baris sArtinya, tidak peduli bagaimana Anda masuk, Anda akan selalu keluar di tempat yang sama.
Dari sini kita dapat mencoba menerapkan ide yang sama dari jawaban Klein saya .
Tulang punggung program kami adalah sisi had kiri yang mendorong sejumlah
2
s. Setiap kali kita menambahkan salinan program yang lain2
akan ditambahkan ke tulang punggung program yang berarti 2 tambahan didorong ke tumpukan. Setelah keluar dari bawah, itu akan terpental\\>
dan mengeksekusi kodeIni menghapus 2 item tumpukan pertama, menambahkan satu ke apa pun yang tersisa, dan keluar. Setelah tulang punggung kami memiliki 3 2s kami akan menambahkan 1 dan mendapatkan 3, jika kami memiliki kurang dari 3 item, kami hanya akan membuang seluruh tumpukan dan mengembalikan 1.
Sekarang satu-satunya masalah yang tersisa adalah bahwa
!
dalam program kami dapat menyebabkan loop tak terbatas. Jika ip mulai!
naik ke atas, ia akan melompat dan mendarat tepat di tempat sebelumnya. Ini berarti kita harus menambahkan baris lain di bawahnya untuk mencegah loop.Ini memiliki sedikit masalah menempatkan beberapa garis miring di antara kami
^
di jebakan. Namun, agak ajaib, semuanya berhasil. Ips kami memantul dengan benar sehingga tidak ada bedanya.sumber
Stax , 5 byte
Jalankan dan debug online! · Dua kali lipat · Tiga kali lipat
Penjelasan
sumber
C (gcc) ,
959185 byteCobalah online!
sumber
Japt ,
865 byte-1 byte terima kasih kepada @ETHproductions
Penjelasan:
Ini mengevaluasi ke
1-0 = 1
Menggandakan mengevaluasi menjadi
2-1 = 1
Tiga kali lipat mengevaluasi ke
3-0 = 3
sumber
°U-v
(ditambah baris baru) untuk menghemat yang keduaU
.v
sempurna untuk tantangan ini :-)Bash Murni (tidak ada
wc
atau utilitas eksternal lainnya), 27sumber
EXIT
dengan0
Perl 5 ,
1815131211 byte-3 byte terima kasih kepada nwellnhof
Sekali Cobalah online!
Dua kali Cobalah online!
Tiga Kali Cobalah online!
sumber
n;$_=$a++|1;say
(15 byte)> <> ,
10 98 byteCobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Saya yakin ada solusi 8 byte di suatu tempat di luar sana.Yang tidak dapat dicetak pada akhirnya memiliki nilai ASCII 1, dan hanya diambil oleh
g
perintah et pada iterasi ketiga. Untuk dua yang pertama dicetak05
, lalu dicetak15
.sumber
C (gcc) , 107 byte
Kiriman pertama saya di C (gcc). Terlalu lama ...
TIO link: tunggal , ganda , rangkap tiga .
sumber
Labyrinth ,
12119 bytesTIO (1x) , TIO (2x) , TIO (3x)
sumber
JavaScript,
81 77 7470 byteDisimpan 4 byte berkat Shaggy
Solusi JS cukup timpang. Membutuhkan nilai dari
[3,1,1]
array dari kanan (pop()
). Mendaftarkan batas waktu untuk menampilkan nilai saat ini di masa mendatang. Jika batas waktu sudah terdaftar, batalkan. Bergantung pada sifat kotorvar
, yang mengangkat deklarasi variabel.Dua kali:
Tampilkan cuplikan kode
Tiga kali:
Tampilkan cuplikan kode
sumber
a
argumen ke-3 darisetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 bytePerhatikan spasi setelahnya
#endif
.Cobalah online!
sumber
Arang , 12 byte
Cobalah online! Tautan adalah untuk kode verbose.
Coba dua kali lipat!
Coba tiga kali lipat!
Penjelasan
sumber
MapAssignRight(Plus, 1, i)
menghemat satu byte, yang membawa Anda ke panjang yang sama dengan port jawaban saya ke @Mr. Tantangan XCoder:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
adalah versi lain dari jawaban saya, tetapi masih 11 byte ...MapAssign(Incremented, i)
JavaScript,
4340 Bytes2x:
Tampilkan cuplikan kode
3x:
Tampilkan cuplikan kode
sumber
PowerShell ,
54484544 byteCobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!
Mendapat jalan doa sendiri dengan
$PSCOMMANDPATH
dan melakukang
ETc
menurunkan kandungan pada file.If
jumlah karakter file itu kurang dari99
(diperiksa melaluiwc -c
dari coreutils), lalu kami output1
danexit
(yaitu, hentikan eksekusi). Itu menyumbang kode asli dan kode ganda. Kalau tidak, kita output3
dan keluar. Kode aktual yang ada di bagian dua kali lipat atau tiga kali lipat tidak ada artinya, karena kita akanexit
sebelum kita sampai ke sana, atau ada di belakang komentar#
.Disimpan 6 byte berkat Tn. Xcoder
Disimpan
34 byte berkat Pavelsumber
-lt99
ke99-gt
untuk mendapatkan casting untuk bekerja dengan benar, tapi itu memang satu byte lebih pendek. Terima kasih!C # (178 Bytes)
solusi C # gila, tapi saya senang itu mungkin dalam satu baris di C # sama sekali. :)
Bagi saya bagian tersulit adalah memiliki C # yang valid yang akan menginisialisasi atau menambah variabel yang sama, jadi saya akhirnya menyalahgunakan Manajer Konfigurasi karena saya memerlukan NameValueCollection dan ConfigurationManager statis global adalah satu-satunya yang dapat saya pikirkan sehingga saya dapat memperbarui dalam memori. EnvironmentVariables adalah pilihan lain yang saya perhatikan tetapi tidak memiliki pengindeks jadi saya tidak yakin bagaimana melakukannya dalam satu baris yang dapat disalin disalin untuk menghasilkan output yang diperlukan sesuai spesifikasi.
sumber
Pesona Rise , 35 byte
Cobalah online!
Bekerja dengan yang satu ini memungkinkan saya untuk menemukan kesalahan dalam parser saya berurusan dengan karakter pengubah keterlambatan baru, meskipun hasil akhir akhirnya tidak terpengaruh olehnya, karena saya akhirnya tidak membutuhkannya.
Fungsi karena fakta bahwa baris terakhir tidak memiliki baris tambahan (atau dalam hal ini, spasi tambahan), memungkinkan duplikat IP untuk muncul di tempat yang berbeda. Yang kiri atas akhirnya membuat lingkaran besar di sekitar grid sedangkan IP kedua melakukan operasi Refleksi untuk mengganti
\
pada baris ke-6 dengan a. IP ini kemudian akan berulang selamanya dan tidak melakukan apa-apa.
IP ketiga juga membuat penggantian yang sama pada saat yang sama, tetapi karena terletak pada baris ke - 13 , salinan reflektornya mengirimkannya ke atas dan mengeksekusi
1f'3w
urutan yang ada di sudut kanan atas, yang menggantikan1
dengan3
pada tanggal 14. line, sebelum IP asli mengeksekusinya, menyebabkan program tiga kali lipat untuk output3
bukan1
(nilai juga bisa menjadi2
dan6
,3
dan9
,4
dan12
, atau5
dan15
karena ketersediaana-f
konstanta numerik;1
dan3
dipilih secara sewenang-wenang). Kemudian dibiarkan dalam loop tanpa akhir melakukan lebih banyak perintah refleksi yang tidak melakukan apa pun.Coba rangkap tiga!
sumber
Perl 5,
2825 byte-3 byte terima kasih kepada @neil!
Memindahkan kursor ke belakang (tidak melakukan apa-apa pada awal baris) dan mencetak nilai
$a
, pertama dan ketiga kalinya (yaitu, kali ketiga a dicetak, kursor bergerak, dan 3 dicetak pada posisi 1).sumber
print"\e[D$a"if(++$a!=2);
mungkin?QBasic, 19 byte
Sumber harus menyertakan baris baru yang tertinggal.
Penjelasan
Kami ingin output
1
,1
,3
. Perhatikan bahwa angka-angka ini satu kurang dari kekuatan 2. Jadi:sumber