มันเป็นเพียงข้อบกพร่อง


76

แรงบันดาลใจจากผลลัพธ์ที่บั๊กในคำตอบ Clojure ของ@Carcigenicateสำหรับการพิมพ์ท้าทายเพชรนี้

พิมพ์ข้อความที่แน่นอนนี้:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(จากกึ่งกลางออกไปด้านนอกทั้งสองทิศทางแต่ละหลักจะถูกคั่นด้วยช่องว่างมากกว่าหนึ่งบรรทัดก่อนหน้า)

กฏท้าทาย:

  • จะไม่มีอินพุต ( หรืออินพุตว่างที่ไม่ได้ใช้ )
  • ช่องว่างต่อท้ายเป็นตัวเลือก
  • บรรทัดใหม่ต่อท้ายเป็นตัวเลือก
  • ไม่อนุญาตให้ใช้ช่องว่างนำหน้าหรือบรรทัดใหม่
  • ไม่อนุญาตให้ส่งคืนอาเรย์สตริง คุณควรส่งออกข้อความหรือมีฟังก์ชั่นที่ส่งกลับสตริงเดียวกับผลลัพธ์ที่ถูกต้อง

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

การส่งออกอาร์เรย์ของสตริง - 1 สตริงต่อบรรทัด - อนุญาตหรือไม่
Shaggy

@Shaggy ขออภัยในกรณีนี้ควรส่งคืนสตริงเดี่ยวด้วยบรรทัดใหม่หรือส่งผลลัพธ์ออกมา ฉันได้เพิ่มสิ่งนี้เป็นกฎในการท้าทาย
Kevin Cruijssen

ไม่ต้องกังวลเควิน; เพิ่งจะทำแขนของฉันเพื่อดูว่าฉันสามารถช่วยตัวเองไม่กี่ไบต์
Shaggy

3
@Shaggy Hehe เหตุผลอื่นที่เราต้องถามคำถามในการท้าทายรหัส - กอล์ฟนอกจากมีจุดประสงค์ในการบันทึกไม่กี่ไบต์เหล่านั้น? ;)
Kevin Cruijssen

8
ฮะมันเยี่ยมมาก ฉันสงสัยว่าทำไมคำตอบนั้นจึงได้รับความสนใจอย่างมาก ขอบคุณ!
Carcigenicate

คำตอบ:


7

SOGL V0.12 , 12 ไบต์

9{SUē↕∑}¹№╬«

ลองที่นี่! คำอธิบาย:

9{     }      9 times do
  SU            push "1234567890"
    ē           push e, predefined with the input, which defaults to 0, and then increase it
     ↕          get that many spaces
      ∑         join the string of digits with those spaces
        ¹     collect the results in an array
         №    reverse the array vertically
          ή  palindromize vertically with 1 overlap

โอ้ดีนี่สั้นกว่าคำตอบที่ยอมรับ อืมนโยบายสำหรับคำตอบที่สั้นกว่านั้นคืออะไรสองสามเดือนหลังจากตอบรับแล้ว ตอนนี้สิ่งนี้ได้รับการตรวจสอบ (ค่อนข้างไม่ยุติธรรมกับคำตอบที่ยอมรับในปัจจุบันที่ฉันคิดว่า) หรือฉันควรทำอย่างอื่นหรือไม่? คำตอบที่ยอดเยี่ยมไม่ว่า! +1 จากฉัน
Kevin Cruijssen

@KevinCruijssen โดยปกติแล้ววิธีที่ดีที่สุดคือการอัปเดตคำตอบที่ยอมรับ แต่เนื่องจากใช้ฟีเจอร์ใหม่สองอย่างฉันจึงบอกว่ามีเหตุผลที่จะเลือกวิธีใดวิธีหนึ่ง - คุณเลือก
dzaima

62

Python 2 , 59 57 56 55 ไบต์

i=8;exec"print(' '*abs(i)).join('1234567890');i-=1;"*17

ลองออนไลน์!

@Leaky Nun ช่วยเล่นกอล์ฟเป็นจำนวนมาก @Praind แนะนำวิธีการบันทึก 1 ไบต์ซึ่งฉันเคยคิด แต่ลืมที่จะแก้ไข @CotyJohnathanSaxman แนะนำให้เปลี่ยนลูป


