Szyfrowanie Pigpen
Twoja misja jest prosta: napisać program, który odbiera tekst jako dane wejściowe i wyświetla jego reprezentację ASCII w Szyfrze Pigpena .
Wejście
Znaki tylko ASCII (bez Unicode). Musisz mieć możliwość obsługi co najmniej 16384 znaków i 256 linii.
Wynik
- Wymień wszystkie znaki, które nie są nowe linie lub w
ABCDEFGHIJKLMNOPQRSTUVWXYZ
lubabcdefghijklmnopqrstuvwxyz
spacjami. - Bez względu na wielkość liter, zamień każdą literę na zaszyfrowaną formę (patrz następna sekcja), wstawiając końcowe spacje w każdej z trzech linii po każdej. Każdy zakodowany znak to 3 * 3 blok sztuki ASCII. Zastąp spacje 3 * 3 blokami spacji.
- Wszystkie postacie powinny znajdować się w tych samych trzech liniach (nazwać te trzy linie jedną linią świni), chyba że istnieje nowa linia, która rozpoczyna nową linię świnki. Pozostaw normalną linię pustą między liniami pigpen.
Szyfr
| | | |
.| |.| |.
--+ for J +-+ for K +-- for L
--+ +-+ +--
.| |.| |.
--+ for M +-+ for N +-- for O
--+ +-+ +--
.| |.| |.
| for P | | for Q | for R
(ABCDEFGHI are the same as JKLMNOPQR, but with the . replaced by a space)
\./
V for W (note the row of 3 spaces on the top)
^
/.\ for Z (note the 3 spaces on the bottom)
\
.>
/ for X (note the leading spaces)
/
<.
\ for Y (note extra trailing spaces)
(STUV are like WXYZ, but with the . replaced by a space)
Przykład
Dane wejściowe „hEllo, wORLd” powinny dawać:
+-+ +-+ | | +-- +-- +-- | --+
| | | | |. |. |. \./ |. |. |. |
| | +-+ +-- +-- +-- V +-- | +-- --+
Powyższe kodowanie base64 z końcową nową linią znajduje się poniżej. Suma md5 jest 6f8ff1fed0cca4dd0492f9728ea02e7b
.
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK
Bez końcowej nowej linii, md5sum jest, 581005bef7ee76e24c019d076d5b375f
a base64 to:
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW ICArLS0gfCAgICstLSAtLSs =
Zasady
- Standardowe luki są zabronione.
- To jest kod golfowy. Najkrótszy kod wygrywa.
- W językach, które nie mogą zaakceptować wielu wierszy wprowadzania naraz (np. JavaScript za pomocą
prompt()
), użyj*
(lub jakiegoś innego znaku) jako separatora linii.
Erranda
- W przykładzie brakowało kilku spacji (spacja powinna składać się z końcowych spacji poprzedniego znaku, jeśli w ogóle, i własnych spacji końcowych). To już zostało naprawione.
prompt
służy do wprowadzania danych, ale przyjmuje tylko jedną linię. Czy mogę użyć specjalnego znaku (takiego jak „*”), aby zaznaczyć nowy wiersz na wejściu ?.Odpowiedzi:
JavaScript (ES6) 312
327 340 372 446Nie licząc wcięć białych znaków i znaków nowej linii
- można by bardziej zagrać w golfa. Użycie „*” do zaznaczenia nowych linii na wejściu, ponieważprompt
akceptuje pojedynczy wiersz.Przetestuj w konsoli FireFox / FireBug
Dane wejściowe: ABCDEFGHI * JKLMNOPQR * STUV * WXYZ * HeLlO WoRlD!
źródło
o
iw
w „Hello world”, OP ma tylko 4C # -
921720Oczywiście nie jest to zwycięska praca, ale wyglądało to na zbyt zabawne, żeby zemdleć :)
Program pobiera dane wejściowe jako pojedyncze, a następnie drukuje chlew. Aby wprowadzić wiele wierszy, użyj podkreślenia (_), jak widać na wydruku .
Kod
Pojęcie
Szyfr wykorzystuje kilka sekwencji znaków, które dość często się duplikują. Na przykład „-” pokazuje się 16 razy, a „__” (dwie spacje) pokazuje się 20 razy. Zamieniam te sekwencje na symbole jednoznakowe i przełączam je w czasie wykonywania, zmniejszając liczbę znaków potrzebną do przechowywania szyfru świnki na pół. Podobnie nowa linia zwykle wymaga dwóch znaków, ale jest zastępowana przez symbol (n) i wyłączana później.
Program obsługuje wiele linii wejściowych, dzieląc dane wejściowe na tablicę, w której każdy element jest pojedynczą linią wejściową. Następnie program po prostu uruchamia szyfr na każdej linii osobno.
To jest mój pierwszy golf w dowolnym języku, więc prawdopodobnie można wiele zrobić, aby poprawić ten kod.
Wynik
źródło
for(int i=0;i<p.Length; i++)
(w pobliżu środka) jest niepotrzebne miejscem♥lti \n lin♣e \n input
mój telefon sprawia, że jako mający serce zamiast U w multi, a klub pomiędzy n i e w kolejce. Dlaczego?Python 2, 180 + 78 + 1 + 3 = 262 znaków
Program 180-bajtowy (dwie ostatnie linie to zakładki):
Wymaga, aby 78-bajtowy plik o nazwie „f” był tym samym katalogiem (+1 bajt dla nazwy pliku), który zawiera następujące elementy:
Kodowanie pliku base64
f
to:Program kończy pracę z wyjątkiem,
2>_
pomija błąd (+3 bajty):Objaśnienie :
Stworzyłem tabelę przeglądową,
L
która jest mapowaniem{position_in_3x3_block: {letter_being_encrypted: symbol_for_letter_at_position}}
, przechowywaną w płaskiej tablicy. Program drukuje litery, wykonując prosty przegląd dla każdej pozycji.źródło
f
i trzy bajty dla2>_
Perl 5
-lF
,297 288 261231 bajtówWypróbuj online!
Prawdopodobnie jest tu jeszcze coś, co można by jeszcze pograć w golfa.
źródło