Bowtie Alpha-Numerik

14

Keluarkan teks yang tepat ini:

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

Satu baris tambahan baris dapat diterima, tetapi tidak ada perubahan pemformatan lainnya yang diizinkan.

Aturan dan I / O

  • Tidak ada input
  • Output dapat diberikan dengan metode apa pun yang mudah .
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
1
Bisakah kita menggunakan huruf besar sebagai gantinya?
Kritixi Lithos
3
@Cowsquack Itu akan menjadi perubahan aturan. Dikatakan Keluarkan teks yang tepat ini .
Dennis
@Cowsquack Nggak - huruf kecil diperlukan.
AdmBorkBork

Jawaban:

13

C, 87 85 81 80 byte

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

Cobalah online!

Penjelasan

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)
}
PurkkaKoodari
sumber
Saya kagum ^memiliki prioritas lebih rendah dari <... jawaban yang sangat cantik!
Lynn
@ Lynn Operator bitwise di C (dan bahkan Java / JS dan semacamnya) semua memiliki prioritas lebih rendah daripada perbandingan. Ini bagus untuk kode golf dan sumber kesalahan yang sangat bagus (pikirkan if (x & 2 == 0), yang selalu dievaluasi 0)
PurkkaKoodari
7

Python 2 , 73 byte

i=9
exec"i-=1;a=abs(i);print'123456789'[:9-a]+'  '*a+'abcdefghi'[a:];"*17

Cobalah online!

Lynn
sumber
6

R , 64 byte

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

Cobalah online!

  • -3 byte terima kasih kepada @Giuseppe
  • -5 byte terima kasih kepada @ Joe
menggali semua
sumber
67 byte denganintToUtf8
J.Doe
catuntuk satu byte?
JayCe
2
64 byte membangun solusi Anda, menggunakan jalan pintas @ Giuseppe untuk repditambah fitur intToUtf8yang 0berubah menjadi a "".
J.Doe
@ J. Aduh trik yang bagus!
JayCe
@ J. Nak: Luar biasa, terima kasih!
digEmAll
5

05AB1E (warisan) , 16 byte

9L©A9£S«®Âì×ζRû»

Cobalah online!

-1 terima kasih kepada Kevin Cruijssen .

Erik the Outgolfer
sumber
16 byte dengan mengubah žh¦A9£«S9Lke 9L©A9£S«®(atau 9LA9£S«9Latau 9LDA9£S«s).
Kevin Cruijssen
4

Python 2 , 80 byte

j=i=1
exec"print'123456789'[:i]+'  '*(9-i)+'abcdefghi'[-i:];i+=j;j-=2*(i>8);"*17

Cobalah online!

tongkat
sumber
77 byte
ovs
@ovs itu akan menyatu dengan jawaban Lynn, jadi saya akan meninggalkan yang ini
Rod
3

QBasic, 72 byte

Berdasarkan pengajuan Taylor Scott .

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

Penjelasan dasar

Di setiap baris, kami mencetak string penuh 123456789abcdefghi. Lalu kita kembali dan menimpa sebagian dengan spasi.

Penjelasan lengkap

Dengan kode yang sedikit tidak diubah:

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
DLosc
sumber
Itu adalah penggunaan Locateperintah yang sangat pintar
Taylor Scott
2

T-SQL, 108 byte

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

Pengembalian hanya untuk keterbacaan.

Mencoba banyak variasi lain, termasuk tabel angka, ini adalah yang terpendek.

BradC
sumber
2

05AB1E , 20 byte

9LJη.BA9£.sí.Bí)øJû»

Cobalah online!

Kamerad SparklePony
sumber
2

Japt , 20 byte

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

Japt Interpreter

Keluaran sebagai array array karakter. The -Rbendera tidak perlu bekerja, itu hanya membuat output tampilan lebih bagus.

Penjelasan:

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
Kamil Drakari
sumber
1

Stax , 18 byte

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

Jalankan dan debug itu

