ตารางรหัส ASCII Golf Golf


19

ท้าทาย

สร้างโปรแกรมที่สั้นที่สุดที่ตรงตามข้อกำหนด

ความต้องการ

  1. รหัสจะต้องสร้างตาราง 5x5 ของ 0s เช่น:

    00000
    00000
    00000
    00000
    00000
    
  2. รหัสจะต้องยอมรับอินพุต (คอลัมน์, แถว, ตัวอักษร) ตารางจะต้องเปลี่ยนตาม:

    ราคาเริ่มต้น:

    00000
    00000
    00000
    00000
    00000
    

    การป้อนข้อมูล:

    (2,5,*)
    

    เอาท์พุท:

    0*000
    00000
    00000
    00000
    00000
    

    (หมายเหตุ: มุมซ้ายล่างคือตำแหน่ง 1,1)

  3. โปรแกรมจะต้องส่งคืนข้อความแสดงข้อผิดพลาดอื่นที่ไม่ใช่ตารางถ้าอินพุต / แถวไม่ใช่ 1,2,3,4 หรือ 5 นี่อาจเป็นข้อความที่คุณเลือก (ตราบใดที่ไม่ใช่ตาราง) ดังนั้นจึง0เป็น ข้อผิดพลาดเอาท์พุทที่ยอมรับได้

  4. โปรแกรมต้องทำงานกับอักขระ ASCII ที่พิมพ์ได้ทั้งหมด (ของแป้นพิมพ์สหรัฐฯ)

ผู้ชนะ

ผู้ชนะจะเป็นคนที่มีรหัสที่สั้นที่สุดและตอบสนองความต้องการทั้งหมด หากมีคำตอบมากกว่าหนึ่งคำตอบและมีความยาวเท่ากัน (สั้นที่สุด) บุคคลที่ตอบก่อนจะเป็นผู้ชนะ


8
โปรแกรมจะต้องกลับข้อผิดพลาด ข้อความแสดงข้อผิดพลาดคืออะไร โปรแกรมสามารถส่งคืน0ข้อผิดพลาดและกริดเพื่อความสำเร็จได้หรือไม่?
ร็อด

1
ต้นกำเนิดของเมทริกซ์อยู่ที่ไหน? มันจำเป็นต้องเป็นศูนย์หรือหนึ่งดัชนี?
จอร์จ

3
ยินดีต้อนรับสู่ PPCG โดยวิธีการ
Erik the Outgolfer

4
โปรแกรมของเขาจะต้องทำงานกับตัวละครทุกตัวบนคีย์บอร์ดของสหรัฐอเมริกาทำไมไม่เพียง แต่เป็น ASCII? ฉันไม่ได้รู้ว่าตัวอักษรของแป้นพิมพ์ของสหรัฐอเมริกาและที่ไม่ได้เพิ่มอะไรให้ท้าทาย
หลุยส์ Mendo

1
@ LuisMendo ฉันคิดว่าคีย์บอร์ดของสหรัฐฯคือ ASCII หรืออย่างน้อยก็เป็นเซตย่อย
Conor O'Brien

คำตอบ:


11

Dyalog APL , 17 13 10 ไบต์

พร้อมต์สำหรับอาร์เรย์ที่ล้อมรอบซึ่งประกอบด้วย (แถว, คอลัมน์) จากนั้นสำหรับอักขระ ให้ INDEX ERROR จากอินพุตที่ผิดพลาด

⊖⍞@⎕⊢5 50

ลองออนไลน์!

 พลิกคว่ำผลลัพธ์ของ

 ป้อนตัวอักษร

@ แทนที่เนื้อหาที่ตำแหน่ง

 อินพุตที่ประเมินค่า (แถว, คอลัมน์)

 ของ

5 5⍴ อาร์เรย์ 5 × 5 ของ

0 ศูนย์


คือจำเป็น? ฉันคิดว่าในกรณีนี้มันซ้ำซ้อน
Conor O'Brien

