Yarı Çapraz Alfabe


35

İngilizce alfabenin bir mektubu verildiğinde, sizin göreviniz girdi için yarı köşegen bir alfabe oluşturmaktır.

Yarı köşegen bir alfabe nasıl yapılır?

Kısa Açıklama : Öncelikle, harfin alfabedeki konumunu alırsınız P( Pburada 1 indekslenir). Ardından, her harfi bir satırdaki giriş (dahil) olana kadar önce basar P-1ve bu harf Pzamanlarını boşluklarla arayarak tekrarlarsınız .

Örnekler :

  • Verilen F, programın çıktı vermelidir:

    bir 
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
    
  • Verilen K, programın çıktı vermelidir:

    bir
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
          ggggggg 
           hhhhhhhh 
            IIIIIIIII 
             JJJJJJJJJJ 
              KKKKKKKKKKK 
    
  • Verilen A, programın çıktı vermelidir:

    A
    

kurallar

  • Küçük veya büyük harflerden birini seçebilirsiniz, ancak bu tutarlı olmalıdır.

  • Aşağıdaki gibi fazladan boşluklara sahip olabilirsiniz:

    • Tek bir tutarlı satır aralığı (her satırda).
    • Bir izleyen veya önde gelen yeni satırlar.
    • Arka boşluklar.
  • Giriş ve çıkış herhangi bir standart ortalama tarafından alınabilir ve varsayılan boşluklar uygulanır.

  • versiyonunu sağladığınız sürece, bunun yerine satırların bir listesini çıkarmanıza izin verilir .

  • Bu , yani bayttaki en kısa kod kazanır!

Bu zorluktan ilham aldık .


Dizelerin listesi olarak çıktı uygun mu?
Adám

2
Neden aşağı oy? Neleri geliştirebilirim?

1
"P burada 1 indeksli" deyince, buradaki zorluk veya örneğe mi işaret ediyor?
Dave

3
@pizzakingme Hayır, olmayabilir.

1
: Cevabımı golf ederken accidentlly ilginç bir model var tio.run/##K0nO@f@/...
sergiol

Yanıtlar:


10

Python 3 , 59 bayt

lambda l:[' '*i+'%c '%(i+65)*-~i for i in range(ord(l)-64)]

Çevrimiçi deneyin!

Python 3 , 61 bayt

lambda l:[' '*i+-~i*(chr(i+65)+' ')for i in range(ord(l)-64)]

Çevrimiçi deneyin! (güzel baskı versiyonuna bağlantı)


8
Olumsuz bir oy için kesinlikle hiçbir sebep göremiyorum. @ Downvoter açıklayabilir mi?
Bay Xcoder

