สร้างตัวอักษรที่มี 4 ตัวอักษรแต่ละตัว


27

โปรดทราบว่านี้ไม่ได้เช่นเดียวกับการพิมพ์ตัวอักษรสี่ครั้ง

ภารกิจนี้คือการเขียนโปรแกรมเพื่อสร้างสำเนาของตัวอักษรภาษาอังกฤษสี่ตัวอักษรหนึ่งตัวต่อบรรทัดในเอาต์พุตมาตรฐาน:

A
A
A
A
B
B
B
B

เป็นต้น

ผลลัพธ์ควรมีบรรทัดใหม่หลังจากตัวอักษรแต่ละตัว

ตัวอักษรตัวพิมพ์ใหญ่ที่ไม่ต้องการเอาต์พุตพิเศษ อย่างไรก็ตามตัวอักษรตัวพิมพ์เล็กและ / หรือช่องว่างเพิ่มเติมเป็นที่ยอมรับได้หากการใช้อักษรตัวใหญ่ / การปอกจะทำให้โซลูชันของคุณยาวขึ้น

แก้ไขเพื่อเพิ่ม:การแก้ปัญหาจะต้องเสร็จสมบูรณ์เพียงพอที่จะดำเนินการ ฉันควรจะสามารถใช้ภาษาวางรหัสจากคำตอบและรับผลลัพธ์โดยไม่ต้องพิมพ์รหัสเพิ่มเติมใด ๆ

คำถามข้างต้นเกี่ยวกับความครบถ้วนสมบูรณ์เกิดขึ้นในบริบทของโซลูชัน C แน่นอนว่าจะต้องมีกฎหรือระเบียบเกี่ยวกับเรื่องนี้ในเว็บไซต์เล่นกอล์ฟ? ถ้าเป็นเช่นนั้นฉันยินดีที่จะปฏิบัติตามแนวทางชุมชน แต่นี่คือของฉัน:

  1. สำหรับ C โดยเฉพาะคุณจะต้องรวม (และนับ) main(){... }รอบรหัสเนื่องจากจะไม่รวบรวมเป็นอย่างอื่น คำเตือนเพราะไม่มีอะไร#include <stdio.h>ดีตราบใดที่รหัสยังคงรวบรวม โดยทั่วไปแล้วภาษาที่คอมไพล์ต้องใช้หน่วยที่คอมไพล์ได้

  2. นิพจน์เปลือยที่ให้ผลลัพธ์ที่ต้องการนั้นเป็นที่ยอมรับหากมีวิธีดำเนินการกับนิพจน์โดยตรง เช่นถ้าภาษามี REPL ดังนั้นคุณสามารถส่ง Haskell โดยไม่ต้องmain=ตราบเท่าที่มันใช้งานได้จริงตามที่เขียนไว้ในเช่นghciพรอมต์ แต่เนื่องจากนั่นหมายถึงการletประกาศของคุณมันอาจจะเป็นชัยชนะสุทธิที่ติดกับrunhaskellรูปแบบ

  3. ในทำนองเดียวกันawkสคริปต์ควรอยู่ในBEGIN(หรือENDด้วยการสันนิษฐานว่า stdin เชื่อมต่อกับ/dev/null) บล็อกเนื่องจากเราไม่ได้ประมวลผลอินพุตใด ๆ

เป็นต้น


4
ฉันสับสนเล็กน้อย ความท้าทายอยู่ที่นี่เพียงเพื่อเอาท์พุทตัวอักษรด้วยตัวอักษรแต่ละตัวซ้ำสี่ครั้งหรือเอาท์พุทจริงจะต้องเก็บไว้ในไฟล์เช่นกัน?
Iszi

และฉันต้องส่งออกเฉพาะตัวอักษรหรือไม่
Justin

@MarkReed ฉันต้องพิมพ์โดยขึ้นบรรทัดใหม่ด้วยหรือไม่ ทำไมไม่เพียงพิมพ์ แต่ขึ้นบรรทัดใหม่เลือกหรือไม่
Justin

3
นอกจากนี้ฉันขอแนะนำให้ปรับปรุงความท้าทายของคุณเพื่อให้มันเป็นเหมือนความท้าทายและไม่ชอบบอกเล่าเรื่องราวของวิธีที่คุณคิดค้นคำตอบของคุณ
Justin

