ASCII direkleri inşa etmelisin!


24

Benim anagolf gönderimden gönderilen haç (not: spoiler içerebilir, post mortem).

Aşağıdaki metni tam olarak çıktılayın.

  • Her satırda ek sonda boşluk bırakabilir ve yeni satırları da sonlandırabilirsiniz.
  • Bayt cinsinden en kısa kod kazanır.
                                                
                                              !"!
                                             "#$#"
                                            #$%&%$#
                                           $%&'('&%$
                                          %&'()*)('&%
                                         &'()*+,+*)('&
                                        '()*+,-.-,+*)('
                                       ()*+,-./0/.-,+*)(
                                      )*+,-./01210/.-,+*)
                                     *+,-./012343210/.-,+*
                                    +,-./0123456543210/.-,+
                                   ,-./01234567876543210/.-,
                                  -./0123456789:9876543210/.-
                                 ./0123456789:;<;:9876543210/.
                                /0123456789:;<=>=<;:9876543210/
                               0123456789:;<=>?@?>=<;:9876543210
                              123456789:;<=>?@ABA@?>=<;:987654321
                             23456789:;<=>?@ABCDCBA@?>=<;:98765432
                            3456789:;<=>?@ABCDEFEDCBA@?>=<;:9876543
                           456789:;<=>?@ABCDEFGHGFEDCBA@?>=<;:987654
                          56789:;<=>?@ABCDEFGHIJIHGFEDCBA@?>=<;:98765
                         6789:;<=>?@ABCDEFGHIJKLKJIHGFEDCBA@?>=<;:9876
                        789:;<=>?@ABCDEFGHIJKLMNMLKJIHGFEDCBA@?>=<;:987
                       89:;<=>?@ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA@?>=<;:98
                      9:;<=>?@ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA@?>=<;:9
                     :;<=>?@ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA@?>=<;:
                    ;<=>?@ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA@?>=<;
                   <=>?@ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA@?>=<
                  =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA@?>=
                 >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>
                ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?
               @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@
              ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA
             BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCB
            CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDC
           DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFED
          EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFE
         FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGF
        GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHG
       HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIH
      IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJI
     JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJ
    KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLK
   LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONML
  MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONM
 NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPON
OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPO

3
Kasıtlı bir ilk boşluk sadece çizgi var mı?
AdmBorkBork

9
@AdmBorkBork bu bir boşluk çünkü ilk ASCII char lol
HyperNeutrino

2
@ the4kman ve <=>=<balık.
pizzapants184

4
Bunun “ASCII Direklerini İnşa Etmelisiniz!” Başlıklı olmamasının bir nedeni var mı?
mattdm

3
@ mattdm Buraya sadece HNQ listesinden, unvanı nedeniyle oy vermek için geldim. Güzel bitti.
Todd Wilcox

Yanıtlar:


4

Tuval , 15 14 bayt

0c[C²[j}¹m]/││

Burada dene!

Bunu yaparken , Canvas'ın bir şekilde ASCII / unicode için daha önce hiç bir yerleşik özelliği bulunmadığından, bir çift dahili ( & ) ekledim .

Açıklama (bazı karakterleri monospace bakmak için değiştirildi):

0c              push the charcode of "0" - 48
  {       ]     map over 1..48
   C              push the ASCII characters
    ²[ ]          repeat by the counter (0-indexed)
      j             remove the last character
        ¹m        mold to the length of the counter
           /    pad each line with spaces so it looks like a diagonal
            ││  palindromize the whole thing horizontally

16

PowerShell , 73 bayt

' '*48;46..0|%{" "*$_+-join[char[]](($x=79-$_)..($y=$x+$j++)+(++$y)..$x)}

Çevrimiçi deneyin!

Birinci boşluk sadece bir satır sonucu, daha sonra döngüler 46için 0. Her yineleme, karşılık gelen boşluk sayısını ve daha sonra bazı hesaplamalar aracılığıyla uygun sembollerin bir dizisini -joinbirlikte charverir.


