Alfabe üçgeni tekrar grev


24

Görev

Görevin bu tam metni yazdırmaktır:

A
BCD
EFGHI
JKLMNOP
QRSTUVWXY
ZABCDEFGHIJ
KLMNOPQRSTUVW
XYZABCDEFGHIJKL
MNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLM
NOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL
MNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW
XYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ
KLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY
ZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP
QRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
JKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD
EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

gözlük

  • Büyük harf yerine küçük harfle yapabilirsiniz.
  • Üçgenin sonunda izleyen yeni satırlara izin verilir.
  • Her satırdan sonra izleyen boşluklara izin verilir.
  • Bir dizi dizge çıkarmak yerine STDOUT'a yazdırmalısınız.

puanlama

Bu . Bayt sayısı en düşük olan program kazanır.


1
Ne demek "yine grev"? Böyle yaptığın başka bir zorluk var mıydı?
haykam


1
Gerçekten önemsiz görünüyor, gerçekten (başka) bir alfabe mücadelesine ihtiyacımız var mı?
Rohan Jhunjhunwala

2
Bu iyi bir meydan okuma, ancak bence bu alfabe zorluklarının doygunluğunu geride bıraktık, kişisel bir şey değil.
Rohan Jhunjhunwala

Aslında bir alfabedeki zorluğu aramak, bir pozisyondaki mektubun modfonksiyonu içeren koordinatlarından basit ifadelerle hesaplanamamasıdır . Vaktim varsa bir tane de yapabilirim.
Weijun Zhou

Yanıtlar:


39

Vim, 29 bayt

:h<_↵↵↵y$ZZ26P0qqa↵♥βjllq25@q

Nerede Return tuşuna temsil Escape tuşuna ve βGeri tuşuna.

görüntü tanımını buraya girin


3
Beni her zaman bu sorulardaki vim cevabına nasıl atarsın? Yine de Aargh +1, takma adımı alamıyorum! :)
DJMcMayhem

7
Hala yerine kullanman gerektiğini düşünüyorum . Ve yerine β. Bu Unicode karakterleri bunun için yapıldı. utf8icons.com/subsets/control-pictures
mbomb007 23:16

9

Python 2, 65 bayt

i=1
a=bytearray(range(65,91))*26
while a:print a[:i];a=a[i:];i+=2

1
Başlığı Python 2 olarak değiştirdim, çünkü kod Python 3'te çalışmayacak.
Leaky Nun

7

Jöle , 10 bayt

26RḤ’RØAṁY

Çevrimiçi deneyin!

Nasıl çalışır

26RḤ’RØAṁY  Main link. No Arguments.

26          Set the return value to 26.
  R         Range; yield [1, 2, ..., 25, 26].
   Ḥ        Unhalve; yield [2, 4, ..., 50, 52].
    ’       Decrement; yield [1, 3, ..., 49, 51].
     R      Range; yield [[1], [1, 2, 3], ..., [1, ..., 49], [1, ..., 51]].
      ØA    Yield the uppercase alphabet.
        ṁ   Mold the alphabet as the array of ranges. This repeats the uppercase
            letters over an over again, until all integers in the range arrays
            have been replaced with letters.
         Y  Join, separating by linefeeds.

O zamanlar "Çifte" "Unhalve" olarak mı adlandırıldı? Ayrıca, harika! [100k rep için tebrikler demek için bekleyen]
Erik Outgolfer

Bu sadece bir anımsatıcı. Hbir yarıya ve tersi de (bir unhalve ).
Dennis,

Sadece düşünüyorum /2ya da *2, yani "Yarım" ya da "İkili". Bu yüzden kafam karıştı.
Outgolfer Erik,

Ayrıca 10 byte:27Ḷ²IRØAṁY
Leaky Nun

Ayrıca 10 byte:51Rm2RØAṁY
HyperNeutrino,

7

VBA Excel (80 bayt, 1742 bayt)


Excel, 1742 bayt

Ügoren'in yaratıcı cevabından esinlenerek , OP'de gösterilen modeli oluşturmak için bir Excel formülü bulmayı başardım.