คำอธิบาย

  • i=8- กำหนดค่าให้กับตัวแปรที่เรียกว่า8i

  • exec"..."*17- ดำเนินการบล็อกรหัส ( ...) 17 ครั้ง

  • print(...) - ออกผลลัพธ์

  • ' '*abs(i)- สร้างสตริงที่มีช่องว่างซ้ำหลาย|i|ครั้ง

  • .join('1234567890')- สอดแทรกสตริงที่สร้างขึ้นด้านบนด้วย1234567890เช่นนั้น|i|ช่องว่างจะถูกแทรกระหว่างตัวเลข

  • i-=1- ลดiและโดยการดำเนินการมัน 17 ครั้งที่จะถึง-8ซึ่งจะสร้างรูปแบบซ้ำ ๆ abs()เต้ด้วยความช่วยเหลือของ



23
นี่เป็นฟาร์มที่น่าประทับใจมากกว่า 25 ไบต์ในทุกภาษากอล์ฟ
Jylo

4
@Jylo ขอบคุณ แต่โซลูชั่น 25 ไบต์นั้นน่าประทับใจมากเพราะพวกเขาแสดงความพยายามตีกอล์ฟโดยนักเขียนของพวกเขา คุณควรรู้ก่อนว่าตัวละครแต่ละตัวในแหล่งความหมายของตัวละครนั้นคืออะไรแล้วคุณจะเข้าใจว่าพวกเขามีความสวยงามอย่างไร
Mr. Xcoder

2
@JasonChen ไม่ Python ไม่อนุญาตให้ใช้ไวยากรณ์ดังกล่าวเนื่องจากเป็นภาษาที่ใช้ภาษา C เหมือนกัน
Mr. Xcoder

5
แรงบันดาลใจที่เป็นไปได้: สามารถทำได้โดยไม่ต้องexec ใน 55 ไบต์เช่นกัน ใช้วิธีการที่คล้ายกันที่จะได้รับหลาม 3 ลงไป 57 ไบต์ ไม่เห็นวิธีที่ชัดเจนในการทำให้สั้นลงโดยเว้นexecแต่คิดว่าฉันจะพูดถึงความเป็นไปได้
ShadowRanger

32

เป็นกลุ่ม 35 ไบต์:

i1234567890<esc>qqYP:s/\d/& /g
YGp{q7@q

คำอธิบาย:

i1234567890<esc>    " insert '1234567890'
qq                  " Record the following into register 'q'
  Y                 "   Yank a line
   P                "   Paste it above us
    :s/\d/& /g      "   Put a space after each number
Y                   "   Yank this line
 G                  "   Move the end of the buffer
  p                 "   Paste the line
   {                "   Move the beginning of the buffer
    q               " Stop recording
     7@q            " Call macro 'q' 7 times

6
ฉันไม่สนใจด้วยซ้ำว่านี่ไม่ใช่ผู้ชนะ แต่ก็สวยงาม
MrDuk

@MrDuk ขอบคุณมาก! ฉันดีใจที่คุณชอบ :)
DJMcMayhem

21

05AB1E ,  14  13 ไบต์

17F9ÝÀN8αð×ý,

ลองออนไลน์!

คำอธิบาย

17F            # for N in [0 ... 16] do
   9Ý          # push [0 ... 9]
     À         # rotate left
      N8α      # compute the absolute difference between N and 8
         ð×    # push that many spaces
           ý   # merge the list of digits with the space string as separator
            ,  # print

1
อืม ... คุณสามารถเอาชนะ SOGL ได้หากคุณไม่ต้องการs... มันสมเหตุสมผลไหมที่จะเข้าร่วมสตริงกับรายการหรือรายการที่มีสตริง? ฉันจะแนะนำการปรับปรุง Adnan โอ้และมีสำหรับ.∊ û»
Erik the Outgolfer

@EriktheOutgolfer: หรือฉันจะสลับขึ้นวิธีของฉันและบันทึกว่า 1 ไบต์ฉันต้องการ :)
Emigna

ขออภัยมีการลงคะแนนแล้ว
Erik the Outgolfer

3
นั่นหมายความว่าฉันจะได้รับการโหวตอีกครั้ง ...
Erik the Outgolfer