บิตสุดท้ายจะทำให้กฎช่องว่างแคบลงเพียงเล็กน้อย คุณช่วยอธิบายได้ไหม โดยเฉพาะอย่างยิ่งฉันอ่านมันถูกต้องหรือไม่ที่จะตีความว่าช่องว่างพิเศษนั้นโอเค แต่การไม่ขึ้นบรรทัดใหม่
Iszi

คำตอบ:


16

APL (5)

⍪4/⎕A

รูปแบบเมทริกซ์ ( ) ของ 4 การจำลอง ( 4/) ของตัวอักษร ( ⎕A)


1
ดูเหมือนว่าจะไม่ถูกตี :)
Mark Reed


APL ใช้โค้ดเพจที่แม็พอักขระแต่ละตัวที่ใช้กับหนึ่งไบต์ หน้ารหัสนี้สามารถพบได้ที่นี่ในเว็บไซต์ของ IBM
Steven H.

@StevenH Link is dead
Stan Strum

@ STANStrum ฉันเชื่อว่าการเชื่อมโยงจะตายเนื่องจากการคัดค้าน แต่เพื่อประโยชน์ของการเล่นกอล์ฟรหัสคำตอบเมตานี้ควรทำงาน
Steven H.

11

Python - 37

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

iไปจาก 0 ถึง 104; มันถูกหารด้วยสี่และเพิ่มเข้าไปในค่า ascii สำหรับAและอักขระผลลัพธ์ถูกพิมพ์


ฉันคิดว่า Python ใช้การหารจำนวนเต็มเป็นค่าเริ่มต้นหรือไม่ จะดีไหมถ้า PowerShell ทำในตอนนี้ ตามที่เป็นอยู่รหัสที่จำเป็นในการบังคับให้แบ่งเป็นจำนวนเต็มนั้นยาวเกินไปสำหรับเคล็ดลับนี้ที่จะช่วยฉันบันทึกทุกอย่างในสคริปต์ของฉัน
Iszi

@lszi - Python รับคิวจากประเภทของตัวถูกดำเนินการ 3/4เป็น 0 ในขณะที่3.0/4.00.75 range()สร้างจำนวนเต็ม
Mark Reed

1
สิ่งนี้ไม่สามารถใช้ได้กับงูหลามรุ่นใหม่กว่า ก่อนอื่นต้องเรียกใช้ฟังก์ชันการพิมพ์ด้วยเครื่องหมายวงเล็บและ / จะไม่หารด้วยจำนวนเต็มอีกต่อไปตามค่าเริ่มต้น (แม้ว่าตัวเลขทั้งสองจะเป็นจำนวนเต็ม) ซึ่งเป็นหน้าที่ของ // ลอง:for i in range(104):print(chr(i//4+65))

3
@ สติฉันรู้ว่า ฉันเลือกที่จะใช้รุ่นเก่าโดยเจตนาเพื่อให้สามารถเล่นกอล์ฟได้ดีขึ้น หากคุณต้องการใช้งานที่ Ideone.com คุณต้องเลือก "Python" แทน "Python 3"
Justin

3
@Consciousness - โดย "python เวอร์ชั่นใหม่" คุณกำลังอ้างถึง "Python 3" ซึ่งอยู่ไกลจากการนำไปใช้ในระดับสากล ณ จุดนี้ โดยทั่วไปฉันคิดว่าสิ่งใดก็ตามที่อ้างว่าเป็น "Python" โดยไม่มีรุ่นที่ระบุคือ Python 2.x จนกว่าจะได้รับการพิสูจน์ รหัส Python 3 มีแนวโน้มที่จะติดป้ายอย่างชัดเจน
Mark Reed

8

R, 30 28 27 27

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

รุ่นก่อนหน้านี้มี 30 ไบต์:

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

ผมคิดว่าการขึ้นบรรทัดใหม่ที่แท้จริงคือไบต์สั้น :)
จูเซปเป้

@Giuseppe คุณสามารถระบุความคิดนี้ได้หรือไม่
Sven Hohenstein


@iuseppe ความคิดที่ดีจริงๆ! ขอบคุณสำหรับการชี้ให้เห็น
Sven Hohenstein

คุณสามารถใช้1แทน""การระบุ stdout ได้writeเช่นกันซึ่งจะบันทึกไบต์อื่น
Giuseppe

7

C, 59

ฉันส่งสิ่งนี้เป็นคำตอบที่ไม่มีการตอบสนองที่ยาวนานเนื่องจากฉันยังไม่เห็นการส่งข้อมูล C และนั่นทำให้ฉันเศร้า : - /

