ASCII Uçak Afiş


11

İki giriş Verilen - bunlardan biri (yeni satır hariç, uzay dahil) boş olmayan bir yazdırılabilir ASCII dize, seçtiğiniz (iki ayrı, tutarlı değerlerin diğer varlık biri 1 / 0, l / r, left / rightvs.) - ASCII sanat uçak çıktı sola veya sağa işaret eden dizenin afişi. Tutarlılık açısından, ben kullanarak olacağım leftve rightbu meydan okuma açıklaması boyunca.

Düzlem ya |-DI>-/( left) ya da \-<ID-|( right) şeklindedir. Büyük başlık açık olduğundan, giriş dizesinin soldan sağa ( left) veya sağdan sola ( right) boşluklarla ayrılmış ve bir şekil kutusuyla çevrelenmiş karakterlerden oluşur

    /--/
---<  <
    \--\

veya

\--\
 >  >---
/--/

Mesajın başlangıcı / sonu ile >, <karakterleri arasında bir boşluk olması gerektiğini unutmayın .

Örneğin, mesaj HAPPY BIRTHDAY!ve yön şöyledir left:

           /-------------------------------/
|-DI>-/---< H A P P Y   B I R T H D A Y ! <
           \-------------------------------\

İşte mesaj PPCGve yön right. Banner'ın bu tarafından görüntülendiğinde harflerin "geriye" göründüğüne dikkat edin:

\---------\
 > G C P P >---\-<ID-|
/---------/

kurallar

  • Karakterlerin kendileri doğru sıralandığı sürece, öndeki satır veya boşluk satırları isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Mümkünse, diğer kişilerin kodunuzu deneyebilmesi için lütfen bir çevrimiçi test ortamına bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu bu nedenle tüm olağan golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.


2
JavaScript, 4 bayt: eval- Sol için sola bakan bir düzlem ve sağ için sağa dönük bir düzlem oluşturan bir program girin.
darrylyeo

Yanıtlar:


6

JavaScript (ES6), 141 138 bayt

Dize ve yön, körili sözdizimi ile girilir.
'/\n|-DI>-/---< 'sol '/\n|-DI<-\\---> 'için, sağ için.

t=>p=>(r=`${s='           '}/${_='-'.repeat(t.length*2+1)}${p}${[...t].join` `} ${d=p[12]} 
${s}\\${_}\\`,d>'<'?[...r].reverse().join``:r)


Ha, çıktının bir bölümünü kodlamak zor bir boşluktan yararlanıyor gibi görünüyor, ancak yazılı olarak meydan okumaya dayanarak iyi görünüyor. Zeki!
Rick Hitchcock

4
@RickHitchcock Nihai boşluk, evalseçtiğiniz iki değer olarak sadece sol ve sağ fonksiyon kaynaklarını sağlar. (Bu konuda bir meta olduğunu düşündüm ama bulamıyorum.)
Neil

1
@Neil eval"Hile" açıkça belirtilmese bile, ruhtaki bu boşluk olabilir. Ancak bu cevap biraz zekidir.
AdmBorkBork

Evet, ciddi bir cevap olarak mesaj göndermeyieval tartışıyordum . Bu gibi gelecekteki zorluklar için bir çözüm, bayt sayımının bir parçası olarak girdileri dahil etmek olabilir.
darrylyeo

4

Perl 5 , 149 +1 (-p) = 150 bayt

$d=<>;chomp;$_=($q=$"x11 .'/'.'-'x(1+2*length)."/\n").'|-DI>-/---< '.s/./$& /gr."<\n".$q=~y|\\/|/\\|r;if($d){y|<>|><|;$_=reverse;s/>/ >/;s|-/-|-\\-|}

Çevrimiçi deneyin!

İki hat girişi. Birincisi mesaj. İkincisi sol için 0, sağ için 1'dir.


4

V , 73 , 65 bayt

Ó./& 
É ÄÒ-ys$/YGpr\$.11>Hj|R|-DI>-/³-<A< ÀñkæG|æ}-r>$BR>³-\-<

Çevrimiçi deneyin!

En büyük puan değil, ama bunun neredeyse yarısı çıktıyı tersine çevirmekten geliyor.

HexDump:

00000000: d32e 2f26 200a c920 c4d2 2d79 7324 2f59  ../& .. ..-ys$/Y
00000010: 4770 725c 242e 3131 3e48 6a7c 527c 2d44  Gpr\$.11>Hj|R|-D
00000020: 493e 2d2f b32d 3c1b 413c 201b c0f1 6be6  I>-/.-<.A< ...k.
00000030: 477c e616 7d2d 723e 2442 523e b32d 5c2d  G|..}-r>$BR>.-\-
00000040: 3c                                       <

Dizgiyi arabelleğe girdi olarak 0, sola ve 1sağa komut satırı bağımsız değişkenleri olarak alır.



4

Kömür , 44 40 39 35 bayt

|-DI>-/³↗<→/-LηLη↙¹←< ¿N↷⁴‖T⮌⪫η ‖B↓

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. İlk giriş sağ için 1 ve sol için 0, ikincisi banner dizesidir. Düzenleme: Kaydedilen 1 bayt kullanarak ReflectButterfly(:Up) olarakReflectButterfly(:Down) henüz imleç konumlandırma hata vardır, ama baskı yönünü ters çevirerek başka bir 4 bayt kaydedildi ve şimdi kullandığım hangi önemli değildir. 38 34 Banner yansıtmaya izin veriliyorsa 32 bayt sürüm:

