คุณต้องสร้างเสา ASCII!


24

ข้ามการโพสต์จากโพสต์ anagolf ของฉัน (หมายเหตุ: อาจมีสปอยเลอร์, ชันสูตร)

เอาท์พุทข้อความต่อไปนี้อย่างแน่นอน

  • คุณอาจมีช่องว่างต่อท้ายเพิ่มเติมในแต่ละบรรทัดและขึ้นบรรทัดใหม่เช่นกัน
  • รหัสที่สั้นที่สุดเป็นไบต์ชนะ
                                                
                                              !"!
                                             "#$#"
                                            #$%&%$#
                                           $%&'('&%$
                                          %&'()*)('&%
                                         &'()*+,+*)('&
                                        '()*+,-.-,+*)('
                                       ()*+,-./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
มีบรรทัด whitespace เฉพาะบรรทัดแรกโดยเจตนาหรือไม่
AdmBorkBork

9
@AdmBorkBork นั่นเป็นช่องว่างเพราะนั่นคือ ASCII char lol ตัวแรก
HyperNeutrino

2
@ the4kman และ<=>=<ปลา
pizzapants184

4
มีเหตุผลที่ไม่มีชื่อ "คุณต้องสร้างเสา ASCII!" หรือไม่?
mattdm

3
@mattdm ฉันมาที่นี่จากรายการ HNQ เพื่อลงคะแนนเพราะชื่อของมัน ทำได้ดีมาก
ทอดด์วิลคอกซ์

คำตอบ:


4

Canvasขนาด15 14 ไบต์

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

ลองที่นี่!

โปรดทราบว่าในขณะที่ทำสิ่งนี้ฉันได้เพิ่มบิวด์อิน ( & ) ไว้เป็นคู่เพราะ Canvas ไม่ได้มีบิวด์อินสำหรับ ASCII / unicode มาก่อน ...

คำอธิบาย (อักขระบางตัวถูกแทนที่เพื่อดู monospace):

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 ไบต์

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

ลองออนไลน์!

ขาออกสายช่องว่างเพียงครั้งแรกแล้วลูปจากไป46 0การวนซ้ำแต่ละครั้งจะส่งออกจำนวนช่องว่างที่สอดคล้องกันจากนั้นจะมีการ-joinรวมกันอีกcharครั้ง - อธิบายสัญลักษณ์ที่เหมาะสมผ่านการคำนวณบางอย่าง


1
คุณสามารถบันทึกการคำนวณโดยใช้บรรทัดแรกเป็น 47 ช่องว่างตามด้วยอักขระเว้นวรรคหรือไม่
Riking

@Riking ในการทำเช่นนั้นคุณจะต้องเป็นกรณีพิเศษว่า char-array นั้นถูกสร้างเพื่อสร้างเพียงหนึ่งไอเท็มแทนที่จะเป็น 3 อย่างหรือมากกว่านั้น เป็นผลให้มันสั้นกว่าเป็นกรณีพิเศษสำหรับบรรทัดเว้นวรรคเท่านั้นโดยสิ้นเชิง
AdmBorkBork

11

ถ่าน 13 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการสร้างรหัสเวอร์ชัน คำอธิบาย:

 ⁴⁸             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
ผลลัพธ์ดูเหมือนฉันผิด
นาย Xcoder

1
@ Mr.Xcoder ฮึคลาสสิกออกโดย 1 ข้อผิดพลาด ...
นีล

8

Python 2 , 73 ไบต์

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

ลองออนไลน์! crossposted จากอนาธิปไตยกอล์ฟ (ดูการส่งของฉัน )

วิเคราะห์ชันสูตรศพอย่างรวดเร็ว: XNOR และ Dianne ค้นพบที่แน่นอนเดียวกันการแก้ปัญหา ebicochneal ส่งวิธีการแก้ปัญหา 71 ไบต์ซึ่ง mitchs ปรับตัวดีขึ้น70 ไบต์ พวกเขาหลีกเลี่ยงการจัดการกับbytearray(ซึ่งมีความยาว) หรือ''.join(map(chr,…))(ซึ่งยาวกว่า) ทั้งหมดโดยการรักษาตัวแปร "บรรทัดปัจจุบัน" และปรับปรุงอย่างชาญฉลาด





4

Lisp สามัญ , 110 ไบต์

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

ลองออนไลน์!

คำอธิบาย

(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 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อแบบทันทีที่ไม่รับอินพุตและเอาต์พุตไปยังคอนโซล

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

3

Ruby , 70 ไบต์

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

ลองออนไลน์!

สร้างสตริง ASCII ที่พิมพ์ได้เต็มรูปแบบจากนั้นพิมพ์จำนวนการส่งต่อที่ต้องการ (เสริมด้วยช่องว่าง) + สไลซ์ด้านหลัง



2

C (gcc), 117 ไบต์

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);}}

ลองออนไลน์!

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 ไบต์

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

ผลตอบแทนสำหรับการแสดงผลเท่านั้น

ฉันลองแนวคิดหลายอย่างรวมถึงการวนรอบเพื่อสร้างสตริงเต็ม (163 ตัวอักษร) และการวนซ้ำซ้อนกันเพื่อสร้างขึ้นมาทันที (168 ตัวอักษร) แต่สิ่งนี้จบลงด้วยการที่สั้นที่สุด

โดยทั่วไปแต่ละห่วงฉันยัดเยียด 4 ตัวละครใหม่เข้าสู่ใจกลางของสตริงแล้วตัดออกแถมจากปลายทั้งสองโดยใช้SQLSTUFF()ฟังก์ชั่น

