Lewa ręka kontra prawa ręka - wyzwanie dla maszynistów

32

Twoim zadaniem jest ustawienie obu stron klawiatury względem siebie i zbudowanie dwóch programów w tym samym języku, z których jeden używa tylko klawiszy po lewej stronie standardowej klawiatury, która wysyła sygnały wyjściowe Pollinium milk; plump pumpkin; lollipop?, i jeden używa klawiszy po prawej stronie, które generują sygnały wyjściowe Weatherheaded sweetheart haberdasheress!.

Zasady

Dokładne klucze dozwolone dla programu po lewej stronie to:

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

a dla programu po prawej stronie:

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

Istnieją cztery wolne klawisze Esc( \x1b), Tab( \x09), Space( \x20) i Enter( \x0ai / lub \x0d), których można użyć w obu rozwiązaniach.

Twój wynik będzie całkowitą liczbą bajtów dla obu programów. Chociaż użyłem tego terminu program, twoje zgłoszenia mogą być albo pełnymi programami, albo funkcjonować jak zwykle, i oba mogą być różnego rodzaju (np. Jeden pełny program i jedna funkcja).

Wynik musi zawierać żądany tekst, dowolna ilość początkowych i końcowych białych znaków jest w porządku, pod warunkiem, że pojawia się w nich dokładny tekst.

Standardowe luki są zabronione .

Wygrywają najkrótsze rozwiązania w każdym języku.

Dom Hastings
źródło
6
Dlaczego H jest lewą ręką?
tsh
1
@tsh Chciałem podzielić klawiaturę 6/6 (lub tak blisko, jak to możliwe) tylko po to, aby zachować więcej parzystej liczby symboli dla każdej „ręki”.
Dom Hastings,
8
// Może powinienem nauczyć się białych znaków i wrócić później ...
tsh
@tsh, chyba biała odpowiedź jest nieunikniona! Nie jestem pewien, jak konkurencyjny byłby! Być może powinienem zająć się tym zbyt późno!
Dom Hastings,
Czy to w porządku, jeśli program ma także inne wyjście (niebiałe), o ile zawiera żądane teksty?
Grzegorz Oledzki

Odpowiedzi:

12

Perl 5 , 261 = 88 + 173 bajtów

Jest to przykład, w którym „opcje językowe się nie liczą” to problem. Zastosowano rozwiązanie od strony sztywnej-p , lewa nie. Czy to się liczy jako ten sam język, czy nie? A czy opcje powinny pochodzić z lewego / prawego zestawu znaków?

Lewo 88

użyj -M5.10.0(lub -Ez wiersza poleceń), aby aktywować sayPonownie można spierać się, czy ta opcja powinna być liczona jako kod i powinna pochodzić z lewej strony, czy też mieści się w „opcjach ustawienia wersji językowej się nie liczy”

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

Wypróbuj online!

Racja 173

Uruchom z -popcją (która również składa się z odpowiednich znaków)

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

Prawie na pewno można to poprawić, ale na razie było wystarczająco ciężko, aby coś zadziałało. Nie mając dostępu do print, say, $_i sub{}sprawia, że wyjście trudne

Wypróbuj online!

Ton Hospel
źródło
W ogóle nie przejmuję się flagami, cieszę się, że jest to poprawne. O wiele krótsze rozwiązanie niż to, co majstrowałem, gdy dzwoniłem evalprzez &{(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

Biała spacja , 1175 1143 655 645 638 632 639 578 (293 + 285) bajtów

Trzeba było to zrobić;; p
Zdecydowanie można zagrać w golfa, wypełniając stos odwrotnie i drukując wszystko na końcu w jakiejś pętli, ale to tylko mój drugi program Whitespace w historii, więc jeszcze go nie odkryłem .. EDYCJA: Gra w golfa.

+7 bajtów, ponieważ źle napisałem pumpkinjako pumkin.. (Dzięki za zauważenie, @ fəˈnɛtɪk .)

Litery S(spacja), T(tab) i N(nowa linia) dodane tylko jako wyróżnienia.
[..._some_action]dodano tylko jako wyjaśnienie.

Lewostronny 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]

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).

Prawostronny 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]

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).


Wyjaśnienie:

