入力への斜めのアルファベット


26

この投稿に触発されました。この質問を重複としてマークしている場合は、実際に質問を読んで、私の質問がリンクされた質問の修正であることを確認してください。リンクされたものは入力を要求せず、アルファベットを斜めに印刷するだけです。

チャレンジ

1〜26の範囲の入力を指定すると、アルファベットを斜めに印刷しますが、指定した入力のインデックスで垂直に印刷を開始します。

入力が与えられた場合:

16

プログラムは以下を出力するはずです。

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

入力:

4

出力:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

入力:

1

出力:

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z

入力:

26

出力:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

得点

これはであるため、各言語の最短の回答が優先されます。

がんばろう!


6
0または1のインデックスを使用することを選択できますか?
-notjagan

一貫した先行スペースは許容されますか?
ジュゼッペ

末尾のスペースは受け入れられますか?
ドンヘイスティングス

大文字を使用できますか?
アダム

文字列のリストを返すことができますか?
アダム

回答:


13

、9バイト

↘✂β⁰N↓✂βη

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

使い方

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

この解決策は現在のバージョンのCharcoalでは動作しません(バグ修正が原因である可能性が高い)が、問題は10バイトで解決されます↘✂β⁰N↓✂βIθ


2
なぜそれが機能するのかわかりません。数週間前に導入されたバグかもしれません。(通常は。のIθ代わりに使用する必要がありηます)
ニール

@Neil今日は壊れているようです。Iθを使用することで解決します。
JP・デ・ラ・トーレ

…βN代わりにを使用して1バイトを節約します✂β⁰N
ニール

7

05AB1E、11バイト

AvNI<‚Wysú,

初めて05AB1Eを試すので、ヒントを受け入れます。

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

0to からのインデックスがゼロの入力25が許可されている場合、を省略することで10バイトにすることができます<


いいね!まさに私が得たもの。「リフト」を試しましたが、計画どおりに機能しません。それはかなり最適だと思います:)。
魔法のタコUr

4

JavaScript(ES2017)、73 72 71 66バイト

@JustinMarinerのおかげで数バイト節約

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''

1
これは、before を持つため、最後に10after zを追加します。バグフィックスと使用して68バイトにgolfed :TIOを++xx.toString()padStart
ジャスティン・マリナー

@JustinMarinerありがとう、私はそのためにES8に切り替えるかもしれないと思う
...-ETHproductions

カレーで何かを節約できますか?n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
シャギー

@Shaggyおそらく、そのタイプのカレーが許可されているかどうかはわかりません。
ETHproductions

ああ、ナッツ、これを許可するというあなたの提案はもはやコンセンサスではないように見える:(
Shaggy

4

Python 2、61 58 57バイト

n=input()-1
for i in range(26):print(' '*i)[:n]+chr(i+97)

ロッドのおかげで-3バイト

Xcoder氏のおかげで-1バイト増加



@Pavel 入力が1行しかないにもかかわらずinputforループが繰り返されるたびに呼び出されるので、それは機能しません。
-notjagan


添え字を使用した57バイト
氏Xcoder


4

Ruby、51 46 43バイト

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

文字列のリストを返します。

Pythonの連中が下付き文字で何かをしているように見えます。Xcoder氏のppperryのソリューションの改善からインスピレーションを得て、-5バイト。

rjust(51バイト)を使用した以前のソリューション:

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}


3

R、99 89バイト

@MickeyTは10バイトを節約しました

関数

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

デモ

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)

1
いくつかの小さな節約。むしろ、ifelse試してみてくださいminprint.noquote交換することができるcat'\n'ペーストインチ \nストレートキャリッジリターンを使用できます。関数本体の波括弧を削除できます。
MickyT