1
@ @ ConorO'Brien ConorO'Brien ถ้ามันไม่ได้มี parser เห็น(⊂⎕)5 5เป็นหนึ่งเดียวอาร์เรย์ 3 องค์ประกอบ - ข้อโต้แย้งที่จะ
อดัม

นั่นคืออักขระ Unicode 13 ตัวไม่ใช่ 13 ไบต์ใช่ไหม
wilx

1
@wilx คลิกที่คำว่าไบต์ !
Adám

คำตอบนี้เป็นผู้ชนะ
เดฟโจนส์

5

Ruby, 157 149 ไบต์

g=(1..5).map{[0]*5}
loop{puts g.map(&:join).join ?\n
x=gets.match /\((.),(.),(.)\)/
a,b=x[1].hex,x[2].hex
1/0 if a<1||a>5||b<1||b>5
g[5-b][a-1]=x[3]}

ข้อผิดพลาดเกี่ยวกับอินพุตที่ผิดรูปแบบหรืออยู่นอกตำแหน่งที่ถูกผูกไว้

ขอขอบคุณ ConorO'Brien (8 ไบต์) และ Afuous (2 ไบต์) สำหรับการช่วยประหยัดไบต์


loop do...end-> loop{...}; ผมคิดว่าการทำงานมากเกินไปหรือแม้กระทั่งArray.new(5,[0]*5) [*[0]*5]*5
Conor O'Brien

@ ConorO'Brien Nope Array.new(5,[0]*5)ทำอาร์เรย์อ้างอิงและ[*[0]*5]*5ทำอาร์เรย์แบบเรียบง่าย
TuxCrafting

โอ้ใช่. *ละเว้นแรก จากนั้นยังคงสร้างอาร์เรย์ของการอ้างอิง
Conor O'Brien

Array.new(5){[0]*5}สามารถถูกแทนที่ด้วย(1..5).map{[0]*5}เพื่อบันทึก 2 ไบต์
โปร่งใส

4

แบตช์ 199 ไบต์

@echo off
if %1 gtr 0 if %1 lss 6 if %2 gtr 0 if %2 lss 6 goto g
if
:g
for /l %%j in (5,1,-1)do call:l %* %%j
exit/b
:l
set s=000000
if %2==%2 call set s=%%s:~0,%1%%%3%%s:~%1%%
echo %s:~1,5%

เกิดข้อผิดพลาดหากตำแหน่งอยู่นอกระยะ


ฉันคิดว่าคุณสามารถใช้สัญลักษณ์เช่น< ^<ไม่แน่ใจ
Conor O'Brien

3

PHP, 111 100 97 ไบต์

$s=str_repeat("00000\n",5);$s[($x=($a=$argv)[1])+29-6*$y=$a[2]]=$a[3];echo$x&&$y&&$x<6&$y<6?$s:E;

พิมพ์Eถ้าแถว / คอลัมน์อยู่นอกช่วง
ทำงานด้วยphp -r <code> <row> <column> <character>


3

Python ขนาด 66 ไบต์

lambda a,b,n,l='00000\n':6>b>0<a<6and(5-b)*l+l[:a-1]+n+l[a:]+~-b*l

จะไม่เกิดความล้มเหลวสำหรับ a = 4, b = 3 หรือไม่
ติตัส

@Titus ไม่อีกต่อไป D
Rod

1
โซลูชันยังใช้งานได้กับ Python3
george

3

Dyalog APL, 24 20 18 ไบต์

บันทึกแล้ว 4 ไบต์ด้วย Zgarb! บันทึก 2 ไบต์ขอบคุณ Adam!

a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a

พร้อมต์สำหรับอินพุต ดูคำอธิบายด้านล่าง


20 ไบต์

{a←5 5⍴0⋄a[⊂⍺]←⍵⋄⊖a}

y x f 'c'กำหนดให้กับฟังก์ชั่นและเรียกมันว่า เช่น:

      f←{a←5 5⍴0⋄a[⊂⍺]←⍵⋄⊖a}

      5 2 f '*'
0 * 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

      6 6 f '*'
