Wyzwanie
Biorąc pod uwagę dwa ciągi, każdy o długości do 30, składające się z drukowalnych znaków ASCII (kody ), umieść je na skali wagi w jak najmniejszej liczbie bajtów kodu! Składa się z następujących kroków:
- Oblicz i porównaj wagi strun
- Wybierz odpowiednio pochyloną skalę ASCII-art
- Umieść dwa ciągi na wadze
Ciągi mogą być przekazywane jako tablica, dwa argumenty lub dowolna inna rozsądna metoda.
Ciężar łańcucha jest zdefiniowany jako suma mas znaków tego łańcucha, gdzie:
- Spacje mają wagę 0 (
)
- Małe litery mają wagę 2 (
abcdefghijklmnopqrstuvwxyz
) - Wielkie litery mają wagę 4 (
ABCDEFGHIJKLMNOPQRSTUVWXYZ
) - Wszystkie pozostałe symbole mają wagę 3 (
!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~
)
Skale wyglądają następująco:
. _ | _- * / \ | - * / \ _- * | / \ _- * | / \ / \ | * ------ * / \ | / \ | / \ | * ------ * | ______ | ______
_. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / \ | * ------ * ______ | ______
. | ______ | ______ / \ | / \ / \ | / \ / \ | / \ / \ | / \ * ------ * | * ------ * | | ______ | ______
Jeśli pierwszy ciąg jest cięższy, użyj pierwszego rysunku jako podstawy wyników; jeśli drugi ciąg jest cięższy, użyj drugiego rysunku; jeśli struny mają równą wagę, użyj trzeciego. Końcowe białe znaki są dozwolone.
Będę używał segmentu trzeciego rysunku jako podstawy dla wszystkich poniższych przykładów.
Pierwszy sznurek należy umieścić na lewej szalce, a drugi sznur na prawej szalce.
Umieść ciąg na patelni, umieszczając jego znaki spacji w obszarze 6x5 bezpośrednio nad kreskami, jak zaznaczono #
tutaj s (możesz w końcu nadpisać część skali równowagi - to dobrze):
###### _ ###### ###### ###### / ###### \ * ------ *
Wszystkie te postacie powinny być „rozliczone”, tj. powyżej -
znaku lub innego znaku z ciągu:
ŹLE ŹLE PRAWIDŁOWO ____ ____ ____ f / \ / \ / \ l \ / \ / \ / \ / hov \ / s \ / oating \ / eri ng \ / ettled \ * ------ * * ------ * * ------ *
Ponadto cały stos powinien być możliwie jak najbardziej płaski, co oznacza, że z sześciu kolumn o szerokości 1 wysokość najwyższego i najkrótszego nie może różnić się więcej niż o 1:
ŹLE ŹLE POPRAWNIE POPRAWNIE [najwyższy: 5] [najwyższy: 4] [najwyższy: 5] [najwyższy: 2] [najkrótszy: 0] [najkrótszy: 2] [najkrótszy: 4] [najkrótszy: 2] 5__5_ ____ 5_5__ ____ 45445 i / \ 445454 / \ 45445 $% i $ @ 445454 / \ / 45445 i% @% $ i 445454% i $ @% & / 45445 \ / & $ @ $ &% \ / 445454 \ / $ @ $% $$ \ * ------ * * ------ * * ------ * * ------ *
Dokładna kolejność / układ znaków nie ma znaczenia. Poniżej przedstawiono wszystkie poprawne ustalenia dla ciągu „Zważ swoje słowa!”:
____ ____ ____ ____ / \ / \ / \ / \ ds! \ / owd oe \ u! Wd \ ourwor Wihuos yoiwgr eghioo / Weighy \ / egyrr! \ / Wrhd! S \ / rrsuwy \ * ------ * * ------ * * ------ * * ------ *
Przypadki testowe
WEJŚCIE: „KOD GOLF”, „wyzwania kodowania” WAGA: 32, 32 PRZYKŁADOWE WYJŚCIE: . | ______ | ______ / \ | / \ / \ | nge \ s / OO \ | mały / CFGLED \ | /kodowanie\ * ------ * | * ------ * | | ______ | ______
WEJŚCIE: „”, „$” WAGA: 0, 3 PRZYKŁADOWE WYJŚCIE: _. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / $ \ | * ------ * ______ | ______
WEJŚCIE: „WIESZ CO MÓWIĄ!”, „There_always_a_relevant_xkcd” WAGA: 75, 65 PRZYKŁADOWE WYJŚCIE: . tr_a_s | _hekx_y | - * elcdta _- * | revanw _- * | / e's_al \ T / \ | * ------ * AUYOHY | A! HWYK | / OTSMEW \ | * ------ * | ______ | ______
+1
. Po pierwsze: jeśli przestrzenie nic nie „ważą” i nie zostają uwzględnione w grafice, to po co w ogóle je uwzględniać? To po prostu niepotrzebne obciążenie, aby je najpierw odfiltrować. Po drugie: dla mnie jest to wyzwanie „2 w 1” / kameleon - Wyzwanie 1: Określ, który łańcuch jest „cięższy”, Wyzwanie 2: Wygeneruj trochę sztuki ASCII.Odpowiedzi:
Węgiel drzewny , 110 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako tablicę dwóch ciągów. Wyjaśnienie:
Usuń spacje z obu ciągów.
Załóż równowagę wag.
Zapętlić obie struny.
Odejmij różnicę biegu od ciężaru łańcucha.
Wydrukuj podstawę wagi.
Załóż, że oba patelnie znajdują się 3 nad ziemią.
Jeśli ciężary się nie równoważą ...
... obliczyć wysokość lewej patelni ...
... narysuj wagę pochylając się w prawo ...
... i zastanów się, czy lewa patelnia była cięższa.
W przeciwnym razie narysuj równowagę poziomu.
Przejdź do szalki na pierwszą skalę.
Pętla nad wejściami.
Narysuj szalkę wagi.
Przekrój materiał wejściowy na podciągi o długości 6 i wydrukuj go do góry nogami, aby wypełnili miskę do góry.
Przejdź do szalki drugiej skali.
źródło
Python 2 ,
11011071855837 bajtów-216 bajtów z kompresją ciągów
-18 bajtów poprzez zmniejszenie niektórych powtórzeń
Wypróbuj online!
Uruchom jako
A(string_one, string_two
.w
oblicza rekurencyjnie wagę ciągu.t
to skompresowany i z przeplotem tekst wszystkich sześciu możliwych skal, który bardzo dobrze się kompresuje.p
pobiera ciąg znaków (z usuniętymi spacjami), wagę ciągu i bok wagi, na którym znajduje się ciąg, i tworzy blok znaków 5 x 6.A
bierze łańcuchy i buduje ich blokip
. Olbrzymi ciąg na dole to trzy ciągi formatu z przeplotem i skompresowane.źródło
JavaScript (ES6),
340337 bajtówPobiera dane wejściowe jako tablicę 2 tablic znaków. Rysuje znak wyjściowy po znaku.
Wypróbuj online!
W jaki sposób?
Definiujemy pierwszą funkcję pomocniczą, która usuwa spacje z ciągu wejściowegoS.[ i ] i zwraca swoją wagę:
NB: Ponieważ ponownie wykorzystujemyja aby obliczyć wagę, jest wyłączony o jeden za S.[ 1 ] .
Obliczamys , co jest równe 0 gdyby S.[ 0 ] jest cięższy 2) gdyby S.[ 1 ] jest cięższy lub 1 jeśli oba ciągi mają taką samą wagę:
Teraz wywołujemy drugą funkcję pomocniczą, aby narysować wynik:
Gdzie
INDEX
oblicza się w następujący sposób:źródło
Java 10,
1043993988983 bajtów-5 bajtów dzięki @ceilingcat .
Dane wejściowe to dwa ciągi, które w rezultacie będą skutkować macierzą znaków.
Wypróbuj online.
Wyjaśnienie:
źródło