=MID(REPT("ABCDEFGHIJKLMNOPQRSTUVWXYZ",26),(ROW()-1)^2+1,2*ROW()-1)

Bu formülü A1 hücresine yapıştırın, ardından A1: A26 aralığının tümüne sürükleyin.

Formülün uzunluğu 67 bayttır, ancak 26 defa çoğaltmanız gerekir, bu yüzden 67 * 26 = 1742 bayta eşittir. İşte çıktı:

görüntü tanımını buraya girin


Excel VBA, 80 bayt

Artık, işlemi otomatikleştirmek ve çok sayıda bayttan tasarruf etmek için Excel'i VBA ile entegre etmemiz mümkün. Komut Penceresine aşağıdaki kodu yazın ve çalıştırın ( Visual Basic Düzenleyicisi'nde görüntülemek için CTRL+ tuşlarını kullanın G):

[A1:A26]="=MID(REPT(""ABCDEFGHIJKLMNOPQRSTUVWXYZ"",26),(ROW()-1)^2+1,2*ROW()-1)"

Program, yukarıdaki Excel formülünü A1: A26 aralığına yazdırmak suretiyle çalışır. Ne yazık ki, hem Excel hem de VBA'da yerleşik bir alfabe yoktur.


Sütun adları bana yerleşik bir alfabe gibi görünüyor. İlk 26 sütun adını kullanın.
mbomb007

1
@ mbomb007 Peki ne? Bunları dizeleri yerine kullanmak daha zor olacağını düşünüyorum.
Outgolfer Erik, 28:16

@EriktheGolfer Yani? Benim demek orada olmasıydı olan bir yerleşik alfabesi.
mbomb007

1
@ mbomb007 "Şu anda kullandığın şeyin yerine ilk 26 sütun adını kullan" olarak algıladığım "İlk 26 sütun adını kullan" dedin, bu yüzden cevap verdim.
Outgolfer Erik,

@EriktheGolfer Bu bir öneri. Kaç bayt olacağını düşün.
mbomb007

5

Haskell, 67 bayt

_#53=[]
s#i=take i s:drop i s#(i+2)
mapM putStrLn$cycle['A'..'Z']#1

iÇizginin uzunluğu boyunca basit bir özyineleme . Her adımda, bir sonraki ikarakter alfabenin sonsuz tekrarından alınır.


4

Mathematica, 90 bayt

