Brainfuck - 680
Testen Sie es hier: ideone.com/Wi9ftB
>>>++++[>+++++++++[>+++[<<<<+<+>>>>>-]<<<+<<<+<+>>>>>>-]<-]+<++++++++<+++<---------<++++++++
++++<----<++++++++++<+++[>>>+.>>>.<<<<.>>>>>>[>[<<<<<<--------.-.>>>.<<<<.>+..<.>>>.>-----.<
------------.+++++++++.+++.------------.++++++++.++++>+++++.<<<<.>.+.>>>>->>-]+<<+>-]+<[<<<<
+.>>>.<<<<.>+.<.>>>.>-----.<<.>---.+++.<.>----.++++>+++++.<<<<.>+.>>>>-]<<<<<.>>>.>-----.<<.
>---.+++.<.>----.<<<.>>>+++++++.---.<.>----.++++>+++++.<<<<<.<-]>[>>++++<<-]>>---.[-]<[>+<-]
>>++.>>-----.<+++.<.<.>++.>---.-..<------.<.>>++++.---.<++.>----.<<.>--.>+++++++.---.++++++.
-------.<+++.<.>>++++++.<++++.---.<.>--.>--------.+++.<.>----.<<.>>+++++++++.-----.-.-----.-
-.+.>[>+++<-]>-.<<<---[>>+<<--]>>--.
Wie ich versprochen habe, ist hier eine bessere Version. Mein Gehirn fühlt sich an wie ... Oh, daher kommt der Name.
Erklärung: (weil es nicht zu warten ist und ich nicht vergessen möchte, wie es funktioniert)
Zunächst müssen Sie das beste Datenlayout für diese Herausforderung auswählen. Ich hatte die Idee dass
-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
Wir müssen glauben, dass dies optimal ist, es sei denn, es wird zu viele Schichten geben (in diesem Fall müssen Sie das Layout neu ordnen).
Danach habe ich eine 4x9x3-Schleife verwendet, um die Startwerte für Newline, Number, die beiden Kleinbuchstaben und das Komma festzulegen. (Alle kleineren ASCII-Codes haben 4x9 = 36 und die beiden Kleinbuchstaben haben 4x9x3 = 108, dann habe ich einige addiert und subtrahiert, um ihren tatsächlichen Wert zu erhalten.)
Wenn die Voreinstellung abgeschlossen ist, wird der Code in die äußerste Schleife eingegeben, die dreimal durchlaufen wird. Ich erkläre es durch Pseudocode.
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'
Wenn dieser Abschnitt fertig ist, muss ich nur noch die letzte Zeile drucken. Wir haben jedoch ein W in Großbuchstaben, das ohne Verwendung zu vieler Zeichen erzeugt werden muss. An diesem Punkt sind wir hier:
Address Value Pointer
-4 0 <--
-3 10
-2 32
-1 50
1 99
2 111
3 44
also setze ich [-3] 4 mal auf [-1] und subtrahiere 3, um 87 (W) zu erhalten: >[>>++++<<-]>>---.
dann lösche ich es[-]
und verschiebe [-2] an diese Stelle [-1], so dass das Leerzeichen in der Nähe der Kleinbuchstaben liegt.<[>+<-]
Danach werden nur die Buchstaben gedruckt. Kleinbuchstabe Nr. 1 steht für den unteren Teil 97-107 und Kleinbuchstabe Nr. 2 für den obigen Bereich.