Piosenki Beatlesów i Sześciokąty

30

Napisz dwa programy w kształcie trójkąta (piramidy).

Pierwszy powinien być skierowanym do góry trójkątem tekstowym o minimalnej szerokości podstawy wynoszącej trzy znaki. Więc miałby taką strukturę

 X
XXX

lub

  X
 XXX
XXXXX

lub

   X
  XXX
 XXXXX
XXXXXXX

lub większy. Każdy z nich Xma zostać zastąpiony znakami twojego rzeczywistego kodu, którym może być cokolwiek oprócz terminatorów linii (więc Xmogą być spacjami). Wszystkie Xmuszą zostać zastąpione, a spacje i znaki nowej linii, które pomagają utworzyć kształt trójkąta, muszą pozostać bez zmian.

Drugi program musi mieć taki sam rozmiar i kształt jak pierwszy, z wyjątkiem tego, że trójkąt będzie skierowany w dół.

Więc jeśli wygląda twój pierwszy program

  X
 XXX
XXXXX

wtedy wyglądałby twój drugi program

yyyyy
 yyy
  y

gdzie każdy yjest znakiem, który musisz wypełnić swoim rzeczywistym kodem (prawdopodobnie innym niż Xkod). Spacje i znaki nowej linii również muszą pozostać takie same.

Twoim zadaniem jest napisanie tych programów w taki sposób, aby każdy z nich wypisał (w stdout lub najbliższą alternatywę) tytuł odrębnej piosenki Beatlesów , nie biorąc żadnego wkładu. Ten artykuł z Wikipedii posłuży jako nasza oficjalna lista piosenek dla The Beatles. Wyjście powinno być jednym z tytułów dokładnie takich, jak wymienione, np I Want You (She's So Heavy).

Jest to jednak dość łatwe, nawet w przypadku wymagań dotyczących dziwnego trójkąta. Więc stworzymy inny program z pierwszych dwóch, który musi wypisać kolejny tytuł piosenki.

Łącząc trzy kopie każdego z dwóch trójkątnych programów, możemy stworzyć trzeci program w kształcie sześciokąta.

Gdyby szerokość podstawowa pierwszego programu wynosiła trzy, wyglądałoby to tak:

 XyyyX
XXXyXXX
yyyXyyy
 yXXXy

Gdyby szerokość podstawy wynosiła pięć, wyglądałoby to tak:

  XyyyyyX
 XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
 yyyXXXyyy
  yXXXXXy

Ten program (uruchamiany ze spacjami i znakami nowej linii, jak inne) musi generować kolejny tytuł piosenki Beatlesów, podobnie jak dwa pierwsze programy. Również:

  • Twoje trzy programy muszą wyświetlać różne tytuły piosenek.
  • Dozwolone są tylko tytuły piosenek o długości ośmiu znaków lub dłuższych.
  • Możesz wybrać tylko jeden z nich Revolution, Revolution 1a Revolution 9ponieważ tytuły są bardzo podobne.
  • Musisz wybrać trzy ulubione piosenki Beatlesów. (Cóż, spróbuj .)

Pamiętaj, że wymagane są rzeczywiste programy. Funkcje nie są dozwolone. Odczytywanie własnego kodu źródłowego w dowolnym programie jest również niedozwolone.

Przykład

Jeśli twoim pierwszym programem był

  A
 AAA
AAAAA

może wyjść Across the Universe.

Potem twój drugi program

bbbbb
 bbb
  b

może wyjść Revolution.

Następnie połączone w program sześciokątny

  AbbbbbA
 AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
 bbbAAAbbb
  bAAAAAb

wyjście może być Get Back.

Punktacja

Wygrywa zgłoszenie o najmniejszej szerokości podstawy trójkąta. W prawdopodobnym przypadku więzi wygrywa zgłoszenie o największej zsumowanej długości trzech tytułów piosenek.

Hobby Calvina
źródło
2
Z pewnością rozstrzygający powinien być najlepszym wyborem z trzech piosenek? ;)
Doug McClean
1
Mam trudności z pisaniem wpisu w Pythonie bez kopiowania metody Sp3000 (nigdy nie myślałem, że będę narzekał na składniową spację!), Ale napisałem skrypt, aby złożyć dwa trójkąty w sześciokąt. Jeśli jest przydatny dla kogokolwiek innego, tutaj jest w Gist .
Tim Pederick,
@ mbomb007 Końcowe spacje nie będące częścią wzoru trójkąta są nieprawidłowe.
Calvin's Hobbies
@TimPederick Ponieważ nie mogłem zmusić sześciokąta do działania, napisałem skrypt Pythona, aby to zrobić, zaczynając od 2 ciągów wieloliniowych. Sprawdź tutaj, jeśli ktoś chce go użyć.
mbomb007,
@ mbomb007 Przepraszamy, ale spacja nie jest dozwolona, ​​ponieważ nie jest częścią tytułu. (Pozwoliłbym na końcowy znak nowej linii, ponieważ wiele wyciągów drukowanych dodaje jeden). Nie jestem pewien co do zwykłej zasady cofania, ale są ze mną w porządku.
Calvin's Hobbies