1
İlk satırları 47 boşluk ve ardından boşluk karakteri olarak değerlendirerek bazı hesaplamaları kaydedebilir misiniz?
Riking

@Riking Bunu yapmak için, char-array'in 3 veya daha fazla yerine sadece bir öğe oluşturmak için nasıl oluşturulduğuna dair özel bir durum gerekecektir. Sonuç olarak, yalnızca boşluk satırının tamamen ayrı olarak özel olması daha kısadır.
AdmBorkBork,

11

Kömür , 13 bayt

E⁴⁸⮌✂γι⊕⊗ι‖O←

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

 ⁴⁸             Literal 48
E               Map over implicit range
      ι  ι      Current index
        ⊗       Doubled
       ⊕        Incremented
     γ          Printable ASCII
    ✂           Slice
   ⮌            Reverse
                Implicitly print each slice on separate lines
          ‖O←   Reflect with overlap

5
Çıktı bana yanlış geliyor.
Bay Xcoder

1
@ Mr.Xcoder Ugh, klasik off-by-1 hata ...
Neil

8

Python 2,73 bayt

i=48
while i:i-=1;r=range(79-i,127-i*2);print' '*i+bytearray(r+r[-2::-1])

Çevrimiçi deneyin! Anarşi golfünden çarpılmış ( gönderimime bakınız ).

Hızlı otopsi muayenesinde: XNOR ve dianne keşfetti tam aynı çözüm . ebicochneal mitchlerin 70 byte'a yükselttiği 71 byte'lık bir çözüm sundu . Bir "mevcut çizgi" değişkenini koruyarak ve bunu akıllıca güncelleyerek ( uzun) veya (daha uzun olan) tamamen uğraşmaktan kaçınırlar .bytearray''.join(map(chr,…))





4

Ortak Lisp , 110 bayt