4
8F9ÝÀNð×ý}».∊ฉันทำยานอวกาศกระเพาะปลาแล้ว! และฉันก็ตื่นเต้นกับการแนะนำการแก้ไขแบบ 12 ไบต์
Magic Octopus Urn

20

C64 ASM, 358 ไบต์ (รวบรวม 102 ขั้นตอนด้วยแท็บพื้นฐาน)

นี่คือที่ใกล้เคียงที่สุดที่ฉันจะได้รับเนื่องจากข้อ จำกัด ที่ชัดเจน:

C64

jsr $E544
lda #9
sta $FD
nl1: jsr dl
jsr il
dec $FD
bne nl1
inc $FD
nl2: ldy $FD
cpy #9
bne nt1
bl: jmp bl
nt1: iny
sty $FD
jsr dl
jsr il
jmp nl2
dl: clc
ldx #$31
ldy #0
lp: txa
sm: sta $0400, y
inx
cpx #$31
bne c1
rts
c1: cpx #$3A
bne nt2
ldx #$30
clc
nt2: tya
adc $FD
cmp #40
bcc c2
rts
c2: tay
jmp lp
il: lda sm+1
adc #39
bcc nc
inc sm+2
nc: sta sm+1
rts

(อาจมีการปรับให้เหมาะสมเล็กน้อย)


ยินดีต้อนรับสู่ PPCG! โปรดใช้รหัสแท็กเพื่อโพสต์ข้อความ ฉันแก้ไขคุณโพสต์ หลังจากนำการเปลี่ยนแปลงไปใช้คุณสามารถเห็นสิ่งที่เปลี่ยนแปลงโดยการคลิกแก้ไข
ЕвгенийНовиков

ฉันเพิ่งตรวจสอบแล้วและจะไม่พอดีกับ PET 80 cols เนื่องจากบรรทัดแรกและบรรทัดสุดท้ายต้องใช้ 82 คอลัมน์
Shaun Bebbers

17

TSQL, 220 148 ไบต์

การปรับปรุงที่โพสต์โดย ZLK:

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+'
'FROM sys.objects PRINT @

เอาท์พุท:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
ZLK