Odpowiedzi:

18

GolfScript, szerokość = 9 znaków, tytuły = 33 znaki

Sześciokąt

    "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"}

Prints Let It Be . (9 znaków)

Wypróbuj online.

Jak to działa

Token "Let It Be"w pierwszym wierszu popycha ciąg Let It Be na stosie.

Drugi wiersz zaczyna się }od nieudokumentowanego „super komentarza”, który natychmiast przerywa wykonanie.

Przed wyjściem GolfScript drukuje zawartość stosu.

Trójkąt X.

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

Drukuje Twist and Shout . (15 znaków)

Wypróbuj online.

Jak to działa

Pierwsze dwie linie wypychają ciąg "\n }", który polecenie ;odrzuca ze stosu.

Pozostałe linie zawierają znaki "Twi", "st an"i "d Shout", które spychają ciąg Twist i krzyczeć na trzy kawałki.

Przed wyjściem GolfScript drukuje zawartość stosu.

Trójkąt Y.

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

Drukuje wczoraj . (9 znaków)

Wypróbuj online.

Jak to działa

Tokeny Let, Ita Bena pierwszej linii są niezdefiniowane, więc nic nie robić.

Poniższe trzy linie zawierają znaki "Yeste", "rda"i "y", które spychają ciąg Wczoraj w trzech kawałkach.

}Na ostatniej linii nic nie robi; program i tak by się skończył.

Jeszcze raz GolfScript drukuje zawartość stosu przed wyjściem.

Dennis
źródło
21

Befunge -93, szerokość = 13 15 , tytuły = 31 24 znaków

Przerwa w zasilaniu zeszłej nocy uniemożliwiła mi zaktualizowanie tego, kiedy to rozgryzłem, ale udało mi się zmniejszyć szerokość trójkąta i zwiększyć długość utworu!

Program do wskazywania: „Dig a Pony”, 10 znaków:

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

Wyjaśnienie

NAPRAWDĘ skorzystałem z owijania Befunge i wybrałem „Dig a Pony” specjalnie, ponieważ miał miejsce na 6. pozycji. Pozwala to na przepływ programu w celu przejścia przez nazwę utworu. Wypróbuj go w tłumaczu online, aby zobaczyć, jak to działa.

Program skierowany w dół: „If I Fell”, 9 znaków:

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


       .

(Okres jest obcy i uwzględniany jest tylko po to, aby pojawiały się inne linie).

Wyjaśnienie

Jedyne istotne wiersze tutaj to dwie pierwsze. Użyłem sztuczki polegającej na zawijaniu (wskaźnik instrukcji jest natychmiast wysyłany w lewo), aby ścisnąć jeszcze jedną postać. Drugi wiersz wypisuje nazwę utworu.

Łącznie: „Jedź moim samochodem”, 12 znaków:

      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 

Oto to samo, ale z dodanymi liniami pokazującymi sześciokąt i trójkąty.

       -----------------
      /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\ /
       -----------------

