Hasilkan alfabet dengan 4 salinan dari setiap huruf

27

Perhatikan bahwa ini tidak sama dengan Cetak alfabet empat kali .

Tugas ini adalah untuk menulis program untuk menghasilkan empat salinan dari setiap huruf alfabet Inggris, satu huruf per baris, pada output standar:

A
A
A
A
B
B
B
B

dll.

Output harus menyertakan baris baru setelah setiap huruf.

Huruf besar tanpa hasil tambahan lebih disukai; Namun, huruf kecil dan / atau spasi putih dapat diterima jika menggunakan huruf besar / strip akan memperpanjang solusi Anda.

DIedit UNTUK MENAMBAH: Solusi harus cukup lengkap untuk dieksekusi. Saya harus dapat menjalankan implementasi bahasa, menempelkan kode dari jawaban, dan mendapatkan hasil, tanpa mengetikkan kode tambahan apa pun.

Pertanyaan kelengkapan di atas muncul dalam konteks solusi C. Tentunya harus ada aturan atau konvensi tentang hal ini di situs golf kode? Jika demikian, saya akan dengan senang hati memberikan panduan komunitas. Tapi ini yang saya ambil:

  1. Berkenaan dengan C secara khusus, Anda perlu memasukkan (dan menghitung) main(){... di }sekitar kode, karena tidak akan mengkompilasi sebaliknya. Peringatan karena tidak ada #include <stdio.h>apa-apa asalkan kode masih dikompilasi. Secara umum, bahasa yang dikompilasi membutuhkan unit yang dapat dikompilasi.

  2. Ekspresi kosong yang menghasilkan hasil yang diinginkan dapat diterima jika ada cara untuk mengeksekusi ekspresi secara langsung; misalnya, jika bahasa tersebut memiliki REPL. Jadi Anda bisa mengirimkan Haskell tanpa main=asalkan benar-benar bekerja seperti yang tertulis di misalnya yang ghcicepat. Tetapi karena itu berarti meletakkan letdeklarasi Anda, mungkin merupakan kemenangan bersih untuk tetap menggunakan runhaskellformat.

  3. Demikian pula, awkskrip harus dalam BEGIN(atau END, dengan asumsi bahwa stdin dilampirkan /dev/null) blok karena kita tidak memproses input apa pun.

dll.

Mark Reed
sumber
4
Saya sedikit bingung. Apakah tantangannya di sini hanya untuk mengeluarkan alfabet dengan setiap huruf diulang empat kali, atau apakah hasilnya benar-benar perlu disimpan dalam file juga?
Iszi
Dan apakah saya harus hanya menampilkan alfabet?
Justin
@ MarkReed Apakah saya harus mencetaknya dengan baris baru di antaranya? Mengapa tidak hanya mencetaknya, tetapi baris baru opsional?
Justin
3
Juga, saya sarankan mengulangi tantangan Anda sehingga lebih seperti tantangan dan kurang suka menceritakan kisah bagaimana Anda menemukan jawaban Anda.
Justin
Bit terakhir mengacaukan aturan spasi putih hanya sedikit. Bisakah Anda mengklarifikasi? Khususnya, apakah saya membacanya dengan benar untuk menafsirkan bahwa spasi tambahan baik-baik saja tetapi penghilangan baris baru tidak?
Iszi

Jawaban:

16

APL (5)

⍪4/⎕A

Format matriks ( ) dari 4-replikasi ( 4/) dari alfabet ( ⎕A).

marinus
sumber
1
Tampaknya tidak mungkin dikalahkan. :)
Mark Reed
APL menggunakan halaman kode yang memetakan setiap karakter yang digunakan untuk satu byte. Halaman kode ini dapat ditemukan di sini, di situs web IBM.
Steven H.
@ SevenH. Tautan sudah mati
Stan Strum
@StanStrum Saya yakin tautannya sudah mati karena penghentian, tetapi demi kode golf , jawaban meta ini harusnya berfungsi.
Steven H.
11

Python - 37

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

imulai dari 0 hingga 104; itu dibagi empat dan ditambahkan ke nilai ascii untuk A, dan karakter yang dihasilkan dicetak.

Justin
sumber
Saya bawa Python menggunakan pembagian integer secara default? Akan lebih baik jika PowerShell melakukannya sekarang. Karena itu, kode yang diperlukan untuk memaksanya ke dalam divisi integer terlalu lama untuk trik ini untuk membantu saya menyimpan apa pun pada skrip saya.
Iszi
@ Lzi - Python mengambil isyarat dari jenis operan. 3/4adalah 0, sedangkan 3.0/4.00,75; range()menghasilkan bilangan bulat.
Mark Reed
1
Ini tidak berfungsi pada versi python yang lebih baru. Pertama, fungsi cetak harus dipanggil dengan tanda kurung, dan / tidak lagi melakukan pembagian integer secara default (bahkan jika kedua angka adalah integer), yang merupakan pekerjaan // Cobalah:for i in range(104):print(chr(i//4+65))
3
@ Kesadaran saya tahu itu. Saya sengaja memilih menggunakan versi lama sehingga bisa bermain golf lebih baik. Jika Anda menjalankan ini di Ideone.com, Anda akan memilih "Python" daripada "Python 3"
Justin
3
@Kesadaran - oleh "versi python yang lebih baru", Anda mengacu pada "Python 3", yang jauh dari yang diadopsi secara universal pada titik ini. Saya biasanya berasumsi bahwa apa pun yang mengklaim sebagai "Python" tanpa versi yang ditentukan adalah Python 2.x sampai terbukti sebaliknya; Kode Python 3 cenderung diberi label secara eksplisit.
Mark Reed
8

