Bowtie อัลฟ่าตัวเลข


14

เอาท์พุทข้อความที่แน่นอนนี้:

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

บรรทัดใหม่ต่อท้ายเดี่ยวยอมรับได้ แต่ไม่อนุญาตให้เปลี่ยนแปลงการจัดรูปแบบอื่น

กฎและ I / O

  • ไม่มีอินพุต
  • การส่งออกจะได้รับโดยวิธีการที่สะดวกใด
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

1
เราสามารถใช้อักษรตัวพิมพ์ใหญ่แทนได้หรือไม่?
user41805

3
@Cowsquack นั่นจะเป็นการเปลี่ยนแปลงกฎ มันบอกว่าเอาท์พุทข้อความที่แน่นอนนี้
Dennis

@Cowsquack Nope - ต้องใช้ตัวพิมพ์เล็ก
AdmBorkBork

คำตอบ:


13

C, 87 85 81 80 ไบต์

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

ลองออนไลน์!

คำอธิบาย

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}

ฉันประหลาดใจที่^มีลำดับความสำคัญต่ำกว่า<... เป็นคำตอบที่น่ารัก!
Lynn

@Lynn ตัวดำเนินการระดับบิตใน C (และแม้แต่ Java / JS และอื่น ๆ ) ทั้งหมดมีลำดับความสำคัญต่ำกว่าการเปรียบเทียบ นี้เป็นสิ่งที่ดีทั้งสำหรับการเล่นกอล์ฟรหัสและเป็นแหล่งที่ดีจริงๆของข้อผิดพลาด (คิดว่าif (x & 2 == 0)ที่เคยประเมิน0)
PurkkaKoodari


6

R , 64 ไบต์

for(i in abs(8:-8))cat(intToUtf8(c(57-8:i,32*!!-i:i,97+i:8,13)))

ลองออนไลน์!

  • -3 ไบต์ขอบคุณ @Giuseppe
  • -5 ไบต์ขอบคุณ @ J.Doe

67 ไบต์ด้วยintToUtf8
J.Doe

catหนึ่งไบต์?
JayCe

2
64 ไบต์สร้างในการแก้ปัญหาของคุณโดยใช้ทางลัด @ จูเซปเป้ที่จะrepบวกคุณลักษณะของintToUtf8ที่จะกลายเป็น0 ""
J.Doe

@ J.Doe เคล็ดลับที่ยอดเยี่ยม!
JayCe

@ J.Doe: ยอดเยี่ยมขอบคุณ!
digEmAll



3

QBasic ขนาด 72 ไบต์

ขึ้นอยู่กับการส่งเทย์เลอร์สกอตต์

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

คำอธิบายพื้นฐาน

123456789abcdefghiในแต่ละบรรทัดเราพิมพ์ทั้งสตริง จากนั้นเรากลับไปและเขียนทับส่วนของมันด้วยช่องว่าง

คำอธิบายแบบเต็ม

ด้วยรหัส ungolfed เล็กน้อย:

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value

นั่นเป็นการใช้Locateคำสั่งที่ฉลาดจริงๆ
Taylor Scott

2

T-SQL, 108 ไบต์

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

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

ลองใช้รูปแบบอื่น ๆ มากมายรวมถึงตารางตัวเลขนี่เป็นช่วงเวลาที่สั้นที่สุด



2

Japt , 20 ไบต์

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

ล่าม Japt

เอาต์พุตเป็นอาร์เรย์ของอักขระอาร์เรย์ การ-Rตั้งค่าสถานะไม่จำเป็นต้องใช้งานเพียงแค่ทำให้ผลลัพธ์ดูดีขึ้น

คำอธิบาย:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically

1

Stax , 18 ไบต์

â4+╤jo♂▐▀3bkWíæß╝╖

เรียกใช้และแก้ไขข้อบกพร่อง

คำอธิบาย:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        

1

APL (Dyalog Unicode)ขนาด 30 ไบต์

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

ลองออนไลน์!

