Sol El - Sağ El - Tipistler Mücadelesi


32

Göreviniz, klavyenin her iki tarafını birbirine yaslamak ve aynı dilde, biri standart bir klavyenin sol tarafındaki Pollinium milk; plump pumpkin; lollipop?tuşları kullanarak, diğeri de sağdaki tuşları kullanarak iki dilde program oluşturmaktır. Weatherheaded sweetheart haberdasheress!.

kurallar

Sol program için izin verilen anahtarlar şunlardır:

123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB

ve sağ program için:

7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?

Her ikisinde de veya her ikisinde de kullanılabilen dört boş anahtar Esc( \x1b), Tab( \x09), Space( \x20) ve Enter( \x0ave / veya \x0d) vardır.

Her iki program için puanınız toplam bayt sayısı olacaktır. Terimi kullanmama rağmen program, gönderileriniz tam programlar olabilir veya her zamanki gibi işlev görebilir ve her ikisi de farklı türlerde olabilir (örn. Bir tam program ve bir işlev).

Sonucunuz istenen metni içermelidir, içinde tam metin göründüğü sürece herhangi bir miktarda satır aralığı ve sondaki boşluk olmalıdır.

Standart boşluklar yasaktır .

Her dilde en kısa çözümler kazanır.


6
H neden sol el?
tsh

1
@tsh Her bir "el" için klavyeyi 6/6 (ya da mümkün olduğunca yakın) bölmek istedim, sadece daha fazla sembol sayısını eşitlemek için.
Dom Hastings

8
// Belki de boşlukları öğrenip daha sonra geri dönmeliyim ...
tsh

@ tsh, boşluk cevabı kaçınılmazdır sanırım! Ne kadar rekabetçi olsa da emin değilim! Belki de bunu çok geç söylemeliydim.
Dom Hastings

İstenen metinleri içerdiği sürece, programın başka (boşluk olmayan) çıktısı da mevcut mu?
Grzegorz Oledzki

Yanıtlar:


12

Perl 5 , 261 = 88 + 173 bayt

Bu, "dil seçeneklerinin sayılmadığı" problemin bir örneğidir. Sağ taraf -psol taraf kullanmaz , sol taraf kullanmaz. Öyleyse aynı dilde sayılıyor mu, saymıyor mu? Seçenekler sol / sağ karakter kümesinden mi gelmeli?

Sol 88

etkinleştirmek için -M5.10.0(veya -Ekomut satırından) kullanın sayBu seçeneğin kod olarak sayılması ve sol taraftan gelmesi veya "dil versiyonunu ayarlama seçenekleri sayılmaz" altında kalması durumunda tekrar tartışılabilir

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

Çevrimiçi deneyin!

Doğru 173

-pSeçeneği ile çalıştırın (aynı zamanda doğru karakterlerden oluşur)

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

Bu neredeyse kesinlikle geliştirilebilir, ancak şimdilik bir şeylerin çalışması için yeterince zordu. Erişememesi print, say, $_ve sub{}zor çıkışını yapar

Çevrimiçi deneyin!


Bayraklardan hiç endişe duymuyorum, bunun geçerli olmasına sevindim. Ben aradım olarak müdahele oldum olandan bir çok daha kısa çözüm evalyolu ile &{(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

Boşluk , 1175 1143 655 645 638 632 639 578 (293 + 285) bayt

Bu yapılmalıydı ..; p
Yığını ters çevirerek ve hepsini bir tür ilmekle bastırarak kesinlikle golf oynayabilir, ancak bu sadece şimdiye kadarki ikinci Whitespace programım. .. EDIT: Golf oynadı.

7 bayt ben yanlış çünkü pumpkinolarak pumkin.. (teşekkürler Farkettiğin için, @ fənɛtɪk .)

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklenmiştir.
[..._some_action]sadece açıklama olarak eklendi.

Sol taraf 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]

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).

Sağ taraf 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]

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).


Açıklama:

İlk önce yığını tersine çevirdi. Bir sayıyı itmek şu şekilde yapılır:

  • S başlangıçta: Yığın Manipülasyonunu Etkinleştir
  • S: Aşağıdakileri yığına sayı olarak itin
  • S/ T: SOlumlu ve Tolumsuz olan işaret biti
  • Bazı Tve Sardından bir N: Sayıyı yığına ( T=1ve S=0) ikili olarak koyun .

