Beatles Songs und Sechsecke

30

Schreiben Sie zwei Programme in Form eines Dreiecks (dh einer Pyramide).

Das erste sollte ein nach oben zeigendes Textdreieck mit einer Mindestbasisbreite von drei Zeichen sein. Es hätte also eine Struktur wie

 X
XXX

oder

  X
 XXX
XXXXX

oder

   X
  XXX
 XXXXX
XXXXXXX

oder größer. Jedes Xder Zeichen muss durch die Zeichen Ihres tatsächlichen Codes ersetzt werden. Dies kann alles andere als ein Zeilenabschluss sein (daher können die Zeichen XLeerzeichen sein). Alle Xmüssen ersetzt werden, und die Leerzeichen und Zeilenumbrüche, die zur Bildung der Dreiecksform beitragen, müssen unverändert bleiben.

Das zweite Programm muss dieselbe Größe und Form haben wie das erste, außer dass das Dreieck nach unten zeigt.

Also wenn dein erstes Programm so aussieht

  X
 XXX
XXXXX

dann würde dein zweites programm so aussehen

yyyyy
 yyy
  y

wobei jedes yZeichen ein Zeichen ist, das Sie mit Ihrem tatsächlichen Code ausfüllen müssen (wahrscheinlich anders als Ihr XCode). Die Leerzeichen und Zeilenumbrüche müssen auch hier gleich bleiben.

Ihre Aufgabe ist es, diese Programme so zu schreiben, dass sie jeweils den Titel eines bestimmten Beatles- Songs ausgeben (zur Standard- oder nächsthöheren Alternative) , ohne dass Eingaben erforderlich sind. Dieser Wikipedia-Artikel dient als offizielle Songliste für die Beatles. Die Ausgabe sollte einer der Titel genau wie aufgelistet sein, z I Want You (She's So Heavy).

Dies ist jedoch trotz der seltsamen Dreieck-Programmanforderung ziemlich einfach. Wir werden also aus den ersten beiden Programmen ein weiteres Programm formen, das einen weiteren Songtitel ausgeben muss.

Durch Kombinieren von drei Kopien der beiden Dreiecksprogramme können wir ein drittes Programm in Form eines Sechsecks erstellen.

Wenn die Basisbreite Ihres ersten Programms drei wäre, würde das so aussehen:

 XyyyX
XXXyXXX
yyyXyyy
 yXXXy

Wenn die Basisbreite fünf wäre, würde das so aussehen:

  XyyyyyX
 XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
 yyyXXXyyy
  yXXXXXy

Dieses Programm (wenn es mit Leerzeichen und Zeilenumbrüchen wie die anderen ausgeführt wird) muss genau wie die ersten beiden Programme einen anderen Beatles-Songtitel ausgeben. Ebenfalls:

  • Ihre drei Programme müssen unterschiedliche Songtitel ausgeben.
  • Es sind nur Songtitel mit einer Länge von mindestens acht Zeichen zulässig.
  • Sie können nur einen auswählen Revolution, Revolution 1und Revolution 9weil die Titel so ähnlich sind.
  • Sie müssen Ihre drei Lieblings-Beatles-Songs auswählen. (Nun, versuchen Sie es.)

Beachten Sie, dass tatsächliche Programme erforderlich sind. Funktionen sind nicht erlaubt. Das Lesen des eigenen Quellcodes in einem Programm ist ebenfalls nicht gestattet.

Beispiel

Wenn dein erstes Programm war

  A
 AAA
AAAAA

es könnte ausgeben Across the Universe.

Dann dein zweites Programm

bbbbb
 bbb
  b

könnte ausgeben Revolution.

Dann kombiniert in das Sechseck-Programm

  AbbbbbA
 AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
 bbbAAAbbb
  bAAAAAb

die Ausgabe könnte sein Get Back.

Wertung

Die Einsendung mit der kleinsten Dreiecksgrundbreite gewinnt. Im wahrscheinlichen Fall von Unentschieden gewinnt die Einreichung mit der größten summierten Länge ihrer drei Songtitel.

Calvins Hobbys
quelle
2
Sicherlich sollte der Tiebreaker die beste Wahl unter drei Liedern sein? ;)
Doug McClean
1
Ich habe Schwierigkeiten, einen Python-Eintrag zu schreiben, ohne nur die Methode von Sp3000 zu kopieren (hätte nie gedacht, dass ich mich über syntaktische Leerzeichen beschweren würde !), Aber ich habe ein Skript geschrieben, um zwei Dreiecke zu einem Sechseck zusammenzusetzen. Für den Fall, dass es für andere nützlich ist, steht es hier in einer Übersicht .
Tim Pederick
@ mbomb007 Nachgestellte Leerzeichen, die nicht Teil des Dreiecksmusters sind, sind nicht in Ordnung.
Calvins Hobbys
@TimPederick Da ich Ihr Hexagon-Ifier nicht zum Laufen bringen konnte, habe ich ein Python-Skript geschrieben, das mit zwei mehrzeiligen Strings beginnt. Sehen Sie hier, ob jemand es verwenden möchte.
mbomb007
@ mbomb007 Es tut uns leid, aber ein Leerzeichen am Ende ist nicht zulässig, da es nicht Teil des Titels ist. (Ich erlaube einen abschließenden Zeilenumbruch, da viele print-Anweisungen einen hinzufügen.) Ich bin mir nicht sicher, was die üblichen Rücktasten-Richtlinien angeht, aber sie sind für mich in Ordnung.
Calvins Hobbys