แปลงเป็นเมทริกซ์ (แผ่นอิเล็กโทรดอัตโนมัติพร้อมช่องว่าง)

  • ,\ คำนำหน้าของ

  • 1↓ องค์ประกอบแรกลดลงจาก

  • ⎕d สายนี้ '0123456789'

  • นี่ทำให้เมทริกซ์ตัวละคร

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, ตัดแบ่งด้วย

  • ย้อนกลับ

  • matrixified

  • ,\ คำนำหน้าของ

  • ย้อนกลับ

  • 819⌶ และลดระดับ

  • 9↑ 9 องค์ประกอบแรกของ

  • ⎕a สายนี้ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • นี่ทำให้เมทริกซ์ตัวละคร

        ผม
       สวัสดี
      GHI
     fghi
    efghi
   defghi
  cdefghi
 bcdefghi
ABCDEFGHI

และในผลลัพธ์นี้

1 ฉัน
12 สวัสดี
123 กิ
1234 fghi
12345 efghi
123456 defghi
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

ขึ้นรถไฟขบวนต่อไปนี้ (⊢⍪1↓⊖)

อาร์กิวเมนต์ที่ถูกต้อง

ตัดแบ่งแนวตั้งด้วย

1↓ แถวแรกหลุดจาก (สิ่งนี้จะหลีกเลี่ยงการทำซ้ำแถวกลาง)

อาร์กิวเมนต์ด้านขวากลับด้านในแนวตั้ง


โซลูชั่นอื่น ๆ

33 ไบต์

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

ลองออนไลน์!

33 ไบต์

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

ลองออนไลน์!


1

ถ่าน , 22 17 ไบต์

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

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

G↗↓←⁹β

วาดสามเหลี่ยมล่างขวาและเติมโดยใช้ตัวอักษรพิมพ์เล็ก (การเติมจะขึ้นอยู่กับการเรียงตัวของเครื่องบินด้วยตัวอักษรแล้วจึงคัดลอกพื้นที่วาด)

เลื่อนไปทางซ้ายเพื่อวาดสามเหลี่ยมที่เป็นตัวเลข

G↖↓⁹⭆χι

วาดสามเหลี่ยมซ้ายล่างและเติมโดยใช้ตัวเลข (เนื่องจากรูปสามเหลี่ยมถูกลากไปทางซ้ายของจุดเริ่มต้นตัวเลขจึงถูกต้อง - ทางขวาดังนั้นจะใช้เฉพาะตัวเลข 1 ถึง 9 เท่านั้น)

‖O↓

สะท้อนให้เห็นถึงครึ่งล่างที่สมบูรณ์


1

V , 25 , 21 ไบต์

¬19¬ai8ñHÄ/á
r ge.YGp

ลองออนไลน์!

บันทึก 2-4 ไบต์ขอบคุณ nmjcman101!

hexdump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp

ฉันรู้ว่าสิ่งที่ฉันทำกำลังสะกดคำตอบของคุณในวันนี้ แต่ฉันคิดว่าวิธีนี้ใช้ได้กับ 23: ลองออนไลน์!
nmjcman101

@ nmjcman101 ไม่ว่าด้วยเหตุผลใดฉันไม่สามารถเข้าใจได้ว่าเวอร์ชั่นนั้นทำงานอย่างไร แต่ฉันคิดหาอันที่สั้นกว่านี้ขอบคุณมาก!
James

มันสิ้นสุดการ/\d*ค้นหา
nmjcman101

1

J , 44 ไบต์

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

ลองออนไลน์!

ฉันพยายามสร้างหน้ากากที่มีตัวเลข 1 และศูนย์เพื่อใช้สำหรับการจัดทำดัชนี แต่ค่าใช้จ่ายในการกำจัดแถวพิเศษนั้นสูงและฉันก็ยอมแพ้:

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1


1

Japt 24 ไบต์

ส่งคืนอาร์เรย์ของบรรทัด

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

ทดสอบมัน


คำอธิบาย

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

ทางเลือก

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

ทดสอบมัน

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

ทดสอบมัน


ฉันสงสัยว่าตอนนี้ถ้าการสร้างแนวนอนนี้อาจไม่ได้นำไปสู่ทางออกที่สั้นลง! : \
Shaggy

1

QBasic , 87 ไบต์

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

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

คำตอบนี้เป็นเทคนิคพูดได้หลายภาษาและจะทำงานใน VBA



1

Befunge-93 , 314 308 bytes

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

ลองออนไลน์!

แข็งแรงเล่นกอล์ฟ 6 ไบต์โดยการวาง>กับpการเรียนการสอน



1

PowerShell 5.1, 70 69 64 57 ไบต์

ขอบคุณ Mazzy สำหรับ -7 ไบต์

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

