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 (Вт): >[>>++++<<-]>>---.
потім стерти його [-]
та перемістити [-2] до цього місця [-1], щоб простір був близьким до малих літер.<[>+<-]
Після цього він просто роздруковує листи. Малий регістр №1 призначений для нижньої частини 97-107, а нижній регістр №2 - для вищевказаного регіону.