Mari kita mendefinisikan sederhana bahasa 2D, yang kami akan memberikan nama sangat asli befinge . Befinge memiliki 5 instruksi:
<>^v
, seperti pada kebanyakan esolangs 2D, arahkan pointer instruksi ke arah masing-masing..
adalah no-op.
Penunjuk instruksi dimulai di sudut kiri atas ke kanan. Jika penunjuk instruksi mencapai keunggulan, program berhenti. Setiap program Befinge jelas akan berhenti atau masuk ke loop tak terbatas yang tidak melakukan apa-apa. Berikut ini dua contoh:
Berhenti:
>.v
..<
Non-Berhenti:
>....v
..v..<
..>v..
^..<..
Masalah penghentian tidak bisa dipecahkan untuk bahasa Turing-lengkap, tetapi untuk yang ini. Tugas Anda adalah menulis sebuah program (atau fungsi) yang mengambil input string yang mewakili program befinge dan mengembalikan nilai true atau falsey tergantung pada apakah itu berhenti atau tidak.
- Anda dapat mengasumsikan bahwa input hanya akan terdiri dari karakter-karakter ini dan akan diisi dengan spasi untuk membentuk persegi panjang.
- Anda dapat menggunakan seperangkat lima karakter untuk instruksi (misalnya
adws
).
Uji Kasus
Berhenti:
.
v>
>^
....v....
....>...v
.^..<....
.......v<
.......v.
....^..<.
v<>v>v^
>v^>^>v
<>>^v<v
v^<>v^<
Non-Berhenti:
>..v
^..<
>v<
v<.
>v.
v<.
>.^
>.>.>.v
.><.<.<
Ini adalah kode-golf , jadi program terpendek (dalam byte) menang.
sumber
>..>.
atau 90 derajat><
.Jawaban:
ES6 (JavaScript),
111, 101 byteEDIT: mengubah nilai output menjadi true dan false , bukannya Y dan N , untuk memotong 10 byte lebih banyak
Golf
Uji
Output Sampel
sumber
Y
danN
sebagai output seperti dalam JavaScript mereka berdua benar .Python 2 ,
116105 byteCobalah online!
Tantangannya sudah tua, tetapi saya pikir karena ini adalah Python terpendek, saya akan mempostingnya. Input adalah daftar string, tetapi karakter yang digunakan tidak biasa.
Misalnya, contoh penghentian ketiga berubah menjadi
['LLLLCLLLL', 'LLLLGLLLC', 'LFLLBLLLL', 'LLLLLLLCB', 'LLLLLLLCL', 'LLLLFLLBL']
. Output adalah melalui kode keluar, 0 (berhasil) untuk tidak berhenti, dan 1 (kesalahan) untuk berhenti. Setiap tips atau trik dihargai.sumber
Befunge-98 (PyFunge) ,
217209200 byteCobalah online!
Masalah penghentian sementara waktu membutuhkan solusi befunge. Mengembalikan 0 untuk truey dan 1 untuk falsey. Letakkan input di grid mulai dari 1,15 dan kemudian bergerak di atas, mengganti panah dengan nol. Begitu kita mencapai nol, kita tahu itu loop. Apa pun selain> <^ v. dan nol dipertimbangkan untuk menghentikan program, yang mencakup batas ruang yang kita dapatkan di sekitar program dengan menempatkannya di grid sedikit diimbangi.
Satu cara mudah untuk mengurangi beberapa gigitan adalah dengan menggunakan angka alih-alih> <^ v. tapi saya tidak merasa itu sepadan.
sumber
A befinge halting problem needs a befunge solution.
Tepat. +1Turtlèd , 146 byte
Program ini menggunakan I / O secara berbeda: silakan akhiri setiap baris dengan spasi, termasuk yang terakhir. Turtlèd tidak suka baris baru, karena menggunakan kisi untuk dimensi karakter kedua.
Cobalah online!
0 untuk loop selamanya, 1 untuk stop.
Penjelasan umum:
Ia menulis input pada grid, lalu benar-benar mengikuti jalur yang dibuat panah di sekitar grid, mengganti setiap panah dengan * saat berjalan, juga menyimpan arah di char var. Jika bertemu dengan *, panah yang mengenai sebelumnya, program tidak akan berhenti, sehingga mengatur char var untuk
0
, keluar dari loop. Jika tidak, itu akan mengenai ujung grid dan keluar dari loop. Ini akan menulis char var. Jika itu mengenai ujung grid, ia menggunakan arah yang disimpan di char var untuk kembali ke grid, dan mengatur char var ke1
, untuk berhenti. Jika char var sebenarnya 0, bukan arah, itu tidak perlu kembali, karena masih ada, dan itu mengaturnya kembali0
. Itu membersihkan grid, lalu menulis char var,1
untuk berhenti, yang lain0
.sumber
JavaScript (Node.js) , 80 byte
Cobalah online!
JavaScript (Node.js) , 86 byte
Cobalah online!
sumber
JavaScript (ES6),
158127 byteMengambil input sebagai array karakter dua dimensi dan mengembalikan
true
untuk penghentian danfalse
untuk loop tak terbatas. Bekerja dengan menyetel karakter arah yang dikunjungi ke~
s saat secara traverse melintasi mereka. Sunting: Disimpan 31 byte dengan memperbarui vektor arah saya sebelum berulang.Menyalahgunakan karakter instruksi (
1=^ 4=< 5=. 6=> 9=v
) membawa saya ke 101 byte:sumber
f=
dalam byte byte tetapi bukan kode ...SmileBASIC,
158145 byteJika panah yang sama ditemukan lebih dari sekali, program tidak akan pernah berhenti. Ketika penunjuk instruksi melewati panah, itu diganti dengan simbol yang berbeda, yang akan menyebabkan fungsi kembali 0 jika tercapai lagi. Jika IP melampaui batas, ia mengembalikan 1.
Mengambil input sebagai array string.
<any non-digit chracter>
,1
,2
,3
,4
=.
,>
,<
,v
,^
sumber
Python 2, 182 byte
Mengambil array string sebagai input. Saya harus bermain golf ini lebih banyak tetapi untuk sekarang saatnya menekankan pada pemilihan.
Tidak Terkumpul:
sumber
[-1,1][d=='v'] -> 2*(d>'>')-1
dan[-1,1][d=='>'] -> 2*(d>'<')-1
simpan total 6 byte.["<>"]
Clojure, 143 byte
Fungsi dengan 4 argumen negara: posisi
p
, kecepatanv
, indeks langkahi
dan ukuran satu bariss
. Kembali1
jika kita tidak keluar batas dalam 10 ^ 9 langkah dannil
sebaliknya. Sebenarnya berapa langkah yang perlu kita periksa untuk memastikan(count %)
,? Saya pikir ini lebih dari itu karena NOP yang sama dapat dilalui secara horizontal dan vertikal.Dapat disebut seperti ini (mengambil string normal sebagai argumen,
get
kembalinil
ketika di luar batas):Transisi status (+1, -1, + s, -s) dikodekan dalam kamus
{\> 1\< -1\^(- s)\. v\v s}
.sumber
Python 2/3,
201192 byteCobalah online!
Memberikan jawaban yang benar untuk
["<>"]
sumber
def f(x):
denganx=input()
dengan perbedaan 0 byte, lalu menghapus lekukan ekstra (-8 byte), lalu gantireturn x
denganexit(x)
(diizinkan per konsensus meta ), untuk 2 byte lainnya. Bagaimanapun, solusi yang bagus!Jawa, 477
Saya tahu ini bukan kemenangan, n = dan mungkin bisa lebih banyak golf, tetapi menerapkan metode yang sama seperti apa yang digunakan jawaban lain, tetapi yang ini menggunakan hashmap untuk melakukan pencarian. Input menggunakan simbol> <^ v dan apa pun selain itu untuk no op. Input datang melalui args.
TERLENGKAP
UNGOLFED
import java.util. *;
Penjelasan segera hadir!
sumber
String a[]
keString[]a
dan menghilangkan ruang.var
di banyak tempat jika Anda menggunakan Java 10.