แทนที่sys.objectsด้วยsysobjectsและ 1object_id` ด้วยidฉันมองหาตารางที่สั้นกว่าในsysสคีมา แต่ไม่มีอะไรสั้นเลยที่มีคอลัมน์สั้นที่สุดเท่าที่sysobjects
Jaloopa

และคุณสามารถบันทึกอีกสองสามไบต์โดยการเปลี่ยนด้านในCAST(กับPOWER(10)) เป็นVARCHAR
Jaloopa

ในความเป็นจริงหลีกเลี่ยงสิ่งที่แทนที่สิ่งต่าง ๆ โดยใช้LOG10และREPLICATE:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
Jaloopa

คุณสามารถเปลี่ยนชื่อตัวแปรเป็นเพียง@เพื่อกำจัด 3 ตัวอักษร
สะพาน

14

APL (Dyalog) 22 ไบต์

↑∊¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D

ลองออนไลน์!

⎕DD igits จากศูนย์ถึงเก้า

1⌽ หมุนไปทางหนึ่งก้าว (ใส่ศูนย์ที่ท้าย)

 ล้อมรอบ (เพื่อใช้เป็นหน่วย)

(... )↑¨¨ สำหรับตัวเลขเหล่านี้แต่ละตัวให้นำอักขระจำนวนมากจากตัวอักษรแต่ละตัว:

⍳17 หนึ่งถึงสิบเจ็ด

¯9+ ลบเก้า

| ค้นหาค่าสัมบูรณ์

1+ เพิ่มหนึ่ง

∊¨ เกณฑ์ (แบน) แต่ละรายการ

 เปลี่ยนชั้นหนึ่งของความลึกเป็นระดับตำแหน่ง (matrify)


3
ในภาษาขนาดกะทัดรัดเช่นนี้จะใช้เวลาสองไบต์ในการเพิ่มอย่างจริงจังหรือไม่
aschepler

3
@aschepler ใช่ APL ไม่ใช่ภาษากอล์ฟและไม่มีพื้นฐานดั้งเดิมที่เพิ่มขึ้น J ทำ แต่ใช้เวลาสองไบต์ >:.
Adám

4
APL is not a golfing language... ↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D... ಠ_ಠ
Alexander

1
@ อเล็กซานเดอร์ขอบคุณที่ให้ความสนใจฉันกลับมาที่นี่ ฉันสามารถเล่นกอล์ฟ 3 ไบต์
อดัม


12

Java 11 (JDK) , 98 ไบต์

o->{for(int i=-9;++i<9;)System.out.println("".join(" ".repeat(i<0?-i:i),"1234567890".split("")));}

ลองออนไลน์!

  • -14 ไบต์โดยสลับไป JDK 11 String::repeatซึ่งขณะนี้มีพื้นเมือง

คำตอบก่อนหน้า ( Java (OpenJDK 8) ), 113 112 bytes

o->{for(int i=-9;++i<9;)System.out.printf("".join("%1$"+(i<0?-i:i>0?i:"")+"s","1234567890".split(""))+"%n","");}

ลองออนไลน์!

คำอธิบาย

ฉันกำลังสร้างString17 ครั้งต่อไปนี้( Nเป็นตัวแปรไม่ใช่ค่าจริง):

"1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n"

ทุกอย่างเป็นตัวเลขที่คาดหวังเข้าร่วมโดย%1$Nsที่Nคือจำนวนช่องว่างระหว่างแต่ละหลัก

%1$Nsโดยทั่วไปหมายถึง "เอาการโต้แย้งแรกและรองมันจนกว่าความยาวจะน้อยกว่าN" นอกจากนี้ยัง%1$0sไม่ได้รับการสนับสนุนเพื่อให้เป็นกรณีพิเศษจะทำสำหรับ%1$s0

ในที่สุดฉันฟอร์แมตพิมพ์สตริงนั้นโดยใช้อาร์กิวเมนต์ตัวเดียว: ""ดังนั้นตัวจัดรูปแบบจะใช้สตริงที่ว่างเปล่าซ้ำกันเสมอ

ประหยัด

  • 1 ไบต์ต้องขอบคุณ Kevin Cruijssen

2
คำตอบที่ดี! Btw ฉันได้กล่าวถึงความท้าทายอย่างชัดเจนว่าอนุญาตให้ใช้พารามิเตอร์ว่างที่ไม่ได้ใช้ดังนั้นคุณสามารถแทนที่()->ด้วยo->เพื่อบันทึกไบต์ :)
Kevin Cruijssen

คุณสามารถทำให้และใช้ในของคุณสำหรับวง? ointfor(o=-9;++o<9;)
ฤดูหนาว

2
@ ฤดูหนาวไม่เพราะความท้าทายบอกว่า " ไม่ได้ใช้ " และนั่นจะใช้ตัวแปรพารามิเตอร์แม้ว่าจะไม่ได้ใช้ค่าก็ตาม
Olivier Grégoire

@ OlivierGrégoireลิงก์ไปยังบทความนี้codegolf.meta.stackexchange.com/questions/12681/และโพสต์นี้บอกว่าควรจะว่างเปล่า (0 สำหรับ ints)
ฤดูหนาว

@Indeed แน่นอน แต่ความท้าทายนั้นบอกว่า "ไม่ได้ใช้" คำวินิจฉัยเฉพาะในค่าเริ่มต้นการท้าทายจะแทนที่
Olivier Grégoire

11

Japt -R , 19 18 16 14 13 ไบต์

Aõ%A
£qYçÃÔÅê

ทดสอบหรือลองออนไลน์


คำอธิบาย

A             :10
 õ           :Range [1,10]
  %A         :Modulo each by 10
\n           :Assign to variable U
£            :Map each element at 0-based index Y
 q           :  Join U with
  Yç         :   Space repeated Y times
    Ã        :End map
     Ô       :Reverse
      Å      :Slice off first element
       ê     :Mirror
             :Implicitly join with newlines and output

2
ดี โซลูชัน 16 ไบต์ของฉันคือ9ÆAõ%A qXîÃw ê ·
ETHproductions

8

JavaScript (ES2017), 83 73 72 68 ไบต์

ขอบคุณShaggyสำหรับการบันทึก 10 ไบต์ ขอบคุณCraigสำหรับการบันทึก 1 ไบต์ ขอบคุณarcsสำหรับการบันทึก 4 ไบต์

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }
.as-console-row:after { display: none !important; }


บันทึก 1 ไบต์โดยใช้ polyfill Math.absสำหรับ ฉันยังทำaรายการไม่ hardcoded แต่นั่นคือการตั้งค่า ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
โทมัส W

1
บันทึกไบต์ด้วย[..."1234567890"].join("".padEnd(i<0?-i:i))
Shaggy

@ Shaggy ขอบคุณ นั่นช่วยประหยัด 10 ไบต์ :)
Tushar

1
@ThomasW: [...Array(10).keys]จะ0เป็นองค์ประกอบแรกไม่ใช่สุดท้าย
Shaggy

1
คุณสามารถบันทึกไบต์โดยใช้วิธีการของคุณเก็บผลลัพธ์ในสตริงแทนการบันทึก: for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`ซึ่งXเป็นบรรทัดใหม่จริง
Craig Ayre

