Her harfin 4 kopyası ile alfabe oluşturun


27

Bunun, alfabeyi dört kez yazdırmayla aynı olmadığını unutmayın .

Bu görev, standart çıktıda, her satırda bir harf olmak üzere, İngilizce alfabenin her bir harfinin dört kopyasını oluşturmak için bir program yazmaktır:

A
A
A
A
B
B
B
B

vb.

Çıktı, her harften sonra yeni satırları içermelidir.

Fazladan çıkış olmayan büyük harfler tercih edilir; bununla birlikte, eğer büyük harf / sıyırma çözümünüzü uzatırsa, küçük harfler ve / veya fazladan boşluklar kabul edilebilir.

EKLEME EDİLDİ: Çözümün yürütülmesi için yeterince eksiksiz olması gerekiyor. Herhangi bir ek kod yazmadan, dilin bir uygulamasını çağırabilir, yanıttan kodu yapıştırabilir ve sonuç alabilmeliyim.

Yukarıdaki bütünlük sorunu bir C çözümü bağlamında gündeme geldi. Elbette bir kod golf sitesinde bu konuda sürekli bir kural veya kongre olmalı? Öyleyse, memnuniyetle topluluk kurallarına uyacağım. Ama bu benim almam:

  1. Özellikle C ile ilgili olarak , kodun etrafına main(){... }kodunu eklemeniz (ve saymanız) gerekir , çünkü aksi takdirde derlenmez. Uyarılar, çünkü #include <stdio.h>kod hala devam ettiği sürece para cezası yoktur . Genel olarak, derlenmiş bir dil, derlenebilir bir birim gerektirir.

  2. İfadeyi doğrudan uygulamanın bir yolu varsa, istenen sonuçları veren çıplak bir ifade kabul edilebilir; Örneğin, eğer dilde bir REPL varsa Bir olmadan Haskell gönderebilirsiniz Yani main=uzun de yazıldığı gibi aslında çalışır gibi örneğinghci istemi. Ancak bu, letbildirimlerinizi koymak anlamına geldiğinden , runhaskellformata uymanız net bir kazanç olabilir .

  3. Benzer şekilde, herhangi bir girdiyi işlemediğimiz için awkkomut dosyaları BEGIN(veya ENDstdin'in bağlı olduğu varsayımıyla /dev/null) bloklarda olmalıdır.

vb.


4
Biraz kafam karıştı. Buradaki zorluk sadece alfabenin her harfiyle dört kez tekrarlanması için çıktı mı yoksa çıktı gerçekten bir dosyada mı saklanmalı?
Iszi

Ve sadece alfabeyi çıkarmak zorunda mıyım ?
Justin,

@MarkReed Aradaki yeni satırlarla yazdırmam gerekiyor mu? Neden sadece baskı değil, yeni satırlar isteğe bağlı?
Justin,

3
Ayrıca, meydan okumanızı, bir meydan okumaya benzeyen ve cevabınızı nasıl icat ettiğinizin hikayesini anlatmaya daha az benzeyecek şekilde yeniden düzenlemeyi tavsiye ederim.
Justin,

Son kısım boşluk alanını biraz bulanıklaştırır. Lütfen açıklığa kavuşturur musunuz? Özellikle, fazladan boşluğun iyi olduğunu, ancak yeni satırların ihmal edilmediğini yorumlamayı doğru mu okuyorum ?
Iszi,

Yanıtlar:


16

APL (5)

⍪4/⎕A

Alfabenin ( ) 4-çoğaltmasının ( 4/) Matris biçimi ( ⎕A).


1
Dövülme olasılığı düşük görünüyor. :)
Mark Reed


APL, kullandığı karakterlerin her birini bir baytla eşleyen bir kod sayfası kullanır. Bu kod sayfası bulunabilir , burada IBM'in web sitesinde.
Steven H.

@StevenH. Bağlantı öldü
Stan Strum

@StanStrum Bağlantının, kullanımdan kaldırılma nedeniyle öldüğünü düşünüyorum, ancak kod adına golf oynamak için bu meta cevabı çalışmalı.
Steven H.

11

Python - 37

for i in range(104):print chr(i/4+65)

i0 ila 104; dörde bölünür ve ascii değerine eklenir Ave elde edilen karakter yazdırılır.


