Powinieneś napisać program lub funkcję, która wypisuje lub zwraca jak najwięcej rozdziału I Małego Księcia . Twój program lub funkcja musi być blokiem kodu M-N-N zawierającym tylko drukowane znaki ascii (punkt kodowy od 32 do 126) i znaki nowej linii na końcu każdego wiersza.
Możesz użyć maksymalnie 26 wybranych znaków spośród 96 drukowanych znaków ascii (i nowych linii na końcu wierszy).
W każdym rzędzie i kolumnie każda postać musi być odrębna, podobnie jak puzzle sudoku, tzn. Nie może być litery w rzędzie lub kolumnie dwa razy.
Prawidłowe przykład blok kodu o M = 4
, N = 3
i alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Szczegóły kodu
- Możesz wybrać kształt swojego bloku kodu (tj.
M
IN
). - Blok musi być całkowicie wypełniony znakami, tzn. Każdy wiersz musi mieć tę samą długość.
- Końcowy znak nowej linii na końcu ostatniego wiersza jest opcjonalny.
- Jak napisano powyżej w każdym wierszu i kolumnie, każdy znak musi być odrębny.
Dane wyjściowe
- Powinieneś wydrukować lub zwrócić prefiks rozdziału I Księcia Małego bez żadnych dodatkowych wyników.
- Jeśli dojdziesz do nowego wiersza w tekście, możesz przedstawić go jako dowolny popularny wariant (\ r, \ n, \ r \ n), ale użyj tylko jednego z nich i policz go jako 1 bajt do wyniku.
- Dodatkowy znak nowej linii jest opcjonalny.
Twój wynik to długość tekstu wyjściowego z wyłączeniem dodatkowego nowego wiersza, jeśli jest obecny. Wyższy wynik jest lepszy.
Przykładowa odpowiedź
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Możesz sprawdzić poprawność swojego kodu za pomocą tego programu Python 3 (ideone) lub programu CJam (online) dostarczonego przez @ MartinBüttner.
Odpowiedzi:
CJam, 47 lat
Wypróbuj online
Alfabet:
"'*-/2INOSacdehilmnorswxy
Wyjaśnienie:
źródło
Pip , wynik = 38
Alfabet:
"'015:IMORXacdehilnorswxy
(Z pewnością nie chciałbym tego próbować w prawdziwym języku programowania).
Wyjaśnienie:
źródło
Python 3, wynik = 11
Jest to bardzo trudny problem dla Pythona, ponieważ ograniczenia powtarzania znaków w wierszu lub kolumnie sprawiają, że prawie niemożliwe jest utworzenie więcej niż jednego literału ciągowego. Różne sposoby łączenia ze sobą łańcuchów są więc dość bezużyteczne, ponieważ nie można uzyskać ciągów w jakikolwiek użyteczny sposób. Oto moja najlepsza próba:
Zauważ, że na końcu pierwszego wiersza znajduje się spacja. Alias
x
dlachr
jest konieczne, aby uniknąć tego samego znaku kończącego się w więcej niż jednej kolumnie. Komentarze na końcu mogą być prawie wszystkim.Alfabet składa się z 21 znaków do wydruku oraz znaku nowej linii (zwróć uwagę na spację na początku):
Dane wyjściowe to:
źródło
CJam, wynik = 21
Alfabet:
-;INOSacehinoswxy
Tylko po to, żeby piłka się toczyła; można to prawdopodobnie łatwo pokonać.
źródło
CJam, wynik = 15
Od jakiegoś czasu mam ten pomysł, ale nie miałem czasu, aby usiąść i przetasować różne rzeczy, dopóki nie uzyskam potrzebnej wyjątkowości kolumny, więc na razie oto wersja dla dzieci:
Alfabet (26):
" #)*+,0123456789:;=>Ibcef
Wypróbuj online .
Wyjaśnienie
Podstawową ideą jest wykorzystanie kodowania podstawowego, abyśmy mogli wydrukować ponad 26 typów znaków. Podstawowym kodem jest
Zauważ, że traktujemy pierwszy
"O"
dla"Once"
oddzielnie, ponieważ w tym w naszym ciąg zajęłoby zbyt dużo naszego alfabetu. Gdybyśmy chcieli, moglibyśmy spróbować rozszerzyć nasz ciąg indeksujący, ale ponieważ przez jakiś czas nie pojawiały się już wielkie litery, poza"I"
tym nie zawracałem sobie tym głowy.Następnie musimy jakoś zbudować dużą liczbę na drugiej linii. Podejście polegało na wielokrotnym pomnożeniu przez pewną moc, a następnie dodaniu stałej i powtórzeniu, więc w powyższym kodzie
85032995607801617394
zastąpionogdzie
)
jest przyrostem i#
wykładnikiem w CJam.Następnie reszta (najbardziej denerwująca część) wypełnia każdy wiersz, aby spełnić kryteria kolumny. Aby to zrobić, zrzucamy znaki w ciągi znaków i używamy ich
;
do pop. Niestety, chociaż bardzo chcielibyśmy również używaće#
komentarzy, aby ułatwić sprawę, fakt, że#
jest potęgowaniem, zabrania tego, więc dzieje się to tylko w ostatnim wierszu.Jestem całkiem pewien, że tę metodę można rozszerzyć do przecinka w pierwszym zdaniu, ale niestety przetasowanie elementów w celu spełnienia kryteriów kolumny okazuje się trudne, więc może potrzebuję innej metody generowania liczby całkowitej zakodowanej w podstawie.
źródło
Python 2, wynik = 13 (niepoprawny)
Python nie jest najlepszym językiem do tego ... Po dalszej inspekcji
n
w pierwszym wierszu są dwa znaki. Nie ma wartościowego lekarstwa i przestanę marnować czas na Pythona. Obecnie pracuję nad stworzeniem rozwiązania w innym języku, ale jeszcze nie będę go udostępniać.Alfabet (22):
"#(),0167IOcehinprtw
Wynik:
Once when I w
źródło
n
s. Ten problem jest prawie niemożliwy w Pythonie, ponieważ można użyć odwrotnego ukośnika kontynuacji linii tylko raz (ponieważ odwrotny ukośnik musi znajdować się w ostatniej kolumnie) i żadna linia nie może zawierać dwóch tego samego rodzaju cudzysłowu.