Jika Anda ingat kembali ke tahun-tahun sekolah Anda, Anda mungkin ingat belajar tentang Tabel Kebenaran . Mereka tampak membosankan, tetapi mereka adalah dasar untuk logika dan (beberapa akan berpendapat) semua komputasi ...
Masalah
Misi Anda, yang harus Anda pilih untuk menerimanya adalah menulis sebuah program, fungsi, atau widget kode yang dapat menampilkan tabel kebenaran yang diberikan input.
Memasukkan
Input akan berupa string (seperti struktur data) yang berisi pernyataan logika untuk membuat Tabel Kebenaran menjadi. Sebagai contoh:
p ∧ q
Ini berarti p and q
(konjungsi logis) dan akan menampilkan:
p q p ∧ q
T T T
T F F
F T F
F F F
Perhatikan spasi: Item kolom berada di tengah header
Karakter
Skor melalui karakter, bukan byte Karakter perbandingan logika adalah spesial dan tidak selalu seperti apa mereka. Gunakan karakter ini:
Logical Conjunction (AND): ∧
U + 2227
Logical Disjunction (OR): ∨
U + 2228
Logical Negation (NOT) ~
atau ¬
U + 7e dan U + ac
Bonus
Semua bonus ini bersifat opsional, tetapi akan menghilangkan poin Anda. Pilih apa saja.
Negasi logis
Logical Negation adalah operator unary di tabel kebenaran. Ini setara dengan !
di sebagian besar bahasa berbasis C. Itu membuat false
=> true
dan sebaliknya. Ini dinotasikan dengan a ¬
atau ~
(Anda harus mendukung keduanya). Mendukung ini akan menjatuhkan 10% dari skor Anda. Namun, Anda harus menambahkan kolom tambahan untuk menunjukkan hasilnya: Misalnya:
~p ∧ q
akan menampilkan:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
Cukup Cetak
Notasi tabel normal membosankan. Mari kita buat cantik! Format cetak cantik adalah sebagai berikut p ∧ q
adalah sebagai berikut:
+---+---+-------+
| p | q | p ∧ q |
+---+---+-------+
| T | T | T |
+---+---+-------+
| T | F | F |
+---+---+-------+
| F | T | F |
+---+---+-------+
| F | F | F |
+---+---+-------+
Detail khusus untuk pencetakan cantik:
- Ada 1 ruang padding di setiap sel
- Nilai sel masih terpusat
Jika Anda cukup mencetak tabel Anda, dari kode Anda dan kemudian kalikan dengan 0,6. Gunakan fungsi ini untuk bonus ini:
score = 0.6 * code
Contohnya
p ∧ q
:
p q p ∧ q
T T T
T F F
F T F
F F F
p ∨ q
:
p q p ∨ q
T T T
T F T
F T T
F F F
~p ∧ q
:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
~p ∨ q
:
p ~p q ~p ∧ q
T F T T
T F F F
F T T T
F T F T
Aturan
- Celah standar berlaku
- Tidak ada sumber daya eksternal
- Jika Anda melanggar aturan, cerdaslah;)
Kode Terpendek (dalam karakter) menang. Semoga berhasil!
sumber
p
danq
. Kecuali mereka selalu memiliki nama-nama ini, Anda mungkin ingin menunjukkan beberapa opsi berbeda dalam contoh pengujian. Apakah mereka selalu satu huruf?score = 0.6 * (code - 15)
=.6 * code - 9
p
q
danr
di tabel kebenaran;)Jawaban:
JavaScript (ES6), 141
Fungsi sederhana, tanpa bonus, 141 karakter. (140 uft8, 1 lebar unicode)
Penanganan fungsi kompleks ~ atau ¬, 254 karakter (253 utf, 1 lebar unicode), skor 229
Bisa menghemat 6 byte menggunakan
alert
bukanconsole.log
, tetapialert
sangat tidak layak untuk menampilkan tabel.Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript 6 (diuji dengan Firefox. Tidak akan berfungsi di Chrome karena Chrome tidak mendukung
...
. Juga, versi bonus menggunakan ekstensisplit
yang khusus untuk Firefox).sumber
Kerangka MediaWiki - 2347 karakter
MediaWiki memiliki fungsi templat buatan yang disebut
{{#expr}}
yang dapat menangani ekspresi logis. Ini harus menjadi tantangan sempurna untuk template MediaWiki! Namun, fitur seperti variabel, loop, dan sintaks yang dapat dibaca sedikit membantu. Juga, fakta bahwa tidak ada operator TIDAK untuk fungsi expr membuatnya sedikit lebih kompleks.Uji:
Hasil:
Saya mengasumsikan MediaWiki> = 1.18, di mana ekstensi ParserFunctions dibundel dengan perangkat lunak.
sumber
¬
/~
operator adalah hilang; jika Anda menambahkannya, Anda akan memenuhi syarat untuk10%
bonus.Python - 288 karakter (+10 penalti karena saya tidak bisa mengaktifkan unicode: c)
Tidak ada bonus. Ini adalah jawaban codegolf pertama saya.
i
adalah input.EDIT: Menghapus beberapa spasi dan sekarang menggunakan argumen fungsi sebagai input.
sumber
Dyalog APL ,
5848 karakterMembutuhkan
⎕IO←0
, yang merupakan standar pada banyak sistem. Mengambil string sebagai argumen.Tidak ada bonus, tetapi di sisi positifnya, operator mana pun bekerja.
⍳4
empat indeks pertama (0 1 2 3)⌽
membalikkan (3 2 1 0)2 2⊤
tabel Boolean dua-bit↓
dibagi menjadi dua daftar elemen daftar (bit tinggi, bit rendah)p q←
simpan sebagai p dan q≢
tally mereka (2) *9⍴
cyclically membentuk kembali bahwa untuk panjang 9 (2 2 2 2 2 2 2 2 2)324⊤⍨
encode 324 demikian, yaitu sebagai biner 12-bit (1 0 1 0 0 0 1 0 0)\⍨
gunakan itu untuk memperluas (masukkan spasi untuk setiap 0) ...'FT '[
...]
string "FT", diindeks oleh⍎⍵
argumen yang dieksekusi (valid karena p dan q sekarang memiliki nilai)⍪
buat itu menjadi matriks kolomq,
tambahkan kolom yang terdiri dari q (1 1 0 0)q,
tambahkan kolom yang terdiri dari p (1 0 1 0)(
...)⍪
masukkan baris di atas, terdiri dari⍵
argumen'p q ',
diawali dengan string "p q"* Silakan beri bintang pada masalah ini jika Anda melihatnya
≢
sebagai≢
bukan̸≡
.sumber
Julia, 161 byte
Tidak ada bonus.
Tidak Disatukan:
sumber
Mathematica, 129 Bytes
Golf:
Tidak Disatukan:
Bukan ahli Mathematica, tapi saya menemukan ini agak elegan dibandingkan harus melakukan perbandingan karakter langsung.
Saya punya solusi yang bekerja untuk negasi, tapi itu lebih lama dari pengurangan skor.
Tergantung pada apa yang memenuhi syarat untuk pencetakan cantik, saya mungkin mencoba untuk bonus itu. Saya merasa seperti keluaran dalam ASCII di Mathematica akan jauh terlalu mahal untuk pengurangan skor untuk mengimbangi, tetapi jika dua fitur utama adalah perbatasan bertitik dan padding tertentu di dalam sel, itu hanya beberapa pilihan dalam Grid.
Dengan pencetakan cantik, 171 * 0,6 = 102,6 Bytes
sumber
Python3,
145139120119 BytesTanpa bonus (dengan bonus di akhir)
Membutuhkan Python3 untuk dukungan Unicode di luar kotak.
Berdasarkan kode Python DJgamer98, mencari tahu mejanya tidak benar.
Sunting1: Memisahkan menjadi variabel yang berbeda dan menghilangkan variabel string operator
Edit2: (ab) menggunakan F dan T sebagai variabel dan karakter string
Sunting3: Menghemat satu ruang berkat NoOneIsHere
Dengan Bonus, 215 * 0,6 = 129
sumber
q in c:
.C / C ++ 302 Bytes
335 karakter kurang 10% untuk menangani negasi. Memformat tidak lengkap tetapi mengirimkan sebelum saya melihat apa dampak penyelesaiannya.
Ditandai sebagai C / C ++ karena gcc dan g ++ saya menerimanya dengan -fpermissive dan terlihat jauh lebih seperti C daripada C ++ bagi saya.
Saya yakin mungkin ada beberapa penyesuaian yang bisa diterapkan. Bahkan menangani si miskin menambahkan lebih dari 10% bonus yang dihapus.
Ini mengasumsikan format input seperti yang dinyatakan, yaitu 2 nilai input (p dan q), dengan atau tanpa awalan dan tidak ada yang lain, dan semua token dibatasi oleh ruang tunggal.
Tidak Disatukan:
dan tes:
sumber
Mathematica, 128 karakter
adalah karakter penggunaan pribadi yangU+F3C7
mewakili\[Transpose]
.Untungnya bagi kami pegolf Mathematica,
∧
dan∨
sudah mewakiliAnd
danOr
, jadi yang harus kita lakukan adalah mengonversi string input menjadi ekspresi Mathematica dan kita bisa melakukan operasi logis simbolis di dalamnya.Perhatikan bahwa solusi ini juga akan menangani
Not
(¬
),Implies
(
),Equivalent
(⧦
),Xor
(⊻
),Nand
(⊼
),Xor
(⊻
), danNor
(⊽
), tetapi tidak mendapatkan bonus karena~p
ada kesalahan sintaksis di Mathematica. Ah.Penjelasan
Mengubah string input menjadi ekspresi Mathematica dan menyimpannya di
b
.Ini adalah daftar setiap kemungkinan subekspresi dari input. Masing-masing akan menerima kolomnya sendiri.
Ini adalah daftar semua variabel yang muncul di input.
Fungsi murni yang mengambil ekspresi input
#
dan mengembalikan daftar nilai kebenaran untuk semua kemungkinan kombinasi nilai kebenaran untuk variabel.Tambahkan ekspresi itu sendiri ke daftar ini.
Menerapkan fungsi ini untuk setiap subekspresi dari input.
Kemudian ganti true (
0<1
) dengan "T" dan false (0>1
) dengan "F".Pertukaran baris dan kolom.
Tampilkan hasilnya sebagai a
Grid
.Konversikan
Grid
ke bentuk tradisional sehingga menggunakan simbol mewah.sumber