Najpierw buduje odwrócony stos. Wypychanie numeru odbywa się w następujący sposób:

  • S na początku: Włącz manipulację stosem
  • S: Wciśnij stos, który następuje jako liczba
  • S/ T: Bit znaku, gdzie Sjest dodatni iT ujemny
  • Niektóre, Ta Spo nich N: Umieść liczbę jako binarną na stosie ( T=1i S=0).

Następnie zapętli nad odwróconym stosem i wydrukuje wszystko jako znaki. Robi to w następujący sposób:

  1. Naciśnij 0 (SSSN )
  2. Naciśnij wszystkie cyfry wskazujące znaki odwrócone, jak wyjaśniono powyżej
  3. Utwórz Label_0( NSSN)
    1. Duplikuj górę stosu ( SNS)
    2. Jeśli ta wartość wynosi 0: Przejdź do Label_1( NTSTN)
    3. W przeciwnym razie: Pop i wydrukuj górę stosu jako character ( TNSS)
    4. Przejdź do Label_0( NSNN)
  4. Utwórz Label_1( NSSTN)

Powyższy jest domyślnym układem dla obu programów. Oto dziennik zmian tego domyślnego układu, który jeszcze bardziej obniżył liczbę bajtów:

  1. Wszystkie liczby są obniżane o tę samą kwotę ( w pierwszym programie i w drugim), aby zmniejszyć cyfry binarne używane dla teraz niższych liczb, a między krokami 3.2 i 3.3 dodaje się dwa następujące podetapy:100 110102 101

    • Naciśnij 110 ( SSSTTSTTTSN) w programie 1 lub 101 (SSSTTSSTSTN ) w programie 2
    • Pop i dodaj ze sobą dwie górne wartości stosu, a wynikiem będzie nowa górna część stosu ( TSSS)
  2. Ja również wykorzystywane SNSw niektórych przypadkach powielać wierzchołek stosu, który jest używany do Golf ll, ll, eei ss.

  3. Ponadto krok 4 (tworzenie Label_1) został całkowicie usunięty. Wyjdzie z błędem, ale nadal wypisze wszystko poprawnie ( co jest dozwolone zgodnie z meta ).

  4. Możliwe jest skopiowanie ntej wartości z góry stosu (z STSindeksowaniem + 0 n), co w niektórych przypadkach jest krótsze niż utworzenie nowej liczby.
    W pierwszym programie, w którym to zrobiłem: drugi pw pop( STSSTN(kopia 1) jest krótszy niż SSSTTSSN(utwórz liczbę dla „p”)), drugi lw lol( STSSTN(kopia 1) jest krótszy niż SSSTSSSN(utwórz liczbę dla „l” )), drugi pw p p( STSSTN(kopia 1) jest krótszy niż SSSTTSSN(utwórz numer dla „p”)), drugi pw pumlp( STSSTTN(kopia 3) jest krótszy niż SSSTTSSN(utwórz numer dla „p”)), drugi pw pmup( STSSTSN( kopia 2.) jest krótsza niżSSSTTSSN(utwórz numer dla „p”)), drugi mw m m(STSSTN(kopia 1.) jest krótsza niż SSSTSSTN(utwórz liczbę dla „m”)), druga iw ini( STSSTN(kopia 1.) jest krótsza niż SSSTSTN(utwórz liczbę dla „i”)).
    W drugim programie tak się nie dzieje. Odległość między niektórymi jest dość krótka, podobnie jak erelub ded, ale utworzenie liczby dla „e” ( SSTTN) lub „d” ( SSTTSN) jest zarówno krótsze, jak i równej długości jak kopia 1st ( STSSTN), więc nie mogłem zastosować tej sztuczki w drugi program do zapisywania bajtów. UWAGA: Po wykonaniu kroku 7 w golfa nie wszystkie z nich obowiązują.

  5. W obu programach zmieniłem krok 1 pętli z SSSN(Push 0) na SSN(Push error_value) i usunąłem kroki 3.1 ( SNSDuplicate) i 3.2 ( NTSTNIf 0: Exit). Teraz po prostu zakończy działanie z błędem SSNo nieznanej wartości, gdy tylko spróbuje uzyskać do niego dostęp.

  6. SSNCałkowicie usunięto (wartość_błędu) w obu programach. Teraz zatrzyma się na błędzie „ Can't do Infix Plus ”, gdy będzie próbował wykonać funkcję Add bez pozostawiania na stosie.

  7. Zmieniono stałe wartości 100i 102na 110i 101odpowiednio. Tutaj program Java używany do generowania 110stałej; i tutaj program Java używany do generowania 101stałej. Zauważ, że obecnie używa się mniej kopii, niż opisano w punkcie 4 powyżej, ponieważ nowe wartości są w wielu przypadkach krótsze niż kopie, więc ponowne ich przesłanie jest krótsze.