Sonra yığın ters çevrilmiş ve her şeyi karakter olarak yazdıracak. Bunu şu şekilde yapar:

  1. 0'a bas ( SSSN)
  2. Yukarıda açıklandığı şekilde tersine çevrilmiş karakterleri gösteren tüm numaraları it
  3. Bir Label_0( NSSN) oluşturun
    1. Yığının tepesini çoğalt ( SNS)
    2. Eğer bu değer 0 ise: Atla Label_1( NTSTN)
    3. Başka: Pop ve yığının üstünü karakter ( TNSS) olarak yazdır
    4. Atla Label_0( NSNN)
  4. Yarat Label_1( NSSTN)

Yukarıdaki, her iki program için de varsayılan düzendir. İşte bayt sayısını daha da azaltan bu varsayılan düzen için değişiklik günlüğü:

  1. Tüm sayılar , şimdiki alt sayılar için kullanılan ikili sayıları azaltmak için aynı miktarda ( ilk programda ve ikincide) indirilir ve adım 3.2 ile 3.3 arasında aşağıdaki iki alt adım eklenir:100 110102 101

    • SSSTTSTTTSNProgram 1'de 110 ( ) veya SSSTTSSTSTNprogram 2'de 101 ( ) düğmesine basın
    • Yığının ilk iki değerini Pop ile ekleyin ve birbirleriyle ekleyin; sonuçta yığının yeni üst kısmı ( TSSS)
  2. Ben de kullandım SNSgolf için kullanılan yığın, üst çoğaltmak için bazı durumlarda ll, ll, eeve ss.

  3. Ek olarak, adım 4 (yarat Label_1) tamamen kaldırıldı. Bir hatayla çıkacak, ancak yine de her şeyi doğru şekilde çıktısını alacak ( metaya göre izin veriliyor ).

  4. nYığın üstünden ( STS+ 0 indeksli n) bir değerin kopyalanması mümkündür , bu bazı durumlarda yeni bir sayı oluşturmaktan daha kısadır.
    İlk programda ben için yaptık: İkinci piçinde pop( STSSTN(kopya 1) daha kısadır SSSTTSSN( 'p' numarasını oluşturmak)), ikinci lyılında lol( STSSTN(kopya 1) daha kısadır SSSTSSSN'l' için numarayı oluşturmak ( )), ikinci pyılında p p( STSSTN(kopya 1) daha kısadır SSSTTSSN( 'p' numarasını oluşturmak)), ikinci pyılında pumlp( STSSTTN(kopya 3rd) daha kısadır SSSTTSSN'p' numarasını oluşturmak ()), ikinci pyılında pmup( STSSTSN( kopya 2) 'den kısaSSSTTSSN,) ikinci ( 'p' numarasını oluşturmak) miçinde m m( STSSTNdaha kısa olan (kopya 1) SSSTSSTN( 'm' numarasını oluşturmak)), ikinci iolarak ini( STSSTN(kopyalama 1) daha kısa olan SSSTSTN( 'i için numarası oluşturmak) ).
    İkinci programda bu hiçbiri için yapılmadı. Bazıları arasındaki mesafe oldukça kısa, ereya da gibi ded, ama 'e' ( SSTTN) veya 'd' ( SSTTSN) için sayı oluşturmak hem kopya hem de kısa (1 ) olarak eşit uzunluktadır STSSTN, bu yüzden bu numarayı uygulayamadım. bayt kaydetmek için ikinci program. NOT: golf-adım 7'den sonra, bunların tümü artık geçerli değildir.

  5. Her iki programda da, döngünün 1. adımını SSSN(Push 0) 'dan SSN(Push error_value)' ya değiştirdim ve 3.1 ( SNSÇoğalt) ve 3.2 ( NTSTN0: Çık ise) adımlarını kaldırdım . Şimdi SSN, erişmeye çalıştığı anda bilinmeyen bir değer olan bir hata ile çıkacaktır .

  6. SSNHer iki programda da (error_value) tamamen kaldırıldı . Artık , Ekleme işlevini yığında hiçbir şey kalmayacaksa " Infix Plus yapamazsınız " hatasıyla duracaktır .

  7. Sırasıyla 100ve 102arasındaki 110ve sabit değerleri değiştirildi 101. İşte110 sabit programı oluşturmak için kullanılan Java programı ; ve burada101 sabit programı oluşturmak için kullanılan Java programı . Şimdi , yukarıda belirtilen 4'ten daha az kopya kullanıldığına dikkat edin, çünkü yeni değerler çoğu durumda kopyalardan daha kısadır, bu nedenle tekrar basmak daha kısadır.