7

Brachylog , 30 29 28 ไบต์

Ị↺{∧≜;Ṣj₍g;?↔zcc}ᶠ⁹↔;XcP↔Pẉᵐ

ลองออนไลน์!

ที่บันทึกไว้หนึ่งขอบคุณไบต์รั่วนูน

คำอธิบาย

Ị↺                               The string "1234567890"
  {               }ᶠ⁹            Find the first 9 outputs of:
   ∧≜                              Take an integer
       ;Ṣj₍                        Juxtapose " " that number of times
           g;?↔z                   Zip that string of spaces with "1234567890"
                cc                 Concatenate twice into one string
                    ↔            Reverse the resuling list
                     ;XcP↔P      Palindromize the list (concatenate X to it into the list P,
                                   P reversed is still P)
                           ẉᵐ    Map writeln


@LeakyNun ฉันติดอยู่กับเรื่องใหญ่ "พิมพ์ข้อความที่ถูกต้องนี้" และไม่ได้อ่านว่าเราน่าจะมีลายเส้น ...
Fatalize


1
@LeakyNun ทำไมคุณไม่โพสต์คำตอบของคุณเอง?
เสียชีวิต

7

ถ่าน 18 ไบต์

F⁹⪫⁺…I¹:⟦0¶⟧× ι‖B↑

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

F⁹      Repeat 9 times (i = loop variable)
  ⪫       Join
   ⁺       Concatentate
    …I¹:    All the characters from str(1) below ":" (i.e. to "9") as a list
    ⟦0¶⟧    A list whose element is the string "0\n"
   × ι     With i spaces
‖B↑     Reflect everything upwards but without duplicating the top line

หมายเหตุ: Cast(1)ใช้หมายเลขเดียวกันของไบต์เพราะ"1"จะต้องแยกก่อน":"(ซึ่งมันเกิดขึ้น deverbosifier ล้มเหลวในการแทรก)


7

R , 108 ไบต์

for(i in abs(-8:8))cat(paste0(el(strsplit("1234567890","")),paste(rep(" ",i),collapse=""),collapse=""),"\n")

เพียงแค่วางและยุบสตริง

ลองออนไลน์!

แก้ไข: ขอบคุณสำหรับ Challenger5 สำหรับการชี้ปัญหา แก้ไขทันที

แก้ไข 2: บันทึกไบต์ด้วย bouncyball


ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

2
สิ่งนี้ดูไม่ถูกต้อง - เส้นกลางไม่ควรมีช่องว่างใด ๆ เลย
แยกแยะผลไม้

