... Bukannya kamu mau, kan? Tugasnya sederhana, mengeluarkan teks berikut:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
Ini adalah papan ketik masa depan karena di ruang mendatang tidak relevan, demikian juga ruang angkasa.
Untuk mempermudah Anda:
0123456789ABC...XYZ-=[]\;',./
- Karakter ini ada pada kunci dengan panjang 6 (termasuk padding).TAB / BS / ENTER
- Kunci-kunci ini memiliki panjang 10 (termasuk padding).CAPS
- Kunci ini memiliki panjang 11 (termasuk padding).SHIFT
- Kunci ini memiliki panjang 13 (termasuk padding, di kedua sisi).
Setiap kunci individual terlihat kurang lebih seperti ini:
____
||* ||
||__||
|/__\|
Namun, Anda harus mencatat bahwa dua kunci berurutan tidak:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Tapi mereka "siam":
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
Tantangan ini seharusnya tidak terlalu buruk, semoga beruntung untuk Anda; jangan lewatkan penyalahgunaan repetisi! Tetapi jangan meremehkan kunci "spesial" juga;).
Kemenangan?
Kode terpendek menang karena kode-golf lho.
code-golf
ascii-art
kolmogorov-complexity
Guci Gurita Ajaib
sumber
sumber
Jawaban:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 byteCobalah online!
Jawaban ini sekarang tweetable!
Lihat saja! Ini adalah versi yang sedikit dimodifikasi yang diperbarui saat berjalan sehingga Anda dapat melihat bagaimana cara kerjanya. Ini adalah versi yang sudah ketinggalan zaman karena saya belum sempat merekamnya lagi, tetapi pendekatan umumnya sama.
Ini mungkin jawaban V terpanjang yang pernah ditulis. Jelas tidak membantu bahwa penerjemah V sangat lambat. Butuh waktu sekitar satu jam untuk menulis revisi pertama, tetapi saya telah berulang kali kembali ke sana untuk mencukur beberapa byte setiap kali. Karena keyboard lengkap adalah 1215 byte, saat ini jawaban ini 91% lebih pendek dari output, jadi saya cukup senang dengan hasilnya.
Karena ini berisi beberapa karakter yang tidak patut dicetak, dan banyak yang bukan ASCII, inilah hexdump:
Bagaimana sih cara kerjanya?
Baiklah, penjelasan ini akan menjadi doozy. Anda siap? Pertama, kita perlu memasukkan huruf sehingga kita dapat membangun kunci di sekitarnya. Ini adalah
Yang menyisipkan:
Memasukinya cukup mudah, tetapi ada beberapa trik yang kami gunakan untuk menyimpan karakter. Misalnya, masukkan
¬19
"123456789",³
masukkan tiga spasi, dan kami menduplikasi pergeseran sehingga kita tidak perlu memasukkannya beberapa kali.Perhatikan bagaimana huruf-huruf kecil di sini. Ini agar kita dapat dengan mudah membedakan antara tombol huruf besar seperti "ENTER" dan huruf tunggal. Menulisnya dengan cara ini memudahkan untuk menentukan karakter mana yang akan ditempatkan sebelumnya, dan hanya menambahkan satu byte untuk mengubahnya menjadi huruf kecil nanti. Jadi kami melakukan perintah pengganti untuk mengubahnya menjadi huruf besar, dan menambahkan satu spasi setelah masing-masing:
Sekarang, kita mengambil setiap urutan kunci (sembarang spasi non-spasi), dan meletakkan tiga bar sebelum dan sesudahnya:
Pada titik ini, buffer terlihat seperti ini:
Memiliki tiga bilah pada kolom pertama dan terakhir sebenarnya sangat mudah dan akhirnya menghemat banyak byte dalam jangka panjang.
Dan di sinilah kita menjalankan satu lingkaran raksasa. Ini akan mengonversi sesuatu seperti ini:
menjadi sesuatu seperti ini:
Segala sesuatu di antara dua instance dari
ò
akan berjalan hingga kesalahan terjadi, yang akan terjadi ketika kita mencoba untuk naik ke garis yang belum ada. Karena kami baru saja menjalankan perintah pengganti global , kursor kami ada di baris terakhir, dan kami akan mengubahnya menjadi lebih baik.Ini adalah
baris.
Ini adalah
Baris.
Ini adalah:
Baris.
Sekarang kita memiliki keyboard lengkap, tetapi setiap baris berisi bar tambahan, garis miring ekstra (maju atau mundur), atau garis bawah ekstra. Memperbaiki super mudah
Setelah semua kegilaan itu, buffer dicetak secara implisit.
sumber
Lua 5.3,
416394 Bytes.Tidak disatukan dan dengan komentar.
Keluaran
Aku akan dihancurkan oleh bahasa lain, tapi kupikir aku akan mencoba ini. Jumlah kompleksitas yang bagus, dan setidaknya itu lebih pendek daripada keyboard!
sumber
Bubblegum , 191 byte
Cobalah online!
sumber
Haskell, 263 karakter (353 byte UTF-8)
Karena telah ada banyak diskusi tentang skor berdasarkan karakter unicode ini ... inilah program yang sama, dikurangi menjadi all-ASCII:
Haskell, 263 karakter (263 byte UTF-8)
sumber
ENTER
lebih panjang daripada karakter-karakter seperti↩︎
.ENTER
dan↩︎
, Lapisan spasi putih membuatnya sama panjang.PHP, 303 byte
Malas tetapi efektif. :)
sumber
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Kompresor: sandbox.onlinephpfunctions.com/code/… Dekompresor: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 byte
sumber
"".join(...) + f[0]
di loop dalam. Menggantiformat
urutan argumen dan masing-masing penampung dalam string juga menyimpan dua byte lagi.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
lebih pendek dari penggunaansplit
.Batch,
465452 byteThe
:c
subrutin menangani garis kunci. Keys yang mengandung spasi ekstra perlu dikutip, seperti melakukan=
,;
,,
kunci, mungkin karena bug dalamshift
perintah. Parameter pertama dan terakhir adalah string_
s dengan panjang yang sama dengan kunci pertama dan terakhir untuk membantu penggabungan.t
kemudian berakhir sebagai_
s umum untuk baris pertama, ketiga dan keempat, dengan#
s menandai gabungan, yang diganti secara tepat sebelum karakter utama dan karakter tambahan ditambahkan, sedangkans
adalah baris kedua, tetapi dengan|
s berubah menjadi!
s saat mereka mengurangi jumlah"
s yang saya butuhkan. Sunting: Disimpan 1 byte dengan mencetak keempat baris dalam satu pernyataan, dan 12 byte dengan mengoptimalkan cara saya menetapkans
variabel.sumber
Ruby, 226 byte
Perbaikan sebagai berikut:
1.Tidak ada elemen string kosong di awal dan akhir array. Sebaliknya array rangkap tiga membuat 3 keyboard berdampingan. Setelah konversi ke string kami memiliki 3 keyboard dengan tepi luar hilang. Ini terpotong untuk hanya menampilkan yang tengah, lengkap dengan tepi.
2.Changed versi Ruby. Ideone yang digunakan, bukan 1.9.3 diinstal pada mesin saya. Ini berarti
.chars.to_a
dapat disingkat menjadi adil.chars
.Ruby, 239 byte
Ada beberapa byte lagi yang bisa dimainkan. Akan terlihat besok.
ungolfed
sumber
C #, 357 byte (ketika dalam satu baris, dan memasukkan sebagian besar saran)
Atau, 353 dengan interpolasi string dan semua saran lainnya
Tidak dikumpulkan (tanpa interpolasi string):
sumber
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
dengan<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 byte
Saya agak malu untuk memposting jawaban ini, mengingat betapa pendeknya jawaban PHP dan Python, tidak pernah mengingat jawaban C #, tetapi saya tidak bisa mendapatkan metode ini lebih pendek. Pendekatan lain dapat memberikan hasil yang lebih baik.
Ini pada dasarnya hanya string multi-line raksasa, dengan variabel (
$a
dan sejenisnya) menggantikan berbagai substring, dan beberapa-replace
di akhir untuk menyelesaikannya. Blok skrip$(...)
dimasukkan jika perlu untuk memperkenalkan variabel baru.Cobalah online!
sumber
Python,
493458 Bytes.Setara fungsional tetapi agak lebih mudah dibaca:
Sayangnya itu sudah lebih lama dari jawaban yang diberikan di Lua.
sumber
p
fungsi pada satu baris yang dipisahkan oleh titik koma. Juga, saya pikir Anda tidak dapat membuat baris pertamak=[['|']*75]*16
, apakah Anda tahu mengapa?'_'
dan' '
ke variabel untuk menyimpan beberapa byte.range(16)
menjadi[0]*16
.for l in k:print ' '.join(l)
menjadifor l in k:print''.join(l)
.PHP,
316312 byteSaya cukup yakin bahwa pendekatan ini tidak bisa bermain golf lebih jauh. Tetapi jika ada yang menemukan 10 byte lagi ...: D
Jalankan dengan
-r
.kerusakan
sumber
Bash (pada OSX),
128 + 221 + 1 =234230 byteYa, saya tahu, kompresi. Tapi itu berhasil, bukan?
Memerlukan file yang disebut "f" di direktori saat ini dengan konten berikut (dimasukkan ke base64 untuk keramahan PPCG - Anda dapat mendekode ini ke dalam file "f" terlebih dahulu.):
sumber
gunzip<f
.zcat f
, dan 2 byte dengan menghapus dua trailing null byte (gzip mengeluh tetapi menghasilkan output yang diinginkan).zcat<f
. Di Linux, zcat tanpa trailing nol membuat gzip mengeluh ("gzip: stdin: akhir file yang tidak terduga") tetapi hanya setelah mencetak output yang diinginkan.JavaScript (ES6), 286
Fungsi anonim tanpa parameter
Kurang golf
sumber
Swift, 777 Bytes
Swift umumnya bukan bahasa pilihan untuk bermain golf, jadi
kurang dari dua kali lipat jawaban terkecil saat ini(yang cepat)adalah tantangan yang bagus di sini!Tidak Terkumpul:
sumber
SOGL V0.12 ,
131128127 byte ( bersaing? )SOGL memang memiliki
2*2/
and2/2*
quirks, tetapi mereka merasa terlalu banyak sebagai bawaan untuk tantangan ini.Coba Di Sini!
sumber
Python 2,
394388380 byteBuat saja string besar yang mewakili seluruh keyboard, ganti * dengan% s untuk tombol khusus lalu gunakan pemformatan string untuk memperbarui spesial.
Sunting
Sekarang memiliki baris baru di akhir output tetapi saya tidak melihat di mana pun itu tidak diperbolehkan.
Cobalah online!
sumber
C #, 376 byte (bila dalam satu baris)
Ini sepenuhnya didasarkan pada jawaban C # Klinger. Saya tidak punya cukup perwakilan untuk mengomentari jawabannya, kalau tidak saya akan.
Saya dapat menurunkan kode Klinger dengan 5 byte, dengan memodifikasi loop foreach awal, dan menghapus tanda kurung asing.
sumber
m4, 456
Tidak Terkumpul:
(Ini sebenarnya pertama kalinya saya bermain golf kode dan mencoba m4.)
sumber
ditumpuk , 228 byte
Coba di sini!
Atau, sedikit lebih mudah dibaca:
Ini berfungsi dengan mendefinisikan fungsi
p
yang membuat kunci, lalu memasukkanhcat
beberapa kunci.sumber
Haskell, 255
Dalam retrospeksi, konsepnya mirip dengan jawaban Haskell ini , tetapi memproduksi keyboard ASCII, dan dengan golf yang sedikit berbeda.
Diformat dan diganti nama:
sumber
tcl, 368
Seperti yang dihitung oleh http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ dengan "Hitung garis terputus sebagai spasi." diaktifkan, menempati
505496452451439403401396391388385384382379378377369368Demo: http://rextester.com/live/NTVAV88033
Ungolf:
Kerja sama langsung di http://rextester.com/live/UDO43692
Siapa pun gratis dan dapat meningkatkan versi saya di situs kerja sama langsung, tetapi tolong: jangan edit jawaban asli saya di sini; katakan saja Anda telah mengedit komentar dan orang-orang akan mengunjungi tautannya.
UPDATE 1: Diganti
for
olehforeach
, karena yang terakhir menghasilkan kode yang lebih pendekUPDATE 2: Diganti
foreach
olehlmap
, karena yang terakhir menghasilkan kode yang lebih pendekUPDATE 3: Mencukur satu char karena saya Diganti
" "
oleh\
UPDATE 4: Sehubungan dengan komentar pertama, saya mengubah semua karakter Unicode place byte 2 byte pertama menjadi ASCII byte 1 byte
UPDATE 5: beberapa
puts
baris dibuat menjadi satuUPDATE 6: gunakan
split
perintah langsung mengembalikan nilai padalmap
panggilan alih-alih menggunakan variabel daftar perantaraUPDATE 7: Kutipan di sekitar
ENTER
tidak diperlukanUPDATE 8:
string map
cukup lama dan diulang beberapa kali sehingga layak untuk dienkapsulasi dalam aproc
PEMBARUAN 9:
split $x \n
cukup lama dan diulang beberapa kali sehingga layak untuk dienkapsulasi dalam aproc
UPDATE 10: Pada "penggantian" string dapat digunakan
&
sebagai ganti\1
, karena dalam hal ini keduanya bertepatan; Konsekuensi lain dari ini adalah memungkinkan untuk menghilangkan()
string "cocok".UPDATE 11: Gunakan
@
bukan\n
sebagai pemisah jalur untuk digunakan lebih lanjut padasplit
petunjuk. Meskipun string "cocok" memanjang dari\S
untuk[^@]
itu terbayar, karena jumlah pengulanganUPDATE 12: Mengganti
regsub
string "cocok" pertama{[^@|]}
dengan\[^@|]
mencukur satu karakter. Sayangnya, tidak bisa melakukan hal yang sama ke yang keduaregsub
, karena instruksi ada di dalam sepasang[]
:(UPDATE 13: Mencukur dua karakter Masukkan dengan berkonsentrasi
lmap
tubuh dengan judulnya sendiri.UPDATE 14: Menggunakan panggilan ke
split
prosedur berbasisN
bukan panggilan langsung kestring map
prosedur berbasisN
yang memungkinkan untuk mempersingkat 3 karakterUPDATE 15: Ada
karakter spasi yang tidak dibutuhkan . Dihapus untuk mencukur satu arang.
UPDATE 16:
set h
dapat disematkan untuk menyingkirkan$h
, untuk mencukur satu karakter.UPDATE 17:
set h
pernyataan benar-benar dapat dicukur habis.UPDATE 18:
puts
argumen berubah dari...\n...\n...\n...
format keformat.
Terima kasih kepada orang-orang yang membantu saya mempersingkatnya, terutama evilotto dan aspek saluran IRC tcl!
sumber
tcl, 369
Awalnya berbasis di versi sergiol tcl.
(Perhatikan bahwa banyak ruang kiri adalah bagian dari "sifat" tcl)
sumber
foreach
kemunculan olehlmap
!interp alias
pendekatan Anda untuk mempersingkat versi saya, tetapi yang terpendek yang bisa saya dapatkan ketika melakukannya adalah 398 :( rextester.com/live/NTVAV88033lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
C (gcc) ,
378342330 byte-10 bytes berkat ceilingcat.
Tusukan pertama. G () yang diulang menyarankan ruang untuk perbaikan.
Sunting: Ini dia.
Cobalah online!
sumber
Python 2, 672 byte
Menggunakan string zlib terkompresi:
sumber
len("print 'x\x9c...'")
yang akan menghapus\x
s, menghasilkan jumlah byte yang salah . Anda dapat memperoleh hitungan yang benar dengan menghitunglen(r"print 'x\x9c...'")
tetapi solusi termudah, seperti biasa, adalah melihat apa yang dikatakan oleh editor teks atau sistem file Anda.Powershell,
249242 byteTidak Dijelaskan & Dijelaskan
Middot
·
malah menggunakan spasi untuk mengklarifikasi string sumber.Ekstra: keyboard dengan spasi & label selaras kanan, 278 byte
Saya telah menambahkan beberapa byte ke ekspresi reguler untuk menangani spasi (regexp lama
(.[a-z ]*)
, baru~|(.[a-z ]*)
). Itu satu langkah kecil untuk regexp, satu lompatan raksasa untuk solusinya: Anda sekarang dapat menampilkan spasi dan label kunci yang selaras ke kanan (lihat SHIFT, CTRL dan BS di sisi kanan keyboard).Keluaran:
sumber
/// , 360 byte
Cobalah online!
sumber
Mathematica 323 byte
Membosankan dan tidak kreatif. String hanyalah output dari
Compress
perintah bawaan yang diterapkan pada output yang diinginkan.sumber
Bahasa Wolfram (Mathematica) , 293 byte
Cobalah online!
Relatif mudah: mengkodekan baris kunci sebagai daftar
(key name)|(key width)
sumber
Perl 5
-MList::Util=pairmap
, 313 byteCobalah online!
sumber