Zadanie
Zakoduj ciąg, który w całości składa się z wielkich liter ( A-Z
), używając tylko zer i jedynek, używając własnego ulubionego schematu. Ale zasada nie jest taka prosta!
Zasady
- Twój program / funkcja musi poprawnie obsługiwać dowolny prawidłowy ciąg wejściowy o długości 8 .
- Wyniki muszą mieć tę samą długość dla wszystkich danych wejściowych.
- Wyniki muszą być odrębne dla różnych danych wejściowych.
- Wyniki muszą być jak najkrótsze.
- Wyniki muszą być zrównoważone od zera jeden (mieć liczbę takich samych jak zera). Nie muszą być równe (tj. Idealnie wyważone), ale twój wynik zostanie za to ukarany.
Nie musisz zapewniać programu / funkcji, która dekoduje twoje kodowanie.
Wejście i wyjście
- Można zdecydować się przyjąć dowolny zestaw 26 różnych znaków ASCII zamiast
A-Z
. - Możesz zdecydować o wypuszczeniu dowolnej pary wyraźnych drukowalnych znaków ASCII zamiast
0
i1
. - Nie wolno wypisywać liczb całkowitych zamiast ciągów bitowych, ponieważ mogą one mieć zera na początku i nie jest jasne, czy rzeczywiście spełniasz regułę 2.
- Jeśli zdecydujesz się odejść od wartości domyślnej (
A-Z
wejściowej i01
wyjściowej), musisz określić zestawy znaków wejściowych / wyjściowych w przesyłanym pliku.
Punktacja
- Wynik podstawowy: rozmiar kodu lub 1, jeśli Twój program jest pusty.
- Kary
- Kara za długość: pomnóż
1.5 ** (encoded length - 42)
- Nie ma premii za bycie krótszym; 42 to minimalna długość dla idealnie zbalansowanego kodowania 8-łańcuchowych ciągów o rozmiarze 26 alfabetu.
- Kara za brak równowagi: pomnóż
2 ** max(abs(ones - zeros) for every valid input of length 8)
, gdzieones
izeros
są liczbami odpowiednio 1 i 0 na każdym wyjściu. - Twoje zgłoszenie musi zawierać albo najgorszy przykład (wejście / wyjście), albo teoretyczne wyjaśnienie wartości kary.
- Kara za długość: pomnóż
- Najniższy wynik wygrywa.
Przykładowe przesłanie
Hipotetyczny esolang, 0 bajtów, wynik 74733,8906
Oto hipotetyczny esolang, w którym pusty program drukuje binarnie wszystkie kody ASCII znaków wejściowych.
Na przykład, jeśli podasz AAAAAAAA
jako dane wejściowe, program wydrukuje 1000001
8 razy z rzędu, tj 10000011000001100000110000011000001100000110000011000001
.
Wybrany alfabet wejściowy to CEFGIJKLMNQRSTUVXYZabcdefh
. W ten sposób wszystkie znaki są konwertowane na siedem cyfr w postaci binarnej, a liczby zero-jedynkowe różnią się tylko o jeden na znak (wszystkie mają trzy zera i cztery zera lub odwrotnie, gdy są konwertowane na binarne).
Długość wyjściowa wynosi zawsze 56, a najgorszy przypadek niezrównoważenia występuje na wejściach takich jak CCCCCCCC
, gdzie zera pojawiają się 8 razy więcej niż jedynki.
W związku z tym wynik tego przedłożenia wynosi 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
.
źródło
Odpowiedzi:
Stax , 11 bajtów, 0 kar, wynik 11
Ten program wykorzystuje
[0-9A-P]
dane wejściowe i[01]
wyjściowe.Uruchom i debuguj online - kliknij przycisk Uruchom, aby rozpocząć. Pierwsze cztery przypadki testowe działają w milisekundach. Piąta za sekundy. Szósty od tysiącleci.
Odpowiednia reprezentacja ascii tego programu jest następująca.
W dużym stopniu opiera się na
|N
instrukcji, która uzyskuje późniejszą permutację tablicy.Wszystkie dane wyjściowe są permutacjami początkowego ciągu. Ma 21 zer i 21 zer. Dlatego wszystkie wyjścia mają 42 znaki i są idealnie zbalansowane.
źródło
Galaretka , 19 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyth,
201914 bajtów, Max Diff: 0, Length: 64, Score:149636.5528142154.7251104745.5869Wypróbuj online!
Używa małych liter (
[a-z]
) zamiast wielkich liter. Można używać wielkich liter, zastępującG
jerG1
, kosztem 2 bajtów.Mógłbym przetłumaczyć odpowiedź HyperNeutrino na Python 3, aby uzyskać lepszy wynik, ale szczerze mówiąc, chcę odpowiedź, która faktycznie działa.
źródło
Python 2 ,
779645 bajtów, Max (Różnica) = 0, Długość = 48, Wynik = 7346,95Wypróbuj online!
Liczba magiczna
4lnk28t9vtqgfrpfda9uyfrjhcjwjvno6aec2nwegi0g4mnublc05dher8fjm4s5gh55lu87a4itmc74t6tozcsfdbxkg82frwljy0wam1jht98g2j0bma021v5d48pwq0fklv0n1ltrxft1fpk5gt5mx5fj4p2mjqqpvcylt1xayxf1iwdmyoxgfvl7oui1oo6147bm9rqpqut9ns8hhjc77t3pqy48otovrsm1t4mmleumspkuef66ma1vi0l4mtkwaeeizuvvds9fro3vhc0mrn6ox17rdpk7xw747qf28934u5jci5q1qj81i7dyf7rf0x7hb19xm93xhxsgh4w8ifs6fhynsddbo9j938ewfvhjlbpiz50n5hanmno6c89blyx50e89z7vjq2ho2r2u2wwyu4q18kv4fi1nhmfbgjbnkdayr5kblaped4fo5u97bi9a67d89irxa0r9cinmnohfgjmh5fhkcr33
(w bazie 36) lub jej ekwiwalent dziesiętny382136276621246556626597379364678993894472503063952720559883124988542417847157286833446006767955087631166943136913765901237281892296575754126024183763829277879554548743231384272055945084065681774297483130020386641869860456147616177702938121538230311395513497506285733567467605871232294046704309941152721616618474501854355102646152223338484615876165254236449912858255665248186687952137487016925761633237335983620006273901509768720506129789443353730706676483647298576692613113269388239830925662977837917272690235355742330377154505179476767457756888107428475384947712227312747517748632498691058764154580934614231152483398774630508576533263098942260213967880819240793990219283490212843120923539516962682466148372296338428497778127570401190309339992457562121354271
koduje wszystkie 252 permutacje z 50
si 51
s.Pierwszy algorytm przekształca
A-Z
język0-25
i traktuje go jako liczbę zasadową-26, a następnie dodać56*252**4
.Następnie liczba jest konwertowana na 5-cyfrową liczbę podstawową-252 i zastępuje ją odpowiednią permutacją 5
0
si 51
s.Następnie usuń pierwsze 2 bity, co jest gwarantowane
01
. Następnie zakodowaliśmy ciąg do 48-bitowego ciągu, który składa się dokładnie z 240
s i 241
s.źródło
7346.953125
).JavaScript (ES8), wynik 22186,623779296875
W przypadku parzystej długości zawsze wypisuje 3,5 * zer i jedynek, więc płaci tylko 1,5 ** 14 karę. Obsługiwane znaki:
'+-.3569:<GKMNSUVYZ\cefijlqrtx
.źródło
Galaretka , 16 bajtów
Wykorzystuje
+,-./0123456789:;<=>?@ABCD
dane wejściowe i zwraca listę zer i jedynek.Podjęto próbę zbudowania listy 538,257,874,440 kombinacji w pamięci, więc będziesz potrzebować dużej ilości pamięci RAM, aby ją uruchomić tak, jak jest ...
Wypróbuj online! (testowalny; długość wejściowa 3, długość wyjściowa 18)
Jak to działa
źródło
Python 3 ,
985135 bajtów, maksymalna różnica 0, długość 42, wynik 135Wypróbuj online!
Dzięki uprzejmości Bubbler
Nieskluczony kod:
Ponieważ inne podejścia wydają się dość nieefektywne, próbowałem stworzyć optymalne czasowo. Jest to wyraźnie O (N) w N bitach kodowania, co jest optymalne dla dużych O.
Wskazówka: spróbuj pomyśleć o trójkącie Pascala dla tego ( ten schemat to pokazuje)
Przykładowe wyniki:
Czas wykonania: <0,013 s (w przybliżeniu stały dla wszystkich wejść)
źródło
Perl 5 , 55 bajtów, maks. Różnica 0, długość 42, wynik
5655To działa, ale zajmie to dużo czasu, ale wykonalne (
ZZZZZZZZ
zajęło mi 2,5 dnia na moim komputerze). Pamięć nie stanowi problemu.Wykorzystuje
A-Z
jako znaki wejściowe1
iA
jako znaki kodujące. Zawsze są idealnie wyważone. Pomija pierwsze26^7 = 8031810176
zrównoważone kombinacje reprezentujące ciąg krótszy niż 8 znaków, ale to jest OK, ponieważ są538257874440
dostępne, a ja używam208827064575
i208827064575 + 8031810176 < 538257874440
.Jednak tak naprawdę „liczy się” aż do kombinacji docelowej, co potrwa bardzo długo. Dlatego w łączu TIO użyłem tylko zbyt krótkiego ciągu wejściowego (które są również obsługiwane), aby pokazać, że dane wyjściowe są prawidłowe. Będzie działać do nieco więcej niż
AAAAAA
przed upływem limitu czasu TIO.ZZZZZZZZ
powinno być około26^3 = 17576
razy wolniejsze.Wypróbuj online!
Dekoder jest prawie taki sam:
Wypróbuj online!
źródło
> <> , 75 bajtów, maksymalna różnica 0, długość 42, wynik 75
Wypróbuj online!
Fair Warning, to będzie trwać bardzo bardzo bardzo dużo czasu, aby zakończyć nawet na trywialne
AAAAAAAA
sprawy. Przebiega przez każdą reprezentację binarną licznika, aż do osiągnięcia (podstawowa reprezentacja 26 danych wejściowych) liczby binarnej z 211
s. Jeśli chcesz nieco przetestować program, możesz zastąpićab+
trzecią linię,1
która zwróci n-tą liczbę binarną tylko jednym1
, Wypróbuj online!źródło
Python 3 , 75 bajtów, maksymalna różnica 0, długość 42, wynik 112
Wypróbuj online!
Działa to tylko teoretycznie z powodu ograniczeń pamięci. Istnieją
538257874440
wyraźne zbalansowane ciągi zerowe o długości 42 i208827064575
możliwe dane wejściowe, więc niektóre z możliwych danych wyjściowych nie zostaną wykorzystane.-37 bajtów dzięki @recursive
źródło
int(s,26)
wartości indeksu zamiastsum(...)
zmienić zestaw znaków wejściowych.[0-9A-P]
, prawda? Na mojej maszynieint("123ABC",26) == 12855114
C ++, 146 bajtów, 42 maksymalna długość, 0 asymetrii, wynik 146
Działa dla każdego ciągłego 26 znaków, ale ostrzeżenie, że działa w niedopuszczalnym czasie
źródło
#include<algorithm>
z#import<regex>
.