INDEX ERROR                   
     ←{a←5 5⍴0 ⋄ a[⊂⍺]←⍵ ⋄ ⊖a}
               ∧              

      0 0 f '*'
INDEX ERROR                   
     ←{a←5 5⍴0 ⋄ a[⊂⍺]←⍵ ⋄ ⊖a}
               ∧   

คำอธิบาย

{a←5 5⍴0⋄a[⊂⍺]←⍵⋄⊖a}

{...}เป็นฟังก์ชั่นที่มีการโต้แย้งทางด้านซ้ายและด้านขวาโต้แย้ง แยกข้อความสั่งดังนั้นจึงมีสามข้อความ:

a←5 5⍴0⋄a[⊂⍺]←⍵⋄⊖a

คำสั่งแรกa←5 5⍴0ชุดaไป5จาก5ตารางของ0s

คำสั่งที่สองตั้งสมาชิกที่พิกัดกำหนดโดย เป็น(นั่นคืออักขระ)

สุดท้ายเราดำเนินการบนaและกลับว่าผลผลิตหนึ่งของaตรงกันข้าม


{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}บันทึกไม่กี่ไบต์
Zgarb

@Zgarb โอ้เยี่ยมมาก! ฉันไม่รู้ว่าการจัดทำดัชนีทำงานเช่นนั้น
Conor O'Brien

คุณสามารถบันทึกไบต์ที่สองโดยการแปลงร่างกาย tradfn:a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
อดัม

@ Adam ทำงานอย่างไร ดูเหมือนจะไม่สามารถใช้งาน TryAPL ได้
Conor O'Brien

@ ConorO'Brien ถูกต้อง TryAPL ไม่อนุญาตให้ป้อนข้อมูล แต่คุณสามารถรับเวอร์ชันเต็มได้ฟรี
อดัม

3

JavaScript (ES6) 73 76 ไบต์

โยนTypeErrorถ้าคอลัมน์หรือแถวอยู่นอกช่วง

(c,r,C,a=[...`00000
`.repeat(5)])=>(a[29+c-r*6]=C,c<1|r<1|c>5|r>5||a).join``

การสาธิต


น่ารัก แต่มันมีข้อผิดพลาดcหรือไม่ถ้าrน้อยกว่า 1?
ETHproductions

@ETHproductions c == 0 || r == 0มันทดสอบเท่านั้น แต่ฉันเดาว่าคุณพูดถูก: ฉันจะอัปเดตเพื่อป้องกันค่าลบ
Arnauld

3

C #, 199 ไบต์

ตามคำตอบของ Pete Arden

string g(int c, int r, char a){if(c<1|c>5|r<1|r>5)return "Index Error";var b="00000";var d=new[]{b,b,b,b,b};c--;d[r-1]=new string('0',c)+a+new string('0',4-c);return string.Join("\r\n",d.Reverse());}

Ungolfed:

public static string G(int c, int r, char a)
    {
        if (c < 1 || c > 5 || r < 1 || r > 5) return "Index Error"; // Check it's not out of range
        var b = "00000";
        var d = new [] { b, b, b, b, b };                           // Generate display box, and fill with the default character
        c--;                                                        // Convert the X to a 0 based index
        d[r - 1] = new string('0',c) + a + new string('0',4-c);     // Replace the array's entry in y coordinate with a new string containing the new character
        return string.Join("\r\n", d.Reverse());                    // Reverse the array (so it's the right way up), then convert to a single string
    }

ยินดีต้อนรับสู่เว็บไซต์! ฉันไม่ใช่ผู้เชี่ยวชาญใน C # แต่ดูเหมือนว่ามีบางพื้นที่ที่คุณสามารถลบได้
DJMcMayhem

1
(ขออภัยไม่ทราบมารยาทในการส่ง) สั้นลง G (): สตริงคงที่สาธารณะ G (int c, int r, char a) {return (0 <c &&c <6 && 0 <r && r <6)? string.Concat (นับไม่ได้ (1,29). เลือก (i => i% 6> 0? i / 6 == 5-r && i% 6 == c? a: '0': '\ n')): "ข้อผิดพลาดของดัชนี";}
เอริค


