Tantangan
Buat program terpendek yang memenuhi persyaratan
Persyaratan
Kode harus menghasilkan kisi 0s 5x5, seperti:
00000 00000 00000 00000 00000
Kode harus menerima input (kolom, baris, karakter). Kisi harus berubah sesuai:
Mulailah:
00000 00000 00000 00000 00000
Memasukkan:
(2,5,*)
Keluaran:
0*000 00000 00000 00000 00000
(Catatan: sudut kiri bawah adalah posisi 1,1.)
Program harus mengembalikan pesan kesalahan selain dari kisi jika input baris / kolom bukan 1,2,3,4, atau 5. Ini bisa berupa pesan pilihan Anda (asalkan bukan kisi), begitu
0
juga output kesalahan yang dapat diterima.Program harus bekerja dengan semua karakter ASCII yang dapat dicetak (dari keyboard AS).
PEMENANG
Pemenangnya adalah orang yang memiliki kode terpendek dan memenuhi semua persyaratan. Jika lebih dari satu jawaban berfungsi dan memiliki panjang (terpendek) yang sama, orang yang menjawab pertama akan menjadi pemenang.
0
untuk kesalahan dan grid untuk sukses?Jawaban:
Dyalog APL ,
171310 byteMeminta array tertutup yang berisi (baris, kolom) dan kemudian untuk karakter. Memberikan KESALAHAN INDEKS pada input yang salah.
Cobalah online!
⊖
flip terbalik hasil⍞
karakter yang diinput@
mengganti konten di posisi⎕
input yang dievaluasi (baris, kolom tertutup)⊢
dari5 5⍴
5 × 5 array0
nolsumber
⊢
perlu? Saya pikir dalam hal ini berlebihan.(⊂⎕)5 5
sebagai array 3-elemen tunggal - argumen untuk⍴
.Ruby,
157149 byteKesalahan pada input yang salah atau keluar dari posisi terikat
Terima kasih kepada ConorO'Brien (8 byte) dan afuous (2 byte) untuk membantu menghemat byte
sumber
loop do...end
->loop{...}
; Saya pikirArray.new(5,[0]*5)
berhasil juga, atau bahkan[*[0]*5]*5
.Array.new(5,[0]*5)
buat array referensi dan[*[0]*5]*5
buat array datar*
. Maka itu masih menciptakan berbagai referensi.Array.new(5){[0]*5}
dapat diganti dengan(1..5).map{[0]*5}
untuk menghemat 2 byte.Batch, 199 byte
Kesalahan keluar jika posisinya di luar jangkauan.
sumber
<
, seperti^<
. tidak yakin.PHP,
11110097 bytemencetak
E
jika baris / kolom di luar jangkauan.Jalankan dengan
php -r <code> <row> <column> <character>
sumber
Python, 66 byte
sumber
Dyalog APL,
242018 byteDisimpan 4 byte berkat Zgarb! Disimpan 2 byte berkat Adam!
Anjuran untuk input. Lihat di bawah untuk penjelasan.
20 byte
Tetapkan ke suatu fungsi dan panggil saja
y x f 'c'
. Misalnya:Penjelasan
{...}
adalah fungsi dengan argumen kiri⍺
dan argumen kanan⍵
.⋄
memisahkan pernyataan, jadi ada tiga pernyataan:Pernyataan pertama
a←5 5⍴0
diatura
ke5
oleh5
kotak0
s.Pernyataan kedua menetapkan anggota pada koordinat yang ditentukan oleh
⍺
ke⍵
(yaitu, karakter).Akhirnya, kita melakukan
⊖
padaa
dan kembali itu, menghasilkan pengalaman pertama daria
terbalik.sumber
{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}
menghemat beberapa byte.a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
JavaScript (ES6),
7376 byteMelempar
TypeError
jika kolom atau baris di luar jangkauan.Demo
Tampilkan cuplikan kode
sumber
c
ataur
kurang dari 1?c == 0 || r == 0
. Tapi saya kira Anda benar: Saya akan memperbaruinya untuk mencegah nilai negatif.C #, 199 Bytes
Berdasarkan jawaban Pete Arden
Tidak Disatukan:
sumber
05AB1E ,
2722 byteTidak mengembalikan kisi ketika baris / kolom> 5.
Cobalah online!
Versi sebelumnya
sumber
Jelly , 28 byte
Ini terasa terlalu lama ...
TryItOnline!
Bagaimana?
sumber
JavaScript (ES6), 89 byte
Karena saya suka rekursi. Melempar
ReferenceError
pada koordinat yang tidak valid.sumber
Mathematica, 38 byte
sumber
Brain-Flak 415 Bytes
Termasuk +3 untuk
-c
Cobalah secara Online!
Membawa karakter untuk disisipkan terlebih dahulu, lalu baris lalu kolom tanpa spasi.
Sebagian besar ini hanya penanganan kesalahan. Brain-Flak tidak memiliki cara yang baik untuk memeriksa apakah nilainya berada dalam kisaran. Untuk kesalahan, itu tidak menghasilkan apa-apa, atau hanya karakter yang seharusnya dimasukkan. Memecahkan masalah sebenarnya hanya membutuhkan 211 byte:
sumber
Excel VBA, 67 Bytes
Output ke kisaran A1: E5 pada lembar aktif dari proyek vba, keluar bersama
ketika input yang tidak valid diberikan.
Kode:
Pemakaian:
Output (dari contoh di atas) :
sumber
C #, 208 Bytes
Golf:
Tidak Disatukan:
Pengujian:
sumber
c
dan / atau dir
luar batas itu akan melemparIndexOutOfRangeException
sehingga Anda mungkin dapat menghapus pernyataan if pertama meskipun saya belum memeriksa spesifikasi dengan benar untuk itu. Anda dapat mengkompilasi keFunc<int, int, char, string>
untuk menyimpan byte, saya percaya Anda perlu menambahkanusing System.Linq;
karenaReverse
panggilan meskipun saya tidak ingat dari atas kepala sayad[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
untukd[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);
menyimpan 4 byteWinDbg, 95 byte
Hampir setengah dari itu hanya memverifikasi indeks berada di kisaran ... Input dilakukan dengan menetapkan psuedo-register
$t0
,$t1
dan$t2
(di mana$t2
memegang nilai ascii char untuk menggantikan). Misalnya,(2,5,*)
seperti contohnya adalah:Mencetak
0
pada kesalahan.Bagaimana itu bekerja:
Output sampel:
sumber
Haskell, 77 byte
Contoh penggunaan:
Jika
x
dany
berada dalam jangkauan, loop luar dan dalam[1..5]
dan ambil charc
jika menyentuh diberikanx
dany
dan0
sebaliknya. Jikax
atauy
tidak dalam jangkauan,Non-exhaustive patterns
pengecualian dimunculkan.sumber
Oktaf 49 byte
sumber
QBIC ,
5350 byteEDIT: Sekarang saya tahu bahwa saya tidak harus menunjukkan grid mulai, saya sudah menukar input pengguna
_!_!_?
untuk parameter baris perintah::;
, menghemat 3 byte.Versi asli: Ini berhenti antara mencetak 0-grid dan mengambil koordinat untuk substitusi, menunjukkan 0-grid.
Mencetak 5 string 5
0
's, meminta pengguna untuk 2 input numerik dan 1 string input, memeriksa apakah angkanya <5 dan menggunakanLOCATE
fungsi QBasic untuk menggantikan karakter yang tepat.sumber
Java, 99 byte
sumber
> <> (Ikan), 36 byte (tidak bersaing)
Coba di sini!
Ini dijalankan dengan menempatkan parameter pada stack seperti [
chr
,y
,x
]. Salah satu nol di bagian bawah sebenarnya diubah menjadichr
oleh instruksip
. Mungkin ada cara yang lebih baik untuk melakukan ini, tetapi saya pikir ini adalah situasi yang unik dan menghibur di mana fitur>> ini berguna.Penjelasan
Program ini hanya mengurangi 1 dari
x
(seperti dalam> <>,0
akan benar-benar menjadi kolom pertama), bertukarx
dengany
, lalu mengubah titik kotak kodex, y
menjadichr
viap
.y
tidak perlu 1 dikurangkan dari itu, karena kode sudah semua diimbangi oleh 1!Penjelasan yang tidak bersaing
Ini non-bersaing karena tidak benar-benar menghasilkan output. Saya baru saja menemukan ini sangat lucu. Jika ini dianggap output yang valid, beri tahu saya!
Ini juga non-bersaing karena
y
bisa 0, tapi saya percaya itu satu-satunya masalah dengan jawabannya. Saya akan memperbaikinya jika ini dianggap sebagai output yang valid, tetapi jika tidak, itu hanya membuat jawabannya kurang menghibur ...sumber
Bash, 59 byte
Golf
$ 1 , $ 2 - baris, kolom, $ 3 - pengganti char, kesalahan dilaporkan melalui kode keluar
Uji
sumber
Vim,
60474276 penekanan tombolInput dalam format (pada baris pertama):
Dengan kursor dimulai di awal
Jika input tidak valid, maka lemparkan:
E492: Not an editor command: ^
Cide yang menghasilkan output hanya
42
byte, tetapi untuk membuat kesalahan, bytecount saya meningkat secara drastis.sumber
Java 8,
194192 byteCoba di sini dengan input yang benar.
Coba di sini dengan input yang salah.
Ini akan menjadi
116114 byte sebagai fungsi dan bukan program lengkap:Coba di sini.
Penjelasan:
sumber