Anladım, Python varsayılan olarak tamsayı bölmesini kullanıyor mu? PowerShell şu anda yapsaydı iyi olurdu. Olduğu gibi, onu tamsayı bölmesine zorlamak için gereken kod bu hilenin senaryomdaki herhangi bir şeyi kaydetmeme yardımcı olması için çok uzun.
Iszi,

@ lszi - Python, ismini işlenenlerin türünden alır. 3/40 iken 3.0/4.00,75'tir; range()tamsayılar üretir.
Mark Reed,

1
Bu yeni python sürümlerinde çalışmaz. Birincisi, baskı işlevi parantez ile çağrılmalıdır ve / artık // işidir deneyin olan varsayılan (hem sayılar tam sayı olsa da) tarafından bölünme tamsayı yapar:for i in range(104):print(chr(i//4+65))

3
@ Bilinçlilik bunu biliyorum. Kasıtlı olarak eski bir sürümü kullanmayı seçtim, böylece daha iyi golf oynayabilirdi. Bunu Ideone.com'da çalıştırırsanız, "Python 3" yerine "Python" u seçersiniz
Justin

3
Bilinç - "yeni python sürümleri" ile, evrensel olarak bu noktada kabul edilen "Python 3" den bahsediyorsunuz. Genelde, belirtilen bir sürümü olmayan "Python" olduğunu iddia eden herhangi bir şeyin, aksi ispat edilmedikçe Python 2.x olduğunu varsayar; Python 3 kodu açıkça bu şekilde etiketlenme eğilimindedir.
Mark Reed,

8

R, 30 28 27

write(rep(LETTERS,e=4),1,1)

30 baytlık eski sürüm:

cat(rep(LETTERS,e=4),sep="\n")

Ben bir değişmez newline bir bayt kısa olduğunu düşünüyorum :)
Giuseppe

@Giuseppe Bu fikri belirtebilir misiniz?
Sven Hohenstein


@Giuseppe Gerçekten iyi bir fikir! Gösterdiğin için teşekkürler.
Sven Hohenstein

Ayrıca, başka bir bayttan tasarruf sağlayan stdout'u belirtmek 1yerine kullanabilirsiniz . ""write
Giuseppe

7

C, 59

Bunu, rekabetçi olmayan uzun bir cevabı sunuyorum, çünkü henüz bir C başvurusu görmedim. Ve bu beni üzüyor. : - /

SONRA: 13 karakterden tasarruf ederek bunun "/ 4" int versiyonunu yapmak için @moala'ya destek!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}

Cevabımı düzelttim, şimdi 2 karakter daha kazandım!
moala

ve bir tane daha!
moala

6

J: 18 13

4#u:65+i.26 1

Hala J ile oldukça titriyorum, bu yüzden muhtemelen geliştirilebilir