@ Challenger5 คุณพูดถูก! แก้ไขโดยใช้paste0แทนpasteดังนั้นต้องเพิ่ม byte :(
Probel

1
บันทึก 2 ไบต์โดยใช้el: el(strsplit("1234567890",""))แทนที่จะเป็นstrsplit("1234567890","")[[1]]
bouncyball

คุณสามารถกำจัดหนึ่งในpasteงบโดยใช้การsepโต้แย้งcatและทำอีกเล็กน้อยเพื่อให้ได้ถึง70 bytes
Giuseppe



6

Java 8, 235 234 206 163 ไบต์

interface A{static void main(String[]a){for(int i=-8;i<9;i++){String s="";for(int j=1,k;j<10;j++){s+=j;for(k=0;k<(i>0?i:-i);k++)s+=" ";}System.out.println(s+0);}}}

อัปเดต : -28 ไบต์ขอบคุณ Leaky Nun!
อัปเดต 2 : -43 ไบต์ขอบคุณ Leaky Nun อีกครั้ง!

Ungolfed:

interface A {
    static void main(String[] a) {
        for (int i = -8; i < 9; i++) {
            String s = "";
            for (int j = 1, k; j < 10; j++) {
                s += j;
                for (k = 0; k < (i > 0 ? i : -i); k++)
                    s += " ";
            }
            System.out.println(s + 0);
        }
    }
}

ลองออนไลน์

แก้ไข:รหัสก่อนหน้านี้ผิด ทำผิดพลาดขณะเล่นกอล์ฟรหัสควรทำงานตามที่ตั้งใจไว้ในขณะนี้!


4
ยินดีต้อนรับสู่ PPCG! เคล็ดลับสำหรับการเล่นกอล์ฟใน Javaและเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>อาจน่าสนใจในการอ่าน :) บางสิ่งที่คุณสามารถตีกอล์ฟกำลังลบpublicและกำจัดพื้นที่ที่ไม่จำเป็นออกไป และยังมีอีกหลายสิ่งที่ต้องปรับปรุง แต่ฉันแนะนำให้อ่านเคล็ดลับและดูว่าคุณสามารถปรับปรุงตัวเองได้ที่ไหน ยินดีต้อนรับอีกครั้งและสนุกกับการเข้าพักของคุณ! :)
Kevin Cruijssen

2
อืมคุณแน่ใจหรือว่าคุณโพสต์รหัสที่ถูกต้อง? เมื่อฉันคัดลอกวางรหัสของคุณในTryItOnlineจะไม่ให้ผลลัพธ์ที่ถูกต้อง
Kevin Cruijssen

1
อ๊ะฉันทำอะไรผิดไปในขณะที่ตีกอล์ฟรหัส! ฉันจะแก้ไขสิ่งนี้!
Alex Ferretti



6

Husk , 21 ไบต์

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9

นี่เป็นโปรแกรมเต็มรูปแบบที่พิมพ์ไปยัง STDOUT ลองออนไลน์! มีช่องว่างต่อท้ายมากมาย

คำอธิบาย

Husk ยังขาดสิ่งจำเป็นมากมายเช่นฟังก์ชันช่วงอาร์กิวเมนต์สองตัวดังนั้นส่วนของโซลูชันนี้จึงค่อนข้างแฮ็กเล็กน้อย

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9
              ṁs`:0ḣ9  This part evaluates to the string "1234567890".
                   ḣ9   Range from 1 to 9.
                `:0     Append 0.
              ṁs        Convert each number to string and concatenate.
     §+↔tḣR8'          This part evaluates to a list like ["  "," ",""," ","  "]
                       but with 17 elements instead of 5.
          R8'           A string of 8 spaces.
         ḣ              Take prefixes.
     §+                 Concatenate
       ↔                the reversal and
        t               tail of the prefix list, palindromizing it.
  Ṫ                    Take outer product of the two lists
   `:                  with respect to flipped prepeding.
                       This prepends each digit to each string of spaces.
mΣ                     Map concatenation over the results, computing the rows.
                       Implicitly join with newlines and print.

คุณสามารถแทนที่ṁs`:0ḣ9ด้วยuṁsḣ10เพื่อสร้างสตริง "1234567890" ด้วยไบต์ที่น้อยลงหนึ่งตัว!
Sophia Lechner

6

T-SQL 145 152ไบต์

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(number-8)))+'
'FROM master..spt_values WHERE type='P'PRINT @

อัปเดตเพื่อใช้:

  • master..spt_valuesเพื่อสร้างตัวเลข ( WHERE type = 'P'เหล่านี้มักจะต่อเนื่องกันเริ่มต้นที่ 0
  • @ TOP 17ความคิดของ ZLK
  • พิมพ์ (เพื่อปฏิบัติตามกฎ - ไม่มีรายการสตริง)
  • @JanDrozen ความคิดที่ดีของการรวมค่าขนส่งคืนในสตริง (ฉันนับว่าเป็นเพียงหนึ่งไบต์ - Windows CRLF คืออะไร)
  • แนวคิดของ @Bridge เพื่อใช้ just @ สำหรับชื่อตัวแปร - เทคนิคทั้งหมดนี้ !!

ผล:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(ขอบคุณ @JanDrozen สำหรับแนวคิด REPLACE)


นี่คือคำตอบที่ดี! ยินดีต้อนรับสู่เว็บไซต์ :)
DJMcMayhem

