Girdiye Çapraz Alfabe


26

Bu yazıdan ilham alındı . Bu soruyu bir kopya olarak işaretleyenler için, benim madenin bağlantılı olanın bir modifikasyonu olduğunu görmek için soruyu okumanızı tavsiye ediyorum. Bağlantılı olan bir giriş istemez ve sadece alfabeyi çapraz olarak basmaktır.

Meydan okuma

1-26 arasında bir girdi verildiğinde, alfabeyi çapraz olarak yazdırın, ancak verilen girişin dizininde dikey olarak yazdırmaya başlayın.

Örnekler

Giriş verilen:

16

Programınızın çıktısı alınmalı:

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

Giriş:

4

Çıktı:

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

Giriş:

1

Çıktı:

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

Giriş:

26

Çıktı:

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

puanlama

Bu , yani her dilde en kısa cevap kazanır.

İyi şanslar!


6
0- veya 1 indekslemeyi kullanmayı seçebilir miyiz?
notjagan

Tutarlı bir lider alan kabul edilebilir mi?
Giuseppe

Sondaki boşluklar kabul edilebilir mi?
Dom Hastings

Büyük harf kullanabilir miyiz?
Adám

Dizelerin bir listesini geri verebilir miyiz?
Adám

Yanıtlar:


13

Kömür , 9 bayt

↘✂β⁰N↓✂βη

Çevrimiçi deneyin!

Nasıl çalışır

↘✂β⁰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

Bu çözüm artık Kömürün mevcut sürümünde (büyük olasılıkla bir hata düzeltmesi nedeniyle) çalışmaz, ancak sorun 10 bayt için çözülmüştür ↘✂β⁰N↓✂βIθ.


2
Bunun neden işe yaradığından emin değilim; Birkaç hafta önce tanıtılan bir hata olabilir. (Normalde kullanmak Iθyerine normalde kullanmak zorunda kalırsınız η.)
Neil

@Neil Bugün kırılmış görünüyor. Iθ kullanmak onu çözer.
JP de la Torre

Kullanılarak 1 byte tasarruf …βNyerine ✂β⁰N.
Neil

7

05AB1E , 11 bayt

AvNI<‚Wysú,

İlk kez 05AB1E'yi deniyorum, bu yüzden ipuçlarına açığım.

Çevrimiçi deneyin!

Bir sıfır endeksli girişi varsa 0için 25bırakılır, bu çıkarılmasıyla 10 bayt olabilir <.


Niiice! Tam olarak ne aldım. "Kaldırmayı" denedim ama planlandığı gibi çalışmıyor. Bence bu oldukça uygun :).
Magic Octopus Urn,

4

JavaScript (ES2017), 73 72 71 66 bayt

@JustinMariner sayesinde bazı baytlar kaydedildi

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

1
Bu daha önce olması nedeniyle sonunda bir 10sonrasını ekler . Hata düzeltildi ve kullanarak 68 bayta kadar golf oynadı : TIOz++xx.toString()padStart
Justin Mariner

@JustinMariner Teşekkürler, bunun için ES8’e geçebileceğimi düşünüyorum ...
ETHproductions

Körleyerek bir şeyleri kurtarabilir misin? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy

@Shaggy Belki de, bu tür bir körilemeye izin verilip verilmediğini bilmiyorum.
ETHproductions