3
Sen kopyalayan (kullanabilirsiniz #şöyle) yerine bölünmesini: 4#u:65+i.26 1. Ayrıca, ~bir işlevin argümanlarını değiştirir, böylece kendinizi yaparken bulursanız (expression) F value, value F~ expressionbir karakteri kaydetmek için bununla değiştirebilirsiniz .
marinus

@ marinus Tahmininiz için teşekkürler. Hala J öğreniyorum ve bu tür hilelerle iyi bir bilgi bulmak zor.
pswg

1
4#65{26,.\a.12 bayt için
FrownyFrog

5

Ruby, 23

puts ([*?A..?Z]*4).sort

@Manatwork'a verilen tüm kredi - yorumuna oy ver, bunu değil. :)


Kocaman. @ manatwork, düzenlemeyi yapacağım ama belli ki herhangi bir krediyi hak etmiyorum!
Darren Stone,

5
Bunu yapsan iyi olur, puts [*?A..?Z].map{|i|[i]*4}yoksa puts ([*?A..?Z]*4).sortmektuplar örnekteki gibi sıralanır.
Manat

2
@ manatwork: puts (?A..?Z).map{|i|[i]*4}Bir karakter daha kısa. mapDoğrudan bir Poligonu arayabilirsin , bu yüzden bu durumda uyarıyla ihtiyacın yok.
Mark Reed,

5

PowerShell: 32 23

Golf kodu:

[char[]](65..90*4)|Sort

İzlenecek yol:

[char[]](... )bir dizi nesneyi alır ve ASCII karakterlerine dönüştürür.
65..90AZ için ASCII kodlarıdır.
*4seriyi 4 kez tekrarlar.
|Sortçıktıyı sıralar.

Not:

Bunun bir dosyaya yazılmasını istiyorsanız >, sonunda bir dosya adı ve ardından bir dosya atın.


5

Haskell, 46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")8 bit kazandırıyor
Angs 23:16

5

Befunge 98 - 18

1+::'g`#@_4/'A+,a,

Bir numarayı depolayarak ve 104'e ulaştığında biten şekilde çalışır. Alfabenin ilgili karakterini, 4'e bölünmüş sayının, ardından yeni bir satırın ardından yazdırır. Fakat her harften sonra yeni bir satır eklememe gerek kalmazsa, o zaman 16 karakter:

1+::'g`#@_4/'A+,

Daha fazla karakter yazdırabilirsem (örneğin hepsi dört kez) azaltabilirim ( 7 6 karakter, hatta Befunge 93'te çalışıyor):

1+:4/,

Newline ile:

1+:4/,a,


4

Perl 5, 21

map{print"$_
"x4}A..Z

2
Perl'de çift tırnaklı bir dizgenin içine tam anlamıyla bir yeni satır koymak hiç aklıma gelmedi. +1.
Mark Reed,

Ben de bilmemeliydim, ama @ manatwork benim başka bir cevabımdan bahsetti ve sıkıştı!
Dom Hastings

4

C, 46 44 43

46 :

i;main(){while(i<104)printf("%c\n",65+i++/4);}

44 :

i=260;main(j){for(;(j=i++>>2)<91;puts(&j));}

44 de:

i=260;main(j){while(j=i++>>2,j<91)puts(&j);}

@ Marinus'a teşekkür ederim, 43:

i=260;main(j){while(j=i++/4,j<91)puts(&j);}

42'ye yükseldiğim için bir ödül eklemeli miyim? :)


6
50 rep. bir şey hakkında yorum yapmanız gerekiyor ve bu yorumu gönderirken 101 tane kullanıyorsunuz.
syb0rg

Harika! Teşekkürler! Cevap düzenlendi!
moala

1
Sen değiştirebilirsiniz >>2tarafından /4.
marinus

4

Java: 56

for(int i=0;i<104;)System.out.println((char)(i++/4+65));

edit: 'print' den 'println' ye değiştirildi


Çıktı, her harften sonra yeni satırları içermelidir.
Pierre Arlaud

Buna dikkat çektiğiniz için teşekkürler, şimdi her seferinde yeni bir satır yazdırmalı
reblerebel

2
The solution must be complete enough to execute. I should be able to invoke an implementation of the language, paste the code from the answer, and get results, without typing any additional code. çözümünüzün bu durumu ihlal ettiğini düşünüyorum
user902383

2
@ user902383 Eğer onu JShell'e (Java 9'daki Java REPL) yapıştırırsanız çalışır ve son noktalı virgül bile gerekmez.
David Conrad

@DavidConrad Harika, o zaman REPL / JShell kullanmaya başlayabileceğimi düşünüyorum.
user902383


4

Aslında, 6 bayt

4ú*SÖi

Burada dene!

açıklama

4ú*SÖi

4 *         Do 4 times
 ú          Create string of alphabet in lowercase
   S        Sort it
    Ö       Switch Case
     i      Push each character of string

Küçük harfli ve yeni satırsız 4 bayt:

4ú*S

1
PPCG'ye Hoşgeldiniz!
Outgolfer Erik,

4

16-bit x86 makine kodu MS-DOS COM, 25 bayt

Onaltılı olarak:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Bu tam bir MS-DOS .COM programıdır. Bayt dizisini .com uzantılı dosyaya kopyalayın ve DOSBox'tan çalıştırın

demontaj:

00: B4 09        mov    ah,0x09         ;INT 21h "Write string to STDOUT" function
02: BA 16 01     mov    dx,0x116        ;Address of the string s ('$'-terminated)
05: 89 D7        mov    di,dx           ;Because there's no way to dereference address in DX
07: B9 68 00     mov    cx,104          ;CX=26*4
_0000000A:
0A: F6 C1 03     test   cl,0x03         ;When lower two bits are zero...
0D: 75 02        jne    _00000011       ;...do not skip the next instruction
0F: FE 05        inc    b,[di]          ;*s++
_00000011:
11: CD 21        int    21              ;Print the string
13: E2 F5        loop   _0000000A       ;Until --CX==0
15: C3           retn
16: 40           db     0x40            ;s[0], starts with 'A'-1
17: 0A           db     0x0A            ;'\n'
18: 24           db     '$'             ;Terminator required by the print function

3

BrainF * , 79 60

+++++++++++++[->++>+>+++++<<<]>>---<[->>>++++[-<.<.>>]<+<<]

4
+++++++++++++[>+>+++++>++<<<-]>--->>[<.<.>.<.>.<.>.<.>+>-]
alephalpha

3

AWK, 48

AWK ile deneyelim ...

END{s=65;for(i=104;i--;s+=0==i%4)printf"%c\n",s}

Manatwork'ün önerdiği gibi 2 karakterden kurtulabiliriz

AWK, 46 (Düzenle)

END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}

AWK, 40 ( MarkReed kodunu düzenleme )

END{for(;i<104;){printf"%c\n",i++/4+65}}

Değişken s başlatma kaldırarak 2 karakter ayırabilirim: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
Manat çalışması

1
Kodu bir ENDbloğa koymak, /dev/nullçalışabilmesi için bir girdi akışı gerektirdiği anlamına gelir . Bu char sayısını değiştiriyor mu? Neyse, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}5 karakter daha kısa.
Mark Reed