รูปแบบและคำอธิบาย:

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 ไบต์

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

ลองออนไลน์!

ขอบคุณ Conor O'Brien สำหรับเทมเพลต! ขอบคุณ FrownyFrog ที่แสดงวิธีแก้ไขที่ไม่ถูกต้อง


1
บางทีนี่อาจแก้ไขได้ง่ายขึ้น: ลองออนไลน์!
Conor O'Brien

@Conor O'Brien - ขอบคุณสำหรับเทมเพลตฉันได้อัปเดตลิงก์แล้ว
Galen Ivanov

พิมพ์บรรทัดพิเศษที่ด้านบน
FrownyFrog

@ FronyFrog โอ้ตอนนี้ฉันเห็นแล้วว่ามีเพียงการขึ้นบรรทัดใหม่เท่านั้นที่อนุญาตไม่นำ ฉันจะพยายามแก้ไข
Galen Ivanov

@FrownyFrog - แก้ไขและ golfed เล็กน้อย
Galen Ivanov

2

Ruby, 59 ไบต์

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

ข้ามโพสต์จากคำตอบของฉันใน anagol


2

Japté -R, 18 15 ไบต์

14 ไบต์ถ้าอนุญาตให้ขึ้นบรรทัดใหม่ชั้นนำได้

#0õ_odH+ZÉ ¬êÃû

ทดสอบมัน


คำอธิบาย

#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 ไบต์

40 นิพจน์u:30+2>.(+:@i.@(2&+)(-*(>+:))"0 _|@i:)47ขอบคุณ + Galen Ivanov และ + Conor O'Brien สำหรับแนวคิดในการแก้ปัญหา

37 รวมเสียงสะท้อน echo u:32+|.(~.(>:*+:@[-])"0 _])|i:47

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

การรวมเคล็ดลับ @FrownyFrog จากความคิดเห็น

TIO


ฉันไม่คิดว่านิพจน์เป็นการส่งที่ถูกต้อง
LyricLy

@LyricLy ความเห็นดูเหมือนจะแตกต่างกันตามที่ฉันเห็นคำตอบ J อื่นในแบบฟอร์มนี้ .. ต่อไปขอบคุณสำหรับ prodding ให้ฉันโกนอีก 8 ไบต์ .. ตอนนี้ฉันมีห้องพักที่จะเพิ่ม "echo": หวังว่าคุณจะมีความสุข
:)

"0 _"{
FrownyFrog

+:@[-][+-
FrownyFrog

สวย .. ขอบคุณสำหรับเคล็ดลับเหล่านี้ @FrownyFrog
jayprich


1

Python 2 , 98 88 ไบต์

-1 ไบต์ต้องขอบคุณ @ Mr.Xcoder

i=32
exec"print''.join(chr(i+i-32-abs(j))for j in range(32-i,i-31)).center(95);i+=1;"*48

ลองออนไลน์!


-i+32=> 32-iและคุณอาจใช้' '*(79-i)แทน.center(95)การบันทึกไบต์
นาย Xcoder

@ Mr.Xcoder ขอบคุณ! ' '*(79-i)+ไม่ได้ช่วยประหยัดไบต์: D
Dead Possum

1

ทับทิม 78 ไบต์

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

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ 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

MY-BASIC , 97 ไบต์

การตอบสนอง MY-BASIC แบบไม่ระบุชื่อซึ่งไม่รับอินพุตและเอาต์พุตไปยังคอนโซล

For i=0 To 47
For j=i To 47
Print" "
Next
For j=-i To i
Print Chr(32-Abs(j)+2*i)
Next
Print;
Next

ลองออนไลน์!

-1 ไบต์ขอบคุณJonathan Frech


1
Print " "Print" "->
Jonathan Frech

@JonathanFrech - ขออภัยขออภัยฉันสะกดชื่อคุณผิด
Taylor Scott


1

Gol> <> , 29 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

`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 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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 ไบต์

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

ลองออนไลน์!

ขอบคุณ Picard และ PunPun1000 สำหรับความช่วยเหลือทั้งหมด


@Picard ฉันลบช่องว่าง ฉันสามารถลดขนาดให้เล็กลงด้วยตัวแปรตัววนซ้ำระดับโลก
Jonathan Landrum

@Picard ฉันแก้ไขมันในโทรศัพท์ของฉัน; ไม่ได้ตระหนักว่าฉันทิ้งบรรทัดว่างไว้
Jonathan Landrum

1
มีช่องว่างที่ไม่จำเป็นในการเรียก printf หลังเครื่องหมายจุลภาคและชื่อตัวแปรสามารถย่อให้สั้นลงเป็นอักษรตัวเดียว นอกจากนี้มันจะดีถ้าคุณสามารถรวมลิงค์ TIO และจำนวนไบต์ที่แท้จริง นี่คือลิงค์สำหรับรหัสปัจจุบันของคุณTIO
PunPun1000

ตกลงฉันได้บีบมันอีกเล็กน้อยฉันคิดว่าฉันจะต้องเปลี่ยนอัลกอริทึมเพื่อลดขนาดมันอีกต่อไป
Jonathan Landrum

1

Haskell, 102 ไบต์

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

สิ่งที่ฉันได้ลองแล้วไม่ได้สั้นลง:

  • การแสดงทุกอย่างในแง่ของตัวอักษรตัวอักษรและsuccหรือที่จะบันทึกpredmap toEnum
  • reverseเขียนช่วงลงแทนการใช้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.