"Talk" adalah bahasa berbasis akumulator yang dibajak yang dibuat sebagai tanggapan terhadap kutipan Dennis di talk.tryitonline.net.
Waiting for someone to create an esolang called talk.
. Bahasa "Talk" memiliki 4 perintah:
00
Jika akumulator adalah 0, atur akumulator ke 0.01
Jika akumulator adalah 0, atur akumulator ke 1.10
Jika akumulator adalah 1, atur akumulator ke 0.11
Jika akumulator adalah 1, atur akumulator ke 1.
Memasukkan:
Input dapat diambil melalui metode input apa pun yang dapat diterima oleh aturan I / O standar kami.
Ada dua input, nilai akumulator awal dan program. Anda dapat menggabungkan kedua input ini menjadi satu input atau membagi input Anda menjadi perintah yang valid (mis. Mengambilnya sebagai daftar; misalnya
[00, 01, 00]
) jika Anda mau.
Keluaran:
- Di akhir eksekusi perintah, akumulator dikeluarkan secara implisit.
Aturan:
- Input dapat berupa string tunggal atau daftar karakter.
- Karena ini adalah kode-golf , jawaban tersingkat, dalam byte, menang.
- Kami mengambil digit atau string / karakter.
Kasus uji:
0 0001111101 -> 1
0 000100 -> 1
0 11001000 -> 0
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
lang.tryitonline.net
(sekarang initio.run/#lang
). Jadi bahasa yang disebut Talk akan menyebabkan kebingungan dengan URL untuk chatroom yang baru saja dibuat, yaitutalk.tryitonline.net
Jawaban:
Jelly , 3 byte
Input adalah daftar tunggal: akumulator, diikuti oleh pasangan.
Cobalah online!
Bagaimana itu bekerja
The
y
Melakukan atom transliterasi; [a, b]y
c menggantikan a dengan b , sehingga mengembalikan b jika a = c dan c jika a ≠ c .y@/
melipat / mengurangi inputy
dengan argumen bertukar, melakukan satu transliterasi per pasangan.sumber
Python 3 , 43 byte
Cobalah online!
Fungsi mengambil string tunggal sebagai input, di mana karakter pertama adalah keadaan awal dan sisa string mewakili perintah. Solusi ini dapat dengan mudah dipindahkan ke bahasa lain yang memiliki dukungan lebih baik untuk ekspresi reguler.
Bagian yang sulit adalah membuktikan solusi menghasilkan hasil yang benar. Untuk melihat ini, kita perlu analisis mendalam dari perintah. Pertama, kita dapat melihat perintah memiliki properti berikut:
00
dan11
mempertahankan status akumulator.01
dan10
membuat status akumulator sama dengan bit kedua terlepas dari keadaan aslinya.Oleh karena itu, negara akumulator terakhir adalah:
01
atau10
perintah ada, keadaan akhir sama dengan keadaan awal.10
atau01
perintah.Selanjutnya kita akan menunjukkan solusi menghasilkan hasil yang benar dalam kedua kasus. Kami akan membuktikan pernyataan untuk kondisi akhir
0
dan kondisi akhir1
dapat dibuktikan secara analog. Jika keadaan akhir adalah0
input ada dalam salah satu dari bentuk berikut:^0{2k+1}11(11|00)*
Untuk Kasus 1 , string input
s
harus dimulai dengan2k+1
0s, diikuti oleh11
dan00
perintah. Menghilangkan00
dan11
menghasilkan satu0
, yang merupakan keadaan akhir..+10{2k+1}11(11|00)*
Untuk Kasus 2 , string input diakhiri dengan
10
perintah, diikuti oleh nol atau lebih00
dan11
s. Pola ini setara dengan1
diikuti oleh2k+1
0s, dan kemudian nol atau lebih11
s dan00
s. Menghilangkan00
s dan11
s meninggalkan yang terakhir dari2k+1
0s di akhir string, yang mewakili keadaan akhir.Berdasarkan semua hal di atas, setelah menghilangkan
00
s dan11
s secara bersamaan dalam satu pass tunggal (01001
adalah contoh tandingan jika00
dihilangkan dalam satu pass dan kemudian11
di pass lain) dari inputs
, karakter terakhir adalah keadaan akhir. Oleh karena itu kebenaran solusi terbukti.sumber
Perl 6 , 17 byte
Cobalah online!
Mengambil keuntungan dari "Anda dapat menggabungkan dua input ini menjadi satu masukan jika Anda suka" dengan mengambil masukan sebagai nilai akumulator digabungkan dengan perintah misalnya
1,[00,11]
adalah10011
. Jika ini tidak apa-apa, maka hanya perlu 5 byte tambahanf(accumulator, commands)
. Mengembalikan objek kecocokan yang dapat dipaksa ke string.Penjelasan:
Pada dasarnya ini bekerja karena perintah
00
dan11
tidak melakukan apa-apa, sedangkan perintah01
dan10
hanya mengatur akumulator ke digit kedua dari perintah. Jika tidak ada perintah, maka dibutuhkan nilai awal akumulator sebagai gantinya.sumber
Zsh , 33 byte
Daftar karakter dilewatkan sebagai argumen, nilai awal akumulator dilewatkan sebagai stdin.
Cobalah online!
39 byte : Jika perintah harus berupa string tunggal
Masukan adalah
accumulator
commands
sebagai argumen.Cobalah online!
Untuk bersenang-senang, inilah 50 byte rekursif satu-liner ( TIO ):
sumber
Python 3 , 52 byte
Cobalah online!
Memperbaiki tipe pengembalian yang tidak konsisten berkat Chas Brown
Mengambil input sebagai dua string; akumulator dan kode.
sumber
f(1,'11')==f(1,'01')
adalahFalse
; terkadang mengembalikanint
dan terkadang astr
. Jadi mungkin tentukan dibutuhkan input input sebagai string?Brachylog ,
119 byteCobalah online!
Karena sudah cukup lama sehingga saya bisa melupakan gagasan mencetak akumulator setelah setiap perintah , saya telah merumuskan solusi yang jauh lebih naif dengan beberapa inspirasi dari jawaban Jo King's Perl.
Solusi lama:
Brachylog ,
1816 byteCobalah online!
-2 byte dari mengubah format input.
sumber
JavaScript (ES6), 27 byte
Mengambil input sebagai
(a)(code)
, di mana kode adalah daftar bilangan bulat 2-bit.Cobalah online!
JavaScript (ES6),
4740 byteMengambil input sebagai
(a)(code)
, di mana kode adalah string.Cobalah online!
Bagaimana?
sumber
sed -E,
2619 byteSebuah kekalahan -7 byte dari @Cowsquack dengan menyadari menghapus semua pasangan bekerja dengan baik.
Mengambil input yang digabungkan bersama pada stdin. Terinspirasi oleh jawaban Jo King's Perl .
Strip trailing pairHapus semua pasangan, lalu dapatkan digit terakhir.Cobalah online!Cobalah online!sumber
s/.*\B//
, tetapi cara mengubah pendekatan sedikit memberikan 19 byte lebih pendek. Coba online!s/(.)\1//g
akan berhasil, karena itu bisa menghilangkan akhir dari satu pasang dan awal dari yang berikutnya, tetapi masih berhasil. Luar biasa!s/(.)\1//g
sama dengans/00|11//g
seperti yang ditunjukkan dalam solusi saya.Retina 0.8.2 ,
1811 byteCobalah online! Tautan termasuk kasus uji. Input dimasukkan. Disimpan 6 byte berkat @CowsQuack karena menunjukkan bahwa menghapus semua karakter yang digandakan dan kemudian mengambil karya karakter terakhir yang tersisa, meskipun sebenarnya port jawaban asli @ JoKing bisa saja dipagari oleh 3 byte bahkan tanpa trik itu.
sumber
!`.$
, dan kemudian 4 byte karena Anda tidak perlu membatasi pasangan tambahan ...Python 3 , 38 byte
Cobalah online!
Berdasarkan solusi Joel . Mengambil input sebagai daftar nilai akumulator awal (panjang-satu string) diikuti oleh perintah (panjang-dua string). Menemukan perintah terakhir dengan dua nilai yang tidak sama, dan menampilkan karakter keduanya.
Untuk membuat ini jatuh ke nilai akumulator awal ketika tidak ada perintah seperti itu, kami membuatnya sehingga string nilai awal single-char melewati tes. Kami melakukannya dengan memeriksa apakah daftar tunggal dengan karakter terakhir tidak sama dengan daftar semua karakter sebelumnya, yang diteruskan oleh string panjang-satu atau panjang-dua dengan dua karakter yang berbeda.
sumber
Perl 5
-p
,3733 byteCobalah online!
Input adalah dua baris: baris pertama adalah urutan perintah, kedua adalah akumulator.
sumber
Python 2 , 56 byte
Cobalah online!
sumber
Jelly ,
86 byteCobalah online!
-2 byte terima kasih kepada Nick Kennedy yang memberi tahu saya tentang perubahan peraturan. (Golf yang diusulkannya,
EÐḟFȯṪ
,, tampaknya agak lebih pintar tetapi memiliki panjang yang sama dengan minus solusi saya sebelumnyas2
.) Format input sekarang mengambil perintah sebagai daftar string dua karakter, tetapi footer pengujian diterjemahkan dari format lama untuk kenyamanan.Diterjemahkan dari solusi Brachylog saya yang lebih baru.
Versi lama:
Jelly , 13 byte
Cobalah online!
Saya tidak 100% yakin ini benar, tetapi berhasil pada ketiga kasus uji. Mengambil perintah sebagai argumen kiri dan akumulator awal sebagai argumen kanan.
sumber
EÐḟFȯṪ
input seperti misalnya[[0,0],[0,1],[1,1],[1,1],[0,1]]
.Haskell , 29 byte
Menentukan fungsi tanpa nama pada baris pertama dengan tipe
(Foldable t, Eq b) => b -> t [b] -> b
. Untuk keperluan golf kode ini, kita dapat instantiate sebagaiChar -> [String] -> Char
tempat argumen pertama adalah akumulator dan yang kedua adalah daftar string dengan setiap string menjadi perintah tunggal.Cobalah online!
sumber
Python, 111 byte
Tidak disatukan. EDIT: AHHH Seseorang mengalahkan saya untuk itu!
sumber
Haskell , 36 byte
Cobalah online!
Mengambil input di
f(string)(char)
mana karakter adalah akumulator dan string adalah daftar perintah.sumber
05AB1E , 3 byte
Cobalah online!
Zip, buang di tumpukan, ganti.
sumber
Stax , 3 byte
Jalankan dan debug itu
Untuk setiap instruksi, lakukan terjemahan karakter.
sumber
Tong ,
-ir
, 16 bytesCobalah online!
Dijelaskan:
Mengambil input implisit dan menggeser nilai akumulator ke bawah
Ulangi langkah berikut (panjang tumpukan - 1 dibagi 2)
2.1. Geser akumulator kembali ke atas
2.2. Bandingkan untuk kesetaraan dengan bagian pertama dari perintah
2.2.1. Jika benar, ganti akumulator, jika tidak pop pengganti
Input diambil sebagai nilai acc awal yang disatukan dengan sumber. Misalnya
sumber
Bash ,
5840 byteTambahkan satu byte untuk program lengkap: ubah
f
ke$0
.58 byteCobalah online!Terner akan mengembalikan false ketika
$1
diatur ke0
, tetapi,1
pada akhirnya memastikan keseluruhan((expression))
akan kembali benar, kecuali kesalahan sintaksis.Ketika semua argumen dikonsumsi, kesalahan sintaksis terjadi dan rekursi berakhir.
sumber
Arang , 16 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Membawa argumen terpisah. Penjelasan:
Bagi instruksi menjadi pasangan angka dan lilitkan.
Jika akumulator sama dengan digit pertama ...
... lalu tetapkan digit kedua untuk itu.
Cetak akumulator di akhir lingkaran.
sumber
MATL ,
1312 byteMengambil input sebagai matriks 2-kolom di mana setiap baris adalah perintah, dan angka
Cobalah online! Atau verifikasi semua kasus uji
sumber
Jelly , 7 byte
Link diad yang menerima program sebagai daftar bilangan bulat di sebelah kiri dan akumulator awal di sebelah kanan yang menghasilkan bilangan bulat.
Cobalah online! Atau lihat test-suite
sumber
PHP , 38 byte
Cobalah online!
Pada dasarnya pelabuhan ide Jo King .
sumber
Pesona Rise , 28 byte
Cobalah online!
Mengambil input sebagai serangkaian ruang yang dipisahkan byte (Runic tidak mengerti daftar). Byte pertama adalah keadaan awal dan setiap byte lainnya adalah program. Tidak ada validasi yang dilakukan (yaitu mengasumsikan hanya program yang valid yang diberikan sebagai input dan tidak peduli nilai apa yang digunakan untuk mewakili
0
dan1
).sumber
x86 Assembly, 33 Bytes
Mengambil status akumulator awal dalam
CL
(integer0
atau1
) dan alamat perintah sebagai ASCII String yang diakhiri nolESI
. Meninggalkan status akumulator terakhir diCL
.Arahkan instruksi panggilan pada offset
0x1B
(labelinterpret
pada Penjelasan).Penjelasan (Menggunakan Sintaks Intel):
sumber
C (gcc) ,
4541 byteCobalah online!
4 byte dicukur berkat @ErikF!
sumber
Kristal , 46 byte
Dengan perintah dalam
Array(Tuple(Int32,Int32))
, seperti[{0,0}, {0,1}, {0,0}]
.def f(s,i);i.map{|c,v|s+=~(s^c)&(s^v)%2};s;end
Cobalah online!
Cukup mudah untuk dipahami dalam bentuk yang lebih mudah dibaca:
Fungsi loop melalui setiap perintah, secara otomatis membongkar nilai tuple ke
c
danv
. Kemudian mengaturstate
dengan rumusyang saya tiba di sebagian besar oleh coba-coba. Setelah semua perintah diproses, ia mengembalikan nilai status.
sumber
C (dentang) ,
6862 byteCobalah online!
Membawa pointer ke awal string sumber, pointer ke ujung string sumber (start + strlen (start)), dan nilai akumulator awal.
Versi lama (mencetak ASCII 48/49 untuk 0/1):
sumber
Java (JDK) , 38 byte
Cobalah online!
Input adalah
int
danIntStream
dari0
,1
,2
atau3
, yang sesuai dengan00
,01
,10
,11
dari biner.sumber