@MarkReed Kodunuz çalışmıyor.
Şunu

D'oh. Çok yakın! :) Ama yine de ENDdesenin bir girdi akışı için gereksiniminden hoşlanmıyorum ...
Mark Reed

3

PowerShell, 21

65..90|%{,[char]$_*4}

Iszi'ye biraz farklı bir yaklaşım. Ve daha kısa :-)


3

C # LINQ 115 Bayt 110 Bayt

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));

1
PPCG'ye Hoşgeldiniz! Güzel ilk mesaj!
Rɪᴋᴇʀ

3

05AB1E, 6 bayt

A4×{S»

Açıklama:

A       # Push 'abcdefghijklmnopqrstuvwxyz'
 4×     # Repeat four times
   {    # Sort
    S   # Split into list
     »  # Join by newlines
        # Implicit print

Yeni satırlar olmadan, 4 bayt

A4×{

Çevrimiçi deneyin!



3

Perl 6, 32

.say for (('A'..'Z') »xx»4)[*;*]

Bence bu ilk kez Perl 6'nın düşündüğüm ilk çözüm olduğunu düşünüyordu, ancak hiper işlemci sadece doğal bir formda görünüyordu.
Mark Reed

3

Tuval , 5 bayt

Z41*⟳

Burada dene!

Açıklama:
Code        | Explanation                                  | Stack
------------+----------------------------------------------+------------------------------
Z          | The uppercase alphabet                       | "ABC..."
  41*     | Stretched by 4 horizontally and 1 vertically | "AAAABBBBCCCC..."
        ⟳  | Rotated clockwise                            | "A¶A¶A¶A¶B¶B¶B¶B¶C¶C¶C¶C¶..."
            | Print ToS (implicit)                         |

Üzerine baskı ile değiştirilir \n.



3

brainfuck , 48 bayt

+++[[-<+>>++<]+>]<<<<<<+[->,++++[->.<<<.>>]>+<<]

Çevrimiçi deneyin!

Küçük harflerle yazdırılır, satırbaşları ile ayrılır. 8 bitlik hücreleri ve orijinden kalan hücreleri kullanır, ancak ikinciye >karşı koymak için bir tane hazırlayabilirsiniz.


Yeni bir tane göndermek üzereydim, ama tamamen elimden gelenin en iyisini yaptın, ++++++ [-> ++> ++++> ++++++++ kullandı. ++ <<<] ++++> +> ++> +++++ <[-........> << >> << >> << >> + <<>]
KrystosTheOverlord,



2

Scala, 42

('A'to'Z')map(x=>List.fill(4)(println(x)))

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.