Tangan Kiri vs. Tangan Kanan - Tantangan Pengetik

32

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( \x0adan / 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.

Celah standar dilarang .

Solusi terpendek di setiap bahasa menang.

Dom Hastings
sumber
6
Mengapa H adalah tangan kiri?
tsh
1
@tsh Saya ingin membagi keyboard 6/6 (atau sedekat itu) hanya untuk mencoba dan menyimpan lebih banyak simbol untuk setiap "tangan".
Dom Hastings
8
// Mungkin aku harus belajar spasi putih dan kembali lagi nanti ...
tsh
@ tsh, saya kira jawaban spasi putih tidak bisa dihindari! Tidak yakin seberapa kompetitifnya itu! Mungkin aku seharusnya mengatasinya, sudah terlambat sekarang!
Dom Hastings
Apakah OK jika program memiliki output (non-spasi) juga, asalkan termasuk teks yang diminta?
Grzegorz Oledzki

Jawaban:

12

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 -Edari commandline) untuk mengaktifkan sayLagi 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"

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

Cobalah online!

Benar 173

Jalankan dengan -popsi (yang juga terdiri dari karakter yang tepat)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

Ini hampir pasti dapat ditingkatkan, tetapi untuk saat ini cukup sulit untuk membuat sesuatu bekerja. Tidak memiliki akses ke print, say, $_dan sub{}membuat output yang rumit

Cobalah online!

Ton Hospel
sumber
Sama sekali tidak peduli tentang bendera, saya senang bahwa ini valid. Solusi yang jauh lebih pendek daripada apa yang telah saya kerjakan saat saya menelepon evalvia &{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}!
Dom Hastings
12

Ruang kosong , 1175 1143 655 645 638 632 639 578 (293 + 285) byte

Itu 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 pumpkinsebagai pumkin.. (Terima kasih telah memperhatikan, @ fəˈnɛtɪk .)

Huruf S(spasi), T(tab) dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Sisi kiri Pollinium milk; plump pumpkin; lollipop?:

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Cobalah online (dengan spasi, tab, dan baris baru saja).

Sisi kanan Weatherheaded sweetheart haberdasheress!:

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Cobalah online (dengan spasi, tab, dan baris baru saja).


Penjelasan:

Pertama membangun tumpukan terbalik. Mendorong nomor dilakukan sebagai berikut:

  • S di awal: Aktifkan Manipulasi Stack
  • S: Dorong yang berikut sebagai nomor ke tumpukan
  • S/ T: Tanda bit di mana Spositif dan Tnegatif
  • Beberapa Tdan Sdiikuti oleh N: Masukkan nomor sebagai biner ke tumpukan ( T=1dan S=0).

Maka itu akan loop di atas tumpukan terbalik dan mencetak semuanya sebagai karakter. Ini dilakukan sebagai berikut:

  1. Tekan 0 ( SSSN)
  2. Tekan semua angka yang menunjukkan karakter terbalik seperti dijelaskan di atas
  3. Buat Label_0( NSSN)
    1. Gandakan bagian atas tumpukan ( SNS)
    2. Jika nilai ini 0: Langsung ke Label_1( NTSTN)
    3. Lain: Pop dan cetak bagian atas tumpukan sebagai karakter ( TNSS)
    4. Lompat ke Label_0( NSNN)
  4. Buat 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:

  1. 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 110102 101

    • Tekan 110 ( SSSTTSTTTSN) di program 1, atau 101 ( SSSTTSSTSTN) di program 2
    • Pop dan tambahkan dua nilai teratas stack satu sama lain, dan hasilnya adalah top baru stack ( TSSS)
  2. Saya juga digunakan SNSdalam beberapa kasus untuk menduplikasi atas tumpukan, yang digunakan untuk golf ll, ll, eedan ss.

  3. 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 ).

  4. Dimungkinkan untuk menyalin nilai n'th dari bagian atas tumpukan (dengan STS+ 0-diindeks n), yang lebih pendek daripada membuat nomor baru dalam beberapa kasus.
    Dalam program pertama saya telah melakukan ini untuk: yang kedua pdi pop( STSSTN(copy 1) lebih pendek dari SSSTTSSN(buat nomor untuk 'p')), yang kedua ldi lol( STSSTN(copy 1) lebih pendek dari SSSTSSSN(buat nomor untuk 'l' )), yang kedua pdi p p( STSSTN(salin ke-1) lebih pendek dari SSSTTSSN(buat nomor untuk 'p')), yang kedua pdi pumlp( STSSTTN(salin ke-3) lebih pendek dari SSSTTSSN(buat angka untuk 'p')), yang kedua pdi pmup( STSSTSN( copy ke-2) lebih pendek dariSSSTTSSN(buat angka untuk 'p')), yang kedua mdi m m( STSSTN(salin ke-1) lebih pendek dari SSSTSSTN(buat angka untuk 'm')), yang kedua idi ini( STSSTN(salin ke-1) lebih pendek dari SSSTSTN(buat angka untuk 'i') ).
    Dalam program kedua ini tidak dilakukan untuk apa pun. Jarak antara beberapa cukup pendek, seperti ereatau ded, 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.

  5. Dalam kedua program saya telah mengubah langkah 1 dari loop dari SSSN(Push 0) ke SSN(Push error_value), dan menghapus langkah-langkah 3.1 ( SNSGandakan) dan 3.2 ( NTSTNJika 0: Keluar). Sekarang itu hanya akan keluar dengan kesalahan yang SSNmerupakan nilai yang tidak diketahui segera setelah mencoba mengaksesnya.

  6. 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.

  7. Mengubah nilai konstan dari 100dan 102ke 110dan 101masing - masing. Di sini program Java digunakan untuk menghasilkan 110konstanta; dan di sini program Java digunakan untuk menghasilkan 101konstanta. 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.