Wyjaśnienie

Tutaj zaczynają działać trzecia i czwarta linia trójkąta skierowanego w dół. Na krawędzi obu trójkątów znajduje się kilka przekierowań, które służą do przesuwania wskaźnika instrukcji przez te dwie linie i popychania „Jedź moim samochodem” na stos. Następnie jest drukowany za pomocą >:#,_@bitu w trójkącie skierowanym w górę. Nawiasem mówiąc, używane są zarówno lewe, jak i prawe trójkąty skierowane w górę.

Tam może być jakiś sposób, aby wykorzystać więcej pustej przestrzeni, ale myślę, że mój czas jest lepiej wydać na inne pytania. : P

El'endia Starman
źródło
Hmm Zasady PPCG są takie, że jeśli program działa w co najmniej jednym tłumaczu, to jest ważny. Jednak dobre miejsce.
El'endia Starman
Inną „zasadą” PPCG jest to, że interpreter określa język, a nie specyfikację. Zatem mój kod Befunge jest zasadniczo ważny.
El'endia Starman
18

Python 2, szerokość = 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#

Tak, cóż ... Python.

Komentarze w Pythonie zaczynają się od #, więc większość wierszy to tylko komentarze. W przypadku trójkąta skierowanego w górę jedyne, co wykonuje, to

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

który drukuje Sgt. Pepper's Lonely Hearts Club Band.

Dla trójkąta skierowanego w dół wykonujemy

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

który drukuje Yellow Submarine, ponieważ funkcja idjest prawdziwa.

Kiedy jednak połączymy programy, wszystko, co się stanie, to powyższe dwa wiersze w sekwencji. Ponieważ na końcu pierwszego zestawu linii id=0, który jest teraz falsy, końcowy wynik jest taki, że sczepiamy (Reprise)go do końca, uzyskując wynik końcowy Sgt. Pepper's Lonely Hearts Club Band (Reprise)(Calvin powiedział, że jest w porządku ).

Sp3000
źródło
15
To sprawia, że ​​myślę o Imperial March bardziej niż jakakolwiek piosenka Beatlesów ...
Hobby Calvina
6
Słyszę efekt dźwiękowy myśliwca TIE, po prostu widząc ten kształt
Fatalize
@ Calvin'sHobbies Hahaha. W rzeczy samej!
Luis Mendo,
17

Bałwan 1.0.2 , szerokość = 13

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

Wreszcie! Wyzwanie, w którym Bałwan może się dobrze rozwijać! : D: D

Cięcia służą głównie do celów estetycznych, a większość z nich można zastąpić spacjami (ale to by wyglądało o wiele nudniej). W przypadku komentarzy konieczne są niektóre ukośniki.

Program A (wyjście:) Birthday:

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

Ten jest dość prosty. Pierwszy znak ( }) ustawia nasze aktywne zmienne, potem jest mnóstwo komentarzy / no-ops. Następnie zapisuje ciąg "Sun King\n "i natychmiast go odrzuca (poprzez *przechowywanie go w permavar, którego nigdy nie używamy). Następnie przechowuje "Birthday\n".

]]jest tutaj nieobecny, ponieważ [[ foo ]]jest komentarzem blokowym w Snowman, ale ponieważ nie ma [[wcześniejszego dopasowania ]](w samym programie A), po prostu nic nie robi. Następnie 8AaLpobiera pierwsze 8 znaków ciągu, sPdrukuje go i [[komentuje resztę programu (ponieważ znowu nie ma pasującego tekstu) ]].

Program B (wyjście:) Get Back:

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

