Tạo bảng chữ cái với 4 bản sao của mỗi chữ cái


27

Lưu ý rằng điều này không giống như In bảng chữ cái bốn lần .

Nhiệm vụ này là viết một chương trình để tạo ra bốn bản sao của mỗi chữ cái trong bảng chữ cái tiếng Anh, một chữ cái trên mỗi dòng, trên đầu ra tiêu chuẩn:

A
A
A
A
B
B
B
B

v.v.

Đầu ra nên bao gồm các dòng mới sau mỗi chữ cái.

Chữ in hoa không có đầu ra thêm được ưu tiên; tuy nhiên, chữ thường và / hoặc khoảng trắng thừa được chấp nhận nếu viết hoa / tước sẽ kéo dài giải pháp của bạn.

EDITED TO ADD: Giải pháp phải đầy đủ để thực thi. Tôi sẽ có thể gọi việc thực hiện ngôn ngữ, dán mã từ câu trả lời và nhận kết quả mà không cần nhập bất kỳ mã bổ sung nào.

Câu hỏi trên về sự hoàn thiện đã đưa ra trong bối cảnh của một giải pháp C. Chắc chắn phải có một quy tắc thường trực hoặc quy ước về điều này trên một trang web chơi golf mã? Nếu vậy, tôi sẽ sẵn lòng tuân thủ các nguyên tắc cộng đồng. Nhưng đây là của tôi:

  1. Liên quan đến C cụ thể, bạn cần bao gồm (và đếm) main(){... }xung quanh mã, vì nó sẽ không biên dịch theo cách khác. Cảnh báo vì không có gì #include <stdio.h>tốt miễn là mã vẫn biên dịch. Nói chung, một ngôn ngữ được biên dịch đòi hỏi một đơn vị có thể biên dịch được.

  2. Một biểu thức trần mang lại kết quả mong muốn có thể được chấp nhận nếu có cách thực hiện trực tiếp biểu thức; ví dụ, nếu ngôn ngữ có REPL. Vì vậy, bạn có thể gửi Haskell không có main=miễn là nó thực sự hoạt động như viết tại ví dụ như các ghcidấu nhắc. Nhưng vì điều đó có nghĩa là đưa letvào các tuyên bố của bạn, nó có thể là một chiến thắng ròng để gắn bó với runhaskellđịnh dạng.

  3. Tương tự, awkcác tập lệnh nên nằm trong BEGIN(hoặc END, với giả định rằng stdin được gắn vào /dev/null) vì chúng tôi không xử lý bất kỳ đầu vào nào.

v.v.


4
Tôi hơi bối rối. Là thách thức ở đây chỉ là xuất ra bảng chữ cái với mỗi chữ cái được lặp lại bốn lần, hay đầu ra thực sự cần phải được lưu trữ trong một tệp?
Iszi

Và tôi có phải chỉ xuất ra bảng chữ cái không?
Justin

@MarkReed Tôi có cần in nó với dòng mới ở giữa không? Tại sao không chỉ in nó, nhưng các dòng mới tùy chọn?
Justin

3
Ngoài ra, tôi khuyên bạn nên đọc lại thử thách của mình để nó giống như một thử thách hơn và ít giống như kể câu chuyện về cách bạn phát minh ra câu trả lời của mình.
Justin

Bit cuối cùng làm vẩn đục các quy tắc khoảng trắng chỉ là một chút. Ông có thể làm rõ? Đặc biệt, tôi có đọc đúng để giải thích rằng khoảng trắng thừa không sao nhưng bỏ sót dòng mới thì không?
Iszi

Câu trả lời:


16

APL (5)

⍪4/⎕A

Định dạng ma trận ( ) của 4 bản sao ( 4/) của bảng chữ cái ( ⎕A).


1
Có vẻ như không thể bị đánh bại. :)
Đánh dấu


APL sử dụng một trang mã ánh xạ từng ký tự mà nó sử dụng thành một byte. Trang mã này có thể được tìm thấy ở đây, trên trang web của IBM.
Steven H.

@StevenH. Liên kết đã chết
Stan Strum

@StanStrum Tôi tin rằng liên kết đã chết vì không dùng nữa, nhưng vì lợi ích của việc chơi golf , câu trả lời meta này sẽ hoạt động.
Steven H.

11

Con trăn - 37

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

iđi từ 0 đến 104; nó được chia cho bốn và được thêm vào giá trị ascii Avà ký tự kết quả được in.


Tôi lấy nó Python sử dụng phân chia số nguyên theo mặc định? Sẽ tốt hơn nếu PowerShell làm ngay bây giờ. Vì nó là, mã cần thiết để buộc nó thành phân chia số nguyên quá dài cho thủ thuật này để giúp tôi lưu bất kỳ thứ gì vào tập lệnh của mình.
Iszi