ปรากฎว่าการติดกาวด้วยกันจะช่วยประหยัดไบต์ด้วยตนเอง ทำให้การเข้าร่วม mega-one ทั้งหมดช่วยให้ประหยัดได้มากขึ้น 5 รายการ นอกจากนี้ยังทำงานโดยเปลี่ยน ints เป็นถ่าน [] เพื่อให้ได้ไอ การใช้ช่วงเหนือตัวอักษรจริงจะดีกว่า 5 ไบต์


1
ลองสิ่งนี้: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. หมายเหตุ' '*(9-$_)มีสัญลักษณ์เว้นวรรค 2 อัน
mazzy

1
@ mazzy ooof หายไปนั่นคือเคล็ดลับการเว้นวรรคสองครั้ง ฉันกำลังคิดถึงคำแถลงทางคณิตศาสตร์ที่หลากหลาย แต่ทางออกที่ชัดเจนไม่เคยเกิดขึ้นกับฉัน
Veskah

1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (แฟล็กคอมไพเลอร์) ไบต์

-1 ไบต์โดยแทนที่โลจิคัล OR ด้วยตัวดำเนินการระดับบิต

-5 ไบต์ขอบคุณ Logern

+9 ไบต์เพื่อแก้ไขค่ามัธยฐานของบรรทัดนั่นคือเอาต์พุตสองครั้ง

char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}

ธงคอมไพเลอร์:

-DG=g(i,j)

มาโครนี้แสดงการเกิดขึ้นของg(i,j): การประกาศฟังก์ชันและการเรียกใช้

ลองออนไลน์!

วิธีการที่แตกต่างจากคำตอบที่ดีของ Pietu1998ตรงไปตรงมามากขึ้น (และอ่านได้) แต่ให้คะแนนสูงกว่า

จุดเริ่มต้นคือฟังก์ชั่นf(); ฟังก์ชั่นg()จัดการการพิมพ์ของแต่ละบรรทัดติดต่อกัน

สามารถสร้างโปรแกรมเต็มรูปแบบโดยเปลี่ยนชื่อfเป็นmainแต่จะเพิ่มคะแนน

เวอร์ชั่นสวยมาโครGขยาย:

char *s = "123456789abcdefghi";
int g(int i, int j) {
    for(; j < 18; ++j)
        putchar((i > j | j > 17 - i) ? s[j] : 32);
    puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
    int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
    for(; i++ < 8;) // Upper half of the tie
        g(i, j);
    g(i + 1, j); // Median line
    for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
        g(i, j);
}


137 แต่ +10 สำหรับแฟล็กคอมไพเลอร์แม้ว่า
joH1

137 คือโค้ดทั้งหมด 127 ไบต์และแฟล็กคอมไพเลอร์ 10 ไบต์
Logern

โอ๊ะขอโทษฉันไม่ดี อัปเดตทันที!
joH1

@Logern ฉันใช้เสรีภาพในการเปลี่ยนชื่อแมโครเป็นเพื่อGให้ตรงกับชื่อฟังก์ชัน
joH1



0

VBA, 75 ไบต์

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

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next

0

เยลลี่ , 22 21 ไบต์

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

ลองออนไลน์!

อาศัย (น่าจะ) พฤติกรรมที่ไม่ได้ตั้งใจว่าเมื่อ(เครื่องหมาย) Noneทำหน้าที่เกี่ยวกับตัวละครมันมีอัตราผลตอบแทนของงูใหญ่ ด้วยเหตุนี้จึงเป็นการตรวจสอบหนึ่งไบต์ว่าอาร์กิวเมนต์นั้นเป็นจำนวนเต็มไม่ใช่ศูนย์หรือไม่เนื่องจากNoneเป็นเท็จใน Python หากพฤติกรรมนี้เปลี่ยนไปแล้วงานได้เช่นกันสำหรับอีกหนึ่งไบต์

ฟังก์ชันที่ส่งคืนรายการบรรทัด



0

Python 2 , 97 94 ไบต์

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

ลองออนไลน์!

โพสต์เป็นทางเลือกแทนการใช้eval()และในที่สุดฉันก็ได้ต่ำกว่า 100 โดยทั่วไปเริ่มต้นด้วยแถวกลางแล้วทำงานทั้งขึ้นและลงในเวลาเดียวกัน



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