Brainfuck - 680
проверьте это здесь: ideone.com/Wi9ftB
>>>++++[>+++++++++[>+++[<<<<+<+>>>>>-]<<<+<<<+<+>>>>>>-]<-]+<++++++++<+++<---------<++++++++
++++<----<++++++++++<+++[>>>+.>>>.<<<<.>>>>>>[>[<<<<<<--------.-.>>>.<<<<.>+..<.>>>.>-----.<
------------.+++++++++.+++.------------.++++++++.++++>+++++.<<<<.>.+.>>>>->>-]+<<+>-]+<[<<<<
+.>>>.<<<<.>+.<.>>>.>-----.<<.>---.+++.<.>----.++++>+++++.<<<<.>+.>>>>-]<<<<<.>>>.>-----.<<.
>---.+++.<.>----.<<<.>>>+++++++.---.<.>----.++++>+++++.<<<<<.<-]>[>>++++<<-]>>---.[-]<[>+<-]
>>++.>>-----.<+++.<.<.>++.>---.-..<------.<.>>++++.---.<++.>----.<<.>--.>+++++++.---.++++++.
-------.<+++.<.>>++++++.<++++.---.<.>--.>--------.+++.<.>----.<<.>>+++++++++.-----.-.-----.-
-.+.>[>+++<-]>-.<<<---[>>+<<--]>>--.
как я и обещал, вот лучшая версия. мой мозг чувствует себя как ... о, вот откуда это название.
объяснение: (потому что это не поддерживаемо, и я не хочу забывать, как это работает)
Во-первых, вы должны выбрать лучший макет данных для этой задачи. я придумал
-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
Мы должны верить, что это оптимально, если не будет слишком много смен (в этом случае вы должны изменить расположение)
После этого я использовал цикл 4x9x3, чтобы установить начальные значения для новой строки, числа, двух строчных букв и запятой. (все меньшие коды ascii получили 4x9 = 36, а две строчные буквы получили 4x9x3 = 108, затем я добавил и вычел некоторые из них, чтобы получить их реальное значение)
Когда предварительная настройка завершена, код входит в самый цикл, который повторяется 3 раза. Я объясняю это псевдокодом.
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'
Когда этот раздел закончен, мне просто нужно напечатать последнюю строку. Но у нас есть заглавные буквы W, которые должны быть получены без использования слишком большого количества символов. На данный момент мы здесь:
Address Value Pointer
-4 0 <--
-3 10
-2 32
-1 50
1 99
2 111
3 44
поэтому я положил [-3] 4 раза в [-1] и вычел 3, чтобы получить 87 (W): >[>>++++<<-]>>---.
затем сотри его [-]
и перемести [-2] в это место [-1], чтобы пробел был близок к строчным буквам.<[>+<-]
После этого он просто печатает буквы. строчная # 1 для нижней части 97-107 и строчная № 2 для вышеуказанной области.