あなたは、使用していくつかのより多くを救うことができるwriteのではなくcatかつpastewrite(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
user2390246

3

網膜72 68バイト

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

オンラインでお試しください!出力には末尾の空白が含まれます。$ゼロインデックスが許可される前にスペースを削除して、1バイトを節約します。編集:@MartinEnderのアルファベットジェネレーターを使用して4バイトを保存しました。説明:

^
z
{2=`
$`
}T`l`_l`^.

アルファベットを挿入します。

\D
$.`$* $&¶

対角化してください。

\d+
$* 

入力をスペースとして単項に変換します。

s`( *)( +)(?=.*¶\1 $)
$1

行末が空白行より長くならないように、長すぎる行をトリミングします。


2

Mathematica、103バイト

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&

2

Pyth21 17 15バイト

バッテリーが3%の電話で行います。

VlG+*d?>QNNQ@GN

説明:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

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


1
@totallyhuman私はラスベガス、ニューメキシコ州のいくつかの素晴らしいピザ持っていた
スタン・ストラムを

かなり短いアプローチをいくつか見つけたので、自分の答えを投稿することにしました。
氏Xcoder

@ Mr.Xcoderうん、いい仕事だ。
スタン・ストラム




2

Haskell、58 54バイト

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

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

使い方

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

編集:@Lynnは4バイトを保存しました。ありがとう!



@リン; ありがとう!リストの表記法を忘れてしまいます。
nimi



1

JavaScript(Node.js)、72バイト

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

文字列のリストを返します。

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


なぜnode.jsなのでしょうか?有効な通常のJSのようです
-Downgoat

@DowngoatそれはTIOの自動フォーマットです
コナーオブライエン

ところで、使用してバイトを保存することができます.padStart
-Downgoat

私が考えていた方法でnvmを待って、基本的にETHの答えになります
-Downgoat

ES8に切り替えて、のpadEnd代わりに1バイトを保存しますrepeat
シャギー







1

C#(.NET Core)、66 + 18バイト

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

バイト数も含まれます

using System.Linq;

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

これは、各行に1つずつ、文字列のコレクションを返します。許可されていない場合、答えは17バイト増加しますstring.Concat()\n文字列内および文字列内でます

説明:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )

1

MATL、14バイト

26:tiXl2Y2oZ?c

MATL Online試しください

説明

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display

1

Pyth、12バイト

j.e+<*kdtQbG

ここで試してみてください!

文字列のリストが許可されている場合、これは11バイトに短縮できます

.e+<*kdtQbG

Pyth、12バイト

VG+<*dxGNtQN

ここで試してみてください!

Pyth、14バイト

jm+<*d;tQ@Gd26

ここで試してみてください。

文字列のリストが許可されている場合、これは13バイトに短縮できます

m+<*d;tQ@Gd26

これらはどのように機能しますか?

他のほとんどの回答とは異なり、これは3つのソリューションすべてで小文字のアルファベットをマップ/ループします。

説明#1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

説明#2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

説明#3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.



1

q / kdb +、33 31バイト

溶液:

-1{(&[x-1;til 26]#'" "),'.Q.a};

例:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

説明:

入力の最小の長さと)の範囲までのスペースのリスト(26)を作成し0..25、アルファベットの各文字と結合して、stdoutに出力します。

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

ノート:

  • -ブラケットを再ジギングすることにより-2バイト

1

Java 1.8(Lambdaなし)、98バイト

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

論理は簡単です。入力データの検証を行わない、非常に悪い!

  • 更新:機能のみ!@OlivierGrégoireに感謝します

1
一部のバイトを節約するには、for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);また、完全なプログラムの代わりに関数またはラムダのみを記述できます。
オリビエグレゴワール

関数の本体のみを含める場合、読者は何がa[0]参照されているかをどのようにして知ることができますか?スニペットはコンパイルしないと公平ではないと思います。課題は、構成要素が豊富な言語でも同様に興味深いものです。
ダグラス

1
こんにちは!スニペットではなく、関数またはラムダと言いました。;-)したがって、プログラム全体の代わりにvoid f(int i){...}(静的は必要ありません)書くことができi->{...}ます。Javaのすべてのヒントを参照してください。例として、この同じ課題に対する私の答えをご覧ください。サイトで楽しんでください!:-)
オリビエグレゴワール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.