Antworten:

18

GolfScript, Breite = 9 Zeichen, Titel = 33 Zeichen

Hexagon

    "Let It Be"
   }";"Yeste"}";      
  "Twi""rda""Twi"
 "st an""y""st an"
"d Shout"}"d Shout"
Let It Be"Let It Be
 "Yeste"}";"Yeste"
  "rda""Twi""rda"
   "y""st an""y"
    }"d Shout"}

Drucke lassen es sein . (9 Zeichen)

Probieren Sie es online aus.

Wie es funktioniert

Das Token "Let It Be"in der ersten Zeile drückt die Zeichenfolge Let It Be auf den Stapel.

Die zweite Zeile beginnt mit }einem undokumentierten "Superkommentar", der die Ausführung sofort abbricht.

Vor dem Beenden druckt GolfScript den Inhalt des Stapels.

X Dreieck

    "
   }";
  "Twi"
 "st an"
"d Shout"

Druckt Twist and Shout . (15 Zeichen)

Probieren Sie es online aus.

Wie es funktioniert

Die ersten beiden Zeilen drücken den String "\n }", den der Befehl ;aus dem Stapel entfernt.

Die restlichen Zeilen enthalten , die Token "Twi", "st an"und "d Shout", die die Zeichenfolge schieben Torsion und Ruf in drei Stücke.

Vor dem Beenden druckt GolfScript den Inhalt des Stapels.

Y Dreieck

Let It Be
 "Yeste"
  "rda"
   "y"
    }

Druckt gestern . (9 Zeichen)

Probieren Sie es online aus.

Wie es funktioniert

Die Token Let, Itund Bein der ersten Zeile sind nicht definiert, so dass sie nichts zu tun.

Die drei folgenden Zeilen enthalten die Token "Yeste", "rda"und "y", die die Zeichenfolge schieben gestern in drei Stücke.

Das }in der letzten Zeile macht nichts; das programm wäre sowieso beendet gewesen.

GolfScript druckt erneut den Inhalt des Stapels, bevor es beendet wird.

Dennis
quelle
21

Befunge -93, Breite = 13 15 , Titel = 31 24 Zeichen

Ein Stromausfall letzte Nacht hat mich daran gehindert, dies zu aktualisieren, als ich es herausgefunden habe, aber ich habe es geschafft, die Breite des Dreiecks zu reduzieren und die Länge des Songs zu erhöhen!

Hinweisprogramm: "Dig a Pony", 10 Zeichen:

      v
     v> 
    v#  >
   "<     
  v <>"y"v>
 <v"Dig a P"
"^>:#,_@.>"no

Erläuterung

Ich nutzte WIRKLICH Befunges Wrap-Around-Trick und wählte "Dig a Pony" speziell, weil es ein Leerzeichen an der 6. Position hatte. Dies ermöglicht es dem Programmfluss, sich durch den Songnamen zu bewegen . Probieren Sie es im Online-Interpreter aus, um zu sehen, wie es funktioniert.

Hinweisprogramm: "If I Fell", 9 Zeichen:

< v"f I Fell"
 v>"I">:#,_@
  "raC yM "
   v"Drive


       .

(Der Punkt ist irrelevant und wird nur eingefügt, damit die anderen Zeilen angezeigt werden.)

Erläuterung