2

เยลลี่ขนาด 28 ไบต์

รู้สึกนานเกินไป ...

Ṫ0ẋ24¤;ṙÑs5UY
’ḅ5
Ṗḟ5R¤
-ÑÇ?

TryItOnline!

อย่างไร?

Ṫ0ẋ24¤;ṙÑs5UY - Link 1, make grid: [row, column, character] e.g. [5,2,'*']
Ṫ             - tail: character                                  '*'
     ¤        - nilad followed by link(s) as a nilad  
 0            -     zero
  ẋ           -     repeated
   24         -     24 times                                     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      ;       - concatenate:                                     "000000000000000000000000*"
        Ñ     - call next link (2) as a monad                    21
       ṙ      - rotate left by                                   "000*000000000000000000000"
         s5   - split into chunks of length 5                    ["000*0","00000","00000","00000","00000"]
           U  - upend (reveres each)                             ["0*000","00000","00000","00000","00000"]
            Y - join with line feeds                              0*000
              - implicit print                                    00000
                                                                  00000
’ḅ5 - Link 2, position: [row, column]                             00000
’   - decrement                                                   00000
 ḅ5 - convert from base 5

Ṗḟ5R¤ - Link 3, input error checking: [row, column, character]
Ṗ     - pop: [row, column]
 ḟ    - filter out values in
  5R¤ - range(5): [1,2,3,4,5] - any values not in this remain giving a truthy result

-ÑÇ? - Main link: [row, column, character]
   ? - ternary if:
  Ç  -    last link (3) as a monad
-    -    -1 (if truthy - the error identification)
 Ñ   - next link (1) as a monad (if falsey - the grid)

2

JavaScript (ES6), 89 ไบต์

f=(X,Y,Z,x=5,y=5)=>x+y>1?(x?X+x-6|Y-y?0:Z:`
`)+f(X,Y,Z,x?x-1:5,y-!x):X<1|X>5|Y<1|Y>5?e:""

เพราะฉันรักการสอบถามซ้ำ ส่งค่าReferenceErrorพิกัดที่ไม่ถูกต้อง



2

Brain-Flak 415 Bytes

รวมถึง +3 สำหรับ -c

([][()()()]){{}}{}({}<(({}<(({})<>)<>>)<>)<>([((((()()()){}){}){}){}]{}<([((((()()()){}){}){}){}]{})>)(()()()()()){({}[()]<(({})){{}(<({}[()])>)}{}({}<(({})){{}(<({}[()])>)}{}>)>)}{}({}{}){<>{{}}<>{}}<>>)<>(()()()()()){({}[()]<(((((((((()()()){}){}){}){})))))((()()()()()){})>)}{}{}<>({}<()((((((()()()){}){}()){}){}()[{}])({})({})({})({}){}{}[((((()()()){}){}){}){}()]){({}[()]<<>({}<>)>)}{}<>{}>)<>{({}<>)<>}<>

ลองออนไลน์!

นำอักขระไปแทรกก่อนจากนั้นแถวตามด้วยคอลัมน์โดยไม่มีช่องว่าง

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

<>(()()()()()){({}[()]<(((((((((()()()){}){}){}){})))))((()()()()()){})>)}{}{}<>({}<()((((((()()()){}){}()){}){}()[{}])({})({})({})({}){}{}[((((()()()){}){}){}){}()]){({}[()]<<>({}<>)>)}{}<>{}>)<>{({}<>)<>}<>

2

Excel VBA, 67 ไบต์

ส่งออกไปยังช่วงA1: E5บนแผ่นงานของโครงการ vba ออกด้วย

ข้อผิดพลาดขณะทำงาน '1004':

ข้อผิดพลาดที่กำหนดโดยแอปพลิเคชันหรือวัตถุที่กำหนด

เมื่อมีการป้อนข้อมูลที่ไม่ถูกต้อง