R, 30 28 27

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

Versi sebelumnya dengan 30 byte:

cat(rep(LETTERS,e=4),sep="\n")
Sven Hohenstein
sumber
Saya pikir baris literal yang sebenarnya adalah satu byte lebih pendek :)
Giuseppe
@ Giuseppe Bisakah Anda menentukan ide ini?
Sven Hohenstein
1
Cobalah online!
Giuseppe
@Giuseppe Ide yang sangat bagus! Terima kasih telah menunjukkan.
Sven Hohenstein
Anda dapat menggunakan 1bukan ""untuk menentukan stdout di writejuga, yang menyimpan byte lain.
Giuseppe
7

C, 59

Saya mengirimkan ini, jawaban yang sangat panjang dan tidak kompetitif, hanya karena saya belum melihat kiriman C. Dan itu membuatku sedih. : - /

LATER: Alat peraga ke @moala untuk melakukan versi int "/ 4" ini, menghemat 13 karakter!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}
Darren Stone
sumber
Saya telah mengedit jawaban saya, sekarang menyimpan 2 karakter lagi!
moala
dan satu lagi!
moala
6

J: 18 13

4#u:65+i.26 1

Saya masih agak gemetar dengan J, jadi ini mungkin bisa diperbaiki

pswg
sumber
3
Anda dapat menggunakan replikasi ( #) bukan divisi seperti: 4#u:65+i.26 1. Juga, ~bertukar argumen fungsi, jadi jika Anda pernah melakukannya (expression) F value, Anda bisa menggantinya dengan value F~ expressionuntuk menyimpan karakter.
marinus
@marinus Terima kasih atas tipnya. Saya masih belajar J dan sulit untuk menemukan info bagus dengan trik semacam itu.
pswg
1
4#65{26,.\a.untuk 12 byte.
FrownyFrog
5

Ruby, 23

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

Semua kredit untuk @manatwork - komentarnya naik, bukan ini. :)

Darren Stone
sumber
Sangat besar @Manatwork, saya akan melakukan pengeditan tetapi jelas saya tidak layak mendapatkan kredit apa pun!
Darren Stone
5
Lebih baik membuatnya puts [*?A..?Z].map{|i|[i]*4}atau puts ([*?A..?Z]*4).sort, jadi surat-surat itu dipesan seperti pada contoh.
manatwork
2
@manatwork: puts (?A..?Z).map{|i|[i]*4}adalah karakter yang lebih pendek. Anda dapat menelepon maplangsung di Range, jadi Anda tidak perlu gambar percikan dalam kasus ini.
Mark Reed
5

PowerShell: 32 23

Kode golf:

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

Panduan:

[char[]](... )mengambil larik objek dan mengonversinya menjadi karakter ASCII.
65..90adalah kode ASCII untuk AZ.
*4mengulangi seri 4 kali.
|Sortmacam output.

catatan:

Jika Anda ingin ini ditulis ke file, cukup lempar >, diikuti dengan nama file, di akhir.

Iszi
sumber
5

Haskell, 46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")
MtnViewMark
sumber
1
putStr$['A'..'Z']>>=("golf">>).(:"\n")menghemat 8 bit
Angs
5

Befunge 98 - 18

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

Bekerja dengan menyimpan nomor dan berakhir ketika mencapai 104. Mencetak karakter yang sesuai dari alfabet untuk angka dibagi dengan 4, diikuti oleh baris baru. Tetapi jika saya tidak perlu menambahkan baris baru setelah setiap huruf, maka itu adalah 16 karakter:

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

Dapat dikurangi jika saya dapat mencetak lebih banyak karakter (yaitu semuanya empat kali) ( 7 6 karakter, bahkan berfungsi di Befunge 93):

1+:4/,

Dengan baris baru:

1+:4/,a,
Justin
sumber
4

GolfScript: 17 15 karakter

26,{65+...}%+n*
manatwork
sumber
4

Perl 5, 21

map{print"$_
"x4}A..Z
Dom Hastings
sumber
2
Tidak pernah terpikir oleh saya untuk menempatkan baris baru literal di dalam string yang dikutip ganda di Perl. +1.
Mark Reed
Saya harus mencatat, bahwa saya juga tidak, tetapi @ manatwork menyebutkannya pada jawaban saya yang lain dan itu macet!
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 juga:

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

Terima kasih kepada @marinus, 43:

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

Haruskah saya menambahkan hadiah untuk mendapatkan ke 42? :)