Die einzigen relevanten Zeilen sind hier die ersten beiden. Ich habe den Wrap-Around-Trick verwendet (der Anweisungszeiger wird sofort nach links gesendet), um ein weiteres Zeichen einzupressen. Die zweite Zeile gibt den Songnamen aus.

Kombiniert: "Mein Auto fahren", 12 Zeichen:

      v< v"f I Fell"v
     v> v>"I">:#,_@v> 
    v#  >"raC yM "v#  >
   "<     v"Drive"<     
  v <>"y"v>     v <>"y"v>
 <v"Dig a P"   <v"Dig a P"
"^>:#,_@.>"no "^>:#,_@.>"no
< v"f I Fell"v< v"f I Fell"
 v>"I">:#,_@v> v>"I">:#,_@
  "raC yM "v#  >"raC yM "
   v"Drive"<     v"Drive
         v <>"y"v>     
        <v"Dig a P"   
       "^>:#,_@.>"no 

Hier ist das Gleiche, aber mit Linien, die das Sechseck und die Dreiecke anzeigen.

       -----------------
      /v\< v"f I Fell"/v\
     /v> \v>"I">:#,_@/v> \
    /v#  >\"raC yM "/v#  >\
   /"<     \v"Drive/"<     \
  /v <>"y"v>\     /v <>"y"v>\
 /<v"Dig a P"\   /<v"Dig a P"\
/"^>:#,_@.>"no\ /"^>:#,_@.>"no\
-------------------------------
\< v"f I Fell"/v\< v"f I Fell"/
 \v>"I">:#,_@/v> \v>"I">:#,_@/
  \"raC yM "/v#  >\"raC yM "/
   \v"Drive/"<     \v"Drive/
    \     /v <>"y"v>\     /
     \   /<v"Dig a P"\   /
      \ /"^>:#,_@.>"no\ /
       -----------------

Erläuterung

Hier kommen die dritte und vierte Zeile des nach unten weisenden Dreiecks ins Spiel. Am Rand der beiden Dreiecke befinden sich mehrere Umleitungen, mit denen der Befehlszeiger durch diese beiden Zeilen bewegt und "Mein Auto fahren" auf den Stapel geschoben wird. Anschließend wird es mit dem >:#,_@Bit im nach oben zeigenden Dreieck ausgedruckt . Im Übrigen werden sowohl das linke als auch das rechte nach oben zeigende Dreieck verwendet.

Es könnte eine Möglichkeit geben, mehr von dem leeren Raum zu nutzen, aber ich denke, meine Zeit wird besser für andere Fragen aufgewendet. : P

El'endia Starman
quelle
Hmm. Die Regeln von PPCG lauten: Wenn ein Programm in mindestens einem Interpreter arbeitet, ist es gültig. Guter Ort.
El'endia Starman
Eine andere "Regel" von PPCG ist, dass der Interpreter die Sprache und nicht die Spezifikation definiert. Somit ist mein Befunge-Code im Wesentlichen gültig.
El'endia Starman
18

Python 2, Breite = 51

                         #print "Yellow Submarine" if id else "(Reprise)"   ##
                        #.##...............................................##.#
                       #...##.............................................##...#
                      #.....##...........................................##.....#
                     #.......##.........................................##.......#
                    #.........##.......................................##.........#
                   #...........##.....................................##...........#
                  #.............##...................................##.............#
                 #...............##.................................##...............#
                #.................##...............................##.................#
               #...................##.............................##...................#
              #.....................##...........................##.....................#
             #.......................##.........................##.......................#
            #.........................##.......................##.........................#
           #...........................##.....................##...........................#
          #.............................##...................##.............................#
         #...............................##.................##...............................#
        #.................................##...............##.................................#
       #...................................##.............##...................................#
      #.....................................##...........##.....................................#
     #.......................................##.........##.......................................#
    #.........................................##.......##.........................................#
   #...........................................##.....##...........................................#
  #.............................................##...##.............................................#
 #...............................................##.##...............................................#