ST maddeleri sayıya ikili, sadece 0, boşluk 1, sekme 1 olarak basılır. Çıkış TNSS, yani her programın başında fazladan iki boşluk var. Ayrıca muhtemelen çoğaltmak için baytları da kaydeder ve ardından her karakter için / çıkar'ı ekler ve sondaki değerler üzerinde döner.
Jo King,

1
Sen kabağı özledin.
f Junnɛtɪk

@ fəˈnɛtɪk Whoops lol .. Dikkat etmelisiniz, şimdi düzeltilmelidir, teşekkürler.
Kevin Cruijssen

4

Lenguage, bu çok bayt

Sol taraftaki bir 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 tekrarları olan aaşağıdaki Brainfuck programı eşdeğerdir karakter:

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

Çevrimiçi deneyin!

Sağ taraftaki ait 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 tekrarlama olduğunu paşağıdaki Brainfuck programına eşdeğerdir karakteri,:

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

Çevrimiçi deneyin!


3

CJam , 128 + 192 = 320 bayt

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

Çevrimiçi deneyin!

'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(('&(((((

Çevrimiçi deneyin!


3

Fisyon , 958 + 752 = 1710 bayt

._.

Ayrıldı

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

Çevrimiçi deneyin!

Sağ

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
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

Çevrimiçi deneyin!

Tamam, işte biz düz şansla, aslında ._.
Fission'ın ilk harika özelliği, komut işaretçileri, AKA atomları oluşturmak için 4 komutunun olması: RLDUbu yüzden sol ve sağ gruplar için iki komutum var.
İkinci şanslı cazibe, çıktı için 2 komuttur !ve Ofarklı gruplar halinde gerçekleşir.
Üçüncü kez cazibe. Her ikisi de çıkış kodları ASCII atomlarının kütlesinin eşdeğeri çıkışını verir. Bu yüzden biraz nasıl değiştirmem gerekiyor. Şanslıyım! Hem + (+1 mass)ve _ (-1 mass)bir grup ve tüm gerekli üçte yer alıyoruz $ (+1 energy), ~ (-1 energy), @ (swap mass and energy)diğer grupta yer almaktadır.

Ayrıca her iki grupta da atomları kontrol eden aynalar var! Ama onları ilk programda kullanmadım

Bu yüzden beni durduracak hiçbir şey yok, ama adım adım kitleleri ayarlayarak kompakt olamaz.

İlk program

İlk program sadece oluşur 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

Başlatmak basitleştirici olabilir (sadece R), ancak bölmeyi kullanmak ilk harf için bazı baytları kurtarır.
Sola dönen Atom etrafına sarılır ve karşılaşır V, bu da onu aşağı ve süresiz sarılarak hiçbir şey yapmaz.
İkinci atom sert bir şekilde gider ve @...@!her harfin çıktısı için tekrarlanan kalıplarla karşılaşır .

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

Sonunda Vilk atomun kaderiyle karşılaşacak ve paylaşacak. Onları yok etmenin veya klavyenin sol tarafıyla durdurmanın yolu yok.

İkinci program

İkincisi, iniş ve çıkışlarla birlikte gelir. Doğrudan kütleyi değiştirmek için kodlarım var, ancak output komutu Oatomları yok ediyor, bu yüzden onları bir şekilde korumam gerekiyor.
Program sağdan başlayarak Latom sola doğru gidiyor.

Tekrarlanan desen:

} \
/O\...X'

'Bazı kod böylece koyar sonraki, atom kütlesi Karakterin en ASCII kodu encoutered Xilk depolanan kütle tarafından değiştirildi daha _ve +kesin değere. Sadece ve kullanımı daha kısa ise,
bazen X'atlanır ._+

Atom soldan geliyor, iki kez yansıyor }ve soldan vuruyor . Bu durumda }klonlayıcı gibi çalışır, aşağı yukarı iki aynı atom gönderir. Aşağı atom ayna ile yansıtır ve sola gider. Atom yukarı sarılır, aynı aynaya vurur, ancak aşağıdan vurur ve bu nedenle doğru, karşılaşma Ove baskıyı yansıtır .
Sonunda, son atom Oimha edilmek üzere finalle buluşur .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.