ขอบคุณ ฉันเห็นพวกเราบางคนคิดค้นภาษาของเราเองที่นี่ :)
วิศวกรที่กลับรายการ

1
การผสมผสานระหว่างคำตอบนี้กับคำตอบอื่น ๆ นั้นเหมาะสมเช่น: SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects(สมมติว่าคุณไม่จำเป็นต้องพิมพ์)
ZLK

Aha @ZLK - เทคนิคดี ๆ - อันดับ 17 อันดับสูงสุดและ sys.objects - ขอบคุณ!
วิศวกรที่กลับรายการ

6

Clojure, 126 99 ไบต์

-27 โดยแก้ไขข้อผิดพลาดที่เป็นใบ้สองสามข้อ การใช้ภายนอกaไม่จำเป็นดังนั้นฉันจึงสามารถกำจัดได้aทั้งหมดและเขียนเพียงapply strครั้งเดียว นั่นทำให้ฉันสามารถใช้แมโครฟังก์ชั่นสำหรับฟังก์ชั่นหลักซึ่งบันทึกไว้บางไบต์ ฉันยังเรียกการโทรไปยังMath/absแทนที่จะปฏิเสธn-spacesอีกครั้ง

โดยทั่วไปจะเป็นพอร์ต Clojure ของแนวคิด Python ของ Mr. Mr.Xcoder ในการหวนกลับฉันควรจะใช้abs/ rangeวิธีการท้าทายเพชรเดิม แต่ฉันแล้วฉันอาจไม่ได้ผลิตออก bugged!

ค่อนข้างง่าย รวมสตริงตัวเลขด้วยจำนวนช่องว่างที่ขึ้นอยู่กับแถวปัจจุบัน

#(doseq[n(range -8 9)](println(clojure.string/join(apply str(repeat (Math/abs n)\ ))"1234567890")))

(defn bugged []
  (doseq [n-spaces (range -8 9)]
    (println
        (clojure.string/join
          ; "String multiplication"
          (apply str
                 (repeat (Math/abs n-spaces) \space))
          "1234567890"))))


5

Mathematica, 92 ไบต์

Column@Join[Reverse@(s=Row/@Table[Riffle[Range@10~Mod~10,""<>Table[" ",i]],{i,0,8}]),Rest@s]

ลองออนไลน์

คัดลอก / วางรหัสด้วย ctrl-v
กด shift + enter เพื่อเรียกใช้


คุณสามารถเพิ่มลิงค์TryItOnline ได้ไหม
Kevin Cruijssen

@KevinCruijssen Mathematica ไม่ใช่ภาษาฟรีและMathics ดูเหมือนจะไม่ทำงาน
Leun Nun

@LeakyNun อ่าโอเคขอบคุณ ฉันเห็น MartinEnder โพสต์ลิงก์ TIO บางครั้ง แต่ลิงก์เหล่านั้นเป็นลิงก์ Mathics
Kevin Cruijssen

1
@Kevin Cruijssen ใช่แน่นอนฉันได้เพิ่มลิงค์พร้อมคำแนะนำ
J42161217

5

C, 97 ไบต์

i=-9;main(j){for(;++i<9;putchar(10))for(j=0;++j<11;printf("        "+8-abs(i)))putchar(48+j%10);}

คอมไพเลอร์ของคุณอาจจะบ่นมากเกี่ยวกับรหัสนี้ ฉันโยน 7 คำเตือนของ 4 ประเภทที่แตกต่างกัน อาจปรับปรุงรหัสในภายหลัง

ลองออนไลน์!


5

C (gcc) , 76 ไบต์

f(x,y){for(y=-9;++y<9;puts(""))for(x=10;x++;printf("%-*d",abs(y)+1,x%=10));}

ลองออนไลน์!

มันส่งผลช่องว่างบางส่วนซึ่งควรจะเป็น OK

มันพิมพ์ตัวเลขโดยใช้ฟิลด์ความยาวแบบไดนามิกที่ปรับชิดซ้ายนั่นคือสิ่งที่สตริงรูปแบบใช้%-*dสำหรับ