LATER: Props ไปยัง @moala สำหรับทำรุ่น int / "4 ตัวช่วยลด 13 ตัวอักษร!

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

ฉันได้แก้ไขคำตอบของฉันแล้วประหยัดอีก 2 ตัวอักษร!
moala

และอีกคนหนึ่ง!
moala

6

J: 18 13

4#u:65+i.26 1

ฉันยังค่อนข้างสั่นคลอนกับ J ดังนั้นสิ่งนี้อาจปรับปรุงได้


3
คุณสามารถใช้ซ้ำ ( #) 4#u:65+i.26 1แทนส่วนที่ชอบ: นอกจากนี้ยัง~สลับอาร์กิวเมนต์ของฟังก์ชั่นดังนั้นหากคุณเคยพบว่าตัวเองทำ(expression) F valueคุณสามารถแทนที่ด้วยvalue F~ expressionการบันทึกตัวละคร
marinus

@marinus ขอบคุณสำหรับเคล็ดลับ ฉันยังคงเรียนรู้ J และมันก็ยากที่จะหาข้อมูลที่ดีกับเทคนิคเหล่านั้น
pswg

1
4#65{26,.\a.เป็นเวลา 12 ไบต์
FrownyFrog

5

ทับทิม, 23

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

เครดิตทั้งหมดให้กับ @manatwork - โหวตขึ้นความคิดเห็นของเขาไม่ใช่สิ่งนี้ :)


ใหญ่ @ การทำงานฉันจะแก้ไข แต่เห็นได้ชัดว่าฉันไม่สมควรได้รับเครดิต!
Darren Stone

5
ทำให้ดีขึ้นputs [*?A..?Z].map{|i|[i]*4}หรือputs ([*?A..?Z]*4).sortเพื่อให้ตัวอักษรได้รับคำสั่งตามตัวอย่าง
จัดการ

2
@ manatwork: puts (?A..?Z).map{|i|[i]*4}อักขระสั้นลง คุณสามารถโทรmapโดยตรงบน Range ได้ดังนั้นคุณไม่จำเป็นต้องใช้เครื่องหมายในกรณีนี้
Mark Reed

5

PowerShell: 32 23

รหัส Golfed:

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

เกมส์:

[char[]](... )ใช้อาร์เรย์ของวัตถุและแปลงเป็นอักขระ ASCII
65..90เป็นรหัส ASCII สำหรับ AZ
*4ทำซ้ำซีรีส์ 4 ครั้ง
|Sortเรียงลำดับผลลัพธ์

บันทึก:

หากคุณต้องการให้สิ่งนี้เขียนไปยังไฟล์เพียงแค่โยน>ตามด้วยชื่อไฟล์ในตอนท้าย



5

Befunge 98 - 18

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

ทำงานโดยการจัดเก็บตัวเลขและสิ้นสุดเมื่อถึง 104 พิมพ์อักขระที่สอดคล้องกันของตัวอักษรสำหรับตัวเลขหารด้วย 4 ตามด้วยการขึ้นบรรทัดใหม่ แต่ถ้าฉันไม่ต้องการเพิ่มบรรทัดใหม่หลังจากตัวอักษรแต่ละตัวมันก็คือ 16 ตัวอักษร:

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

สามารถลดลงได้ถ้าฉันสามารถพิมพ์ตัวละครมากขึ้น (เช่นทั้งหมดสี่ครั้ง) ( 7 6 ตัวอักษรแม้ทำงานใน Befunge 93):

1+:4/,

ด้วยการขึ้นบรรทัดใหม่:

1+:4/,a,


4

Perl 5, 21

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

2
มันไม่เคยเกิดขึ้นกับฉันเลยที่จะใส่ตัวอักษรขึ้นบรรทัดใหม่ภายในสตริงที่มีเครื่องหมายคำพูดคู่ใน Perl +1
Mark Reed

ฉันควรทราบว่าฉันไม่ได้ทำเช่นนั้น แต่ @manatwork พูดถึงมันในคำตอบอื่นของฉันและมันติดอยู่!
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 ด้วย:

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

ขอบคุณ @marinus, 43:

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

ฉันควรเพิ่มค่าหัวสำหรับการเข้า 42 ไหม? :)


6
50 ตัวแทน จำเป็นต้องแสดงความคิดเห็นในสิ่งใดและคุณมี 101 ในขณะที่โพสต์ความคิดเห็นนี้
syb0rg

