Twoim zadaniem jest napisanie programu (lub dwóch oddzielnych programów) w dowolnym języku, który:
- Może wziąć skompletowaną planszę Sudoku jako dane wejściowe (w dowolnym formacie logicznym) i skompresować ją do ciągu znaków
- Może wziąć skompresowany ciąg jako dane wejściowe i rozpakować go, aby uzyskać dokładnie tę samą ukończoną tablicę Sudoku (wyjście w dowolnym logicznym formacie 9 wierszy)
Uwaga: użyj reguł Sudoku na swoją korzyść; taka jest idea tego wyzwania.
Sudoku rządzi Wikipedią
Zasady
- W skompresowanym wyjściu dozwolone są tylko drukowalne znaki ASCII (32–126) (np. Brak znaków wielobajtowych ).
- Możesz założyć, że wejście jest prawidłową tablicą Sudoku 3x3 (normalne zasady, bez zmian).
- Nie narzucę limitu czasu, ale nie tworzę algorytmu brutalnej siły. Lub osoby zgłaszające powinny być w stanie przetestować swoje zgłoszenia przed opublikowaniem (Dzięki Jan Dvorak).
Jeśli masz jakieś pytania lub wątpliwości, możesz poprosić o wyjaśnienia lub sugestie w komentarzach.
Warunki wygranej
Wynik = suma liczby znaków ze wszystkich dziesięciu przypadków testowych
Najniższy wynik wygrywa.
Przypadki testowe
Możesz użyć ich do sprawdzenia, jak działa Twój program.
9 7 3 5 8 1 4 2 6
5 2 6 4 7 3 1 9 8
1 8 4 2 9 6 7 5 3
2 4 7 8 6 5 3 1 9
3 9 8 1 2 4 6 7 5
6 5 1 7 3 9 8 4 2
8 1 9 3 4 2 5 6 7
7 6 5 9 1 8 2 3 4
4 3 2 6 5 7 9 8 1
7 2 4 8 6 5 1 9 3
1 6 9 2 4 3 8 7 5
3 8 5 1 9 7 2 4 6
8 9 6 7 2 4 3 5 1
2 7 3 9 5 1 6 8 4
4 5 1 3 8 6 9 2 7
5 4 2 6 3 9 7 1 8
6 1 8 5 7 2 4 3 9
9 3 7 4 1 8 5 6 2
1 5 7 6 8 2 3 4 9
4 3 2 5 1 9 6 8 7
6 9 8 3 4 7 2 5 1
8 2 5 4 7 6 1 9 3
7 1 3 9 2 8 4 6 5
9 6 4 1 3 5 7 2 8
5 4 1 2 9 3 8 7 6
2 8 9 7 6 1 5 3 4
3 7 6 8 5 4 9 1 2
8 3 5 4 1 6 9 2 7
2 9 6 8 5 7 4 3 1
4 1 7 2 9 3 6 5 8
5 6 9 1 3 4 7 8 2
1 2 3 6 7 8 5 4 9
7 4 8 5 2 9 1 6 3
6 5 2 7 8 1 3 9 4
9 8 1 3 4 5 2 7 6
3 7 4 9 6 2 8 1 5
6 2 8 4 5 1 7 9 3
5 9 4 7 3 2 6 8 1
7 1 3 6 8 9 5 4 2
2 4 7 3 1 5 8 6 9
9 6 1 8 2 7 3 5 4
3 8 5 9 6 4 2 1 7
1 5 6 2 4 3 9 7 8
4 3 9 5 7 8 1 2 6
8 7 2 1 9 6 4 3 5
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 1 4 3 6 5 8 9 7
3 6 5 8 9 7 2 1 4
8 9 7 2 1 4 3 6 5
5 3 1 6 4 8 9 7 2
6 4 8 9 7 2 5 3 1
9 7 2 5 3 1 6 4 8
1 4 5 7 9 2 8 3 6
3 7 6 5 8 4 1 9 2
2 9 8 3 6 1 7 5 4
7 3 1 9 2 8 6 4 5
8 5 9 6 4 7 3 2 1
4 6 2 1 3 5 9 8 7
6 2 4 8 7 3 5 1 9
5 8 7 4 1 9 2 6 3
9 1 3 2 5 6 4 7 8
5 2 7 4 1 6 9 3 8
8 6 4 3 2 9 1 5 7
1 3 9 5 7 8 6 4 2
2 9 1 8 5 4 3 7 6
3 4 8 6 9 7 5 2 1
6 7 5 1 3 2 4 8 9
7 1 2 9 4 5 8 6 3
4 8 3 2 6 1 7 9 5
9 5 6 7 8 3 2 1 4
2 4 6 7 1 3 9 8 5
1 8 5 4 9 6 7 3 2
9 3 7 8 2 5 1 4 6
6 7 8 5 4 2 3 9 1
4 9 3 1 6 8 2 5 7
5 1 2 3 7 9 4 6 8
8 2 4 9 5 7 6 1 3
7 5 9 6 3 1 8 2 4
3 6 1 2 8 4 5 7 9
8 6 1 2 9 4 5 7 3
4 7 5 3 1 8 6 9 2
3 9 2 5 6 7 8 1 4
2 3 6 4 5 9 7 8 1
1 5 4 7 8 3 2 6 9
9 8 7 6 2 1 3 4 5
5 2 9 1 7 6 4 3 8
6 4 8 9 3 2 1 5 7
7 1 3 8 4 5 9 2 6
Podziękowania dla http://www.opensky.ca/~jdhildeb/software/sudokugen/ dla niektórych z nich
Jeśli znajdziesz jakieś problemy z przypadkami testowymi, powiedz mi.
code-challenge
compression
sudoku
kukac67
źródło
źródło
fudge
podprogram w mojej drugiej odpowiedzi, która zyskuje 12 punktów). Bardziej sprawiedliwym testem byłoby wymaganie, aby (a) rozwiązania testowe działały, (b) oceniać na 1000 losowo wygenerowanych siatek Sudoku i dzielić odpowiedź przez 100. Uważam, że najlepsze, co można zrobić z danymi losowymi, to około 110, na podstawie 10 x log-base-95 (6670903752021072936960)Odpowiedzi:
Haskell, 107 punktów
Wyniki przypadku testowego:
Kod nie jest ładny, ale działa. Podstawą algorytmu jest to, że chociaż wyliczenie wszystkich rozwiązań zajęłoby zbyt dużo czasu, wyliczenie wszystkich rozwiązań w jednym bloku jest raczej szybkie - w rzeczywistości jest szybsze niż późniejsza konwersja do base95. Wszystko działa w ciągu kilku sekund w tłumaczu na mojej niskiej jakości maszynie. Skompilowany program zakończyłby się natychmiast.
Ciężkie podnoszenie odbywa się za pomocą
solution2ix
funkcji, która dla każdego bloku 3x3 generuje wszystkie możliwe permutacje, z zastrzeżeniem ograniczeń od lewej i od góry, aż znajdzie to w zakodowanym rozwiązaniu, pamiętając tylko indeks wspomnianej permutacji. Następnie łączy indeksy przy użyciu wstępnie obliczonych wag i schematu Hornera.W przeciwnym kierunku
ix2solution
funkcja najpierw rozkłada indeks na dziewięć wartości. Następnie dla każdego bloku indeksuje listę możliwych kombinacji z odpowiednią wartością, a następnie wyodrębnia ograniczenia dla kolejnych bloków.assignments
jest prostą, ale brzydką, rozwiniętą rekurencją za pomocą monady listy. Generuje listę permutacji na podstawie zestawu ograniczeń.Rzeczywista moc pochodzi z ciasnych granic długości list permutacji:
9!
. Ta wartość nigdy nie jest używana, z wyjątkiem znalezienia górnej granicy długości wyjściowej.6*5*4*6!
jest siedem razy gorsza niż faktyczna liczba wyliczona przez wyliczenie:12096
Iloczyn wszystkich tych limitów wynosi
71025136897117189570560
~ =95^11.5544
, co oznacza, że żaden kod nie jest dłuższy niż 12 znaków, a prawie połowa z nich powinna mieć 11 lub mniej znaków. Postanowiłem nie rozróżniać krótszego sznurka od tego samego sznurka wypełnionego spacjami. Miejsca w innych miejscach są znaczące.Teoretyczna granica wydajności kodowania dla kodów wolnych od prefiksów - logarytm podstawowy 95
6670903752021072936960
- oznacza11.035
, że nawet optymalny algorytm nie może uniknąć wygenerowania danych wyjściowych o długości 12, chociaż da to tylko 3,5% wszystkich przypadków. Dopuszczenie, aby długość była znacząca (lub równoważnie, dodanie spacji końcowych) powoduje dodanie kilku kodów (1% całkowitej kwoty), ale nie wystarcza, aby wyeliminować potrzebę kodów o długości 12.źródło
Python, 130 punktów
Algorytm polega na kodowaniu każdej pozycji na płycie, pojedynczo, w dużą liczbę całkowitą. Dla każdej pozycji oblicza możliwe wartości, biorąc pod uwagę wszystkie dotychczas zakodowane zadania. Jeśli więc [1,3,7,9] są możliwymi wartościami dla danej pozycji, potrzeba 2 bitów, aby zakodować wybór.
Zaletą tego schematu jest to, że jeśli pozycja ma tylko jeden pozostały wybór, kodowanie nie wymaga spacji.
Kiedy mamy już dużą liczbę całkowitą, wypisujemy ją w bazie 95.
Prawdopodobnie są lepsze porządki kodowania niż leksykograficzne, ale nie zastanawiałem się nad tym zbyt wiele.
Enkoder:
Dekoder:
Uruchom tak:
źródło
perl - wynik
115113103113Wydajność:
Wydajność:Żadna z tych linii nie ma spacji kończącej. Zauważ, że pierwszy wiersz jest pusty.
Ten algorytm działa w następujący sposób. Aby skompresować:
Zacznij od pustego „bieżącego” ciągu reprezentującego siatkę Sudoku
Zastanów się nad dodaniem po kolei każdej cyfry 1 .. 9 do tego ciągu i określ, która jest wykonalna.
Pobierz następną cyfrę z siatki odpowiedzi (i dodaj ją do bieżącej)
Jeśli tylko jeden jest wykonalny, nie ma nic do kodowania
Jeśli więcej niż jedna jest wykonalna, policz liczbę wykonalnych opcji, posortuj je i zakoduj tę cyfrę jako indeks w posortowanej tablicy. Zapisz cyfrę i liczbę wykonalną jako 2-krotność w tablicy.
Po zakończeniu należy zakodować każdą z 2 krotek (w odwrotnej kolejności) w zmiennej liczbie zapisanej jako bigint.
Wyraź biginta w bazie 95.
Aby zdekodować:
Zacznij od pustego „bieżącego” ciągu reprezentującego siatkę Sudoku
Dekoduj numer base95 na bigint
Zastanów się nad dodaniem po kolei każdej cyfry 1 .. 9 do tego ciągu i określ, która jest wykonalna.
Jeśli tylko jeden jest wykonalny, nie ma nic do kodowania; dodaj ten wybór do siatki
Jeśli więcej niż jedna jest wykonalna, policz liczbę wykonalnych opcji, posortuj je i zakoduj tę cyfrę jako indeks w posortowanej tablicy.
Dekoduj bigint o zmiennej podstawie, używając liczby wykonalnych opcji jako podstawy, i modułu jako indeksu w tablicy, i wyślij tę cyfrę jako wartość komórki.
Aby określić liczbę wykonalnych opcji, używa się Games :: Sudoku :: Solver. To głównie dla przejrzystości, ponieważ na tej stronie znajdują się 3-liniowe solwery Sudoku.
Wykonanie wszystkich 10 zajęło 8 sekund na moim laptopie.
fudge
Działanie sortowanie tablicy inaczej osiągnąć minimalną wartość dla testów. Jak udokumentowano, jest to krówka. Krówka zmniejsza wynik ze 115 do 103. Jest ręcznie, aby zapewnić, że kod bigint dla pierwszego testu wynosi 0. Najgorszy wynik dla każdego sudoku to 12, co daje wynik 120. Dlatego nie sądzę, żeby to się liczyło jako na stałe; raczej optymalizuje dane testowe. Aby zobaczyć, jak działa bez tego, zmieńsort fudge
nasort
w obu miejscach.Kod następuje:
źródło
CJam, 309 bajtów
To tylko szybkie rozwiązanie podstawowe. Przepraszam, że zrobiłem to w języku golfowym, ale tak naprawdę był to najprostszy sposób. Jutro dodam wyjaśnienie właściwego kodu, ale opisałem algorytm poniżej.
Enkoder
Dekoder
Sprawdź to tutaj.
Dane wejściowe kodera (na STDIN) i dane wyjściowe dekodera (na STDOUT) mają postać zagnieżdżonej tablicy CJam. Na przykład
10 wyjść testowych to:
Algorytm jest bardzo prosty:
źródło
Python 2.7, łącznie 107 znaków
Wyliczenie siły brutalnej TL; DR kwadratów 3x3 z ograniczeniami górny + lewy
przypadki testowe:
funkcja pomocnicza do drukowania sudoku
generuje wszystkie możliwe kwadraty, biorąc pod uwagę ograniczenia powyżej i po lewej stronie
więcej szczegółów w komentarzu do kodu
wyodrębnia wszystkie kwadraty z planszy sudoku jako krotki
więcej szczegółów w komentarzu do kodu
konwertuje kwadraty z powrotem na planszę sudoku
w zasadzie odwrotność powyższej funkcji
podane kwadraty w lewo, zwróć ograniczenia
więcej szczegółów w komentarzu do kodu
podane kwadraty powyżej, zwróć ograniczenia
więcej szczegółów w komentarzu do kodu
robi ciąg
jest to zakodowana na stałe lista zależności dla każdego kwadratu
więcej szczegółów w komentarzu do kodu
jest to zakodowana lista maksymalnej liczby możliwych opcji dla każdego kwadratu
więcej szczegółów w komentarzu do kodu
łączą one powyższe funkcje i przekształcają tablicę w listę liczb całkowitych
i z powrotem na tablicę
ok, to są wszystkie funkcje
dla każdej planszy zrób ciąg i wydrukuj go
teraz wydrukuj całkowitą długość wszystkich łańcuchów
i un-stringify, aby udowodnić, że nie jest to kompresja w jedną stronę
wydajność:
źródło
Mathematica, wynik:
1309Aktualizacja:
Po opublikowaniu tej odpowiedzi zainspirowała ona nową lukę bliższą: „Optymalizacja dla podanych przypadków testowych” . Pozostawię jednak tę odpowiedź taką, jaka jest, jako przykład luki. Zapraszam do głosowania. Nie skrzywdzi mnie to.
To koduje komórkę naraz w kolejności rastrowej, i dla każdej komórki odpowiednio wyklucza jej wartość dla kolejnych komórek, stosując podstawowe zasady Sudoku. Na przykład, gdy komórka jest kodowana i ma tylko cztery możliwości, wówczas podstawowa 4 cyfra jest dodawana do dużej liczby całkowitej. Koduje również przypadki testowe bezpośrednio jako małe liczby całkowite, nadal poprawnie kompresując i dekompresując wszystkie prawidłowe płyty Sudoku ze średnią skompresowaną długością ~ 12,5 znaków, 1,5 więcej niż optymalna 11.035, przy stosunkowo prostym kodzie i nie wymagającym solwera Sudoku.
Zakodowane przypadki testowe:
Nie skutkuje to doskonałym kodowaniem (średnio ~ 11), ponieważ podstawowe zasady nie wykluczają niektórych wyborów, dla których w rzeczywistości nie ma rozwiązania. Wydajność można by dopracować (tzn. Duża liczba całkowita zawsze byłaby mniejsza niż liczba możliwych plansz Sudoku), sprawdzając, czy nie ma rozwiązania niektórych obecnych wyborów za pomocą solwera Sudoku, a także eliminując je.
źródło
J, 254 punkty
Kompresja DekompresjaStandardowe We / Wy jest trochę nieporadne w J, ponieważ w
jconsole
rzeczywistości jest REPL, więc mogłem zapisać skompresowane wyjście do pliku.Znajduje indeks anagramowy każdej linii, traktuje powstałe dziewięć liczb jako liczbę podstawową (9!), A następnie ostatecznie konwertuje na bazę 95, dodaje 32 i konwertuje do ASCII, tak jak w rozwiązaniu Martina Büttnera. Indeks anagramowy permutacji 1..n jest po prostu indeksem permutacji na uporządkowanej leksykalnie liście wszystkich takich permutacji, np.
5 4 3 2 1
Ma indeks anagramowy 5! - 1 = 119 .Wszystkie operacje mają łatwe inwersje, więc dekompresja jest prosta.
Jako bonus, przykłady są w formacie bardzo przyjaznym dla J, więc wejście / wyjście dla zdekompresowanych sudokusów jest dokładnie takie, jak podano w przykładach (chociaż wejście do kodera wymaga końca nowej linii).
Skompresowane ciągi dla przypadków testowych:
źródło
Python 3, 120 punktów
Ten program wyświetla wszystkie możliwe bloki 3x3 i pamięta, który z nich był rzeczywiście obecny w oryginalnym Sudoku, a następnie łączy wszystkie te liczby w reprezentację base-95. Chociaż jest to bardzo bliskie zakodowania na stałe, kompresuje i dekompresuje przykłady w około 5 sekund na moim komputerze.
Główne funkcje to
compress(sudoku)
idecompress(text)
.Wyjścia:
źródło
Python 2.5, 116 punktów
Kod:
Wyniki:
Bardzo wolno. Uruchomienie i sprawdzenie na mojej maszynie zajęło 517 sekund.
encconfig pobiera tablicę sudoku i cyfrę od 1 do 9, podaje współrzędne xy, w których pojawia się ta cyfra, i wyświetla liczbę w zakresie (6 ** 6), która reprezentuje te współrzędne. („konfiguracja cyfr”)
decconfig to funkcja odwrotna. Zajmuje liczbę z zakresu (6 ** 6), cyfrę i planszę sudoku (domyślnie jest pusta). Wysyła tablicę sudoku nałożoną na konfigurację cyfr. Jeśli jedna z pozycji w konfiguracji cyfr jest już zajęta na wprowadzonej planszy sudoku, cyfra w tej pozycji zostanie zastąpiona nową cyfrą.
Kompatybilny pobiera planszę sudoku i konfigurację cyfr (zdefiniowaną przez conf i dig), nakłada konfigurację cyfr na planszę sudoku i sprawdza konflikty. Następnie zwraca True lub False w zależności od wyniku.
Kod to funkcja kompresji. Pobiera tablicę sudoku i wyświetla liczbę reprezentującą ją. Robi to najpierw kopiując pozycje 1 na pustą tablicę i tworząc listę wszystkich konfiguracji liczby 2, które są kompatybilne z konfiguracją 1 (które nie zajmują żadnego z miejsc zajętych przez 1). Następnie wyszukuje na liście kolejność faktycznej konfiguracji 2 planszy i zapisuje ją, a następnie kopiuje tę konfigurację do nowej planszy, która zawiera teraz tylko 1 i 2. Następnie wyświetla wszystkie konfiguracje liczby 3, które są zgodne z pozycjami 1 i 2, i tak dalej.
dekodowanie jest funkcją odwrotną.
Python 2.5.
źródło
C #, 150 bajtów
Skompresowana moc wyjściowa:
Jak to działa:
Generuje wszystkie możliwe permutacje 123456789 i zapamiętuje je. Następnie porównuje permutacje z wierszami w sudoku. Po znalezieniu pasującej permutacji dla danego wiersza zapamiętuje indeks tej permutacji. Po każdym wierszu usunie wszystkie permutacje, w których jest co najmniej jeden znak w tej samej pozycji, co bieżący wiersz. Dzięki temu każda liczba jest unikalna w kolumnie. Następnie usuwa wszystkie permutacje, które nie działają już według kryteriów pudełkowych. Ponieważ ostatni wiersz jest trywialny, generuje 8 liczb. Sprawdziłem, jaka byłaby maksymalna wartość każdej z tych liczb, i wygenerowałem maskę cyfr dla każdej pozycji tych liczb. {6, 5, 3, 5, 3, 1, 2, 1, 1}. Pierwszy jest oczywiście najdłuższy z 362880 permutacjami. Korzystając z maski cyfr, tworzę BigInteger z wiodącą 1, aby miała długość 28 cyfr. Daje to w sumie 11 bajtów. Następnie bajty te są konwertowane na base64. Aby zapisać jeden znak, usuń znak = na końcu.
Rekonstrukcja działa podobnie.
Odtwarza BigInteger z ciągu base64, a następnie zamienia go ponownie w ciąg znaków i dzieli go ponownie za pomocą wspomnianej maski liczenia cyfr. Te ciągi są analizowane z powrotem do indeksów.
Następnie algorytm robi prawie to samo, zamiast znaleźć wiersz w permutacjach, po prostu używa indeksu, aby uzyskać wiersz, reszta działa tak samo.
Prawdopodobnie byłoby to trochę lepsze, aby naprawdę użyć 94 możliwych charachterów zamiast tylko 64, ale brakuje mi mózgów, aby to zrobić.
Źródło : Kopiowanie i wklejanie, aby działało z 10 przykładami. .dotNet-Fiddle mówi mi, że przekracza to limit pamięci, więc musisz uruchomić go na komputerze, aby wysłać SMS-a.
źródło
Perl - 290 znaków = 290 punktów
Ten program nie używa twardego kodowania i niezawodnie kompresuje siatkę dokładnie w 29 znakach (teoretycznie można byłoby znaleźć kilka mniejszych).
Oto jak to działa:
Najpierw przekonwertuj tablicę 9 x 9 na 60 liczb. Można to zrobić jako ostatnią kolumnę, ostatni wiersz i ostatni kwadrat każdej komórki 3 x 3 można upuścić.
Następnie przekonwertuj za pomocą biginta na jedną liczbę całkowitą, używając 9 ^ 60 elementów.
Następnie przekonwertuj bigint na bazę 95.
Sprężarka i dekompresor:
źródło
PHP, 214
To rozwiązanie najpierw usuwa prawą kolumnę i dolny rząd, a także prawy dolny róg każdego bloku 3x3. Następnie próbuje wyczyścić komórkę. Jeśli istnieje proste rozwiązanie, komórka pozostaje pusta.
Następnie siatka sudoku jest formatowana w ciąg znaków, od lewej do prawej i od góry do dołu, z wyłączeniem prawej kolumny, dolnego rzędu i prawego dolnego rogu. Zera wiodące są liczone (niech tak będzie
z
) i usuwane. Zera końcowe są również usuwane.Łańcuch jest sformatowany w postaci liczby całkowitej 10, 11 lub 12 (niech ta podstawa będzie
b
),A
reprezentując dwa zera iB
trzy.Jest to konwertowane na liczbę całkowitą base-95 i poprzedzone cyfrą reprezentującą base-95
z << 2 | (b - 10)
.Wezwanie
php sudoku-compress.php enc
do kodowania iphp sudoku-compress.php dec
dekodowania. Koder przyjmuje format podany w pytaniu, z obowiązkowym końcowym znakiem nowej linii.Wyjścia testowe:
źródło
Java, 330 punktów
Zanim wyśmiewam się z tak wysokiego wyniku, pozwólcie, że wyjaśnię, że próbowałem rozwiązać ten problem w inny sposób, wiedząc, że prawdopodobnie nie będzie on tak optymalny, jak niektóre lepsze odpowiedzi tutaj. Byłem mniej więcej ciekawy, czy uda mi się zbliżyć co ku mojemu zaskoczeniu nie zdawałem sobie sprawy, o ile gorzej by się okazało. Oto podsumowanie mojego podejścia:
Opracuj algorytm rozwiązywania zagadek sudoku.
Opracuj mieszające się algo, które nadal będzie możliwe do rozwiązania. Robi to nieco losowo, jednocześnie usuwając wskazówki, które można trywialnie ustalić przed ręką. Mogłem rzetelnie uzyskać około 22 wskazówek, zanim zajęło to zdecydowanie zbyt dużo czasu.
Raz zaszyfrowana łamigłówka może być reprezentowana przez trójkę liczb całkowitych jednocyfrowych dla każdej wskazówki, w moim przypadku 22 trojaczki po 3. Pomyślałem, że jeśli mogę połączyć je w jedną 66 cyfr, to kodowanie kodu base95 to mam coś, co może łatwo dekodować.
Zakodowany ciąg okazał się dłuższy, niż się spodziewałem, na ogół około 33 znaków. W tym momencie wypróbowałem alternatywny sposób niż użycie Java BigInteger, w którym utworzyłem dużą liczbę z 81-bitowej maski reprezentującej 81 komórek siatki, gdzie 1 oznacza wskazówkę dla tej komórki. Następnie połączyłem tę maskę bitową z 4-bitowymi reprezentacjami każdej wartości komórki w kolejności sekwencyjnej, zaokrąglając w górę do bajtów i stwierdziłem, że z grubsza otrzymałem taką samą długość łańcucha po kodowaniu base95.
Zasadniczo więc publikuję swój kod na wypadek, gdyby ktoś był zainteresowany innym podejściem, które nie wyszło tak dobrze.
Class Puzz
Mój przypadek testowy
Wyjście testowe
źródło
C ++ 241, wynik: 82 * 10 = 820
Dodaje „!” na początku zakodowanego ciągu, aby określić, którą operację wykonać.
Gra w golfa 241 znaków
Nieoszlifowane 312 znaków
źródło