Tugas Anda adalah mengadu setiap sisi keyboard satu sama lain dan membangun dua program, dalam bahasa yang sama, satu hanya menggunakan tombol di sisi kiri dari keyboard standar yang menghasilkan Pollinium milk; plump pumpkin; lollipop?
, dan satu menggunakan tombol di sebelah kanan yang menghasilkan Weatherheaded sweetheart haberdasheress!
.
Aturan
Kunci persis yang diizinkan untuk program sebelah kiri adalah:
123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB
dan untuk program sebelah kanan:
7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?
Ada empat kunci gratis Esc
( \x1b
), Tab
( \x09
), Space
( \x20
) dan Enter
( \x0a
dan / atau \x0d
) yang dapat digunakan di salah satu, tidak ada, atau keduanya solusi.
Skor Anda akan menjadi jumlah total byte untuk kedua program. Sementara saya menggunakan istilah ini program
, kiriman Anda dapat berupa program lengkap, atau fungsi seperti biasa, dan keduanya dapat berbeda jenis (mis. Satu program penuh, dan satu fungsi).
Hasil Anda harus menyertakan teks yang diinginkan, jumlah spasi whitespace memimpin dan trailing apa-apa, selama teks yang tepat muncul di dalamnya.
Solusi terpendek di setiap bahasa menang.
sumber
Jawaban:
Perl 5 , 261 = 88 + 173 byte
Ini adalah contoh di mana "opsi bahasa tidak masuk hitungan" adalah masalah. Solusi sisi rigt menggunakan
-p
, sisi kiri tidak. Jadi apakah itu dianggap sebagai bahasa yang sama atau tidak? Dan haruskah pilihannya berasal dari karakter kiri / kanan?Kiri 88
gunakan
-M5.10.0
(atau-E
dari commandline) untuk mengaktifkansay
Lagi diperdebatkan jika opsi ini harus dihitung sebagai kode dan harus datang dari sisi kiri atau jika jatuh di bawah "opsi untuk mengatur versi bahasa tidak dihitung"Cobalah online!
Benar 173
Jalankan dengan
-p
opsi (yang juga terdiri dari karakter yang tepat)Ini hampir pasti dapat ditingkatkan, tetapi untuk saat ini cukup sulit untuk membuat sesuatu bekerja. Tidak memiliki akses ke
print
,say
,$_
dansub{}
membuat output yang rumitCobalah online!
sumber
eval
via&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Ruang kosong ,
11751143655645638632639578 (293 + 285) byteItu harus dilakukan ..; p
Pasti bisa bermain golf dengan mengisi tumpukan terbalik dan mencetak semuanya di akhir dalam semacam loop, tapi ini hanya program spasi putih kedua saya, jadi saya belum mengetahuinya ..EDIT: Golf.+7 byte karena saya salah eja
pumpkin
sebagaipumkin
.. (Terima kasih telah memperhatikan, @ fəˈnɛtɪk .)Huruf
S
(spasi),T
(tab) danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Sisi kiri
Pollinium milk; plump pumpkin; lollipop?
:Cobalah online (dengan spasi, tab, dan baris baru saja).
Sisi kanan
Weatherheaded sweetheart haberdasheress!
:Cobalah online (dengan spasi, tab, dan baris baru saja).
Penjelasan:
Pertama membangun tumpukan terbalik. Mendorong nomor dilakukan sebagai berikut:
S
di awal: Aktifkan Manipulasi StackS
: Dorong yang berikut sebagai nomor ke tumpukanS
/T
: Tanda bit di manaS
positif danT
negatifT
danS
diikuti olehN
: Masukkan nomor sebagai biner ke tumpukan (T=1
danS=0
).Maka itu akan loop di atas tumpukan terbalik dan mencetak semuanya sebagai karakter. Ini dilakukan sebagai berikut:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)Ini di atas adalah tata letak default untuk kedua program. Berikut ini adalah log perubahan untuk tata letak default ini yang menurunkan jumlah byte lebih jauh:
Semua angka diturunkan dengan jumlah yang sama ( dalam program pertama, dan yang kedua) untuk mengurangi digit biner yang digunakan untuk angka yang sekarang lebih rendah, dan antara langkah 3.2 dan 3.3 ditambahkan dua sub-langkah berikut:
100
110
102
101
SSSTTSTTTSN
) di program 1, atau 101 (SSSTTSSTSTN
) di program 2TSSS
)Saya juga digunakan
SNS
dalam beberapa kasus untuk menduplikasi atas tumpukan, yang digunakan untuk golfll
,ll
,ee
danss
.Selain itu, langkah 4 (buat
Label_1
) telah dihapus sepenuhnya. Ini akan keluar dengan kesalahan, tetapi masih akan menampilkan semuanya dengan benar ( yang diizinkan sesuai dengan meta ).Dimungkinkan untuk menyalin nilai
n
'th dari bagian atas tumpukan (denganSTS
+ 0-diindeksn
), yang lebih pendek daripada membuat nomor baru dalam beberapa kasus.Dalam program pertama saya telah melakukan ini untuk: yang kedua
p
dipop
(STSSTN
(copy 1) lebih pendek dariSSSTTSSN
(buat nomor untuk 'p')), yang kedual
dilol
(STSSTN
(copy 1) lebih pendek dariSSSTSSSN
(buat nomor untuk 'l' )), yang keduap
dip p
(STSSTN
(salin ke-1) lebih pendek dariSSSTTSSN
(buat nomor untuk 'p')), yang keduap
dipumlp
(STSSTTN
(salin ke-3) lebih pendek dariSSSTTSSN
(buat angka untuk 'p')), yang keduap
dipmup
(STSSTSN
( copy ke-2) lebih pendek dariSSSTTSSN
(buat angka untuk 'p')), yang keduam
dim m
(STSSTN
(salin ke-1) lebih pendek dariSSSTSSTN
(buat angka untuk 'm')), yang keduai
diini
(STSSTN
(salin ke-1) lebih pendek dariSSSTSTN
(buat angka untuk 'i') ).Dalam program kedua ini tidak dilakukan untuk apa pun. Jarak antara beberapa cukup pendek, seperti
ere
atauded
, tetapi membuat angka untuk 'e' (SSTTN
) atau 'd' (SSTTSN
) keduanya lebih pendek atau sama panjangnya dengan salinan 1st (STSSTN
), jadi saya tidak bisa menerapkan trik ini di Program kedua untuk menyimpan byte. CATATAN: Setelah golf-langkah 7, tidak semua ini berlaku lagi.Dalam kedua program saya telah mengubah langkah 1 dari loop dari
SSSN
(Push 0) keSSN
(Push error_value), dan menghapus langkah-langkah 3.1 (SNS
Gandakan) dan 3.2 (NTSTN
Jika 0: Keluar). Sekarang itu hanya akan keluar dengan kesalahan yangSSN
merupakan nilai yang tidak diketahui segera setelah mencoba mengaksesnya.Menghapus
SSN
(error_value) sepenuhnya di kedua program. Sekarang akan berhenti dengan kesalahan " Tidak dapat melakukan Infix Plus " ketika mencoba untuk melakukan fungsi Tambah dengan tidak ada yang tersisa di tumpukan.Mengubah nilai konstan dari
100
dan102
ke110
dan101
masing - masing. Di sini program Java digunakan untuk menghasilkan110
konstanta; dan di sini program Java digunakan untuk menghasilkan101
konstanta. Perhatikan bahwa sekarang ada lebih sedikit Salinan yang digunakan daripada yang dijelaskan pada poin 4 di atas, karena nilai-nilai baru dalam banyak kasus lebih pendek dari salinan, jadi mendorong kembali mereka lebih pendek.sumber
Bahasa, ini banyak byte
Sisi kiri adalah 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 pengulangan dari
a
karakter, yang setara dengan program Brainfuck berikut:Cobalah online!
Sisi kanan adalah 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 pengulangan dari
p
karakter, yang setara dengan program Brainfuck berikut:Cobalah online!
sumber
CJam , 128 + 192 = 320 byte
Cobalah online!
Cobalah online!
sumber
Fission , 958 + 752 = 1710 byte
._.
Kiri
Cobalah online!
Kanan
Cobalah online!
OK, di sini kita beruntung, sebenarnya ._.
Fitur keren pertama dari Fission adalah ia memiliki 4 perintah untuk membuat pointer perintah, atom AKA:,
RLDU
jadi saya memiliki dua perintah untuk grup kiri dan kanan.Lucky lucky kedua adalah 2 perintah untuk keluaran
!
danO
, yang terjadi dalam kelompok yang berbeda.Ketiga kalinya pesona. Kedua perintah keluaran menghasilkan ASCII yang setara dengan massa atom. Jadi saya perlu mengubahnya. Beruntung saya! Kedua
+ (+1 mass)
dan_ (-1 mass)
berada dalam satu kelompok dan semua membutuhkan tiga$ (+1 energy)
,~ (-1 energy)
,@ (swap mass and energy)
berada di kelompok lain.Jadi tidak ada yang menghentikan saya, tetapi tidak bisa kompak, mengatur massa langkah demi langkah.
Program pertama
Program pertama hanya terdiri dari
Dz^@$~!V
Mulai bisa lebih sederhana (hanya
R
), tetapi menggunakan divide menyimpan beberapa byte untuk huruf pertama.Atom, yang pergi ke kiri, membungkus dan bertemu
V
, yang membuatnya turun dan membungkus tanpa batas, tidak melakukan apa-apa.Atom kedua berjalan kokoh dan akan menemukan banyak pola berulang
@...@!
untuk setiap huruf yang akan dihasilkan.Akhirnya ia akan menghadapi
V
dan berbagi nasib atom pertama. Tidak ada cara untuk menghancurkan mereka atau berhenti dengan bagian kiri keyboard.Program kedua
Kedua hadir dengan pasang surut. Saya punya perintah untuk mengubah massa secara langsung, tetapi perintah output
O
menghancurkan atom, jadi saya harus mempertahankannya.Program dimulai dari kanan
L
dengan atom ke kiri.Pola berulang:
'
menempatkan kode ASCII char yang di-encoutered berikutnya dalam massa atom, sehingga kode beberapaX
disimpan terlebih dahulu, daripada massa diubah oleh_
dan+
ke nilai yang tepat.Terkadang
X'
dilewati, jika penggunaannya lebih singkat_
dan adil+
.Atom berasal dari kiri, cermin dua kali dan klik
}
dari kiri. Dalam hal ini}
berfungsi seperti cloner, mengirimkan dua atom identik ke atas dan ke bawah. Atom turun dipantulkan oleh cermin dan ke kiri. Atas atom membungkus, mengenai cermin yang sama tetapi dari bawah dan karenanya mencerminkan benar, bertemuO
dan mencetak.Pada akhirnya atom yang terakhir bertemu final
O
untuk dihancurkan.sumber