ลูปด้านในมีการเริ่มต้นที่ตลก (เริ่มจาก 10 หลาย ๆ 10 จะดี) เพื่อ "ลดความซับซ้อน" เงื่อนไขการเลิกจ้าง


4

Charcoal , 21 20 19 18 ไบต์

F⁹«F…¹χ⁺κ… ι0⸿»‖B↑

ลองออนไลน์!

เชื่อมโยงไปยังรุ่นอย่างละเอียด โดยทั่วไปฉันสร้างส่วนล่างของรูปวาดแล้วสะท้อนข้อความขึ้น


1
เมื่อฉันเห็นคำถามที่ฉันแม้ว่าฉันจะลองด้วยตัวเองใน Charcoal ก่อนที่จะดูคำตอบ ฉันเริ่มต้นด้วยคำตอบที่ 21- ไบต์ แต่เล่นได้ถึง 20 ไบต์ ... น่ากลัว!
Neil

@Neil :-D มันเป็น 19 ไบต์ตอนนี้!
Charlie

ใช่เพิ่งพบว่ากอล์ฟตัวเอง ฉันกำลังมองเข้าไปด้วยE…⁹⪫E…·¹χI﹪κχ× ι‖B↑(เช่นสำหรับ 19 ไบต์) แต่ล่ามดูเหมือนจะไม่ชอบ (ฉันไม่สามารถเห็นสิ่งผิดปกติกับตัวเอง)
Neil

โอ้ Range ใช้สองข้อโต้แย้งทำให้ฉันงี่เง่า
Neil

1
กลายMapเป็นปลาเฮอริ่งแดงดังนั้นตอนนี้ฉันได้โพสต์คำตอบขนาด 18 ไบต์แล้ว
Neil

4

CJam , 21 ไบต์

A,(+aH*ee{:\8-zS**n}/

ลองออนไลน์!

คำอธิบาย

A,     e# Get [0 1 2 ... 9].
(+     e# Rotate the 0 to the end.
aH*    e# Wrap in an array and repeat 17 times.
ee     e# Enumerate. This pairs each copy of the array with its index in
       e# the list.
{      e# For each [index array] pair...
  :\   e#   Unwrap the pair and swap its order.
  8-z  e#   Get the absolute difference of the index from 8.
  S*   e#   Get a string of that many spaces.
  *    e#   Riffle the list of digits with the string of spaces.
  n    e#   Print it with a trailing linefeed.
}/

1
ทางเลือกอื่น ๆ (ขนาด 21 ไบต์):9{S*A,(+\*}%_W%);\+N*
แยกผลไม้

4

แบตช์ 163 ไบต์

@set s=1 2 3 4 5 6 7 8 9 0
@set t=         
@for %%l in (9 7)do @for /l %%i in (1,1,%%l)do @call:%%l
:7
@set t=  %t%
:9
@set t=%t:~1%
@call echo %%s: =%t%%%

หมายเหตุ: บรรทัดแรกลงท้ายด้วย 9 ช่องว่าง คำอธิบาย: ใช้หมายเลขบรรทัดโฆษณา! ลูปแรกต้องรัน 9 ครั้งและลบช่องว่างในแต่ละครั้งในขณะที่ลูปที่สองต้องรัน 8 ครั้งและเพิ่มช่องว่างในแต่ละครั้ง อดีตสำเร็จด้วยการรัน 7 ครั้งและล้มลงเป็นครั้งที่ 8 ในขณะที่หลังสำเร็จด้วยการเพิ่มช่องว่างสองช่องและเลื่อนผ่านเพื่อลบหนึ่งในนั้นอีกครั้ง




4

PowerShellขนาด 30 ไบต์

8..0+1..8|%{1..9+0-join' '*$_}

ลองออนไลน์!

สร้างช่วงของ8,7,6...2,1,0,1,2...8ลูปแล้วผ่านแต่ละหมายเลข ภายในวงที่เราสร้างช่วงของ1..9การตัดแบ่งด้วย0แล้ว-joinตัวเลขในช่วงพร้อมกับจำนวนที่เหมาะสมของพื้นที่ แต่ละสตริงจะถูกทิ้งไว้บนไพพ์ไลน์และเอาต์พุตจะเป็นนัยเมื่อโปรแกรมเสร็จสิ้น


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