รหัส:

Sub a(c,r,x)
c=IIf(r<1Or c>5,-1,c)
[A1:E5]=0
Cells(6-r,c)=x
End Sub

การใช้งาน:

a 4,5,"#"

ผลลัพธ์ (จากตัวอย่างด้านบน) :

    A   B   C   D   E
1   0   0   0   #   0
2   0   0   0   0   0
3   0   0   0   0   0
4   0   0   0   0   0
5   0   0   0   0   0

1

C #, 208 ไบต์

แข็งแรงเล่นกอล์ฟ:

string G(int c,int r,char a){if(c<1||c>5||r<1||r>5)return"Index Error";var b="00000";var d=new string[]{b,b,b,b,b};d[r-1]=d[r-1].Substring(0,c-1)+a+d[r-1].Substring(c);return string.Join("\r\n",d.Reverse());}

Ungolfed:

public string G(int c, int r, char a)
{
  if (c < 1 || c > 5 || r < 1 || r > 5) return "Index Error";
  var b = "00000";
  var d = new string[] { b, b, b, b, b };
  d[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
  return string.Join("\r\n", d.Reverse());
}

การทดสอบ:

Console.Write(G(6, 6, '*')); //Index Error

Console.Write(G(1, 4, '#'));

00000
#0000
00000
00000
00000

Console.Write(G(5, 5, '@'));

0000@
00000
00000
00000
00000

Console.Write(G(1, 1, '}'));

00000
00000
00000
00000
}0000

หากcและ / หรือrอยู่นอกขอบเขตมันจะส่งข้อผิดพลาดIndexOutOfRangeExceptionคุณอาจสามารถลบคำสั่งแรกออกได้แม้ว่าฉันจะยังไม่ได้ตรวจสอบรายละเอียดอย่างถูกต้อง คุณสามารถรวบรวมเพื่อFunc<int, int, char, string>บันทึกไบต์ฉันเชื่อว่าคุณต้องเพิ่มusing System.Linq;เพราะการReverseโทรถึงแม้ว่าฉันจำไม่ได้ว่าอยู่ด้านบนของหัวของฉัน
TheLethalCoder

เปลี่ยนd[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);เป็นd[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);บันทึก 4 ไบต์
TheLethalCoder

1

WinDbg, 95 ไบต์

j(0<(@$t0|@$t1))&(6>@$t0)&(6>@$t1)'f8<<16 L19 30;eb2000018+@$t0-@$t1*5 @$t2;da/c5 8<<16 L19';?0

เกือบครึ่งหนึ่งของมันเป็นเพียงแค่การตรวจสอบดัชนีอยู่ในช่วงขาเข้า ... จะทำโดยการตั้งค่าหลอก-ลงทะเบียน$t0, $t1และ$t2(ที่$t2เก็บค่า ASCII ของถ่านเพื่อแทนที่) ตัวอย่าง(2,5,*)เช่นตัวอย่างเช่นจะเป็น:

0:000> r$t0=2
0:000> r$t1=5
0:000> r$t2=2a

พิมพ์ 0บนข้อผิดพลาด

มันทำงานอย่างไร:

j (0<(@$t0|@$t1)) & (6>@$t0) & (6>@$t1)  * If $t0 and $t1 are both positive and less than 6
'
    f 8<<16 L19 30;                      * Put 19 (0n25) '0's (ascii 30) at 2000000 (8<<16)
    eb 2000018+@$t0-@$t1*5 @$t2;         * Replace the specified cell with the new char
    da /c5 8<<16 L19                     * Print 19 (0n25) chars in rows of length 5
';
    ?0                                   * ...Else print 0

ตัวอย่างผลลัพธ์:

0:000> r$t0=2
0:000> r$t1=5
0:000> r$t2=2a
0:000> j(0<(@$t0|@$t1))&(6>@$t0)&(6>@$t1)'f8<<16 L19 30;eb2000018+@$t0-@$t1*5 @$t2;da/c5 8<<16 L19';?0
Filled 0x19 bytes
02000000  "0*000"
02000005  "00000"
0200000a  "00000"
0200000f  "00000"
02000014  "00000"