1
Ben sadece bir yanlış anlaşılma olduğunu, belki de açıklama eksikliğinden hoşlanmadıklarını düşünebilirim (ikincisi oldukça düşük olasılıkla IMO'dur)
Conor O'Brien,

Python'dan hoşlanmıyorum ve Python ile uygulayamıyorum, bu yüzden cevap benim için yararlı değil mi? Şaka yapıyorum, ancak düğme ipuçları muhtemelen bu sitenin kurallarına uymuyor
Thomas Weller

Sadece ben miyim yoksa Bay Xcoder’ın 1 temsilcisi var mı?
Stan Strum



7

PowerShell , 45 42 bayt

65..$args[0]|%{" "*$i+++"$([char]$_) "*$i}

Çevrimiçi deneyin!

Değişken bir karakter olarak girdiyi alır, daha sonra başlıklar arasında o noktaya kadar döner, her yineleme uygun sayıda boşluk hazırlar ve ardından char \ boşluk melezi.

TessellatingHeckler sayesinde 3 bayt kurtardı.


@TessellatingHeckler Gerçekten. O "$args"kadar çok golf oynuyordum ki , burada işe yaramazsa, [0]yöntemi unuttum . Haha.
AdmBorkBork

5

JavaScript (ES6), 85 bayt

Hem giriş hem de çıkış için küçük harfle çalışır. Her satırda bir satır boşluğu ve sonunda bir boşluk çıkar.

f=(c,k=10,C=k.toString(36),r=s=>`${s} `.repeat(k-9))=>r``+r(C)+(C==c?'':`
`+f(c,k+1))

gösteri


`${s} `(s+"")bir bayt tasarrufu için değiştirilebilir
Luke,

@Luke Bu alana ihtiyacım var. Yerine (s+" "), ancak bu kadar uzun olabilir.
Arnauld,

5

APL (Dyalog) , 26 bayt

Skaler karakter istemi. Satır listesini yazdırır.

(∊⍴∘'',' ',¨⍨⊢⍴⊃∘⎕A)¨⍳⎕A⍳⎕

Çevrimiçi deneyin! (bir ek baytta ASCII sanat sürümüne sahiptir)

 giriş istemi

⎕A⍳ bulmak ɩ nDex içinde bir lphabet

 İlk olarak birçok nt ntegers

( Her birine aşağıdaki yapışkan işlevi uygulayın:

⊃∘⎕A argümanının harfini A lphabet'ten seç.

⊢⍴ döngüsel olarak argüman uzunluğuna göre yeniden şekillendir

' ',¨⍨ her birine bir boşluk ekle

⍴∘'', bir argüman uzunluğu dizgesi hazırlayın (boşluklarla doldurulmuş)

ε nlist (düzleştirmek)


ASCII sanat sürümünde sol tarafta bir tane var; karakter dizisine dizelerin listesini karıştırın.


4

Perl 5 , 31 bayt

İçin 30 bayt kodu + 1 -l.

print$"x$-,"$_ "x++$-for A..<>

Çevrimiçi deneyin!


Bunu bayrak sayyerine kullanarak kesebilirsiniz -l: Çevrimiçi deneyin!
Xcali

@Xcali Yıpranmışım -E/ -M5.01, saygeçmişte çokça kullandım ve muhtemelen sınırlı bir kaynak mücadelesinde sayalternatif olabileceği gerçeğini kötüye kullanacaktım print, belki de, ama -3 uğruna, Şimdilik olduğu gibi. Adil bir argüman için bu meta gönderiye bakın . Yine de girişi takdir edin!
Dom Hastings,

3

Dyalog APL, 38 bayt

{↑{(y/' '),(2×y←⎕A⍳⍵)⍴⍵,' '}¨⎕A↑⍨⎕A⍳⍵}

Çevrimiçi deneyin!

Nasıl?

⎕A↑⍨ - alfabeye kadar

⎕A⍳⍵ - giriş karakteri

¨ - Her karakter için

    ⍵,' ' - char ve bir boşluk al

    (...)⍴ - yeniden şekillendirmek

    2×y←⎕A⍳⍵ - Alfabedeki karakterin iki katı

    (y/' ') - ve karakter dizini boşluklarını hazırla

- sonra dümdüz


3

APL (Dyalog Klasik) , 26 bayt

{↑{(≠\⍵<⍳3×⍵)\⍵⊃⎕A}¨⍳⎕A⍳⍵}

Çevrimiçi deneyin!

açıklama

                      ⍳⎕A⍳⍵  generate indexes up to position of right arg 
{                          on each index apply function
   (≠\⍵<⍳3×⍵)                generate boolean mask for expansion (each line has a length 3 times its index ⍵, starting with  blanks and then alternating letter blank)
             \⍵⊃⎕A          expand character in position 
                             mix result into text matrix

İyilik ... 4 APL-er aynı anda aynı problemi çözüyor! :) Sana dış kaldırmak için izin konum codegolf düşünmek {}yerine sahip ve bir "tam programı" yerine bir işlev olduğunu iddia ederler. Bu, çözümünüzü şu ana kadar en iyi hale getirecektir.
ngn

İyi bir işaret olmalı :) Öneriniz için teşekkürler. Yaptığımı gördüm ama çizgiyi nereye çizeceğinizden emin değildim. Sanırım kıvrıkları çıkarır ve karıştırırsam 3 bayt kurtarabilirim.
Gil

3

V , 28, 26, 25 , 23 bayt ( Rekabetçi )

¬A[/a
lDÓ./& ò
ò-Ûä$Û>

Çevrimiçi deneyin!

Belirli özellikler eklemeyi planlamama rağmenUzun zamandan , bu zorluğun sonunda beni yapmaya ikna edebileceğini unutmayın.

Çıktı, her satırda bir satır aralığı ve sondaki bir satırsonu satırını içerir.

HexDump:

00000000: ac41 5b2f 1261 0a6c 44d3 2e2f 2620 f20a  .A[/.a.lD../& ..
00000010: f22d dbe4 24db 3e                        .-..$.>

Açıklama:

¬A[         " Insert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ['
   /        " Search for...
    <C-r>a  "   The input
l           " Move one character to the right
 D          " And delete every character after the cursor
  Ó         " Search for...
   .        "   Any character
    /       " And replace it with...
     & ò    "   That character followed by a space and a newline
ò           " Recursively...
 -          "   Move to the beginning of the next line up
  Ûä$       "   Make *line number* copies of the current line
     Û>     "   And indent this line by *line number* spaces

1
Bu yarışıyor. Başlık notunu kaldırabilirsiniz.

Kendim gibi yeni metadan haberi olmayanlar için kullanışlıdır
Conor O'Brien,


3

R, 94 88 bayt

Giuseppe sayesinde -6 bayt

function(x,l=LETTERS)for(i in 1:match(x,l))cat(rep(' ',i-1),rep(paste(l[i],' '),i),'\n')}

Ungolfed:

f=function(x,l=letters){
  for(i in 1:which(l==x)){
    A=paste(l[i],' ')
    cat(rep(' ',i-1),rep(A,i),'\n')
  }
}

88 bayt : anonim bir işlev döndürmek gayet iyi, ftek bir liner olduğu için parantezden kurtulabilirsiniz ve matchyerine whichbir bayt kazandırıyorsunuz.
Giuseppe


Stdin'den girdi alan 68 bayt .
Giuseppe

3

Haskell, 52 44 bayt

f k=[[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]

Satır listesini döndürür.

Çevrimiçi deneyin!

f k=                  -- main function is f, input parameter k
  [   |s<-['A'..k]]   -- for each s from ['A'..k]
     >>=              -- map (and collect the results in a single string) the function: 
         (['A'..s]>>) --  replace each element in ['A'..s] with
    [  ,  ]           --  over the list, containing
     " "              --   a single space to get the indent
        s:" "         --   s followed by space to get the letter sequence

Düzenleme: @jferard: üç bayt kaydedildi. Teşekkürler!


49 bayt:f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
temmuz

@jferard: Çok teşekkürler. Meydan okumayı tekrar okuduğumda, hat başına öncü bir alana izin verildiğini fark ettim, bu yüzden buna ihtiyacımız yok tail$.
nimi

2

JavaScript (ES8), 92 bayt

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

Küçük harf kullanır. Satırların bir tane önde ve bir de arkada kalan alanı vardır Satır dizisini döndürür.

Test Parçacığı

let f=

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

;O.innerText=f("k").join`\n`
<pre id=O></pre>


2

Kabuğu , 13 bayt

z+ḣ∞øzRNC1…'A

Tek tırnak içindeki bir karakteri komut satırı argümanı olarak alır, sonucu STDOUT'a yazdırır. Çevrimiçi deneyin!

açıklama

Husk'un dizelerin listelerini basma şeklinden yararlanıyorum: iç listelere boşluklarla ve dış listelerde yeni çizgilerle birleş.

z+ḣ∞øzRNC1…'A  Implicit input, say 'C'
          …'A  Range from A: "ABC"
        C1     Cut into strings of length 1: ["A","B","C"]
     z N       Zip with positive integers
      R        using repetition: x = [["A"],["B","B"],["C","C","C"]]
   ∞ø          The empty string repeated infinitely: ["","","",...
  ḣ            Prefixes: [[],[""],["",""],["","",""],...
z+             Zip with x using concatenation: [["A"],["","B","B"],["","","C","C","C"]]
               Implicitly join each inner list with spaces, join the resulting strings with newlines and print.

2

05AB1E , 15 14 13 bayt

Adnan sayesinde 1 bayt kaydedildi

A¹¡н«ƶ€S»¶¡āú»

Çevrimiçi deneyin! veya Ascii sanat versiyonu

açıklama

A                # push lowercase alphabet
 ¹¡              # split at input
   н             # get the first part
    «            # append the input
     ƶ           # repeat each a number of times corresponding to its 1-based index
      €S         # split each to a list of chars
        »        # join on spaces and newlines
         ¶¡      # split on newlines
           āú    # prepend spaces to each corresponding to its 1-based index
             »   # join on newlines

Biraz farklı ele aldık gibi gözüküyor : D
Outgolfer Erik

@EriktheOutgolfer: Benzer şekilde yaptık, ancak kaldırmadan önce bir boşluk eklemek için çok güzel bir fikir, birleştirme ihtiyacını ortadan kaldırmak sizinkini kısalttı. Baştaki / sondaki boşlukları ve ne de çıktısını liste olarak okumamıştım, bu yüzden uygulamadan önce tüm mücadeleyi okumamı umarım: P
Emigna

dr: vectorization: p
Outgolfer Erik,

A¹¡н«ADIk>£çalışması gerekir yerine
Adnan

@Adnan: Teşekkürler! Ben yaptım A¹¡нama dikkate almadı «o yeterince iyi değildi bu yüzden son harf için: P
Emigna


2

QBasic, 79 74 72 bayt

Bayt tasarrufu için Taylor Scott'a teşekkürler (iki kez!)

FOR i=1TO ASC(INPUT$(1))-64
?TAB(i)
FOR j=1TO i
?CHR$(64+i)" ";
NEXT j,i

Büyük harf kullanır. Giriş, tuşa basılarak yapılır ve ekrana yansıtılmaz.

açıklama

Biz döngü igelen 1alfabesinde sınırlama Mektubun pozisyonuna kadar (1 tabanlı). Her biri için ekranın isütununa ; sonra, zaman, alfabenin inci harfini ve ardından bir boşluk yazarız.iTABii


Görünen o ki, INPUT$(1)komutu z$-2 baytlık bir delta değişkeni için doğrudan yerine kullanabilirsiniz
Taylor Scott

@TaylorScott İyi fikir, teşekkürler!
DLosc

2

Japt -R, 24 23 17 15 bytes

Outputs an array, includes a leading newline and a leading & trailing space on each line.

IòUc ÏçSiXd¹iYç

Test it

  • 1 byte saved with help from Oliver and a further 6 thanks to him pointing out a better way to generate the initial array.

1

Charcoal, 18 bytes

F⁺⌕αθ¹«P×⁺§αι ⁺ι¹↘

Try it online!


Nah, you can't let 05AB1E beat Charcoal... :P
totallyhuman


Sadly arbitrary leading whitespace isn't allowed otherwise E…·?θ⁺× κ⪫× κι would do the job in 14 bytes.
Neil

@Neil One leading whitespace is allowed, but I'm not sure how ? got in there. It should be A instead I think. Oh wait, ohhhhh I see what you mean.
Erik the Outgolfer

1

Braingolf, 65 bytes

a#a-# 7-,-~vc<!?>[$_]:$_|&,(.#a-!?.>[# M]1+>[.M# M]:$_!@|v#
&@R);

Try it online!

Lowercase.

Contains 1 trailing space on each line, and a trailing newline at the end of output.



1

JavaScript, 102 94 bytes

2 bytes saved thanks to Neil

f=
a=>[...Array(parseInt(a,36)-9)].map((a,b)=>''.padEnd(b).padEnd(b*3+1,(b+10).toString(36)+' '))

console.log(f('k').join`\n`)


1

Retina, 51 bytes

^.
$&$&
}T`L`_L`^.
.
$.`$* $&$.`$* ¶
+`(\w) \B
$&$1

Try it online! Explanation:

^.
$&$&

Duplicate the (first) letter.

}T`L`_L`^.

Rotate it back 1 in the alphabet, or delete it if it's a duplicate A. Keep duplicating and rotating until we duplicate A, at which point the deletion undoes the duplication and the loop completes.

.
$.`$* $&$.`$* ¶

Replace each letter with a line with the letter padded on both sides.

+`(\w) \B
$&$1

Insert duplicate letters between all pairs of padding spaces to the right of existing letters.



1

Charcoal, 15 bytes

F…·AS«P⪫E…@ιι ↘

Try it online! Link is to verbose version of code. Explanation:

 …·AS           Inclusive character range from A to the input
F    «          Loop over each character
         …@ι    Exclusive range from @ to the current character
        E   ι   Replace each element with the current character
       ⪫        Join with spaces
      P         Print without moving the cursor.
              ↘ Move the cursor down and right.

If extra padding was legal, this would work for 14 bytes:

E…·?θ⁺× κ⪫× κι

Try it online! Link is to verbose version of code.


1

Mathematica, 70 bytes

(T=Table)[""<>{" "~T~i,T[Alphabet[][[i]]<>" ",i]},{i,LetterNumber@#}]&

lowercase

outputs a list

thanx @ngenisis for corrections

For version place Column@ at the beginning


1

Excel VBA, 72 Bytes

Anonymous VBE immediate window function that takes input from cell A1 and outputs to the VBE immediate window

For i=1To Asc([A1])-64:[B1]=i:?Space(i-1)[REPT(CHAR(B1+64)&" ",B1)]:Next

1

Pyth, 17 bytes

.e+*kd*+bdhk<GhxG

Try it here (pretty print version).


How does this work?

  • hxG - Takes the index of the input in the lowercase alphabet.

  • <G - Trims every character after the input from the alphabet.

  • .e - Enumerated Map. Maps over the trimmed alphabet with the indexes as k and the letters as b.

  • *kd - Append k spaces.

  • +bd - b + a space (the current letter + space).

  • *...hk - Repeat k+1 times.

  • +(...)(...) - Concatenate.


1
One of my favorite things about Pyth is writing an answer and finding that someone wrote the same answer, character for character. It hits that Python "there is a best answer" spot perfectly!
Dave

@pizzakingme Yeah, I wonder if I can do better
Mr. Xcoder

the space addition feels wrong, I think better is possible
Dave

@pizzakingme I could get .e+*kdjd*bhk<GhxG as 17 bytes as well
Mr. Xcoder

16 bytes: .e+*kd*+bdhkhcGQ
Dave

1

C++ (gcc), 164 bytes

#include<iostream>
#define f for(int i=0;i<o-'`';i++)
using namespace std;int main(){char c;cin>>c;for(char o='a';o<=c;o++){f cout<<' ';f cout<<o<<' ';cout<<'\n';}}

My first attempt after a long time lurking!

Ungolfed code below:

#include <iostream>

using namespace std;
#define f for (auto i = 0; i < output - '`'; i++)

int main()
{
  char input;

  cin >> input;

  for (char output = 'a'; output <= input; output++)
  {
    f cout << ' ';

    f cout << output << ' ';

    cout << endl;
  }
}

Try it online!


I know there has to be a bunch of golfing things to do, but so far, that's the smallest I've gotten.
Drise
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.