print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#print "Sgt. Pepper's Lonely Hearts Club Band",;id=0
print "Yellow Submarine" if id else "(Reprise)"   ##print "Yellow Submarine" if id else "(Reprise)"   #
 #...............................................##.##...............................................#
  #.............................................##...##.............................................#
   #...........................................##.....##...........................................#
    #.........................................##.......##.........................................#
     #.......................................##.........##.......................................#
      #.....................................##...........##.....................................#
       #...................................##.............##...................................#
        #.................................##...............##.................................#
         #...............................##.................##...............................#
          #.............................##...................##.............................#
           #...........................##.....................##...........................#
            #.........................##.......................##.........................#
             #.......................##.........................##.......................#
              #.....................##...........................##.....................#
               #...................##.............................##...................#
                #.................##...............................##.................#
                 #...............##.................................##...............#
                  #.............##...................................##.............#
                   #...........##.....................................##...........#
                    #.........##.......................................##.........#
                     #.......##.........................................##.......#
                      #.....##...........................................##.....#
                       #...##.............................................##...#
                        #.##...............................................##.#
                         #print "Sgt. Pepper's Lonely Hearts Club Band",;id=0#

Ja, na ja ... Python.

Python-Kommentare beginnen mit #, daher sind die meisten Zeilen nur Kommentare. Für das nach oben gerichtete Dreieck ist das einzige, was ausgeführt wird

print "Sgt. Pepper's Lonely Hearts Club Band",;id=0

welche druckt Sgt. Pepper's Lonely Hearts Club Band.

Für das nach unten gerichtete Dreieck führen wir aus

print "Yellow Submarine" if id else "(Reprise)"

was druckt Yellow Submarine, da die funktion idwahr ist.

Wenn wir die Programme jedoch kombinieren, geschieht alles, was in der Reihenfolge der beiden obigen Zeilen geschieht. Da das Ende der ersten Zeile gesetzt ist id=0, was jetzt falsch ist, ist das Endergebnis, dass wir ein (Reprise)bis zum Ende heften und Sgt. Pepper's Lonely Hearts Club Band (Reprise)als unsere Ausgabe erhalten (Calvin sagte, dass dies in Ordnung ist ).

Sp3000
quelle
15
Das lässt mich mehr an den Imperial March denken als an jedes andere Beatles-Lied ...
Calvins Hobbys
6
Ich kann den TIE-Fighter-Soundeffekt hören, wenn ich nur diese Form
sehe
@ Calvin'sHobbies Hahaha. Tatsächlich!
Luis Mendo
17

Schneemann 1.0.2 , Breite = 13

      }?}///////////}
     ///"Get Back"////
    ///////////////////
   /////////////////////
  "Sun King//"[["Sun King
 "*"BirthdaysP/"*"Birthday
"]]8AaLsP[[///"]]8AaLsP[[//
?}///////////}?}///////////
 "Get Back"////"Get Back"/
  ///////////////////////
   /////////////////////
    //"[["Sun King//"[[
     sP/"*"BirthdaysP/
      /"]]8AaLsP[[///

Endlich! Eine Herausforderung, bei der Schneemann gedeihen kann! : D: D

Die Schrägstriche dienen hauptsächlich ästhetischen Zwecken und können größtenteils durch Leerzeichen ersetzt werden (dies würde es jedoch viel langweiliger erscheinen lassen). Für Kommentare sind einige Schrägstriche erforderlich.

Programm A (Ausgabe:) Birthday:

      }
     ///
    /////
   ///////
  "Sun King
 "*"Birthday
"]]8AaLsP[[//

Das ist ziemlich einfach. Das erste Zeichen ( }) richtet unsere aktiven Variablen ein, dann gibt es eine Reihe von Kommentaren / No-Ops. Dann speichert es den String "Sun King\n "und wirft ihn sofort ab (via *, indem es ihn in einem Permavar speichert, den wir nie benutzen). Dann speichert es "Birthday\n".

]]ist hier ein No-Op, da [[ foo ]]es sich bei Snowman um einen Blockkommentar handelt, aber da es [[vorher keine Übereinstimmung gibt ]](innerhalb von Programm A selbst), tut es einfach nichts. Dann 8AaLpackt die ersten 8 Zeichen des Strings, sPdruckt er und [[Kommentare aus dem Rest des Programms (weil auch hier gibt kein passender ist ]].

Programm B (Ausgabe:) Get Back:

?}///////////
 "Get Back"/
  /////////
   ///////
    //"[[
     sP/
      /