Kevin Cruijssen
sumber
Barang-barang ST hanya mendorong angka sebagai biner, dengan ruang sebagai 0, tab sebagai 1. Output adalah TNSS, sehingga Anda memiliki dua ruang ekstra di awal setiap program. Mungkin juga menyimpan byte untuk digandakan dan kemudian menambah / mengurangi untuk setiap karakter dan mengulang nilai-nilai di akhir.
Jo King
1
Anda salah mengeja labu.
fəˈnɛtɪk
@ fəˈnɛtɪk Whoops lol .. Harus diperbaiki sekarang, terima kasih telah memperhatikan.
Kevin Cruijssen
4

Bahasa, ini banyak byte

Sisi kiri adalah 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 pengulangan dari akarakter, yang setara dengan program Brainfuck berikut:

-[--->+<]>-----.[--->+<]>-.---..---.+++++.-----.++++++++++++.--------.[->+++++<]>-.+[----->+<]>.----.+++.-.--[->+++<]>.+[-->+<]>++.[-->+++++++<]>.----.+++++++++.--------.+++.[------->++<]>.[-->+++++++<]>.+++++.--------.+++.-----.--.+++++.[-->+<]>++++.+[-->+<]>++.++[--->++<]>.+++.---..---.+++++++.-.+.[--->++++<]>-.

Cobalah online!

Sisi kanan adalah 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 pengulangan dari pkarakter, yang setara dengan program Brainfuck berikut:

+[--->++<]>+.++[->++++<]>+.----.--[--->+<]>-.------------.---.+++++++++++++.----------.---.----.+++.+.-.-[--->+<]>-.---[->++++<]>-.++++.[->+++<]>..[--->+<]>---.------------.---.----.--[--->+<]>---.++.[---->+<]>+++.-[--->++<]>--.-------.+.+++.+++++++++++++.--------------.---.--[--->+<]>--.-----------.---.+++++++++++++.-------------.[--->+<]>----..+[-->+++++<]>-.

Cobalah online!

MD XF
sumber
3

CJam , 128 + 192 = 320 byte

64G^c111c111Z^cT$111c6^111X^c1$116X^c111Y^c32c1$6$Y3#$111c4^56Z^c32c112c13$A$A$3$5$1$4$4$4$12$22$22$14$32c13$111c1$T$7$A$4$1$63c

Cobalah online!

'U))'i(((('_))'u('i('i(((('p))'i('i(((('_))'_)))))'i(((('_)))))'&(((((('u(('u))'i(((('i(((('u('i('i(((('_))'p))'u('&(((((('i('_))'_)))'i(((('p))'_)))))'_))'u(('i('i(((('p))'i(((('u(('u(('&(((((

Cobalah online!

Lynn
sumber
3

Fission , 958 + 752 = 1710 byte

._.

Kiri

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

Cobalah online!

Kanan

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

Cobalah online!

OK, di sini kita beruntung, sebenarnya ._.
Fitur keren pertama dari Fission adalah ia memiliki 4 perintah untuk membuat pointer perintah, atom AKA:, RLDUjadi saya memiliki dua perintah untuk grup kiri dan kanan.
Lucky lucky kedua adalah 2 perintah untuk keluaran !dan O, 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.

Juga ada cermin untuk mengontrol atom di kedua kelompok! Tapi saya tidak menggunakannya dalam program pertama

Jadi tidak ada yang menghentikan saya, tetapi tidak bisa kompak, mengatur massa langkah demi langkah.

Program pertama

Program pertama hanya terdiri dari Dz^@$~!V

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

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.

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

Akhirnya ia akan menghadapi Vdan 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 Omenghancurkan atom, jadi saya harus mempertahankannya.
Program dimulai dari kanan Ldengan atom ke kiri.

Pola berulang:

} \
/O\...X'

'menempatkan kode ASCII char yang di-encoutered berikutnya dalam massa atom, sehingga kode beberapa Xdisimpan 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, bertemu Odan mencetak.
Pada akhirnya atom yang terakhir bertemu final Ountuk dihancurkan.

Possum Mati
sumber