Ten jest również dość prosty. ?}jest równoważne }( ?po prostu ustawia wszystkie zmienne na nieaktywne, co nie jest tu opcją, ale znowu, ważne później). Następnie zapisuje ciąg "Get Back", wykonuje kilka operacji bez ( //do końca linii jest zawsze komentarzem) i drukuje za pośrednictwem sP.

Pełny program

Zgadłeś, że Sun King1 .

Spójrzmy na tę linię po linii:

  • Linia 1

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

    To ustawia nasze aktywne zmienne, podobnie jak poprzednie programy (widzimy teraz, że ?jest to potrzebne, aby po prostu nie włączać ich, a następnie wycofywać za pomocą }}). Reszta linii została skomentowana.

  • Linie 2-4

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

    Komentarze ...

  • Wiersz 5

      "Sun King//"[["Sun King
    

    Tutaj przechowujemy ciąg "Sun King//", a następnie rozpoczynamy komentarz blokowy. To zasadniczo pomija wszystko do następnego ]].

  • Linia 6

     "*"BirthdaysP/"*"Birthday
    

    Wciąż w komentarzu do bloku ...

  • Linia 7

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

    Tutaj wybijamy komentarz blokowy na krótki czas, aby wykonać kod 8AaLsP. Jest to faktycznie ponownie użyte z programu A. Ponieważ wybrałem wszystkie utwory o długości 8 liter, mogę po prostu użyć tego samego kodu dla połączonego programu.

    Potem staje się to trochę trudne. Następnym razem, gdy wyjdziemy z komentarza do bloku, zobaczymy 8AaLsPponownie. Tym razem jednak wszystkie zmienne są niezdefiniowane (wywołaliśmy sp, drukuj, w trybie konsumpcji, który pozbywa się zmiennych). Ponieważ aalwymaga dwóch argumentów, a tym razem ma tylko jeden ( 8), błąd i pozostawia zmienne bez zmian.

    Podobnie, spnapotyka 8, zdaje sobie sprawę, że jest to niewłaściwy typ do wydrukowania i pozostawia zmienne bez zmian.

  • Linie 8-13

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

    Wciąż utknąłem w komentarzu blokowym ...

  • Linia 14

          /"]]8AaLsP[[///
    

    Na koniec próbujemy jeszcze raz wywołać tę samą sekwencję print-first-8-chars, a ona ponownie zawiedzie, powodując kolejne dwa błędy. ( 8Oznacza to, że zmienne są teraz 8 8, co jest na razie poprawną liczbą zmiennych aal, ale nadal nie są poprawnymi typami.)


1: jak również cztery błędy w środowisku wykonawczym SnowmanExceptiondo STDERR, ale według meta nie ma to znaczenia .

Klamka
źródło
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)Ale to sprawia, że ​​trudniej jest zrozumieć, co się dzieje ...
curiousdannii
14

> <> , szerokość = 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 

Języki 2D dobrze się bawią z tym wyzwaniem.

Strzałka w górę

     /


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

Przebieg programu rozpoczyna się od lewego górnego rogu, przesuwając w prawo. /Odbija się, a od> <> to toroidalny my ponownie od dołu. Następnie uderzamy kolejnego /i zastanawiamy się ponownie, i popychamy postacie klawstaCjeden po drugim na stos w ""trybie strunowym . Na koniec odbijamy do góry i uderzamy w >l?!;opętlę, co jest idiomatycznym sposobem drukowania całego stosu w> <>.

To drukuje Catswalk.

Strzałka w dół

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

Zasadniczo to samo: wypychanie postaci od samego początku i używanie luster i strzałek do kierowania przebiegiem programu. To drukuje Birthday.

Łączny

     /

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

Odpowiednie części są powyżej (wyciąłem wiele linii na środku). Używając /strzałki w górę, odbijamy w górę i zawijamy, ale ponieważ mamy teraz strzałkę w dół pod spodem, zamiast tego wykonywana jest część tego kodu. Następnie wypychamy odpowiednie znaki na stos i ponownie używamy pętli wyjściowej od strzałki w dół.

To drukuje Hey Jude.

Sp3000
źródło
5

Python 2, rozmiar 21