@lszi - Python lấy gợi ý từ loại toán hạng. 3/4là 0, trong khi 3.0/4.0là 0,75; range()tạo số nguyên.
Mark Reed

1
Điều này không hoạt động trên các phiên bản mới hơn của python. Đầu tiên, chức năng in phải được gọi bằng dấu ngoặc và / không còn phân chia số nguyên theo mặc định (ngay cả khi cả hai số là số nguyên), đó là công việc của // Hãy thử:for i in range(104):print(chr(i//4+65))

3
@ Ý thức tôi biết điều đó. Tôi cố tình chọn sử dụng một phiên bản cũ để nó có thể được chơi golf tốt hơn. Nếu bạn định chạy nó tại Ideone.com, bạn sẽ chọn "Python" thay vì "Python 3"
Justin

3
@Consconsness - bởi "phiên bản mới hơn của python", bạn đang đề cập đến "Python 3", khác xa với việc áp dụng phổ biến tại thời điểm này. Tôi thường cho rằng bất cứ điều gì tự xưng là "Python" mà không có phiên bản được chỉ định là Python 2.x cho đến khi được chứng minh khác đi; Mã Python 3 có xu hướng được dán nhãn rõ ràng.
Mark Reed

8

R, 30 28 27

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

Phiên bản cũ với 30 byte:

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

Tôi nghĩ rằng một dòng mới theo nghĩa đen là một byte ngắn hơn :)
Giuseppe

@Giuseppe Bạn có thể chỉ định ý tưởng này?
Sven Hohenstein


@Giuseppe Ý tưởng thực sự tốt! Cảm ơn đã chỉ ra.
Sven Hohenstein

Bạn cũng có thể sử dụng 1thay vì ""chỉ định thiết bị xuất chuẩn write, giúp tiết kiệm một byte khác.
Giuseppe

7

C, 59

Tôi gửi bài này, một câu trả lời dài không khoan nhượng, đơn giản vì tôi chưa thấy bài nộp C. Và điều đó làm cho tôi buồn. : - /

LATER: Đạo cụ cho @moala để thực hiện phiên bản int "/ 4" này, tiết kiệm 13 ký tự!

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

Tôi đã chỉnh sửa câu trả lời của mình, giờ tiết kiệm được thêm 2 ký tự!
moala

và một số khác!
moala

6

J: 18 13

4#u:65+i.26 1

Tôi vẫn còn khá run với J, vì vậy điều này có thể được cải thiện


3
Bạn có thể sử dụng bản sao ( #) thay vì chia như vậy : 4#u:65+i.26 1. Ngoài ra, ~hoán đổi các đối số của hàm, vì vậy nếu bạn thấy mình đang làm (expression) F value, bạn có thể thay thế bằng value F~ expressionđể lưu một ký tự.
bến tàu

@marinus Cảm ơn vì tiền boa. Tôi vẫn đang học J và thật khó để tìm thấy bất kỳ thông tin tốt với các loại thủ thuật đó.
pswg

1
4#65{26,.\a.cho 12 byte.
FrownyFrog

5

Ruby, 23

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

Tất cả tín dụng cho @manatwork - nâng cao nhận xét của anh ấy, không phải điều này. :)


Khổng lồ. @manatwork, tôi sẽ thực hiện chỉnh sửa nhưng rõ ràng tôi không xứng đáng với bất kỳ khoản tín dụng nào!
Darren Stone

5
Tốt hơn là làm cho nó puts [*?A..?Z].map{|i|[i]*4}hoặc puts ([*?A..?Z]*4).sort, vì vậy các chữ cái được sắp xếp như trong ví dụ.
manatwork 13/12/13

2
@manatwork: puts (?A..?Z).map{|i|[i]*4}là một ký tự ngắn hơn. Bạn có thể gọi maptrực tiếp trên Phạm vi, vì vậy bạn không cần splat trong trường hợp này.
Mark Reed

5

PowerShell: 32 23

Mã đánh gôn:

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

Hướng dẫn:

[char[]](... )Lấy một mảng các đối tượng và chuyển đổi chúng thành các ký tự ASCII.
65..90là các mã ASCII cho AZ.
*4lặp lại bộ 4 lần.
|Sortsắp xếp đầu ra.

Chú thích:

Nếu bạn muốn điều này được ghi vào một tệp, chỉ cần ném >, theo sau là tên tệp, ở cuối.


5

Haskell, 46

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

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")tiết kiệm 8 bit
Angs

5

Befunge 98 - 18

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

Hoạt động bằng cách lưu trữ một số và kết thúc khi nó đạt 104. In ra ký tự tương ứng của bảng chữ cái cho số chia cho 4, theo sau là một dòng mới. Nhưng nếu tôi không cần thêm một dòng mới sau mỗi chữ cái, thì đó là 16 ký tự:

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