StringRiffle[Flatten[Alphabet[]&~Array~26]~Internal`PartitionRagged~Range[1,51,2],"
",""]&

Anonim işlev Girdi almaz ve bir dize çıktı olarak döndürür. Golf önerileri kabul edilir. Neyin Internal`PartitionRaggedişe yaradığı

In[1]:= Internal`PartitionRagged[{2, 3, 5, 7, 11, 13}, {2, 3, 1}]               

Out[1]= {{2, 3}, {5, 7, 11}, {13}}

Mathematica'nın alfabe üçgenleri için yerleşik bir yeri var mı?
Buffer Over Read

4

C, 79 bayt

main(i,j){for(i=0,j=1;i<676;i++){putchar(i%26+65);if(j*j==i+1){puts("");j++;}}}

İlk cevabım C \ o /

Golf önerileri memnuniyetle karşılıyor.


62:i;main(j){while(i<676)printf("\n%c"+(j*j^i++||!j++),i%26+65);}
xsot

@xsot Teşekkürler, ancak lider yeni hatlara izin verilmediğinden korkuyorum.
Sızdıran Rahibe

1
Ama önde gelen yeni hat yok mu?
xsot

60:i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
saat

@ immibis O zaman göndermeliyim sanırım.
xsot

4

Brachylog , 37 bayt

26~l<:1aLc~j[@A:I],L~@nw
=:2%1,.#@l?,

Çevrimiçi deneyin!

açıklama

  • Ana tahmin:

    26~l         Let there be a list of 26 elements
    <            This list is an ascending list of integers
    :1aL         Apply predicate 1 to that list ; the resulting list of strings is L
    c            Concatenate the list of strings into one big string
    ~j[@A:I],    That big string is the result of juxataposing the alphabet I times to itself
    L~@n         Create a string which when splitted on line breaks results in L
    w            Write that string to STDOUT
    
  • Tahmin 1: değişken uzunluktaki tek karakter dizilerini oluşturmak için kullanılır.

    =            Assign a value to the Input
    :2%1,        That value must be odd
    .#@l?,       Output is a string of length Input
    

Sonunda bir ascii sanat yarışması yapıyorsunuz
Leaky Nun

@ LeakyNun dize manipülasyonu olarak ASCII art
imo'dan

Bunu etikete eklemeli miyim?
Sızdıran Rahibe

Son satırın bitmeyen tek satır olduğu gerçeğinin güzel kullanımı Z, çünkü 26kare içermez.
Sızdıran Rahibe


3

JavaScript (ES6), 77 82 88

EcmaScript 6, newline için hazır bir şablon dizesini kullanarak sadece 1 byte tasarruf etmek için gerekli.

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)

Daha az golf oynadı

for(i = r = l = o = '';
    l + 52;
    r++ || (r = l -= 2, o += `\n`))
  o += (i++ % 26 + 10).toString(36);
alert(o);

Ölçek

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)


ES6 cevap Tarayıcımda çalıştırabilirim
Downgoat

.ToString (36) mantığını çaldım ... şimdi 80 byte geçmelisin !!
applejacks01

Ahh, bunu kütüphanemle yenmenin bir yolunu düşünemiyorum. Sorun için teşekkürler!
applejacks01

3

Perl, 42 41 39 bayt

perl -E '@b=(A..Z)x26;say splice@b,0,$#a+=2for@b'

Sadece kod:

@b=(A..Z)x26;say splice@b,0,$#a+=2for@b

Açıkça daha kısa bir sürüm ne yazık ki dahili bir perl problemini tetikliyor (İterasyonda serbest değerin kullanılması):

say splice@b,0,$#a+=2for@b=(A..Z)x26

2

JavaScript, 129 bayt

z=1,i=0,g=a=>{b=0,c="";while(a+a-1>b){c+='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``[i>26?i=0:i++];b++}console.log(c)};while(z<26)g(z++)

1
Spread operatörünü kullanmak size 3 byte kazandırabilir : [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']yerine 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``.
insertusernamehere


2

Git, 133 bayt

package main
import S "strings"
func main(){s:=S.Repeat("ABCDEFGHIJKLMNOPQRSTUVXXYZ",26)
for i:=1;s!="";i+=2{println(s[:i]);s=s[i:]}}

2

MATLAB, 112 109 95 79 77 bayt

Bu Octave ile de çalışacak , burada online deneyebilirsiniz .

a=['' 65:90 65:90]';j=0;for i=1:2:52;b=circshift(a,j);j=j-i;disp(b(1:i)');end

Bu yüzden bazı büyük değişikliklerden sonra, 14 32 bayt daha sakladım. Bu, MATLAB'den beklediğim kadar uzun olmaya başladı. Oldukça farklı olduğu için eski sürümü aşağıda bıraktım.

a=['' 65:90 65:90]';        %Create 2 copies of the upper case alphabet
j=0;                        %Initialise cumulative sum
for i=1:2:52;               %For each line length
    b=circshift(a,j);       %Rotate the alphabet string by the cumulative offset
    j=j-i;                  %Update cumulative negative sum of offsets.
    disp(
         b(1:i)'            %Extract first 'line length' characters from rotated alphabet.
               );           %Display next line (disp adds newline automatically)
end

Orijinal versiyon:

a=['' repmat(65:90,1,26)];c=cumsum(1:2:51);disp(cell2mat(arrayfun(@(s,f)[a(s:f) 10],[1,c(1:25)+1],c,'Un',0)))

Vay bu, düşündüğümden daha uzun sürdü. Bakalım bir kaç baytı atlatamam.

Açıklanacak bir unungolfed versiyonu:

a=['' repmat(65:90,1,26)]; %Create 26 copies of the upper case alphabet
c=cumsum(1:2:51);          %Calculate the end index of each row in the above array, by cumulatively summing the length of each line
disp(
     cell2mat(
              arrayfun(@(s,f)
                             [a(s:f) 10], %Extract the part of the alphabet and insert a new line.
                                         [1,c(1:25)+1],c, %start index is the previous end of line plus 1. End index is as calculated by cumsum.
                       'Un',0 %The returned values are not all the same length
                       )   %Do this for each line
              )            %Convert back to a matrix now new lines inserted
     )                     %And display it

Teşekkür

  • 3 bayt kaydedildi - thanks @LuisMendo

2

XPath 3.0 (ve XQuery 3.0), 84 bayt

codepoints-to-string((0 to 25)!(subsequence(((1 to 26)!(65 to 90)),.*.+1,2*.+1),10))

Açıklama:

(1 to 26)!(65 to 90) alfabe 26 kere

(0 to 25)!(subsequence(XX, start, len),10) her biri newline tarafından takip edilen 26 sırayı alır.

subsequence(X, .*.+1, 2*.+1) başlangıç ​​pozisyonu ve uzunluğu ile art arda gelenleri alır: (1, 1), (2, 3), (5, 5), (10, 9) vs.

codepoints-to-string() Unicode kod noktalarını karakterlere dönüştürür


Bravo. XQuery'nin ne olduğunu bildiğimi sanıyordum. Hiçbir fikrim olmadığı ortaya çıktı.
Ürdün

Buradaki yayınların birçoğunun size yazdıkları dil hakkında çok fazla şey söylediğinden şüpheliyim.
Michael Kay


2

05AB1E (alternatif) 15 bayt

A2×52µ¼D¾£,¾¼FÀ

Çevrimiçi deneyin!

Açıklama:

A2×              # push a string containing a-za-z
   52µ           # Loop the rest of the program until counter = 52
      ¼          # increment counter (it's 0 initially)
       D         # Duplicate the alpha string on the stack
        ¾£       # Replace alpha with alpha[0..counter]
          ,      # Pop the substring and print it
           ¾¼FÀ  # rotate the alpha string left counter++ times.

2

R, 120 115 111 bayt

v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum((b=seq(1,51,2))[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")

Ungolfed:

a=rep(LETTERS,26)
b=seq(1,51,2)
v=vector()

for(i in 1:26)
    {
    v=c(v,c(a[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))
    }

cat(v,sep="")

Temel olarak, barasındaki 1ve arasındaki 51her bir tutamın uzunluğunu veren tek sayıların vektörüdür . Açıkçası, sumfonksiyon özetliyor bu vektörün numaralarını ve başlangıç ve bitiş endeksleri verir.

@Plannapus sayesinde -5 bayt ! @Plannapus sayesinde
-4 bayt !


1
arf, üzgünüm bunu daha önce görmedim, ancak yalnızca bir akez kullandığınızdan , onu tanımlamanız gerekmediğinden, birkaç baytı daha tıraş edebilirsiniz: b=seq(1,51,2);v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")çalışır.
plannapus

@plannapus Aptal ben! Tekrar teşekkürler ! Parçayı b=seqana gövdeye de entegre ettim , bu yüzden daha az okunabilir!
Frédéric

2

R, 81 73 65 63 bayt

Basit bir fordöngü yaklaşımı. Alfabeyi 26 kez tekrarlayın ve kullanılarak hesaplanan kayan bir indeks aralığı boyunca döngü yapın (i^2-2*i+2):i^2.

for(i in 1:26)cat(rep(LETTERS,26)[(i^2-2*i+2):i^2],"\n",sep="")

2

Kabuğu , 10 bayt

Cİ1ṠṁK…"AZ

Çevrimiçi deneyin!

açıklama

Cİ1ṠṁK…"AZ
      …"AZ    Get the alphabet
   ṠṁK        Replace each letter with the whole alphabet
C             Cut the resulting string into lines with lengths
 İ1            equal to the list of odd numbers

1

Toplu iş, 123 bayt

@set s=
@for /l %%i in (1,2,51)do @call set s=%%s%%ABCDEFGHIJKLMNOPQRSTUVWXYZ&call echo %%s:~0,%%i%%&call set s=%%s:~%%i%%

1

05AB1E , 18 17 bayt

26FA26×N>n£NnF¦},

açıklama

26F                 # for N in range(0, 26) do
   A26×             # the alphabet repeated 26 times
       N>n£         # take (N+1)^2 letters
           NnF¦}    # throw away the first N^2 letters
                ,   # print with newline

Çevrimiçi deneyin!


1

Rexx, 74 72 bayt

i=1;m=1;do 26;say substr(copies(xrange('A','Z'),26),i,m);i=i+m;m=m+2;end

Ungolfed:

i=1
m=1
do 26
  say substr(copies(xrange('A','Z'),26),i,m)
  i=i+m
  m=m+2
end

1

TSQL, 129 bayt

Betiğin başında MASTER KULLANIMI, sorgunun birçok kullanıcı için varsayılan olan ana veritabanında çalıştırılmasını sağlamaktır (bunun için bayt sayılmaz).

golfed:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)FROM spt_values WHERE number<26and'P'=type

Ungolfed:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)
FROM spt_values
WHERE number<26and'P'=type

Keman

Xml yolunu kullanarak eski sürümler için keman


1

PowerShell, 68 bayt

$a=-join(65..90|%{[char]$_})*26;26..1|%{$a=$a.Insert($_*$_,"`n")};$a

İlk noktalı virgülten önceki bölüm, büyük harfli alfabenin 26 kopyasını içeren bir dize üretir. Bir sonraki bölüm, her bir kare sayının dizinine satır boşlukları enjekte ediyor (geriye doğru çalışıyor, bu yüzden kaymayı hesaba katmam gerekmiyor). Sonunda, $asonunda sadece bu string değişkenini PowerShell'in eşdeğerine itiyor STDOUT.



1

C, 60 bayt

i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}