(dotimes(i 48)(dotimes(j 96)(princ(if(>(abs(- j 48))i)" "(code-char(+(-(* i 2)(abs(- j 48)))32)))))(princ"
"))

Çevrimiçi deneyin!

açıklama

(dotimes(i 48)                   ;; for i from 0 up to 47
    (dotimes(j 96)               ;; for j from 0 up to 95
        (princ                   ;; print
            (if(>(abs(- j 48))i) ;; if abs(j - 48) > i
                " "              ;; print " "
                (code-char(+(-(* i 2)(abs(- j 48)))32)) ;; else print appropriate character
            )
        )
    )(princ"
") ;; print newline
)

3

VBA, 71 bayt

Giriş yapmayan ve konsola çıkan anonim bir VBE acil durum penceresi işlevi.

For i=0To 47:?Spc(47-i);:For j=-i To i:?Chr(32-Abs(j)+2*i);:Next:?:Next

3

Ruby , 70 bayt

s=[*?\s..?~]*'';48.times{|i|puts s[i,i+1].rjust(48)+s.reverse[-2*i,i]}

Çevrimiçi deneyin!

Yazdırılabilir tam ASCII dizesini oluşturur ve ardından gereken ileri (boşluklarla doldurulmuş) + geriye doğru dilimlerini yazdırır.



2

C (gcc), 117 bayt

c;i;main(){for(i=0;i<48;++i){for(c=2*i-15;c<32+2*i;++c)putchar(c>31+i?c:32);for(;c>31+i;--c)putchar(c);putchar(10);}}

Çevrimiçi deneyin!

Ungolfed:

int ch;
int row;
int main(void) {
    for (row = 0; row < 48; ++row) {
        for (ch = 2*row-15; ch < 32 + 2*row; ++ch) {
            // The first character in the row is 2*row - 15 (row is zero-indexed)
            if (ch > 31+row)
                putchar(ch);
            else
                // If the current character is not in the pyramid, mask it with a space
                putchar(' ');
        }
        for (; ch > 31+row; --ch) {
            // Finish the other side of the pyramid
            putchar(ch);
        }
        putchar('\n');
    }
}




2

T-SQL, 153 bayt

DECLARE @ INT=33,@t CHAR(95)=''a:PRINT @t;
SET @t=LEFT(STUFF(STUFF(@t,63-@/2,2,''),46,0,CHAR(@-1)+CHAR(@)+CHAR(@+1)+CHAR(@)),33+@/2)
SET @+=2IF @<128GOTO a

İade sadece gösterim içindir.

Tam dizeyi (163 karakter) önceden oluşturan bir döngü ve anında oluşturmak için iç içe bir döngü (168 karakter) dahil olmak üzere birkaç fikir denedim, ancak bu en kısa sürdü.

Temel olarak, her döngü dizenin ortasına 4 yeni karakter sıkıştırıyorum , sonra SQL STUFF()işlevini kullanarak her iki uçtan ekstraları kesiyorum .

Biçimlendi ve açıklandı:

DECLARE @ INT=33,                      --Using a single counter for both rows and CHAR
        @t CHAR(95)=''                 --a non-null CHAR field will pre-fill with spaces
a:                                     --GOTO loop, shorter than a WHILE
    PRINT @t                           --duh
    SET @t = LEFT(                     --lops off the character at the end
            STUFF(                     --crams 4 new characters in the middle
            STUFF(@t, 63-@/2, 2, '')   --snips out a space and the leading character
                 ,46, 0, CHAR(@-1) + CHAR(@) + CHAR(@+1) + CHAR(@))
                 ,33 + @/2)            --rest of the LEFT()
    SET @+=2
IF @<128 GOTO a

2

J , 47 44 bayt

(,.~}:@|."1)(1+i.48)([|.@{.}.)"0 1 u:31+i.96

Çevrimiçi deneyin!

Şablon için Conor O'Brien'a teşekkürler! Geçersiz çözümü gösteren FrownyFrog'a teşekkür ederiz.


1
Belki bu daha kolay değiştirilebilir: Çevrimiçi deneyin!
Conor O'Brien,

@Conor O'Brien - Şablon için teşekkürler, bağlantıyı güncelledim.
Galen Ivanov

En üste fazladan bir satır yazdırır.
FrownyFrog

@ FrownyFrog Oh, sadece şimdi izleyen hatlara izin verildiğini, liderlik yapılmadığını görüyorum. Tamir etmeye çalışacağım.
Galen Ivanov

@ FrownyFrog - Sabit ve hafifçe golf oynadı.
Galen Ivanov

2

Ruby, 59 bayt

48.times{|i|-47.upto(i){|c|putc~c<i ?32-c.abs+2*i:32};puts}

Anagol konusundaki cevabımdan çapraz yayınlanmıştır.


2

Japt -R, 18 15 bayt

Ek bir yeni satır başlığına izin verilirse 14 bayt .

#0õ_odH+ZÉ ¬êÃû

Dene


açıklama

#0                  :48
  õ                 :Range [1,48]
   _         Ã      :Pass each Z through a function
    o               :  Range [0,Z)
      H+ZÉ          :    To each add 32+Z-1
     d              :    Get the character at that codepoint
           ¬        :  Join to a string
            ê       :  Palinrdomise
              û     :Centre pad each element to the length of the longest element
                    :Implicitly join with newlines and output

2

J ,  40 37  32 bayt

u:30+2>.(+:@i.@(2&+)(-*(>+:))"0 _|@i:)47Çözümlerindeki fikirler için + Galen Ivanov ve + Conor O'Brien sayesinde 40 ifade

37 eko dahil echo u:32+|.(~.(>:*+:@[-])"0 _])|i:47

echo u:32+|.(~.(>:*[+-)"{])|i:47

Yorumlardan @ FrownyFrog ipuçlarını içeren

TIO


İfadelerin geçerli yazılar olduğunu sanmıyorum.
LyricLy

@LyricLy, bu formda başka bir J cevabını gördüğüm için görüş değişiyor gibi görünüyor .. yine de başka bir 8 baytı traş etmemi sağladığın için teşekkür ederim .. şimdi "eko" eklemek için yerim var: umarım mutlusun
:)

"0 _"{
FrownyFrog

+:@[-][+-
FrownyFrog

güzel .. bu ipuçları için teşekkürler @ FrownyFrog
jayprich



1

Ruby , 78 bayt

s=*32;48.times{puts (s.map(&:chr)*'').center 95;c=*s[0]+1;s=c+s.map{|x|x+2}+c}

Çevrimiçi deneyin!

Tam program Ungolfed:

s=*32;                              # s is an array of integers
48.times{                           # Repeat 48 times:
  puts (s.map(&:chr)*'').center 95; # Turn each int to a char, join, center, and print
  c = *s[0] + 1;                    # c is a singleton array. It will bookend the next line
  s = c + s.map{|x|x+2} + c         # Add 2 to each element of s before adding the bookends
}





1

Gol> <> , 29 bayt

`0FaLssLF:P|LF:M|`/L-R` lRo|;

Çevrimiçi deneyin!

Nasıl çalışır

`0FaLssLF:P|LF:M|`/L-R` lRo|;

`0F                        |;  Repeat the following 48 times and halt...
   a                           Push 10 (\n)
    Lss                        Push L(loop counter) + 32
       LF:P|                   Repeat "Clone the top and increment" L times
            LF:M|              Repeat "Clone the top and decrement" L times
                 `/L-R`        Push 32 (space) 47-L times (space is significant)
                        lRo    Print everything as char, from the top,
                               until the stack is empty

1

Tcl , 129 122 118 117 bayt

time {incr i;set j -48;set a {};time {set a $a[format %c [expr abs([incr j])>=$i?32:$i*2-abs($j)+30]]} 96;puts $a} 48

Çevrimiçi deneyin!

açıklama

time { # for i from 0 up to 47
    incr i
    set j -48
    set a {}
    time { # for j from -48 up to 47
        # add next character to a
        set a $a[format %c [expr abs([incr j])>$i?32:$i*2-abs($j)+32]]
    } 96
    puts $a # print a
} 48

1

C (gcc) 199 bayt

#include<stdio.h>
int i,j=32,k=32,l=49;int main(){while(k<127){for(i=0;i<l;++i)printf(" ");for(i=j;i<k;++i)printf("%c",i);printf("%c",k);for(i=k-1;i>=j;--i)printf("%c",i);printf("\n");j++;k+=2;l--;}}

Çevrimiçi deneyin!

Tüm yardım için Picard ve PunPun1000'e teşekkürler


@Picard Boşlukları kaldırdım. Global bir yineleyici değişkeni ile daha da küçültebilirim.
Jonathan Landrum

@Picard Telefonumda düzenledim; boş bir satır bıraktığımı bilmiyordum.
Jonathan Landrum

1
Printf çağrılarında virgül sonrası gereksiz boşluklar var ve değişken isimleri bir harfe kısaltılabiliyor. Ayrıca bir TIO bağlantısı ve gerçek bayt sayısını eklerseniz çok iyi olur. İşte şu anki kodunuz için link TIO
PunPun1000

tamam, biraz daha
Jonathan Landrum

1

Haskell, 102 bayt

main=putStr$do
i<-[48,47..0]
let l=replicate i 32++[79-i..126-i*2]
map toEnum$l++tail(reverse l)++[10]

Denedim şeyler kısa değildi:

  • Karakter değişmezleri ve bakımından her şeyi ifade succveyapred kaydetmek için map toEnum.
  • Kullanmak yerine aşağı doğru bir aralık yazmak reverse.
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.