Biorąc pod uwagę 95 znaków do wydrukowania w ASCII plus znak nowej linii, podziel go na dwie równe, 48 grup znaków (zwane dalej grupą A i grupą B). Utwórz własne mapowanie jeden do jednego (masz całkowitą dyskrecję) między dwiema grupami. Innymi słowy, A
może mapować na a
i odwrotnie, ale A
może również mapować na >
i odwrotnie, jeśli tego potrzebujesz w swoim programie.
Po podzieleniu ASCII na dwie grupy, napisz dwa programy i / lub funkcje, używając odpowiednio tylko znaków w każdej grupie. Innymi słowy, napisz jeden program / funkcję, która używa tylko znaków z grupy A, i inny program / funkcję, która używa tylko znaków z grupy B.
Programy te muszą mieć możliwość odebrania jednego znaku jako danych wejściowych. Program napisany ze znakami z grupy A powinien wypisać / zwrócić ten sam znak, jeśli wprowadzony znak był grupą A, a odwzorowany znak grupy A, jeśli otrzymał znak grupy B; program grupy A powinien zawsze wyświetlać znak grupy A. Podobnie, program grupy B powinien wypisywać ten sam znak, jeśli jest to znak grupy B, a odwzorowany znak grupy B, jeśli wejściem jest znak grupy A.
To może nie być tak jasne, więc oto przykład. Jeśli przyjmiesz, że wszystkie duże litery znajdują się w grupie A, a wszystkie małe litery znajdują się w grupie B, a wybrałeś, że twoje odwzorowanie jeden na jeden dla tych liter jest od jednego do drugiego, to: oto kilka przykładowe wejścia / wyjścia:
Program A:
Input Output
A A
D D
a A
q Q
Program B:
Input Output
A a
D d
a a
q q
Inne zasady:
- Te dwa programy nie muszą być w tym samym języku.
- Nie muszą to być oba programy ani obie funkcje; jeden może być programem, drugi funkcją, w porządku.
- Nie muszą pracować w ten sam sposób, być podobnej długości, czy coś takiego; muszą po prostu spełniać pozostałe powyższe zasady.
- Tak, tylko jeden z twoich programów może używać znaku nowej linii i tylko jeden może używać spacji (może to być ten sam lub inny program).
- Nie musisz używać wszystkich 48 znaków w każdym programie.
Standardowe luki są normalnie zakazane. Wszystkie programy muszą być samodzielne, bez plików zawierających wybrane mapowanie.
Kryteria punktowe: golf golfowy . W szczególności suma bajtów tekstu dwóch programów.
Proszę zamieścić swoją odpowiedź w ten sposób:
Język - # bajtów + Język - # bajtów = # bajtów
Jednoznaczny opis twojego mapowania. Jeśli jest to skomplikowane, użyj takiej tabeli:
ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.) zyxwvutsrpqonmlkjihgfedcba (etc.)
Możesz też to wyjaśnić (pierwsze 48 map do ostatnich 48 w sekwencji), a następnie normalną odpowiedź.
źródło
+
i>
, a drugi używający-
i<
. Następnie musisz spróbować wygenerować brakujące operatory, takie jak a,
lub.
w programie, który nie może ich użyć.Odpowiedzi:
CJam - 11 bajtów + CJam - 25 bajtów = 36 bajtów
Znaki są wybierane w naprzemiennych grupach po 16:
Fajnie, że kilka mapowań można uzyskać za pomocą klawisza Shift :)
Program A:
Wypróbuj online
Program B:
Wypróbuj online
Wyjaśnienie:
Program A:
Program B:
źródło
\n
), po prostu nie jest łatwo go zobaczyć bez sprawdzania html. Możesz dołączyći
znak na końcu programu, aby zamiast tego zobaczyć kod ASCII (lubci
też poradzić sobie z wprowadzaniem nowego wiersza, ponieważ w takim przypadku wyświetla on ciąg nowego wiersza, a nie znak)_0=
na,0=_
aby zawsze wyświetlał postaćCJam -
46442611 bajtów + GolfScript -1421251159368474036 bajtów = 47 bajtówPodziękowania dla Petera Taylora za grę w golfa 6 bajtów poza programem GolfScript (i torowanie drogi dla wielu innych).
Dzięki Dennis za grę w golfa 15 bajtów poza programem CJam i 4 bajty poza programem GolfScript.
Grupa A: wszystkie znaki z parzystym kodem znaków.
Grupa B: wszystkie znaki z nieparzystym kodem znaków oraz znak nowej linii.
Używam oczywistego odwzorowania między nimi, tj. Łączę znaki, które różnią się tylko najmniej znaczącym bitem, a także
~
i\n
. Oto pełna mapa (kolumny):Program A (CJam, przetestuj tutaj ):
Program B (GolfScript, przetestuj tutaj ):
Wyjaśnienie
Program A
(Nieaktualne, zaktualizuje się jutro).
Ten program powinien zamieniać kody nieparzyste na parzyste, tzn. Ustawiać najmniej znaczący bit na 0. Oczywistym sposobem jest bitowe ORAZ z 126 (lub 254 itd.), Ale krótsze jest ustawienie go na 1 (poprzez bitowe LUB z 1) zamiast tego, a następnie zmniejsz wynik. Wreszcie musimy ręcznie naprawić nowe linie:
Program B
(Nieaktualne, zaktualizuje się jutro).
Ten program może po prostu ustawić najmniej znaczący bit na 1 poprzez bitowe LUB z 1 teraz. Ale musi ręcznie sprawdzić zarówno
\v
(kod znakowy 0x0B), jak i<DEL>
(kod znakowy 0xFF) i ustawić je na~
. W GolfScript nie miałem dostępu do eval, ale zamiast tego możesz dodać ciąg do bloku (który następnie staje się częścią kodu w tym bloku), który mógłbym odwzorować na dane wejściowe za pomocą%
:A jeśli chodzi o wygenerowany kod w bloku:
źródło
Java - 1088 bajtów + Java - 1144 bajtów = 2232 bajty
Dzięki @ durron597 za pomoc w golfie 1090 bajtów z pierwszego programu.
Dowód, że można to zrobić w jednym języku (w tym nie w języku esolang).
Użyj sztuczki Unicode, aby przekonwertować pierwszą na wszystkie znaki Unicode. Drugi wykorzystuje refleksję, aby uzyskać dostęp do System.out w celu wydrukowania do standardowego. na zewnątrz. Nie mógł użyć u, ponieważ został użyty w pierwszym programie. Wiem, że można to pograć bardziej w golfa, ale najpierw chciałem opublikować prawidłowe rozwiązanie.
Grupy są dość arbitralnie mapowane, ale zasadniczo pierwsza wymagała tylko u, \ i cyfr szesnastkowych (w każdym razie).
Grupy:
Pierwszy program:
Równoważny
Drugi program:
Wypróbuj je tutaj: https://ideone.com/Q3gqmQ
źródło
void x(int z)
, to są to również postacie z pierwszego zestawu znakówNAPRAWIONY! Pyth - 23 bajty + Pyth - 30 bajtów = 53 bajty
oops Błąd naprawy --- proszę o cierpliwośćtaki sam podział ASCII jak Martin:
Prog # 1: Testuj online
Prog # 2: Testuj online
źródło