ที่ดี! ขอบคุณ! แก้ไขคำตอบแล้ว!
moala

1
คุณสามารถแทนที่โดย>>2 /4
marinus

4

Java: 56

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

แก้ไข: เปลี่ยนจาก 'print' เป็น 'println'


ผลลัพธ์ควรมีบรรทัดใหม่หลังจากตัวอักษรแต่ละตัว
Pierre Arlaud

ขอบคุณที่ชี้ให้เห็นว่ามันควรจะพิมพ์บรรทัดใหม่ทุกครั้งในขณะนี้
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. ฉันคิดว่าโซลูชันของคุณละเมิดเงื่อนไขนี้
user902383

2
@ user902383 หากคุณวางลงใน JShell (Java REPL ใน Java 9) ใช้งานได้และคุณไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคสุดท้าย
David Conrad

@DavidConrad มันยอดเยี่ยมมากฉันคิดว่าฉันอาจเริ่มใช้ REPL / JShell
user902383


4

ที่จริงแล้ว 6 ไบต์

4ú*SÖi

ลองที่นี่!

คำอธิบาย

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 ไบต์ที่มีตัวพิมพ์เล็กและไม่มีบรรทัดใหม่:

4ú*S

1
ยินดีต้อนรับสู่ PPCG!
Erik the Outgolfer

4

รหัสเครื่อง x86 แบบ 16 บิต MS-DOS COM ขนาด 25 ไบต์

ในรูปหกเหลี่ยม:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

นี่เป็นโปรแกรม MS-DOS .COM ที่สมบูรณ์ คัดลอกลำดับไบต์ไปยังไฟล์ที่มีนามสกุล. com และเรียกใช้จาก DOSBox

ถอดชิ้นส่วน:

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

AWK, 48

ลองด้วย AWK ...

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

ตามที่แนะนำโดยmanatworkเราสามารถกำจัด 2 chars ได้

AWK, 46 (แก้ไข)

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

AWK, 40 (แก้ไขรหัสของMarkReed )

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

โดยการเอาการเริ่มต้นของตัวแปรที่คุณสามารถสำรอง 2 END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}ตัวอักษร:
จัดการ

1
การวางโค้ดในENDบล็อกหมายความว่ามันต้องมีสตรีมอินพุท (แม้ว่าจะเป็น/dev/null) ในการทำงาน ที่แก้ไขจำนวนถ่าน? อย่างไรก็ตามBEGIN{for(;++i<104;){printf"%c\n",i/4+65}}จะสั้นกว่า 5 ตัวอักษร
Mark Reed

@MarkReed รหัสของคุณไม่ทำงาน ตรวจสอบสิ่งนี้
Wasi

D'โอ้ เฉียดฉิว! :) แต่ฉันยังไม่ชอบENDความต้องการของรูปแบบสำหรับอินพุตสตรีม ...
Mark Reed


3

C # LINQ 115 ไบต์ 110 ไบต์

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

1
ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี!
Rɪᴋᴇʀ



3

Perl 6, 32

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

ฉันคิดว่านี่เป็นครั้งแรกที่ Perl 6 เป็นวิธีแก้ปัญหาแรกที่ฉันคิด แต่ไฮเปอร์เพอร์เทอร์ดูเหมือนจะเป็นธรรมชาติ
Mark Reed

3

Canvas ขนาด 5 ไบต์

Z41*⟳

ลองที่นี่!

คำอธิบาย:
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)                         |

ด้วยการแทนที่ด้วย\nเมื่อพิมพ์



3

brainfuck , 48 ไบต์

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

ลองออนไลน์!

พิมพ์เป็นตัวพิมพ์เล็กคั่นด้วยการขึ้นบรรทัดใหม่ ใช้การห่อเซลล์ 8 บิตเช่นเดียวกับเซลล์ที่เหลืออยู่ของแหล่งกำเนิดแม้ว่าคุณสามารถเพิ่ม a >เพื่อตอบโต้หลัง


ฉันกำลังจะโพสต์ใหม่ แต่คุณพยายามทำให้ดีที่สุดอย่างสมบูรณ์ฉันทำได้ 71 ไบต์ด้วย ++++++ [-> ++> ++++> +++++++++ ++ <<<] ++++> +> ++> +++++ <[-........> << >> << >> << >> + <<>]
KrystosTheOverlord




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.