Penjelasan:

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                        
wastl
sumber
1

APL (Dyalog Unicode) , 30 byte

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

Cobalah online!

dikonversi ke matriks (bantalan otomatis dengan spasi)

  • ,\ awalan dari

  • 1↓ elemen pertama turun dari

  • ⎕d string ini '0123456789'

  • Ini memberikan matriks karakter

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, digabungkan dengan

  • yang terbalik

  • matrixified

  • ,\ awalan dari

  • yang terbalik

  • 819⌶ dan lebih rendah

  • 9↑ 9 elemen pertama dari

  • ⎕a string ini 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Ini memberikan matriks karakter

        saya
       Hai
      ghi
     kawan
    efghi
   defghi
  cdefghi
 bcdefghi
abcdefghi

dan hasil ini

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

lakukan kereta berikut (⊢⍪1↓⊖)

argumen yang benar

disambungkan secara vertikal dengan

1↓ baris pertama turun dari (ini menghindari pengulangan baris tengah)

argumen yang tepat terbalik secara vertikal


Solusi lain

33 byte

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

Cobalah online!

33 byte

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

Cobalah online!

Kritixi Lithos
sumber
1

Arang , 22 17 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

G↗↓←⁹β

Gambarlah segitiga kanan bawah dan isilah menggunakan huruf kecil. (Isi didasarkan pada ubin pesawat dengan alfabet dan kemudian menyalin area yang digambar.)

Bergerak ke kiri untuk menggambar segitiga numerik.

G↖↓⁹⭆χι

Gambarlah segitiga kiri bawah dan isi dengan angka. (Karena segitiga digambar di sebelah kiri titik asal, angka tersebut dibenarkan dengan benar, jadi hanya angka 1 hingga 9 yang digunakan.)

‖O↓

Refleksikan untuk menyelesaikan setengah bagian bawah.

Neil
sumber
1

V , 25 , 21 byte

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

Cobalah online!

2-4 byte disimpan berkat nmjcman101!

Hexdump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp
DJMcMayhem
sumber
Saya tahu semua yang saya lakukan adalah menguntit jawaban Anda hari ini tetapi saya pikir ini bekerja untuk 23: Coba online!
nmjcman101
@ nmjcman101 Untuk alasan apa pun, saya tidak dapat memahami cara kerja versi itu. Tapi saya menemukan yang lebih pendek, jadi terima kasih!
DJMcMayhem
Itu pergi ke akhir /\d*pencarian
nmjcman101
1

J , 44 byte

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

Cobalah online!

