Alfa-Sayısal Papyon


14

Tam olarak bu metni çıktılayın:

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

Sondaki tek satırsonu kabul edilebilir, ancak başka biçimlendirme değişikliğine izin verilmez.

Kurallar ve G / Ç

  • Giriş yok
  • Çıktı herhangi bir uygun yöntemle verilebilir .
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

1
Bunun yerine büyük harfli alfabeyi kullanabilir miyiz?
user41805

3
@Cowsquack Bu bir kural değişikliği olurdu. Bu tam metni çıktı yazıyor .
Dennis

@Cowsquack Hayır - küçük harf gerekir.
AdmBorkBork

Yanıtlar:


13

C, 87 85 81 80 bayt

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

Çevrimiçi deneyin!

açıklama

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

Hayret ettiğimden ^daha düşük önceliğe sahip <… ne güzel bir cevap!
Lynn

@Lynn C'deki bitsel işleçlerin (ve hatta Java / JS ve benzeri) karşılaştırmalardan daha düşük önceliği vardır. Bu hem kod golf için güzel ve gerçekten güzel bir hata kaynağı (düşünün if (x & 2 == 0), her zaman değerlendirir 0)
PurkkaKoodari





3

QBasic, 72 bayt

Taylor Scott'un sunumuna dayanarak .

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

Temel açıklama

Her satıra tam dizeyi yazdırıyoruz 123456789abcdefghi. Sonra geri dönüp bir kısmının boşluklarla üzerine yazıyoruz.

Tam açıklama

Kod hafifçe çözülmemiş:

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

Bu, Locatekomutun gerçekten akıllıca bir kullanımı
Taylor Scott

2

T-SQL, 108 bayt

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

İadeler sadece okunabilirlik içindir.

Sayı tabloları da dahil olmak üzere diğer birçok varyasyon denendi, bu en kısa oldu.



2

Japt , 20 bayt

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

Japt Tercüman

Bir dizi karakter dizisi olarak çıktı alın. -RBayrak sadece çıkış bakmak daha güzel yapar, çalışmak gerekli değildir.

Açıklama:

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 bayt

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

Çalıştır ve hata ayıkla

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

bir matrise dönüştürme (boşluklu otomatik pedler)

  • ,\ önekleri

  • 1↓ ilk eleman düştü

  • ⎕d bu dize '0123456789'

  • Bu karakter matrisini verir

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, ile bitiştirildi

  • tersine çevrilmiş

  • matrixified

  • ,\ önekleri

  • tersine çevrilmiş

  • 819⌶ ve küçük harf

  • 9↑ ilk 9 unsuru

  • ⎕a bu dize 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Bu karakter matrisini verir

        ben
       Selam
      ghi
     fghi
    abcdefghi
   defghi
  cdefghi
 bcdefghi
abcdefghi

ve bu sonuç üzerinde

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

aşağıdaki treni yap (⊢⍪1↓⊖)

doğru argüman

dikey olarak bitiştirildi

1↓ ilk satır düştü (bu, orta satırın tekrarlanmasını önler)

doğru argüman dikey olarak tersine döndü


Diğer çözümler

33 bayt

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

Çevrimiçi deneyin!

33 bayt

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

Çevrimiçi deneyin!


1

Kömür , 22 17 bayt

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

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

G↗↓←⁹β

Sağ küçük bir üçgen çizin ve küçük harfli alfabeyi kullanarak doldurun. (Dolgu, uçağı alfabe ile döşemeye ve ardından çizilen alanı kopyalamaya dayanır.)

Sayısal üçgeni çizmek için sola hareket edin.

G↖↓⁹⭆χι

Sol alt üçgeni çizin ve rakamları kullanarak doldurun. (Üçgen başlangıç ​​noktasının soluna çizildiğinden basamaklar sağa yaslanır, bu nedenle yalnızca 1 ila 9 basamakları kullanılır.)

‖O↓

Alt yarıyı tamamlayın.


1

V , 25 , 21 bayt

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

Çevrimiçi deneyin!

Nmjcman101 sayesinde 2-4 bayt kurtarıldı!

HexDump:

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

Yaptığım tek şeyin bugün cevaplarını takip etmek olduğunu biliyorum ama bunun 23 için işe yaradığını düşünüyorum: Çevrimiçi deneyin!
nmjcman101