Kevin Cruijssen
źródło
Funkcja ST polega na naciśnięciu liczby w postaci binarnej, ze spacją jako 0, tabulacją jako 1. Wyjście to TNSS, więc masz dodatkowe dwie spacje na początku każdego programu. Prawdopodobnie zapisuje również bajty do zduplikowania, a następnie dodaje / odejmuje dla każdego znaku i zapętla wartości na końcu.
Jo King
1
Źle napisałeś dyni.
fəˈnɛtɪk
@ fəˈnɛtɪk Whoops lol .. Należy to naprawić teraz, dziękuję za zauważenie.
Kevin Cruijssen
4

Lenguage, tyle bajtów

Z lewej strony jest 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 powtórzenia aznaku, co jest równoznaczne z następującym programem brainfuck:

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

Wypróbuj online!

Z prawej strony jest 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 powtórzenia pznaku, co jest równoznaczne z następującym programem brainfuck:

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

Wypróbuj online!

MD XF
źródło
3

CJam , 128 + 192 = 320 bajtów

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

Wypróbuj 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(('&(((((

Wypróbuj online!

Lynn
źródło
3

Rozszczepienie , 958 + 752 = 1710 bajtów

._.

Lewo

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

Wypróbuj online!

Dobrze

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

Wypróbuj online!

OK, tutaj mamy zwykłe szczęście, właściwie ._.
Pierwszą fajną cechą Fission jest to, że ma 4 polecenia do tworzenia wskaźników poleceń, atomów AKA:, RLDUwięc mam dwa polecenia dla lewej i prawej grupy.
Drugi szczęśliwy urok to 2 polecenia wyjściowe !i O, które występują w różnych grupach.
Po raz trzeci urok. Obie komendy wyjściowe generują równoważnik masy atomów ASCII. Więc muszę to jakoś zmienić. Mam szczęście! Zarówno + (+1 mass)i _ (-1 mass)są w jednej grupie, a wszystkie potrzebne trzy $ (+1 energy), ~ (-1 energy), @ (swap mass and energy)są w drugiej grupie.

Istnieją również lustra do kontrolowania atomów w obu grupach! Ale nie użyłem ich w pierwszym programie

Nic mnie nie powstrzyma, ale nie może być zwarte, ustawiając masy krok po kroku.

Pierwszy program

Pierwszy program składa się tylko z 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

Start może być prostszy (tylko R), ale użycie dzielenia pozwala zaoszczędzić trochę bajtów na pierwszą literę.
Atom, który idzie w lewo, owija się wokół i spotyka V, co powoduje, że spada i owija się w nieskończoność, nie robiąc nic.
Drugi atom staje się sztywny i napotka szereg powtarzających się wzorów @...@!dla każdej litery do wydrukowania.

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

W końcu spotka Vi podzieli los pierwszego atomu. Nie ma sposobu, aby je zniszczyć lub zatrzymać za pomocą lewej części klawiatury.

Drugi program

Drugi ma swoje wzloty i upadki. Mam komendy do bezpośredniej zmiany masy, ale polecenie wyjściowe Oniszczy atomy, więc muszę je jakoś zachować.
Program rozpoczyna się po prawej stronie odL atomu w lewo.

Powtarzający się wzór:

} \
/O\...X'

'umieszcza kod ASCII następnego zakodowanego znaku w masie atomów, więc kod niektórych Xjest zapisywany jako pierwszy, a następnie masa jest zmieniana przez _i +do dokładnej wartości.
Czasami X'jest pomijany, jeśli jest krótszy w użyciu tylko _i +.

Atom pochodzi z lewej strony, dwa razy zwierciadło i uderza }z lewej. W tym przypadku }działa jak kloner, wysyłając dwa identyczne atomy w górę iw dół. Atom w dół odbija się w lustrze i idzie w lewo. W górę owija atom, uderza w to samo lustro, ale od dołu, a więc odbija się w prawo, napotyka Oi drukuje.
Na końcu ostatni atom spotyka się z ostatecznym Ocelem zniszczenia.

Dead Possum
źródło