Das ist auch ziemlich unkompliziert. ?}ist äquivalent zu }( ?setzt einfach alle Variablen auf inaktiv, was hier ein No-Op ist, aber später wieder wichtig). Dann speichert es den String "Get Back", macht ein paar No-Ops ( //bis zum Zeilenende steht immer ein Kommentar) und druckt über sP.

Volles Programm

Ausgang ist, Sie haben es erraten, Sun King1 .

Schauen wir uns diese Zeile für Zeile an:

  • Linie 1

          }?}///////////}
    

    Dies setzt unsere aktiven Variablen, genau wie die vorherigen Programme (wir können jetzt sehen, dass das ?benötigt wird, um sie nicht einfach ein- und wieder auszuschalten }}). Der Rest der Zeile ist auskommentiert.

  • Zeilen 2-4

         ///"Get Back"////
        ///////////////////
       /////////////////////
    

    Bemerkungen...

  • Zeile 5

      "Sun King//"[["Sun King
    

    Hier speichern wir den String "Sun King//"und starten dann einen Blockkommentar. Dies überspringt im Wesentlichen alles bis zum nächsten ]].

  • Zeile 6

     "*"BirthdaysP/"*"Birthday
    

    Noch im Blockkommentar ...

  • Zeile 7

    "]]8AaLsP[[///"]]8AaLsP[[//
    

    Hier brechen wir für kurze Zeit aus dem Blockkommentar aus, um den Code auszuführen 8AaLsP. Dies wird tatsächlich aus Programm A wiederverwendet. Da ich alle Songs ausgewählt habe, die 8 Buchstaben lang sind, kann ich für das kombinierte Programm einfach denselben Code verwenden.

    Dann wird es etwas knifflig. Das nächste Mal, wenn wir aus dem Blockkommentar auftauchen, sehen wir es 8AaLsPerneut. Dieses Mal sind jedoch alle Variablen undefiniert (wir sphaben print im Consume-Modus aufgerufen , wodurch die Variablen entfernt werden). Da aalzwei Argumente erforderlich sind und diesmal nur eines ( 8), tritt ein Fehler auf und die Variablen bleiben unverändert.

    In ähnlicher Weise spder Begegnungen 8, erkennt es die falsche Art ist gedruckt werden, und die Blätter der Variablen wie.

  • Zeilen 8-13

    ?}///////////}?}///////////
     "Get Back"////"Get Back"/
      ///////////////////////
       /////////////////////
        //"[["Sun King//"[[
         sP/"*"BirthdaysP/
    

    Immer noch in diesem Blockkommentar stecken ...

  • Zeile 14

          /"]]8AaLsP[[///
    

    Schließlich versuchen wir, dieselbe print-first-8-chars-Sequenz erneut aufzurufen, und es schlägt erneut fehl, wodurch zwei weitere Fehler erzeugt werden. (Das 8bedeutet, dass die Variablen jetzt 8 8sind. Dies ist die richtige Anzahl von Variablen aal, aber immer noch nicht die richtigen Typen.)


1: sowie vier Laufzeitfehler SnowmanExceptionan STDERR, aber gemäß Meta spielt das keine Rolle .

Türknauf
quelle
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)Aber es macht es ein bisschen schwieriger zu
verstehen
14

> <> , width = 11

     /"yadhtri"\ /
           v"B"/   
        ?!;>ol      
  duJ yeH" /"eduJ yeH
 o   >l?!;   o   >l?!;
staC"/"klaw staC"/"klaw
"yadhtri"\ /"yadhtri"\ 
     v"B"/       v"B"/
  ?!;>ol      ?!;>ol 
   " /"eduJ yeH" /"e
       o   >l?!;   
      staC"/"klaw 

2D-Sprachen haben eine gute Zeit mit dieser Herausforderung.

Pfeil nach oben

     /


  duJ yeH
 o   >l?!;
staC"/"klaw

Der Programmablauf beginnt von links oben und verläuft nach rechts. Das wird nach oben /reflektiert, und da> <> toroidal ist, erscheinen wir wieder von unten. Wir schlagen dann eine andere an, /überlegen erneut und schieben die Zeichen klawstaCeinzeln im Zeichenfolgenmodus auf den Stapel "". Zum Schluss reflektieren wir nach oben und treffen eine >l?!;oSchleife, was der idiomatische Weg ist, den gesamten Stapel in> <> zu drucken.

Dies wird gedruckt Catswalk.

Pfeil nach unten

"yadhtri"\ 
     v"B"/
  ?!;>ol 
   " /"e

Im Prinzip dasselbe, indem Sie die Zeichen von Anfang an verschieben und mithilfe von Spiegeln und Pfeilen den Programmfluss steuern. Dies wird gedruckt Birthday.

