W tej pikselowej czcionce wielkich liter alfabetu wszystkie znaki mają 5 jednostek szerokości i 5 wysokości.
███ ████ ███ ████ █████ █████ ████ █ █ █████ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ██ ██
█████ ████ █ █ █ ████ ████ █ ██ █████ █ █ ███ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ████ ███ ████ █████ █ ████ █ █ █████ ███ █ █ █████ █ █
█ █ ███ ████ ███ ████ ████ █████ █ █ █ █ █ █ █ █ █ █ █████
██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ ████ █ █ ████ ███ █ █ █ █ █ █ █ █ █ █ █
█ ██ █ █ █ █ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ███ █ ████ █ █ ████ █ ███ █ █ █ █ █ █ █████
Jak widać, istnieje również 1 jednostka odstępu między literami i między wierszami. Każda litera może więc zająć do 6 × 6 jednostek miejsca.
Załóżmy, że zamiast używać znaku pełnego bloku ( █
) do bezpośredniego formowania kształtów liter, chcieliśmy użyć innych liter w tej samej czcionce . Polega to na 6-krotnym zwiększeniu wymiarów tekstu, dzięki czemu litery wykonane z pełnych bloków mogą być używane jako zamienniki pełnych bloków w większym tekście.
Jeśli to nie miało sensu, mam nadzieję, że ten przykład będzie. Oto A wykonane z B przy użyciu czcionki pikselowej:
████ ████ ████
█ █ █ █ █ █
████ ████ ████
█ █ █ █ █ █
████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
B są zbudowane z pełnych bloków, a A z B. Zauważ, że B wciąż mają jedną jednostkę między nimi poziomo i pionowo.
Możemy rozszerzyć ten pomysł, używając słów zamiast liter. Oto „WODA” wykonana z „POŻARU”:
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █
█████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████
Zauważ, jak „FIRE” pojawia się wielokrotnie w każdym wierszu i zawsze w porządku, bez względu na to, ile miejsca jest między literami. Trzy najbardziej prawostronne przypadki „POŻARU” zostały wcześnie odcięte ze względu na kształt liter „WODY”.
Tę ideę można rozszerzyć jeszcze bardziej, używając tych słów wykonanych ze słów, aby utworzyć słowa złożone ze słów złożonych ze słów , a nawet słów złożonych ze słów złożonych ze słów . Teoretycznie nie ma ograniczeń.
Inny przykład umieszczałby ten post powyżej limitu 30 000 znaków, ale możesz zobaczyć, co należy rozumieć przez „słowa złożone ze słów utworzonych ze słów”, uruchamiając ten fajny fragment kodu stosu. Po prostu pozostaw parametry domyślne i naciśnij „Idź!”. Powinieneś zobaczyć słowo „PSY” ze słowa „KOT” ze słowa „MYSZ”.
Wpisanie dowolnej listy oddzielonych spacjami słów zawierających tylko wielkie litery w polu tekstowym spowoduje utworzenie pierwszego słowa złożonego z drugiego słowa złożonego z trzeciego, złożonego z czwartego, wykonanego z ... itd.
OSTRZEŻENIE: Wpisanie więcej niż 4, a nawet 3 słów spowoduje powstanie DUŻEGO tekstu i zajmie DŁUGO czasu. Może to spowodować awarię przeglądarki / komputera / samochodu.
Wyzwanie
Celem tego wyzwania jest odzwierciedlenie tego, co robi Fragment stosu przy jak najmniejszej liczbie postaci.
Musisz napisać program, który pobiera oddzielony spacjami ciąg słów zawierający tylko wielkie litery i wypisuje pierwsze słowo „wykonane z” drugiego „wykonane z” trzeciego i tak dalej, używając pikselowej czcionki podanej powyżej.
Pole wyboru „Zwykły ASCII” i funkcje rozmiaru czcionki fragmentu nie muszą być obsługiwane w Twoim programie. Odzwierciedlenie transformacji z list słów do słów utworzonych ze słów jest głównym punktem i jedynym wymogiem.
Detale
Dane wejściowe powinny pochodzić ze stdin, wiersza poleceń, lub możesz po prostu napisać funkcję, która pobiera ciąg.
Możesz założyć, że dane wejściowe są zawsze prawidłowe, tzn. Ciąg słów złożony z wielkich liter, oddzielonych dokładnie jedną spacją, bez spacji wiodących i końcowych.
Dane wyjściowe powinny przejść do standardowego wyjścia (lub podobnej alternatywy) lub do pliku o wybranej nazwie.
Wyjście powinno składać się całkowicie ze znakami pustymi kosmicznych , znaków pełnej przestrzeni i nowych linii.
- Te postacie pusty / pełnej przestrzeń powinna być albo pełna przestrzeń i blok (
,
█
), lub Okres X (.
,X
), odpowiednio.
- Te postacie pusty / pełnej przestrzeń powinna być albo pełna przestrzeń i blok (
Dane wyjściowe nie powinny zawierać żadnych wiodących kolumn zawierających tylko znaki pustej przestrzeni , chociaż dozwolona jest dowolna kombinacja końcowych znaków pustej przestrzeni w dowolnych wierszach.
Jest to dozwolone:
X...X.XXXXX.. X...X.X X.X.X.XXXX.... X.X.X.X.. .X.X..XXXXX..
Ale to nie jest:
.X...X.XXXXX.. .X...X.X .X.X.X.XXXX.... .X.X.X.X.. ..X.X..XXXXX..
Nie powinno być żadnych początkowych ani końcowych wierszy zawierających tylko znaki pustej przestrzeni . Pojedynczy znak nowej linii jest opcjonalnie dozwolony.
Oto bardziej przyjazna dla łańcucha wersja czcionki:
.XXX.
X...X
XXXXX
X...X
X...X
XXXX.
X...X
XXXX.
X...X
XXXX.
.XXX.
X...X
X....
X...X
.XXX.
XXXX.
X...X
X...X
X...X
XXXX.
XXXXX
X....
XXXX.
X....
XXXXX
XXXXX
X....
XXXX.
X....
X....
.XXXX
X....
X..XX
X...X
.XXXX
X...X
X...X
XXXXX
X...X
X...X
XXXXX
..X..
..X..
..X..
XXXXX
....X
....X
....X
X...X
.XXX.
X...X
X..X.
XXX..
X..X.
X...X
X....
X....
X....
X....
XXXXX
X...X
XX.XX
X.X.X
X...X
X...X
X...X
XX..X
X.X.X
X..XX
X...X
.XXX.
X...X
X...X
X...X
.XXX.
XXXX.
X...X
XXXX.
X....
X....
.XXX.
X...X
X...X
X..XX
.XXXX
XXXX.
X...X
XXXX.
X..X.
X...X
.XXXX
X....
.XXX.
....X
XXXX.
XXXXX
..X..
..X..
..X..
..X..
X...X
X...X
X...X
X...X
.XXX.
X...X
X...X
.X.X.
.X.X.
..X..
X...X
X...X
X.X.X
X.X.X
.X.X.
X...X
.X.X.
..X..
.X.X.
X...X
X...X
.X.X.
..X..
..X..
..X..
XXXXX
...X.
..X..
.X...
XXXXX
Punktacja
To jest golf golfowy, więc wygrywa najkrótsze przesłanie w bajtach . Każde wystąpienie pełnego bloku ( █
) może być liczone jako 1 bajt zamiast 3, więc przesyłanie, którego używa X
, nie ma przewagi.
źródło
javascript:
W pasku adresu i wklejenie go), aby ASCII tutaj dużo, dużo łatwiejsze do odczytania:$('#question pre').css('line-height',1)
. Rezultat: i.stack.imgur.com/XmB8C.png$('#question pre, .answer pre').css('line-height',1)
Odpowiedzi:
CJam,
171 165 162161 bajtówTraktuję
█
jak 1 bajt. Reszta wszystkie znaki znajdują się w zakresie ASCII, więc traktuje je również jako 1 bajt.Możesz użyć tej pastebin do dokładnego kodu
Przykładowe dane wyjściowe dla danych wejściowych:
Jak to działa
Po pierwsze
jest po prostu wzorem dla każdego z 27 znaków (
A-Z
i spacji), który składa się z0
(wX
pozycjach) i1
(w.
pozycjach). Po dekodowaniu daje to 27-elementową tablicę tablic 2D o 5 wierszach i 5 kolumnach reprezentującychX
i.
dla każdego z 27 znaków. Nazwijmy tę tablicę jakoL
.Teraz pozostały kod:
Wypróbuj online tutaj
źródło
Python 3, 437 bajtów
Kształty znaków są kodowane w ASCII. Każdy bajt ASCII odpowiada jednemu wierszowi jednego znaku, a bity reprezentują bloki jednostek. Nie jest to bardzo wydajny schemat, ale łatwo jest rozpakować go w maskach bitowych NumPy dla każdej postaci.
Zaczynamy od tablicy 2d 1s. Ma jedną kolumnę dla każdego znaku w pierwszym słowie i pojedynczy wiersz. Następnie dla każdego słowa tworzymy nową tablicę zer, sześć razy wyższą i sześć razy szerszą niż poprzednia tablica. Tam, gdzie poprzednia tablica miała 1, odpowiadająca jej sekcja 6x6 nowej tablicy jest wypełniona maską bitową odpowiedniego znaku.
Oto przykład (z bardzo małą czcionką):
źródło
CJam,
181174170 bajtówWszystkie znaki spoza ASCII nadal znajdują się w rozszerzonym zakresie ASCII, więc można je wszystkie zakodować w jednym bajcie. (Z wyjątkiem
█
, ale ten jest traktowany specjalnie zgodnie ze specyfikacją wyzwania.) Dlatego liczę każdą postać jako bajt.Stack Exchange prawdopodobnie zniekształcił niektóre z niedrukowalnych znaków, więc może być konieczne skopiowanie kodu z tej pastebin .
Sprawdź to tutaj.
Pobiera dane wejściowe przez STDIN jako listę słów oddzieloną spacjami. Pierwsze słowo to największa skala. Na przykład:
plony
Wyjaśnienie
Najpierw przechowujemy tabelę odnośników dla kształtów liter w
L
:Pierwszy ciąg to tylko skompresowana liczba. Punkty kodowe traktujemy jak cyfry bazowe 257, a następnie przekształcamy wynikową liczbę na binarną.
YYb
jest 2 jest w bazie 2, więc daje[1 0]
. Używamy podstawiania elementu za pomocą," █"
aby zamieniać cyfry w spacje i blokować znaki. Na koniec podzieliliśmy ciąg na wiersze po 5 znaków i ponownie na bloki po 5 wierszy. Wynik jest przechowywany wL
i odrzucany ze stosu.Teraz ogólną ideą jest zacząć od jednego wiersza
█
długości słowa o największej skali. Następnie dla każdego słowa przechodzimy przez istniejącą siatkę i rozwijamy wszystkie bloki do odpowiedniego znaku w następnej mniejszej skali (wstawiając puste wiersze i kolumny do rozdzielenia). Oto przygotowanie danych wejściowych:Najpierw spójrzmy na najbardziej zewnętrzną strukturę pozostałego programu. Następny blok
{...}/
jest uruchamiany dla każdego słowa i rozwija każdy ze znaków bloku.Na koniec spójrzmy, jak rozwinięta jest jedna linia:
Wynik jest drukowany automatycznie na końcu programu.
źródło