@ nmjcman101 Hangi nedenle olursa olsun, bu sürümün nasıl çalıştığını anlayamıyorum. Ama daha da kısa olduğunu anladım, teşekkürler!
James

Bir /\d*aramanın sonuna gitti
nmjcman101

1

J , 44 bayt

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

Çevrimiçi deneyin!

İndeksleme için kullanmak için sayısal olarak 1 ve sıfır bir maske oluşturmaya çalıştım, ancak ekstra satırdan kurtulmanın maliyeti yüksekti ve vazgeçtim:

   (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 bayt

Bir dizi satır döndürür

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

Dene


açıklama

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

Alternatifler

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

Dene

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

Dene


Şimdi bunu yatay olarak inşa etmenin daha kısa bir çözüme yol açıp açmadığını merak ediyorum! : \
Shaggy

1

QBasic , 87 bayt

Konsola giriş ve çıkış almayan anonim bir işlev.

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

Bu cevap teknik olarak bir çokglottur ve VBA'da çalışacaktır



1

Befunge-93 , 314 308 bayt

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

Çevrimiçi deneyin!

Talimat >ile a koyarak 6 bayt golfp


1

Matlab, 122 bayt

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

Çevrimiçi deneyin!


1

PowerShell 5.1, 70 69 64 57 Bayt

-7 bayt için teşekkürler Mazzy

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

Birlikte yapıştırma manuel olarak bir bayt tasarrufu sağlar. Hepsini bir mega-birleştirme yapmak da 5 tane daha tasarruf sağlar. Ayrıca AI almak için bir dizi kareyi char [] haline getirerek çalışır. Gerçek harfler üzerinde bir aralık kullanmak 5 bayt daha iyidir.


1
Bu deneyin: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. Not ' '*(9-$_)2 boşluk sembolü içerir
mazzy

1
@mazzy ooof, bu çift boşluk hile eksik. Çok çeşitli matematik ifadeleri düşünüyordum, ancak bariz bir çözüm hiç aklıma gelmedi.
Veskah

1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (derleyici bayrakları) bayt

Mantıksal VEYA bitsel işleci ile değiştirerek -1 bayt.

Logern sayesinde -5 bayt.

Ortalama satırı düzeltmek için +9 bayt, bu iki kez çıktı.

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

Derleyici bayrağı:

-DG=g(i,j)

Bu makro aşağıdakilerin oluşumunu çarpanlarına ayırır g(i,j): fonksiyon bildirimi ve çağrılar.

Çevrimiçi deneyin!

Pietu1998'in harika cevabından farklı yaklaşım , daha basit (ve okunabilir), ancak daha yüksek puan.

Giriş noktası işlevdir f(); işlevi g(), her ardışık satırın yazdırılmasını yönetir.

İçin yeniden adlandırma file tam bir program yapılabilirmain , ancak henüz puanı artıracaktır.

Güzel sürüm, makro Ggenişletildi:

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 ama derleyici bayrakları için +10 olsa da
joH1

137 toplam 127 bayt kod ve 10 bayt derleyici bayrağıdır.
Logern

Üzgünüm, benim hatam. Şimdi güncelleniyor!
joH1

@ Logosu Gİşlev adını eşleştirmek için makroyu yeniden adlandırma özgürlüğünü aldım .
joH1



0

VBA, 75 bayt

Konsola giriş ve çıkış almayan anonim bir VBE anlık pencere işlevi.

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

0

Jöle , 22 21 bayt

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

Çevrimiçi deneyin!

(Sign) bir karakter üzerinde hareket ettiğinde Python's verir ( istenmeyen) istenmeyen davranış dayanır None. Bu nedenle, Python'da falsey olduğundan argümanının sıfır olmayan bir tamsayı olup olmadığı için bir baytlık bir Nonedenetimdir. Bu davranış değiştirilirse , bir bayt daha çalışır.

Satır listesini döndüren işlev.



0

Python 2 , 97 94 bayt

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

Çevrimiçi deneyin!

Sadece kullanmak için bir alternatif olarak gönderildi eval()ve sonunda 100'ün altına aldım çünkü Temel olarak orta sıra ile başlar sonra aynı anda hem yukarı hem de aşağı çalışır.



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.