Ten program wymaga terminala kompatybilnego z ANSI ( konkretnie DOS ANSI.SYS ), ponieważ używam \x1b[2Jdo czyszczenia konsoli ORAZ przesunięcia kursora w lewy górny róg . Aby było to kompatybilne z innymi terminalami ANSI, drukuj \x1b[1J\x1b[H(nadal może zmieścić się w sześciokącie wielkości 21). Nie byłem w stanie przetestować tej części, ponieważ nie mam terminala, który drukuje kody specjalne ANSI.

Myślę, że program wygląda całkiem fajnie, podobnie jak radioaktywny symbol (chociaż cieniowanie ASCII oznacza, że ​​kolory są odwrócone) lub ikona broni snajperskiej od Metroid Prime: Hunters.

To nie zmieścić się w rozmiarze 17, ale zapomniałem id=0w strzałka w górę. Nie sądzę, żebym mógł to zmniejszyć, ponieważ to wszystko musi być na jednej linii ...

Ponadto kredyt trafia do Sp3000 za pomysł użycia 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"##

Strzałka w górę:

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

Strzałka w dół:

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

„Hey Jude” to jedna z moich ulubionych piosenek Beatlesów, ale tak naprawdę nie znam tak wielu. Nigdy nie słyszałem dwóch pozostałych piosenek, których używam. To nie jest gatunek, którego często słucham.

mbomb007
źródło
1
1. \x1b[2Jdziała tylko z ANSI.SYS; nie powinien nic robić w innych terminalach. Ponadto, \x1b[;Hoczekuje się całkowitą po średnikiem. Aby ustawić domyślną wartość wiersza i kolumny na 1, użyj \x1b[H. 2. \x1b[1J\x1b[Hi \x1b[H\x1b[Jpowinien działać na wszystkich terminalach ANSI. 3. W terminalach Linux można po prostu użyć \x1bcdo zresetowania terminala. 4. \x1bmoże zostać zastąpiony dosłownym bajtem ESC, w przypadku, gdy pomaga to poprawić wynik.
Dennis,
@Dennis Dzięki za wyjaśnienie. Nadal nie będę w stanie poprawić mojego wyniku, ponieważ nie mogę znaleźć sposobu na rozbicie kodu strzałki w górę na wiele wierszy.
mbomb007,
2

C (gcc) , szerokość podstawy = 17

Top „Hej Jude”

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

Wypróbuj online!

Na dole „Matchbox”

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

Wypróbuj online!

Sześciokąt, „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");}///////////;

Wypróbuj online!

gastropner
źródło
1

gawk, długość podstawy 15

Właśnie się dowiedziałem, że nie działa z mawk : /

Nie jest to zbyt trudne, ale dorastając w latach 70., gdy The Beatles wciąż byli wszechobecni na antenie, musiałem na to odpowiedzieć. Najpierw myślałem, że awk nie pasuje, ale potem przyszło mi do głowy.

Ponieważ skrypty te zawierają bloki BEGIN i / lub END, należy powiedzieć, że nie będzie danych wejściowych do wykonania bloku END. Można to osiągnąć, naciskając Ctrl-D po uruchomieniu lub uruchamiając je w następujący sposób:

awk -f script.awk </dev/null

co moim zdaniem jest wygodniejsze. echo | awk -f script.awkbędzie również działać, ale gdybym użył pustej linii jako danych wejściowych, zrobiłbym to zupełnie inaczej.

Wskazuje w górę, drukuje For No One (link na Youtube)

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

Podstawowym kodem bez komentarzy jest to. Ponieważ nnie jest zdefiniowany, drukuje „For No One”, jeśli jest wywoływany sam.

    BEGIN {
   print n?

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

Wskazując w dół, drukuje Blackbird

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

Podstawowym kodem jest to. Jeśli nzostał zdefiniowany wcześniej, nic nie drukuje. Wymusiłem ładne wyjście z nową linią po nazwie każdego utworu, ponieważ miałem na to miejsce i ładniej wygląda na konsoli. njest określony w procesie; potrzebne do Hexagon.

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

Sześciokąt, odciski Jestem bardzo zmęczony

       #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"}#

Niezbędny kod. Teraz wreszcie nwykorzystano to tajemnicze . Ponieważ ntrójkąt wskazujący w górę jest zdefiniowany w pierwszym wierszu, wypisuje alternatywne wyjście, a trójkąt skierowany w dół drukuje pustkę.

    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
źródło