0:000> r$t0=-2
0:000> j(0<(@$t0|@$t1))&(6>@$t0)&(6>@$t1)'f8<<16 L19 30;eb2000018+@$t0-@$t1*5 @$t2;da/c5 8<<16 L19';?0
Evaluate expression: 0 = 00000000


0:000> r$t0=4
0:000> r$t1=2
0:000> r$t2=23
0:000> j(0<(@$t0|@$t1))&(6>@$t0)&(6>@$t1)'f8<<16 L19 30;eb2000018+@$t0-@$t1*5 @$t2;da/c5 8<<16 L19';?0
Filled 0x19 bytes
02000000  "00000"
02000005  "00000"
0200000a  "00000"
0200000f  "000#0"
02000014  "00000"


0:000> r$t1=f
0:000> j(0<(@$t0|@$t1))&(6>@$t0)&(6>@$t1)'f8<<16 L19 30;eb2000018+@$t0-@$t1*5 @$t2;da/c5 8<<16 L19';?0
Evaluate expression: 0 = 00000000

1

Haskell, 77 ไบต์

r=[1..5]
(x#y)c|x>0,x<6,y>0,y<6=unlines[[last$'0':[c|i==x,j==6-y]|i<-r]|j<-r]

ตัวอย่างการใช้งาน:

*Main> putStr $ (2#5) '*'
0*000
00000
00000
00000
00000

ถ้าxและyอยู่ในช่วง, วงรอบด้านนอกและด้านในผ่าน[1..5]และนำถ่านcถ้ามันกระทบกับที่กำหนดxและyและเป็น0อย่างอื่น หากxหรือyไม่อยู่ในช่วงNon-exhaustive patternsข้อยกเว้นจะถูกยกขึ้น



1

Qbic , 53 50 ไบต์

แก้ไข: ตอนนี้ฉันรู้ว่าฉันไม่จำเป็นต้องแสดงกริดเริ่มต้นฉันได้สลับอินพุตของผู้ใช้_!_!_?สำหรับพารามิเตอร์บรรทัดคำสั่ง::;โดยประหยัด 3 ไบต์

[5|?@00000|]::;~(b>5)+(c>5)>1|_Xd\$LOCATE 6-c,b|?B

เวอร์ชั่นดั้งเดิม: สิ่งนี้จะหยุดระหว่างการพิมพ์ 0-grid และการรับค่าพิกัดสำหรับการแทนที่โดยแสดง 0-grid

[5|?@00000|]_!_!_?~(b>5)+(c>5)>1|_Xd\$LOCATE 6-c,b|?B

พิมพ์ 5 สาย 5 0ของขอให้ผู้ใช้สำหรับการป้อนตัวเลข 2 และ 1 การป้อนข้อมูลสตริงตรวจสอบว่าตัวเลขเป็น <5 และใช้LOCATEฟังก์ชั่นของ QBasic เพื่อแทนที่ตัวละครที่เหมาะสม



0

> <> (ปลา), 36 ไบต์ (ไม่แข่งขัน)

1-$p;
00000
00000
00000
00000
00000

ลองที่นี่!

นี้จะดำเนินการโดยการวางพารามิเตอร์ในกองเหมือน [ chr, y, x] หนึ่งในศูนย์ที่ด้านล่างถูกเปลี่ยนเป็นจริงchrโดยคำสั่งpโดยการเรียนการสอนอาจมีวิธีที่ดีกว่าในการทำเช่นนี้ แต่ฉันคิดว่านี่เป็นสถานการณ์ที่ไม่ซ้ำใครและสนุกสนานซึ่งคุณสมบัตินี้> <> มีประโยชน์

คำอธิบาย

โปรแกรมนี้ก็จะหักจาก 1 x(ในขณะที่> <> 0จริงจะเป็นคอลัมน์แรก) แลกเปลี่ยนxกับyจากนั้นจึงเปลี่ยนจุด codebox x, yเข้าผ่านchr ไม่จำเป็นต้องลบออก 1 อันเนื่องจากโค้ดถูกชดเชยด้วย 1 อยู่แล้ว!py

คำอธิบายที่ไม่ใช่การแข่งขัน

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

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


2
หากคำตอบเช่นนี้หมดกำลังใจโปรดแจ้งให้เราทราบและฉันจะลบมัน!
redstarcoder

0

Bash, 59 ไบต์

แข็งแรงเล่นกอล์ฟ

printf '00000%0.s\n' {1..5}|sed "$1 s/./$3/$2"|grep -z "$3"

$ 1 , $ 2 - แถว, คอลัมน์, $ 3 - อักขระเปลี่ยน, รายงานข้อผิดพลาดผ่านรหัสออก

ทดสอบ

>./box 2 2 "*"
00000
0*000
00000
00000
00000
>echo $?
0

>./box 6 2 '*'     
>echo $?
1

0

เป็นกลุ่ม, 60 47 42 76 การกดแป้น

อินพุตอยู่ในรูปแบบ (บนบรรทัดแรก):

25*

ด้วยเคอร์เซอร์เริ่มต้นที่จุดเริ่มต้น

"ax"bxx:if<C-r>a<1||<C-r>a>5||<C-r>b<1||<C-r>b>5
^
endif
6i0<ESC>Y5pG:norm <C-r>al<C-r>bkr<C-r>-
Hqqxjq5@qdd

หากการป้อนข้อมูลไม่ถูกต้องให้ส่ง: E492: Not an editor command: ^

ไซด์ที่สร้างเอาต์พุตเป็น42ไบต์เท่านั้นแต่เพื่อสร้างข้อผิดพลาด bytecount ของฉันจะเพิ่มขึ้นอย่างมาก


BTW ฉันไม่รู้วิธีสร้างข้อผิดพลาดใน Vim
Kritixi Lithos

0

Java 8, 194 192 ไบต์

interface M{static void main(String[]a){String r="";int i=0,j,z=new Byte(a[0]),y=new Byte(a[1]);for(;++i<6;r+="\n")for(j=0;++j<6;r+=6-i==y&j==z?a[2]:0);System.out.print(z>0&z<7&y>0&y<7?r:0);}}

ลองที่นี่ด้วยอินพุตที่ถูกต้อง
ลองที่นี่ด้วยอินพุตที่ไม่ถูกต้อง

นี่จะเป็น116 114 ไบต์แทนการใช้งานแทนโปรแกรมเต็มรูปแบบ:

(a,b,c)->{String r="";for(int i=0,j;++i<6;r+="\n")for(j=0;++j<6;r+=b==6-i&a==j?c:0);return a>0&a<7&b>0&b<7?r:"0";}

ลองที่นี่

คำอธิบาย:

interface M{                  // Class
  static void main(String[]a){//  Mandatory main-method
    String r="";              //   Result-String, starting empty
    int i=0,j,                //   Index-integers
        z=new Byte(a[0]),     //   First input converted to integer
        y=new Byte(a[1]);     //   Second input converted to integer
    for(;++i<6;               //   Loop (1) from 1 to 6 (inclusive)
        r+="\n")              //     After every iteration: Append a new-line to the result
      for(j=0;++j<6;          //    Inner loop (2) from 1 to 6 (inclusive)
        r+=6-i==y             //     If the second input equals `6-1`,
           &j==z?             //     and the first input equals `j`:
            a[2]              //      Append the third input to the result-String
           :                  //     Else:
            0                 //      Append a zero to the result-String
      );                      //    End of inner loop (2)
                              //   End of inner loop (1) (implicit / single-line body)
    System.out.print(         //   Print:
     z>0&z<7&y>0&y<7?         //    If the coordinates are valid (1-6):
      r                       //     Print the result `r`
     :                        //    Else:
      0);                     //     Print 0 as error instead
  }                           //  End of main-method
}                             // End of class
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.