Saya mencoba untuk menghasilkan secara numerik topeng 1 dan nol untuk digunakan untuk pengindeksan, tetapi biaya untuk menyingkirkan baris tambahan tinggi dan saya menyerah:

   (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
Galen Ivanov
sumber
1

Japt, 24 byte

Mengembalikan array garis

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

Menguji


Penjelasan

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

Alternatif

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

Menguji

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

Menguji

Shaggy
sumber
Saya bertanya-tanya sekarang apakah membangun ini secara horizontal mungkin tidak menghasilkan solusi yang lebih pendek! : \
Shaggy
1

QBasic , 87 byte

Fungsi anonim yang tidak mengambil input dan output ke konsol.

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

Jawaban ini secara teknis poliglot, dan akan berfungsi dalam VBA

Taylor Scott
sumber
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_            ^
                             >:#,_@#:<

Cobalah online!

Golf 6 byte dengan menempatkan >dengan pinstruksi

IniJ0el
sumber
1

Matlab, 122 byte

function[r]=f,s=[49:57,'a':'i'];r=[];for i=1:9,r=[r;s(1:i),repmat(' ',[1,18-2*i]),s(19-i:18)];end,r=[r;flip(r(1:8,:))];end

Cobalah secara Online!

DimChtz
sumber
1

PowerShell 5.1, 70 69 64 57 Bytes

Terima kasih Mazzy untuk -7 byte

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

Ternyata menempelkannya secara manual menghemat satu byte. Menjadikannya satu mega-gabung juga menghemat 5 lagi. Juga berfungsi dengan mengubah rentang int menjadi char [] untuk mendapatkan ai. Menggunakan rentang huruf yang sebenarnya adalah 5 byte lebih baik.

Veskah
sumber
1
coba ini: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. Catatan ' '*(9-$_)berisi 2 simbol luar angkasa
mazzy
1
@Mazzy ooof, melewatkan trik ruang ganda. Saya sedang memikirkan berbagai pernyataan matematika tetapi solusi yang jelas tidak pernah terjadi pada saya.
Veskah
1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (compiler flags) bytes

-1 byte dengan mengganti logika ATAU dengan operator bitwise.

-5 byte terima kasih kepada Logern.

+9 byte untuk memperbaiki garis tengah, yang merupakan keluaran dua kali.

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

Bendera kompiler:

-DG=g(i,j)

Makro ini memfaktorkan terjadinya g(i,j): deklarasi fungsi dan panggilan.

Cobalah online!

Pendekatan yang berbeda dari jawaban Pietu1998 yang hebat , lebih langsung (dan mudah dibaca), tetapi skornya lebih tinggi.

Titik masuk adalah fungsi f(); fungsi g()menangani pencetakan setiap baris berturut-turut.

Bisa dibuat program lengkap dengan mengganti nama fmenjadi main, tetapi itu belum akan meningkatkan skor.

Versi cantik, makro Gdiperluas:

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);
}
joH1
sumber
137 tetapi +10 untuk flag-flag compiler
joH1
137 adalah total, 127 byte kode dan 10 byte flag compiler.
Logern
Ups maaf, salahku. Memperbarui sekarang!
joH1
@Logern Saya mengambil kebebasan untuk mengubah nama makro menjadi G, untuk mencocokkan nama fungsi.
joH1
0

JavaScript (ES6), 76 byte

f=(x=y=0)=>y<17?(x>y^x++<17-y?x.toString(36)+[`
`[x%=18]]:' ')+f(x||!++y):''

Cobalah online!

Arnauld
sumber
0

VBA, 75 byte

Fungsi jendela langsung VBE anonim yang tidak mengambil input dan output ke konsol.

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

Jelly , 22 21 byte

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

Cobalah online!

Bergantung pada (kemungkinan) perilaku yang tidak diinginkan bahwa ketika (tanda) bertindak pada karakter itu menghasilkan Python None. Karena itu, adalah pemeriksaan satu byte untuk apakah argumennya adalah bilangan nol sejak ituNone falsey dalam Python. Jika perilaku ini diubah maka berfungsi juga untuk satu byte lagi.

Fungsi yang mengembalikan daftar garis.

dylnan
sumber
0

Java 8, 107 byte

v->{for(int i=1,j;++i<19;)for(j=19;j-->0;)System.out.printf("%c",j>0?(j<i)!=(j<20-i)?32:106-j-j/10*39:10);}

Port of @ Pietu1998 jawaban C , jadi pastikan untuk menghapusnya!

Cobalah online.

Kevin Cruijssen
sumber
0

Python 2 , 97 94 byte

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

Cobalah online!

Hanya diposting sebagai alternatif untuk menggunakan eval()dan karena saya akhirnya mendapatkannya di bawah 100. Pada dasarnya dimulai dengan baris tengah lalu berfungsi baik naik turun pada saat yang sama.

ElPedro
sumber
0

Yabasic , 103 byte

a$="123456789abcdefghi"
For y=-8To 8
z=Abs(y)
?Mid$(a$,1,9-z);
For i=1To z?"  ";Next
?Mid$(a$,10+z)Next

Cobalah online!

Taylor Scott
sumber
0

Pascal (FPC) , 110 105 byte

var i:int32;begin for i:=-8to 8do writeln('123456789'[1..9-abs(i)],'abcdefghi'[abs(i)+1..9]:abs(i)+9)end.

Cobalah online!

AlexRacer
sumber