Brainfuck - 680
przetestuj tutaj: ideone.com/Wi9ftB
>>>++++[>+++++++++[>+++[<<<<+<+>>>>>-]<<<+<<<+<+>>>>>>-]<-]+<++++++++<+++<---------<++++++++
++++<----<++++++++++<+++[>>>+.>>>.<<<<.>>>>>>[>[<<<<<<--------.-.>>>.<<<<.>+..<.>>>.>-----.<
------------.+++++++++.+++.------------.++++++++.++++>+++++.<<<<.>.+.>>>>->>-]+<<+>-]+<[<<<<
+.>>>.<<<<.>+.<.>>>.>-----.<<.>---.+++.<.>----.++++>+++++.<<<<.>+.>>>>-]<<<<<.>>>.>-----.<<.
>---.+++.<.>----.<<<.>>>+++++++.---.<.>----.++++>+++++.<<<<<.<-]>[>>++++<<-]>>---.[-]<[>+<-]
>>++.>>-----.<+++.<.<.>++.>---.-..<------.<.>>++++.---.<++.>----.<<.>--.>+++++++.---.++++++.
-------.<+++.<.>>++++++.<++++.---.<.>--.>--------.+++.<.>----.<<.>>+++++++++.-----.-.-----.-
-.+.>[>+++<-]>-.<<<---[>>+<<--]>>--.
tak jak obiecałem, oto lepsza wersja. mój mózg czuje się jak ... och, stąd pochodzi nazwa.
wyjaśnienie: (ponieważ jest nie do utrzymania i nie chcę zapomnieć, jak to działa)
po pierwsze musisz wybrać najlepszy układ danych dla tego wyzwania. wymyśliłem
-4 outmost loop
-3 newline char
-2 space
-1 numbers
1 lowercase #1
2 lowercase #2
3 comma, apostrophe, period
4 condition (outmost loop < 3)
5 inner loop
6 second inner loop
Musimy wierzyć, że jest to optymalne, chyba że będzie zbyt wiele zmian (w takim przypadku musisz zmienić układ)
Następnie użyłem pętli 4x9x3, aby ustawić wartości początkowe dla nowej linii, liczby, dwóch małych liter i przecinka. (wszystkie mniejsze kody ascii otrzymały 4x9 = 36, a dwie małe litery - 4x9x3 = 108, a następnie dodałem i odjąłem niektóre, aby uzyskać ich prawdziwą wartość)
Po zakończeniu ustawienia wstępnego kod wchodzi w skrajną pętlę, która wykonuje cykl 3 razy. Tłumaczę to pseudokodem.
for 3 to 1 where i = numbers
print '++i, '
while inner_loop != 0 # this is true after the first loop
while second_inner_loop != 0 # and this is true after the second
print '10, 11 o'clock, 12' # prints the difference
condition = 0 # it prevents the printing below
second_inner_loop += 1
inner_loop += 1
while condition != 0
print '++i, ++i o'clock, ++i'
print ' o'clock rock,\n'
Po zakończeniu tej sekcji muszę po prostu wydrukować ostatni wiersz. Ale mamy wielką literę W, która musi być wyprodukowana bez użycia zbyt wielu znaków. W tym momencie jesteśmy tutaj:
Address Value Pointer
-4 0 <--
-3 10
-2 32
-1 50
1 99
2 111
3 44
więc wstawiam [-3] 4 razy na [-1] i odejmuję 3, aby uzyskać 87 (W): >[>>++++<<-]>>---.
następnie go usuwam [-]
i przesuwam [-2] do tej lokalizacji [-1], aby spacja była blisko małych liter.<[>+<-]
Następnie drukuje tylko litery. mała litera # 1 dotyczy dolnej części 97-107, a mała litera # 2 dotyczy powyższego regionu.