Diberikan array bilangan bulat positif A
sebagai input, hasilkan program yang, ketika diulangi berkali- k
kali, menampilkan nilai k
th (1-indeks) dari array.
Misalnya, jika arraynya [1,11]
, output harus berupa program yang mengeluarkan 1
, dan ketika diulang dua kali, keluaran 11
. Kode seperti print(end="1");
di Python 3 berfungsi: print(end="1");
mencetak 1 dan print(end="1");print(end="1");
mencetak 11
Jumlah panjang kode terkecil untuk menyelesaikan semua kasus uji, menang. Kode meta Anda harus menyelesaikan 500 kasus uji dalam 60-an, dan masing-masing kode solusi Anda harus kembali dalam 10-an. Kode meta dan kode solusi tidak harus dalam bahasa yang sama, tetapi semua solusi yang dihasilkan oleh program meta Anda harus dalam bahasa yang sama.
Data pretest dan generator dapat dilihat di sini . 7 hari kemudian akan menggunakan jumlah waktu pengajuan (mis. 12:34 berarti 1234) untuk menjadi benih acak dan menghasilkan kasus uji lain sebagai kasus uji akhir.
Unggulan terakhir adalah 7335 dalam GMT + 8, jadi data tes akhir ada di sini
sumber
print(end="1");
diulangi untuk 2 kali adalahprint(end="1");print(end="1");
x
. Makax
harus memberikan elemen pertama dari daftar,xx
harus memberikan elemen kedua dari daftar,xxx
harus memberikan yang ketiga, dan seterusnya.Jawaban:
Python 3 , menghasilkan Stax
Ini menggunakan berbagai strategi. Sebagian besar strategi hanya berlaku dalam kondisi tertentu, tetapi ada satu strategi mundur yang selalu dapat digunakan. Pada akhirnya, program kandidat terkecil dipilih.
Cobalah online!
Pembaruan: Validasi Akan memakan waktu lama untuk menjalankan setiap multiplisitas dari setiap program secara terpisah. Dimungkinkan untuk menjalankan semuanya sekaligus. Untuk melakukan ini, sepotong kecil kode harus digunakan. Bertanggung jawab atas beberapa hal.
Lakukan output implisit jika ada. Biasanya, pada akhir program diam, bagian atas tumpukan dicetak jika belum ada output lain. Saat menjalankan beberapa program dalam file sumber yang sama, ini harus dilakukan secara eksplisit.
Bersihkan kedua tumpukan.
Setel ulang register. Untuk program-program ini hanya x register yang digunakan.
Pelat ini harus diterapkan setelah setiap program dijalankan.
Misalnya, input
[5,2,7,3]
menghasilkan program stax3527E|X@
. Keempat multiplisitas dapat diuji sekaligus.Cobalah online!
Dengan cara ini, dimungkinkan untuk menguji semua multiplisitas semua program dalam menjalankan yang sama, dengan asumsi tidak ada yang rusak. Ini mungkin akan menjadi program stax terbesar yang pernah dijalankan jika semua 500 dilakukan.
sumber
Perl 5
-p
, menghasilkan Perl 5-p
, overhead191713-1 terima kasih kepada @Dom Hastings
Skor untuk satu input adalah
length of the input + 13
. Jelas dapat ditingkatkan dengan menghasilkan program self-decompressing untuk input yang lebih besar, tetapi saya tidak akan repot.Berikan array input dipisahkan dengan koma pada satu baris di STDIN.
Cobalah online!
Jalankan output concatenated
n
times tanpa input (mis. Redirect from / dev / null)Contoh cara menjalankannya untuk input
2,6,4,7
dan program yang dihasilkan diulang 4 kali:Cobalah online!
Jika Anda tidak suka program yang dihasilkan mencoba membaca dari STDIN gunakan versi ini dengan overhead 17:
Cobalah online!
Contoh cara menjalankannya untuk input
2,6,4,7
dan program yang dihasilkan diulang 4 kali:Cobalah online!
Versi ini macet setelah mencetak output yang diperlukan
sumber
s/ /,/g;$_="die say+($_)[\$-++],"
?05AB1E , menghasilkan 05AB1E
Cobalah online!
Program yang dihasilkan untuk input
[5,17,7,13,2]
adalah"5 17 7 13 2"#.g<è
.Test suite untuk [5,17,7,13,2]
Panjang program yang dihasilkan adalah
len(input) + 5
sumber
len(input)
bukan hitungan bilangan bulat, tetapi panjang string yang menahan mereka semua. Saya salah paham pada awalnya.APL (Dyalog Unicode)
Lambda awalan anonim. Mengembalikan badan program.
Cobalah online!
Metode
Ini mengeksplorasi berbagai metode dan mengembalikan yang dapat digunakan pertama, akhirnya jatuh kembali ke metode yang berlaku secara universal.
Elemen tunggal
Jika daftar hanya memiliki satu elemen, itu dikembalikan apa adanya.
2, 22 dll.
Satu digit bisa diulang untuk menghasilkan angka 11 kali lebih besar,
Semua sama
Kami baru saja mengembalikan nomor (
⊢
) paling kanan .Linier
f (n) = k × n urutan cukup masukkan nilai plus sebelum istilah pertama.
Faktorial diikuti oleh semua 1s
Ketika angka pertama n =! M dan angka selanjutnya adalah 1, maka
!m
merupakan solusi karena!m
n danm!m
1 dan!1
1.b ab ab ab
Karena semua angka dua digit lebih besar dari semua angka satu digit, maksimum berjalan, di mana bagian depan angka pertama terpaku di belakang angka kedua, adalah solusi.
Kode tiga baris
Periksa apakah rumus jenis apa
+a×b
pun valid.String fallback
Urutan panjang tanpa nomor di bawah 5 (karena 4 adalah jeda baris) dapat dikodekan sebagai karakter SBCS.
Fallback string offset
Jika ada angka di bawah 5, kami bergeser ke atas 9 untuk menghindarinya.
Fallback
Rangkaian string sederhana dari string
"{⍺←⊃⋄1⌽⍺⊢⍵}"
dan⍕
input stringified ( ). Misalnya[3,1,4]
mengembalikan badan program{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.Bagian dalam kawat gigi adalah fungsi ambivalen yang artinya dapat berupa fungsi awalan atau fungsi infiks. Jadi instance paling kiri dari itu akan berjalan dalam mode awalan, dan semua yang lain dalam mode infix. Perbedaan antara mode adalah apakah
⍺
, menandakan argumen kiri, memiliki nilai. Jika tidak maka akan diberikan fungsi⊃
(pertama).Penjelasan metode mundur
{
…}
Lambda anonim:⍺←⊃
Jika tidak ada argumen kiri (⍺
) tetapkan fungsi⊃
(pertama) ke⍺
⋄
kemudian:Pada titik ini, kode berikut ini berarti dua hal yang berbeda tergantung pada apakah
⍺
daftar angka (panggilan infiks) atau fungsi "pertama" (panggilan awalan).Jika
⍺
daftar angka:⍺⊢⍵
buang argumen kiri demi argumen yang benar1⌽
putar satu langkah ke kiriJika
⍺
fungsi "pertama":⊢⍵
menghasilkan argumen yang benar⍺
pilih elemen pertama itu1⌽
putar satu langkah (no-op pada skalar)Contoh menjalankan metode fallback
3 1 4
Kode pelaksana{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
,, menetapkan fungsi "pertama" ke⍺
dan dengan demikian mengembalikan elemen pertama;3
.Menjalankan
{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
memungkinkan lambda paling kanan "menangkap" kiri3 1 4
sebagai argumen kiri, sehingga⍺
memiliki nilai yang dibuang3 1 4
yang kemudian diputar satu langkah ke kiri dan menghasilkan1 4 3
sebagai hasilnya. Ini kemudian digunakan sebagai satu-satunya argumen ke lambda paling kiri, di mana⍺
menjadi fungsi "pertama", menyebabkan hasilnya menjadi elemen pertama;1
.Menjalankan
{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
memungkinkan lambda paling kanan "menangkap" tengah3 1 4
sebagai argumen kiri yang kemudian dibuang demi argumen kanan3 1 4
,, yang ketika diputar satu langkah ke kiri adalah1 4 3
. Ini kemudian digunakan sebagai argumen kanan lambda tengah bersama-sama dengan yang paling kiri3 1 4
sebagai argumen kiri. Argumen kiri dibuang ke kanan, yang dirotasi menghasilkan satu langkah kiri4 3 1
. Ini kemudian menjadi satu-satunya argumen lambda paling kiri, sehingga⍺
menjadi "fungsi pertama", mengembalikan elemen pertama;4
.Mencetak gol
Ketika saatnya untuk menguji menggunakan data aktual, gunakan harness tes ini (ditautkan diisi dengan data pretest). Kasing uji masuk dalam kolom Input, dan Output akan menjadi jumlah byte total dari semua 500 program secara bersamaan. (Ini juga akan menimbulkan kesalahan, tapi itu hanya karena setelah itu mencoba untuk mengevaluasi Input apa adanya.)
sumber
Arang
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Keluarkan string literal
⎚§⪪
.Keluarkan array input ke string, bergabung dengan spasi, dan cetak.
Keluarkan string literal
¦ Lυ⊞υω
.Output dari contohnya
5,17,7,13,2
adalah⎚§⪪5 17 7 13 2¦ Lυ⊞υω
. Cobalah online! Penjelasan:Kosongkan kanvas, sehingga hanya output terakhir yang terlihat.
Ambil panjang daftar yang telah ditentukan
u
. Gunakan itu untuk mengindeks ke dalam daftar bilangan bulat yang telah dipisah pada spasi dan output elemen yang dipilih.Dorong variabel dummy ke daftar yang telah ditentukan
u
, sehingga salinan berikutnya akan menampilkan elemen berikutnya dari daftar.Total panjang output = (panjang semua bilangan bulat di semua daftar) + (jumlah bilangan bulat di semua daftar) + (jumlah daftar * 9) karakter (SBCS).
sumber
Haskell , menghasilkan Haskell
Cobalah online! Untuk testcase pertama
[5,2,7,3,2,3,15,10,7,2,14,11,16,16,3,3,4,3,8,4]
menghasilkan program berikut:Coba sekali , dua kali lipat dan tiga kali lipat . Ini menggunakan pendekatan yang sama dengan jawaban Haskell saya untuk saya gandakan sumbernya, Anda gandakan hasilnya .
Panjang setiap program yang dihasilkan adalah panjang daftar input sebagai string ditambah 25, sehingga skor untuk testcases yang tersedia saat ini adalah
12266 + 500 * 25 = 24766
. Ini menunjukkan bahwa rasio kode terhadap data pada dasarnya sama, dan saya ragu mungkin untuk menulis kode dekompresi yang cukup kecil yang akan menurunkan skor. Mungkin saja daftar di mana jauh lebih besar.sumber
Python 2 , menghasilkan Python 2
Cobalah online!
Untuk input
program yang dihasilkan adalah
yaitu 98 byte.
Diadaptasi dari solusi ini di "Saya gandakan sumbernya, Anda gandakan hasilnya!".
Sialan, dua jawaban pendek muncul sebelum saya selesai menulis jawaban ini.
sumber
k
print
menjadisys.stdout.write
untuk menghapus "sesuatu" yang tertinggal.Java 8, menghasilkan Python 2
Cobalah online.
Yaitu
[3,4,5,6,7]
menghasilkan program Python 2 ini:Coba online sekali ; Cobalah online dua kali ; Cobalah secara online tiga kali .
Program Python yang dihasilkan didasarkan pada jawaban @ Mr.Xcoder untuk ketiga kalinya tantangan pesona .
Penjelasan:
Kode Java 8:
Kode Python 2:
sumber
Bash, menampilkan program di Perl 5
Program Bash bisa disebut seperti
script.sh 1,2,3
.Program Perl harus dipanggil dengan
-E
flag.perl
Kode yang dihasilkan untuk input4,7,8
adalah:Kekuatan yang cukup kasar. Menghapus elemen array (
perl
tidak peduli bahwa array tidak ada pada awalnya), atur jika belum ditetapkan. Kemudian gema elemen pertama array di akhir. (END
Blok dijalankan terakhir). Theexec 'true'
berhenti program, sehingga lebihEND
blok tidak dieksekusi.Contoh:
sumber
Python 2, Menghasilkan C ++
Ini tidak akan mengalahkan rekor apa pun, saya terutama tertarik untuk memikirkan apakah saya bisa mengetahui cara melakukannya :) Gunakan fakta bahwa variabel global dijalankan sebelum utama, dan dengan demikian dapat meningkatkan variabel global, kemudian menggunakan #ifdef untuk memastikan main hanya didefinisikan satu kali.
sumber
Pesona Runic , menghasilkan Runic
Cobalah online!
Mengambil input sebagai daftar nilai yang dipisahkan ruang.
Keluaran dilakukan satu kali
Output dilakukan dua kali
Output dilakukan empat kali
Menggunakan perintah mode baca numerik kontinu,
´
yang dilakukan pada 12 Januari dan saya menemukan pertanyaan ini pada tanggal 14. Perintah ini memungkinkan nilai panjang sewenang-wenang dapat dikodekan karena tanpa fitur ini akan sangat sulit untuk melakukannya (misalnya1392
perlu direpresentasikan sebagai1X3+X9+X2+
, memerlukan loop tambahan minimal); tepatnya masalah yang ingin saya pecahkan ketika saya membuat´
perintah.Dalam kode asli,
|
di string"{Zs$;|1|l;|y"
dan"UwR'10<|I+}"
diganti dengan\n
(yang duduk di grid dan tidak memodifikasi, karena mereka biasanya akan) denganw
perintah ritual:74akw
,94/Rakw
,c4akw
, dan85akw
. Karakter asli dapat berupa apa saja.|
terpilih menjadi penampung simbolik yang secara visual mewakili apa yang saya inginkan. Beberapa byte disimpan (jika yang tidak disimpan) dengan tidak harus secara reflektif menambahkan titik masuk, sepertiwR'10<
menulis sebuahR
ke lokasi di mana seseorang sudah ada (posisi0,1
), dan kemudian mulai mengisi tumpukannya dengan sampah sebelum kehabisan mana, mengikuti pengulangan urutU"'i34
.Kode output yang dihasilkan bekerja dengan menggunakan
w
perintah ritus untuk mengubah karakter pertama pada baris kedua menjadiR
redirection yang tinggi (sehingga hanya satu IP yang menjalankan pernyataan cetak), dengan penggunaan ceroboh dari panjang tumpukan yang dihasilkan dari program yang lebih tinggi dan lebih tinggi untuk menentukan indeks mana untuk membaca. Setiap IP lain mengubah lokasi yang sama ke instruksi yang sama dan berakhir. Segala sesuatu yang lain tidak digunakan.Gambar kedaluwarsa, tetapi cukup untuk penjelasan aliran.
Setiap pelaksanaan
1Iy
mempertahankan kemampuan IP untuk menangani tumpukan yang lebih besar dan lebih besar (disebabkan olehl
perintah), yang ukurannya memungkinkan program untuk menentukan berapa banyak salinan kode sumber dasar yang ada. Final1
digunakan untuk menambah yang sebelumnyal
ke nomor yang diperlukan ketika memutar tumpukan (dibuat berikutnya) untuk sampai pada nilai yang benar. TheZ
perintah meniadakan nilai ini sehingga berputar stack dalam arah yang benar.Array input asli kemudian disandikan menggunakan mode baca kontinu, prima dengan 0 untuk menghindari secara bertahap mengubah nilai yang sama, untuk membaca input asli. Ruang NOP diperlukan untuk keluar dari mode baca kontinu dan memungkinkan 0 berikutnya untuk menumpuk tumpukan lagi.
Skor harus sama kira-kira
3+v.toString().length
, untuk setiap entri arrayv
,+23
untuk setiap array. Kira(2.55*total length of input)
- kira atau33837
untuk input sampel, jika saya melakukan hal yang benar.Perubahan kecil dimasukkan ke dalam program akhir yang saya harapkan karena efek samping yang diperkenalkan pada build yang sama mengenai
s
perintah, namun hasilnya menghasilkan skor yang lebih baik pada saat yang sama.sumber