|-DI>-/³P⪫⪫<<η ↘→\-LηLη↖¹‖B↑¿N‖T

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. İlk giriş sağ için 0 ve sol için 1'dir. Açıklama:

|-DI>-/

Düzlemi yazdırın.

³↗<→/-LηLη↙¹←< 

Kutunun üst yarısını yazdırın (sondaki boşluğu not edin).

¿N↷⁴‖T

İkinci giriş sıfırdan farklıysa, yazdırma yönünü tersine çevirin, aksi takdirde düzlemi ve kutuyu yansıtın.

⮌⪫η 

İletiyi fazladan boşluk bırakarak yazdırın (sondaki boşlukları not edin). İmleç, kutunun uzak ucundan düzlemdedir, bu nedenle iletinin ters çevrilmesi gerekir.

‖B↓

Kutunun alt yarısını almayı düşünün.


Ayrıntılı sürümde sorunlar var gibi görünüyor.
Outgolfer Erik

@EriktheOutgolfer Deverbosifier son zamanlarda kırıldı; TIO'nun henüz düzeltmesi yok gibi görünüyor.
Neil

2

Jöle , 68 65 bayt

“/\<“\/>”y
³K“|-DI>-/---< “ < ”j
LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡

Çevrimiçi deneyin!

Sağ için 1, sol için 0 alır.

@JonathanAllan sayesinde -3 bayt ( her zaman unuttuğum grrAB+ aynı şeyi yapar B+@A)


³K“|-DI>-/---< “ < ”jbir bayt kaydeder; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡aynı şekilde başka 2 tane daha kaydeder.
Jonathan Allan

1

Kömür , 56 bayt

Tamamen insan ve Outgolfer Erik sayesinde -8 bayt !

≔⪫S θ≔⁺Lθ²η× ¹¹/η/⸿|-DI>-/³<× η<‖B↓FN«‖TM⁺η³→≔⮌θθ»↑↑Mη←θ

Çevrimiçi deneyin!

Dzaima'nın bahsettiği vakaları düzeltmek bayt sayımı üzerinde oldukça sıkıntılıydı . Gibi karakterleri tersine çevirmemize izin verilirse 36 bayt<Ve/ .


1
Python'da ' '.join(s)çalışır. Elbette bu Kömürde kullanılabilir mi?
totallyhuman

1
@totallyhuman Joindizelerde de çalışır.
Outgolfer Erik

Umm, bence bunu gerçekten insanlıktan çıkardı.
Outgolfer Erik

@EriktheOutgolfer Ah, @ totallyhuman'ın önerisini Kömürdeki Python'lara çağrı yapmak olarak yanlış yorumladım ' '.join. İkinize de kredi vereceğim.
notjagan

Ast işlemciyi kırdınız ...
Neil



1

PHP, 175 bayt

[,$d,$s]=$argv;$f=str_repeat("--",strlen($s));$r="\-$f\           
 ".join(" ",str_split("><"[$d].$s)).($d?" <---/->":" >---\-<")."ID-|
/-$f/           ";echo$d?strrev($r):$r;

İle çalıştırın -nr= ilk argüman, 0sağa dönük veya 1sola ve ikinci argüman = metin
veya çevrimiçi denemek .



1

Corea , 51 bayt

"u *:>ip.j:l)X-'/S:>"
|-DI>-/---< V< 
"h}>>`tHL`idF

Çevrimiçi deneyin!

açıklama

Program birkaç bölümden oluşmaktadır:

1: Başlatma

"u *:>ip.j:l)X-'/S:>"
"..................."   execute the inside as code
 u                      repeat
   *                    a space, 11 times
    :                   duplicate this string
     >                  write this string to the content field
      i                 take a line of input
       p                push a space
        .j              insert that space after every character
          :l)           get (length(str) + 1)
             X-         repeat a hyphen that many times
               '/       push the "/" character
                 S      surround that string with the above character
                  :>    duplicate and write that string to the content field

2: ham metin

İçerik alanına aşağıdaki metin verilir:


|-DI>-/---< V<

3: postamble

"h}>>`tHL`idF
"               execute until the end of the file
 h              mirror the previous string horizontally
  }             move the modified input string to the front of the stack
   >>           write the top two strings to the content field
     `   `id    do the inside `i`nput times
      tH        reflect the content field horizontally and vertically
        L       reverse the input string
            F   save the input string in a field (default: V)
                this replaces all Vs in the code with the input string

0

Excel VBA, 198 Bayt

Dan dize olarak girdi alır Anonim VBE derhal pencere fonksiyonu [A1]aralığından ve int düzlem solda olduğunu gösterir ve düzlem sağda olduğunu belirtir.[B1]10

b=[B1]:a=StrConv(IIf(b,[A1],StrReverse([A1])),64):j=[Rept("-",2*Len(A1)+1)]:k="/"&j &"/":l="\"&j &"\":s=Space(11):?IIf(b,s &k,l):?IIf(b,"|-DI>-/---< "," > ")a;IIf(b,"<",">---\-<ID-|"):?IIf(b,s &l,k)

0

Google E-Tablolar, 210 Bayt

Giriş girişini [A1] ve int [B1] aralığında dize olarak alan anonim çalışma sayfası işlevi; burada 1, düzlemin solda olduğunu ve 0, düzlemin sağda olduğunu gösterir.

=If(B1,"           /","\")&Rept("-",2*Len(A1)+1)&If(B1,"/
","\
")&If(B1,"|-DI>-/---< "," > ")&RegexReplace(A1,"(.)","$1 ")&If(B1,"<
",">---\-<ID-|
")&If(B1,"           \","/")&Rept("-",2*Len(A1)+1)&If(B1,"\","/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.