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
( \x0a
i / 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.
źródło
Odpowiedzi:
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-E
z wiersza poleceń), aby aktywowaćsay
Ponownie 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”Wypróbuj online!
Racja 173
Uruchom z
-p
opcją (która również składa się z odpowiednich znaków)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
,$_
isub{}
sprawia, że wyjście trudneWypróbuj online!
źródło
eval
przez&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Biała spacja ,
11751143655645638632639578 (293 + 285) bajtówTrzeba 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
pumpkin
jakopumkin
.. (Dzięki za zauważenie, @ fəˈnɛtɪk .)Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Lewostronny
Pollinium milk; plump pumpkin; lollipop?
:Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Prawostronny
Weatherheaded sweetheart haberdasheress!
: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ę stosemS
: Wciśnij stos, który następuje jako liczbaS
/T
: Bit znaku, gdzieS
jest dodatni iT
ujemnyT
aS
po nichN
: Umieść liczbę jako binarną na stosie (T=1
iS=0
).Następnie zapętli nad odwróconym stosem i wydrukuje wszystko jako znaki. Robi to w następujący sposób:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)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:
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
110
102
101
SSSTTSTTTSN
) w programie 1 lub 101 (SSSTTSSTSTN
) w programie 2TSSS
)Ja również wykorzystywane
SNS
w niektórych przypadkach powielać wierzchołek stosu, który jest używany do Golfll
,ll
,ee
iss
.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 ).Możliwe jest skopiowanie
n
tej wartości z góry stosu (zSTS
indeksowaniem + 0n
), co w niektórych przypadkach jest krótsze niż utworzenie nowej liczby.W pierwszym programie, w którym to zrobiłem: drugi
p
wpop
(STSSTN
(kopia 1) jest krótszy niżSSSTTSSN
(utwórz liczbę dla „p”)), drugil
wlol
(STSSTN
(kopia 1) jest krótszy niżSSSTSSSN
(utwórz liczbę dla „l” )), drugip
wp p
(STSSTN
(kopia 1) jest krótszy niżSSSTTSSN
(utwórz numer dla „p”)), drugip
wpumlp
(STSSTTN
(kopia 3) jest krótszy niżSSSTTSSN
(utwórz numer dla „p”)), drugip
wpmup
(STSSTSN
( kopia 2.) jest krótsza niżSSSTTSSN
(utwórz numer dla „p”)), drugim
wm m
(STSSTN
(kopia 1.) jest krótsza niżSSSTSSTN
(utwórz liczbę dla „m”)), drugai
wini
(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
ere
lubded
, 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ą.W obu programach zmieniłem krok 1 pętli z
SSSN
(Push 0) naSSN
(Push error_value) i usunąłem kroki 3.1 (SNS
Duplicate) i 3.2 (NTSTN
If 0: Exit). Teraz po prostu zakończy działanie z błędemSSN
o nieznanej wartości, gdy tylko spróbuje uzyskać do niego dostęp.SSN
Cał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.Zmieniono stałe wartości
100
i102
na110
i101
odpowiednio. Tutaj program Java używany do generowania110
stałej; i tutaj program Java używany do generowania101
stał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.źródło
Lenguage, tyle bajtów
Z lewej strony jest 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 powtórzenia
a
znaku, co jest równoznaczne z następującym programem brainfuck:Wypróbuj online!
Z prawej strony jest 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 powtórzenia
p
znaku, co jest równoznaczne z następującym programem brainfuck:Wypróbuj online!
źródło
CJam , 128 + 192 = 320 bajtów
Wypróbuj online!
Wypróbuj online!
źródło
Rozszczepienie , 958 + 752 = 1710 bajtów
._.
Lewo
Wypróbuj online!
Dobrze
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:,
RLDU
więc mam dwa polecenia dla lewej i prawej grupy.Drugi szczęśliwy urok to 2 polecenia wyjściowe
!
iO
, 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.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
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.W końcu spotka
V
i 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
O
niszczy atomy, więc muszę je jakoś zachować.Program rozpoczyna się po prawej stronie od
L
atomu w lewo.Powtarzający się wzór:
'
umieszcza kod ASCII następnego zakodowanego znaku w masie atomów, więc kod niektórychX
jest 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, napotykaO
i drukuje.Na końcu ostatni atom spotyka się z ostatecznym
O
celem zniszczenia.źródło