putssadece bir argüman alır. (Bazı tanımsız davranışlara normal olarak codegolf'ta izin verilir, ancak bu normal şeritlerin dışında biraz fazladır)
MM

@ MM Tanımsız davranış her zaman kullanılır. Kural, bir gönderimin bazı derleyicilerde çalıştığı sürece geçerli olması, aksi takdirde uzun bir istisna listesini açıkça dışlamamız gerekir. Bu kod gcc'de çalışır, bu yüzden geçerli bir başvuru.
xsot

1

C ++, 111 bayt

void a(){int c=65,i,j;for(i=0;i<26;i++){for(j=0;j<=2*i;j++){std::cout<<(char)c;c++;if(c==91)c=65;}std::cout<<'\n';}}

Önce bunlardan birini deneyin. Herhangi bir zamanda yazdırması gereken mektubu kaydetmek için bir int "c" kullanır. "C" 90 ("Z") değerini geçtiğinde 65 ('A') değerine sıfırlanır. Piramitleri döngüler için kullanarak yazdırır.


Güzel cevap! Sen yapabileceğini if(c<92)c=65bir bayt çıkarmak ve ayrıca yapmak mümkün olabilir int a()yerine void a(), ama karşılığında olmadan bu işler eğer olumlu değilim. Bunun dışında, #include <iostream>bayt sayınıza dahil etmeniz gerektiğini düşünüyorum .
DJMcMayhem

Demek istediğine inanıyorum if(c>90)c=65, ama öneri için teşekkürler, bu iyi bir fikir. Ayrıca, sanırım buna katılacağım, teşekkürler.
sınırlayıcı

1

PHP, 76 69 bayt

for(;$i<26&&$a.=join(range(A,Z));)echo substr($a,$i**2,1+2*$i++)."
";
  • 26 alfabe oluştur (fazlasıyla) ve $ a ile temasa geç
  • i <26 için döngü
  • $ a alt dize başlangıcı göster i ^ 2, son 2 * i + 1
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.