moala
sumber
6
50 rep. diperlukan untuk mengomentari apa pun, dan Anda memiliki 101 pada saat memposting komentar ini.
syb0rg
Besar! Terima kasih! Jawaban diedit!
moala
1
Anda bisa menggantinya >>2dengan /4.
marinus
4

Jawa: 56

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

edit: diubah dari 'print' ke 'println'

pemberontak
sumber
Output harus menyertakan baris baru setelah setiap huruf.
Pierre Arlaud
terima kasih telah menunjukkan itu, itu harus mencetak baris baru setiap kali sekarang
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. saya pikir solusi Anda melanggar kondisi ini
user902383
2
@ user902383 Jika Anda menempelkannya ke JShell (Java REPL di Java 9) berfungsi, dan Anda bahkan tidak memerlukan titik koma akhir.
David Conrad
@ Davidvidon Itu luar biasa, saya pikir saya mungkin mulai menggunakan REPL / JShell.
user902383
4

Keempat, 37

'h 0 [do] [i] 4 / 'A + emit cr [loop]
Darren Stone
sumber
35 byte dengan menghindari +.
Bubbler
4

Sebenarnya, 6 byte

4ú*SÖi

Coba di sini!

Penjelasan

4ú*SÖi

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

4 Bytes dengan huruf kecil dan tanpa baris baru:

4ú*S
Bodoh
sumber
1
Selamat datang di PPCG!
Erik the Outgolfer
4

Kode mesin x86 16-bit MS-DOS COM, 25 byte

Dalam hex:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Ini adalah program MS-DOS .COM yang lengkap. Salin urutan byte ke file dengan ekstensi .com dan jalankan dari DOSBox

Membongkar:

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
meden
sumber
3

BrainF * , 79 60

+++++++++++++[->++>+>+++++<<<]>>---<[->>>++++[-<.<.>>]<+<<]
ASHelly
sumber
4
+++++++++++++[>+>+++++>++<<<-]>--->>[<.<.>.<.>.<.>.<.>+>-]
alephalpha
3

AWK, 48

Mari kita coba dengan AWK ...

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

Seperti yang disarankan oleh manatwork kita bisa menyingkirkan 2 karakter

AWK, 46 (Edit)

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

AWK, 40 (mengedit kode MarkReed )

END{for(;i<104;){printf"%c\n",i++/4+65}}
Wasi
sumber
Dengan menghapus inisialisasi s variabel Anda bisa meluangkan 2 karakter: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
manatwork
1
Menempatkan kode dalam ENDblok berarti membutuhkan aliran input (bahkan jika itu /dev/null) untuk bekerja. Apakah itu mengubah jumlah char? Lagi pula, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}5 karakter lebih pendek.
Mark Reed
@ MarkReed Kode Anda tidak berfungsi. Lihat ini
Wasi
Doh. Sangat dekat! :) Tapi saya masih tidak menyukai ENDpersyaratan pola untuk aliran input ...
Mark Reed
3

PowerShell, 21

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

Pendekatan yang sedikit berbeda dengan Iszi. Dan lebih pendek :-)

Joey
sumber
3

C # LINQ 115 Bytes 110 Bytes

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));
supermeerkat
sumber
1
Selamat datang di PPCG! Posting pertama yang bagus!
Rɪᴋᴇʀ
3

05AB1E, 6 byte

A4×{S»

Penjelasan:

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

Tanpa baris baru, 4 byte

A4×{

Cobalah online!

Oliver Ni
sumber
3

Jelly, 5 bytes (non-competing?)

ØAx4Y

Try it online!

Explanation:

ØAx4Y Main link
ØA    “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
   4  4
  x   Repeat each element of x y times
    Y Join x with newlines
Erik the Outgolfer
sumber
3

Perl 6, 32

.say for (('A'..'Z') »xx»4)[*;*]
Mark Reed
sumber
I think this is the first time that Perl 6 was the first solution I thought of, but the hyperoperator just seemed a natural fit.
Mark Reed
3

Canvas, 5 bytes

Z41*⟳

Try it here!

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

With replaced with \n upon printing.

hakr14
sumber
3

Kotlin, 66 59 bytes

Save 7 bytes removing for loop.

fun main(a:Array<String>){repeat(104){println('A'+(it/4))}}

Try it online!

JohnWells
sumber
3

brainfuck, 48 bytes

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

Try it online!

Prints in lowercase, separated by carriage returns. Uses wrapping 8 bit cells as well as cells left of the origin, though you can prepend a > to counter the latter.

Jo King
sumber
I was about to post a new one, but you managed to completely out-do my best, i got 71 bytes with ++++++[->++>++++>++++++++++<<<]++++>+>++>+++++<[->.<<.>>.<<.>>.<<.>>.+<<.>]
KrystosTheOverlord
2

Bash: 24 characters

printf %s\\n {A..Z}{,,,}
manatwork
sumber
2

Dc: 35 characters

[rdP10Pr1-d1<p]sp65[5lpx+d91>l]dslx
manatwork
sumber
2

Scala, 42

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

Julia, 39, 36

println([char(i/4+64.5)for i=0:103])
Sven Hohenstein
sumber