アルファ数値ボウタイ


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
代わりに大文字のアルファベットを使用できますか?
Kritixiリトス

3
@Cowsquackそれはルールの変更でしょう。それは言う、この正確なテキスト出力
デニス

@Cowsquackいいえ-小文字が必要です。
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 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)))

オンラインでお試しください!

  • @Giuseppeのおかげで-3バイト
  • @ J.Doeのおかげで-5バイト

67のバイトintToUtf8
J.Doe

cat1バイト?
JayCe

2
ソリューションを構築する64バイト。 @ Giuseppeのショートカットにrep加えて、その機能がintToUtf80変わり""ます。
-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。次に戻って、その一部をスペースで上書きします。

完全な説明

コードが少し変更されていない場合:

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コマンド
テイラー・スコット

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
ê

ジャプト通訳

文字の配列の配列として出力します。の-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

スタックス、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

, と連結

  • 逆に

  • マトリックス化

  • ,\ の接頭辞

  • 逆に

  • 819⌶ 小文字

  • 9↑ の最初の9要素

  • ⎕a このひも 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • これは文字行列を与えます

        私
       こんにちは
      ギ
     fghi
    エフギ
   デフィ
  cdefghi
 bcdefghi
abcdefghi

この結果について

1 i
12こんにちは
123ギ
1234 fghi
12345エフギ
123456デフィ
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

V25、21のバイト

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

オンラインでお試しください!

nmjcman101のおかげで2〜4バイト節約できました。

Hexdump:

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

私がしていることは、今日あなたの答えをストーカーすることだけですが、これは23日間有効だと思います。
nmjcman101

@ nmjcman101何らかの理由で、そのバージョンがどのように機能するか理解できません。しかし、私はさらに短いものを見つけたので、ありがとう!
DJMcMayhem

/\d*検索の最後に行きました
-nmjcman101

1

J、44バイト

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

オンラインでお試しください!

インデックス作成に使用する1と0のマスクを数値的に生成しようとしましたが、余分な行を削除するコストが高く、あきらめました:

   (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´Ãê

試して


これを水平に構築しても短い解決策にならなかったのではないかと思っています!:\
シャギー

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-93314の 308バイト

<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つのバイトをGolfed >p命令



1

PowerShellの5.1、70 69 64 57バイト

-7バイトをありがとうMazzy

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

手動で接着するとバイトが節約されます。また、すべてを1つのメガ結合にすると、さらに5つ節約できます。また、intの範囲をchar []に変換してaiを取得することでも機能します。実際の文字の範囲を使用する方が5バイト良いです。


1
これを試してください1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}。注' '*(9-$_)2つのスペース記号が含まれ
mazzy

1
@mazzy ooof、その二重スペースのトリックがありません。さまざまな数学のステートメントを考えていましたが、明らかな解決策は私にはありませんでした。
ヴェスカー

1

C(gcc)143 142 127 + 10 = 137 136 + 10 = 146(コンパイラフラグ)バイト

論理ORをビット演算子で置き換えることにより、-1バイト。

Logernのおかげで-5バイト。

2回出力された中央線を修正する+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バイトのコンパイラフラグです。
ローガン

すみません、悪いです。今すぐ更新!
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ṭ)ŒḄ

オンラインでお試しください!

(符号)が文字に作用するとPythonを生成する(おそらく)意図しない動作に依存しNoneます。このため、Pythonではfalseyであるため、引数がゼロ以外の整数であるかどうかを1バイトでチェックしNoneます。この動作が変更された場合、もう1バイトは同様に機能します。

行のリストを返す関数。





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.