Có thể giảm nếu tôi có thể in nhiều ký tự hơn (tức là tất cả bốn lần) ( 7 6 ký tự, thậm chí hoạt động trong Befunge 93):

1+:4/,

Với dòng mới:

1+:4/,a,


4

Perl 5, 21

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

2
Tôi chưa bao giờ xảy ra việc đặt một dòng mới theo nghĩa đen bên trong một chuỗi trích dẫn kép trong Perl. +1.
Mark Reed

Tôi nên lưu ý rằng tôi cũng không biết, nhưng @manatwork đã đề cập đến nó trong một câu trả lời khác của tôi và nó bị mắc 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 cũng vậy:

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

Cảm ơn @marinus, 43:

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

Tôi có nên thêm một tiền thưởng để nhận được 42? :)


6
50 đại diện. là cần thiết để bình luận về bất cứ điều gì, và bạn có 101 tại thời điểm đăng bình luận này.
syb0rg

Tuyệt quá! Cảm ơn! Trả lời chỉnh sửa!
moala

1
Bạn có thể thay thế >>2bằng /4.
bến tàu

4

Java: 56

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

chỉnh sửa: đã thay đổi từ 'print' thành 'println'


Đầu ra nên bao gồm các dòng mới sau mỗi chữ cái.
Pierre Arlaud

cảm ơn vì đã chỉ ra rằng, nó nên in một dòng mới mỗi lần bây giờ
reblerebel 17/12/13

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. tôi nghĩ rằng giải pháp của bạn vi phạm điều kiện này
user902383

2
@ user902383 Nếu bạn dán nó vào JShell (Java REPL trong Java 9) thì nó hoạt động và thậm chí bạn không cần dấu chấm phẩy cuối cùng.
David Conrad

@DavidConrad Thật tuyệt vời, tôi nghĩ rằng tôi có thể bắt đầu sử dụng REPL / JShell.
dùng902383


4

Trên thực tế, 6 byte

4ú*SÖi

Hãy thử nó ở đây!

Giải trình

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 byte có chữ thường và không có dòng mới:

4ú*S

1
Chào mừng đến với PPCG!
Erik các Outgolfer

4

Mã máy 16 bit x86 MS-DOS COM, 25 byte

Trong hex:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Đây là một chương trình MS-DOS .COM hoàn chỉnh. Sao chép chuỗi byte vào tệp có phần mở rộng .com và chạy nó từ DOSBox

Tháo gỡ:

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

Hãy thử với AWK ...

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

Theo đề xuất của manatwork, chúng ta có thể thoát khỏi 2 ký tự

AWK, 46 (Chỉnh sửa)

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

AWK, 40 (chỉnh sửa mã của MarkReed )

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

Bằng cách loại bỏ việc khởi tạo biến s, bạn có thể dự phòng 2 ký tự : END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
manatwork

1
Đặt mã trong một ENDkhối có nghĩa là nó yêu cầu một luồng đầu vào (ngay cả khi nó /dev/null) hoạt động. Điều đó có sửa đổi số char không? Dù sao, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}là 5 ký tự ngắn hơn.
Mark Reed

@MarkReed Mã của bạn không hoạt động. Kiểm tra cái này
Wasi

Cô ơi. Thật gần! :) Nhưng tôi vẫn không thích ENDyêu cầu của mẫu cho luồng đầu vào ...
Mark Reed

3

PowerShell, 21

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

Một cách tiếp cận hơi khác với Iszi. Và ngắn hơn :-)


3

C # LINQ 115 Byte 110 byte

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

1
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay!
Rɪᴋᴇʀ

3

05AB1E, 6 byte

A4×{S»

Giải trình:

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

Không có dòng mới, 4 byte

A4×{

Hãy thử trực tuyến!



3

Perl 6, 32

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

Tôi nghĩ rằng đây là lần đầu tiên Perl 6 là giải pháp đầu tiên tôi nghĩ đến, nhưng siêu phẫu thuật có vẻ phù hợp tự nhiên.
Mark Reed

3

Canvas , 5 byte

Z41*⟳

Hãy thử nó ở đây!

Giải trình:
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)                         |

Với thay thế bằng \nkhi in ấn.



3

Brainfuck , 48 byte

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

Hãy thử trực tuyến!

In bằng chữ thường, ngăn cách bởi trả lại vận chuyển. Sử dụng gói các ô 8 bit cũng như các ô còn lại của điểm gốc, mặc dù bạn có thể thêm một ô >để truy cập vào ô sau.


Tôi chuẩn bị đăng một bài mới, nhưng bạn đã cố gắng hết sức, tôi đã nhận được 71 byte với ++++++ [-> ++> ++++> ++++++++ ++ <<<] ++++> +> ++> +++++ <[->. <<. >>. <<. >>. <<. >>. + <<.>]
KrystosTheOverlord



2

Scala, 42

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.