Kombiniert

     /

  ?!;>ol      ?!;>ol 
     /"eduJ yeH" / 

Die relevanten Teile sind oben (ich habe viele Linien in der Mitte ausgeschnitten). Mit dem /Pfeil von oben nach oben spiegeln wir nach oben und drehen uns umher, aber da wir jetzt den Pfeil nach unten darunter haben, wird stattdessen ein Teil dieses Codes ausgeführt. Wir verschieben dann die relevanten Zeichen in den Stapel und verwenden die Ausgabeschleife vom Pfeil nach unten.

Dies wird gedruckt Hey Jude.

Sp3000
quelle
5

Python 2, Größe 21

Für dieses Programm ist ein ANSI-kompatibles Terminal erforderlich (DOS ANSI.SYS muss angegeben werden), da ich \x1b[2Jdie Konsole lösche UND den Cursor nach oben links bewege. Um dies mit anderen ANSI-Terminals kompatibel zu machen, drucken Sie \x1b[1J\x1b[H(dies kann immer noch in ein Sechseck der Größe 21 passen). Ich konnte diesen Teil nicht testen, da ich kein Terminal habe, das ANSI-Escape-Codes druckt.

Ich denke, das Programm sieht ziemlich cool aus, ähnlich dem radioaktiven Symbol (obwohl die ASCII-Schattierung impliziert, dass die Farben rückwärts sind) oder dem Symbol der Scharfschützenwaffe von Metroid Prime: Hunters.

Es tat fit in Größe 17, aber ich hatte vergessen , id=0in dem Pfeil nach oben. Ich glaube nicht, dass ich es wieder verkleinern kann, da das alles in einer Zeile sein muss ...

Auch Sp3000 wird die Idee zur Verwendung gutgeschrieben id.

          #exec('print"'       ##
         ###'\x1b[2J"+(id '   ####
        #####'and"Hey Ju'    ######
       #######'de"or"Ca'    ########
      #########'tswalk'    ##########
     ###########'")')     ############
    ##############       ##############
   ################     ################
  ##################   ##################
 #################### ####################
id=0;print"Birthday"##id=0;print"Birthday"#
exec('print"'       ##exec('print"'       #
 '\x1b[2J"+(id '   ####'\x1b[2J"+(id '   #
  'and"Hey Ju'    ######'and"Hey Ju'    #
   'de"or"Ca'    ########'de"or"Ca'    #
    'tswalk'    ##########'tswalk'    #
     '")')     ############'")')     #
      #       ###############       #
       #     #################     #
        #   ###################   #
         # ##################### #
          #id=0;print"Birthday"##

Aufwärtspfeil:

          #
         ###
        #####
       #######
      #########
     ###########
    #############
   ###############
  #################
 ###################
id=0;print"Birthday",

Pfeil runter:

exec('print"'       #
 '\x1b[2J"+(id '   #
  'and"Hey Ju'    #
   'de"or"Ca'    #
    'tswalk'    #
     '")')     #
      #       #
       #     #
        #   #
         # #
          #

"Hey Jude" ist einer meiner Lieblingslieder der Beatles, aber ich kenne wirklich nicht so viele. Ich habe die beiden anderen Songs, die ich benutze, noch nie gehört. Es ist kein Genre, das ich oft höre.

mbomb007
quelle
1
1. \x1b[2Jfunktioniert nur mit ANSI.SYS; es sollte nichts in anderen Terminals tun. Auch \x1b[;Herwartet eine ganze Zahl nach dem Semikolon. Verwenden Sie, um die Standardeinstellung für Zeile und Spalte auf 1 festzulegen \x1b[H. 2. \x1b[1J\x1b[Hund \x1b[H\x1b[Jsollte auf allen ANSI-Terminals funktionieren. 3. Auf Linux-Terminals können Sie \x1bcdas Terminal einfach mit zurücksetzen. 4. \x1bKann durch ein buchstäbliches ESC-Byte ersetzt werden, falls dies zur Verbesserung Ihrer Punktzahl beiträgt.
Dennis
@Dennis Danke, dass du das geklärt hast. Ich werde meine Punktzahl immer noch nicht verbessern können, da ich keine Möglichkeit finde, den Code des Aufwärtspfeils in mehrere Zeilen aufzuteilen.
mbomb007
2

C (gcc) , Basisbreite = 17

Oben, "Hey Jude"

        s
       ;//
      s;///
     main(//
    ){puts(//
   #define T//
  s?"Michell"//
 "e":"Hey Jud"//
"e");}///////////

Probieren Sie es online!

Unten "Streichholzschachtel"

s=1;/////////////
 #ifndef T//////
  main(){puts//
   ("Matchb"//
    "ox");}//
     # endif
      /////
       //\
        ;

Probieren Sie es online!

Sechseck, "Michelle"

        ss=1;/////////////s
       ;//#ifndef T//////;//
      s;///main(){puts//s;///
     main(//("Matchb"//main(//
    ){puts(//"ox");}//){puts(//
   #define T//# endif#define T//
  s?"Michell"///////s?"Michell"//
 "e":"Hey Jud"////\"e":"Hey Jud"//
"e");}///////////;"e");}///////////
s=1;/////////////ss=1;/////////////
 #ifndef T//////;//#ifndef T//////
  main(){puts//s;///main(){puts//
   ("Matchb"//main(//("Matchb"//
    "ox");}//){puts(//"ox");}//
     # endif#define T//# endif
      /////s?"Michell"///////
       //\"e":"Hey Jud"////\
        ;"e");}///////////;

Probieren Sie es online!

Gastropner
quelle
1

Gawk, Basislänge 15

Ich habe gerade herausgefunden, dass es mit mawk nicht funktioniert : /

Es ist nicht zu schwierig, aber als ich in den 70ern aufgewachsen bin und die Beatles immer noch überall auf Sendung sind, musste ich das beantworten. Zuerst dachte ich, awk sei nicht geeignet, aber dann kam es zu mir.

Da diese Skripte BEGIN- und / oder END-Blöcke enthalten, muss ihnen mitgeteilt werden, dass es keine Eingabe gibt, um den END-Block auszuführen. Dies kann erreicht werden, indem entweder Strg-D gedrückt wird, nachdem sie gestartet wurden, oder indem sie folgendermaßen gestartet werden:

awk -f script.awk </dev/null

was ich für bequemer halte. echo | awk -f script.awkwird auch funktionieren, aber wenn ich eine leere Zeile als Eingabe verwendet hätte, hätte ich dies ganz anders gemacht.

Nach oben zeigen, druckt für niemanden (Youtube Link)

       #
      # #
     #   #
    BEGIN {
   print n?#
  #         #
 n"So Tired":#
n="For No One"}

Der wesentliche Code ohne Kommentare ist dies. Da nes nicht definiert ist, gibt es "Für niemanden" aus, wenn es von selbst aufgerufen wird.

    BEGIN {
   print n?

 n"So Tired":
n="For No One"}

Zeigt nach unten und druckt Blackbird

END{a="Blackb"#
 a=n?_:a"ird"#
  printf a  #
   n="I'm "#
    if(a) #
     print
      } #
       #

Der wesentliche Code ist dies. Wenn ndefiniert wurde, gibt es nichts aus. Ich habe die nette Ausgabe mit einem Zeilenumbruch nach jedem Spurnamen verstärkt, weil ich den Raum dazu hatte und es in der Konsole besser aussieht. nwird dabei definiert; Das wird für das Hexagon benötigt.

END{a="Blackb"
 a=n?_:a"ird"
  printf a
   n="I'm "
    if(a)
     print
      }

Sechseck, druckt Ich bin so müde

       #END{a="Blackb"##
      # #a=n?_:a"ird"## #
     #   #printf a  ##   #
    BEGIN {n="I'm "#BEGIN {
   print n?#if(a) #print n?#
  #         #print#         #
 n"So Tired":#} #n"So Tired":#
n="For No One"}#n="For No One"}
END{a="Blackb"##END{a="Blackb"#
 a=n?_:a"ird"## #a=n?_:a"ird"#
  printf a  ##   #printf a  #
   n="I'm "#BEGIN {n="I'm "#
    if(a) #print n?#if(a) #
     print#         #print
      } #n"So Tired":#} #
       #n="For No One"}#

Der wesentliche Code. Jetzt wird endlich das Geheimnisvolle nausgenutzt. Da nin der ersten Zeile definiert ist, druckt das nach oben zeigende Dreieck die alternative Ausgabe und das nach unten zeigende Dreieck die Leere.

    BEGIN {n="I'm "
   print n?

 n"So Tired":
n="For No One"}
END{a="Blackb"
 a=n?_:a"ird"
  printf a  
   n="I'm "
    if(a) 
     print
      } 
Cabbie407
quelle