Ah, fındık, bu izin vermek için teklifin artık bir fikir birliği değil gibi görünüyor :(
Shaggy


4

Ruby, 51 46 43 bayt

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

Dizelerin bir listesini döndürür.

Görünüşe göre Python adamları aboneleriyle bir şeyler yapıyorlardı. -5 bayt Xcoder'ın ppperry'nin çözümündeki iyileştirmesinden ilham alarak bayt.

rjust(51 bayt) ile önceki çözüm :

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


3

R, 99 89 bayt

@MickeyT 10 bayt kaydetti

fonksiyon

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

gösteri

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
Birkaç küçük tasarruf. Aksine o zaman ifelsedeneyin min. macun içinde bir print.noquoteile değiştirilebilir . Düz bir satır başı olabilir. İşlev gövdesi için kıvrık ayraçlar bırakılabilir. cat'\n'\n
MickyT

writecatpastewrite(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
Şunu

3

Retina , 72 68 bayt

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

Çevrimiçi deneyin! Çıktı izleyen boşluk içerir. $Eğer sıfır indekslemesine izin verilmeden önce alanı silerek 1 byte tasarruf edin . Düzenleme: @ MartinEnder's alfabe jeneratörü kullanarak 4 bayt kurtardı. Açıklama:

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

Alfabeyi yerleştirin.

\D
$.`$* $&¶

Köşegenleştir.

\d+
$* 

Girdiyi unary'e boşluk olarak dönüştürün.

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

Uzun çizgileri, hiçbir çizginin sonundaki boş çizgiden daha uzun olmayacak şekilde kesin.


2

Mathematica, 103 bayt

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

2

Pyth , 21 17 15 bayt

% 3 batarya ile bir telefonda yapılır.

VlG+*d?>QNNQ@GN

Açıklama:

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)

Çevrimiçi deneyin!


1
@totallyhuman Sadece Las Vegas, New Mexico'da harika bir pizza yedim
Stan Strum

Bazı daha kısa yaklaşımlar buldum ve kendi cevabımı göndermeye karar verdim .
Bay Xcoder

@ Mr.Xcoder Evet, bu konuda iyi iş.
Stan Strum,




2

Haskell, 58 54 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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 

Düzenleme: @Lynn 4 byte kaydetti. Teşekkürler!



@Lynn; Teşekkürler! Listeler için not almayı hep unutuyorum.
nimi


2

Gaia , 12 bayt

…26⊃§×¦₵a+†ṣ

Çevrimiçi deneyin!

açıklama

…             Range 0..input-1
 26⊃          Repeat the last number enough times to make it have length 26
    §×¦       Turn each number into a string of that many spaces
       ₵a+†   Add the corresponding letter to each
           ṣ  Join with newlines

1

JavaScript (Node.js) , 72 bayt

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

Dizelerin bir listesini döndürür.

Çevrimiçi deneyin!


Node.js nedenini sorabilir miyim? Geçerli Normal JS gibi görünüyor
Downgoat

@Downgoat Bu TIO otomatik biçimlendirme
Conor O'Brien,

btw kullanarak bayt tasarrufu yapabilirsiniz.padStart
Downgoat

Beklediğim gibi düşünmeyi bekle nvm'yi ETH'nin cevabı haline getiriyor
Downgoat

ES8'e geçin ve padEndbunun yerine bir bayt kaydedin repeat.
Shaggy

1

Mathematica, 67 bayt

SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&

SparseArrayDizelerin bir tanesini döndürür . Görselleştirmek için Grid@önüne ekleyin .

Wolfram Sandbox'ta dene

kullanım

Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5]
a
 b
  c
   d
    e
    f
    g

    ⋮

    z 

1

Python 2 , 52 bayt

lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)]

Çevrimiçi deneyin!

Dizelerin bir listesinin iyi olduğunu farz ediyorum ...

En kısa zamanda özyineleme ile alabilirim:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]





1

C # (.NET Core) , 66 + 18 bayt

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

Bayt sayısı da içerir

using System.Linq;

Çevrimiçi deneyin!

Bu, her satır için bir tane olmak üzere bir dize koleksiyonu döndürür. İzin verilmezse, cevap string.Concat()ve\n dize içinde içinde

Açıklama:

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 bayt

26:tiXl2Y2oZ?c

MATL Online'da deneyin

açıklama

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 bayt

j.e+<*kdtQbG

Burada dene!

Dizelerin listelerine izin verilirse, bu 11 bayta kısaltılabilir :

.e+<*kdtQbG

Pyth , 12 bayt

VG+<*dxGNtQN

Burada dene!

Pyth , 14 bayt

jm+<*d;tQ@Gd26

Burada dene.

Dizelerin listelerine izin verilirse, bu 13 bayta kısaltılabilir :

m+<*d;tQ@Gd26

Bunlar nasıl çalışır?

Diğer cevapların çoğundan farklı olarak, bu 3 çözümde de küçük harfli alfabe üzerinde eşleşir / çevrilir.

Açıklama # 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.

Açıklama 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)

Açıklama # 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 bayt

Çözüm:

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

Örnek:

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

Açıklama:

Girişin minimum uzunluğuna ve aralığının uzunluğuna kadar olan boşlukların (26) bir listesini oluşturun 0..25, alfabenin her harfini birleştirin, stdout'a yazdırın.

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

Notlar:

  • Parantezleri yeniden alarak -2 bayt

1

Java 1.8 (Lambda'sız), 98 Bayt

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

Mantık basit. Hiçbir giriş veri doğrulaması sağlamaz, çok kötü!

  • Güncelleme: Yalnızca işlev! @Olivier Grégoire için teşekkür ederiz

1
Bazı baytları ayırmak için, for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Ayrıca, programı kullanmak yerine yalnızca bir işlev veya bir lambda yazabilirsiniz.
Olivier Grégoire

Sadece bir fonksiyonun gövdesini dahil edersem, okuyucu ne anlama geldiğini nasıl bilebilir a[0]? Derleme yapmazlarsa snippet'lerin adil olmadığını düşünüyorum; Buradaki zorluk, yapı olarak zengin bir dille olduğu kadar ilginç.
Douglas,

1
Merhaba! Bir işlev veya bir lambda demiştim, bir snippet değil. ;-) Böylece yazabilir void f(int i){...}(statik gerekli değil) veya i->{...}tüm programın yerine. Tüm Java ipuçlarına bakın . Örnek olarak bu aynı meydan okuma için cevabımı görün . Sitede eğlenin! :-)
Olivier Grégoire
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.