Asumsikan keyboard sederhana dengan tata letak ini:
1 2 3 4 5 6 7 8 9 0
A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z . , ? !
Pola keyboard Peter dapat dihasilkan dengan mulai dari kiri atas keyboard, dan menampilkan tiga karakter pertama dan baris baru. Ini bergeser lebih dari satu karakter dan menampilkan kunci kedua, ketiga, dan keempat. Setelah mencapai akhir baris, ia berlanjut di akhir baris berikutnya dan berjalan mundur, hingga mencapai awal baris itu dan kemudian maju ke depan pada baris berikutnya, dan seterusnya hingga mencapai awal baris terakhir. .
Ini adalah pola keyboard Peter:
123
234
345
456
567
678
789
890
90J
0JI
JIH
IHG
HGF
GFE
FED
EDC
DCB
CBA
BAK
AKL
KLM
LMN
MNO
NOP
OPQ
PQR
QRS
RST
ST!
T!?
!?,
?,.
,.Z
.ZY
ZYX
YXW
XWV
WVU
Tulis program yang tidak menerima input dan menampilkan pola keyboard Peter. Program harus lebih kecil dari 152 byte , yaitu ukuran string yang dihasilkannya.
Ini kode golf, jadi solusi terpendek menang.
code-golf
kolmogorov-complexity
Peter Olson
sumber
sumber
[1..9 0 J..A K..T ! ? , . Z..U]
.echo {1..9} "0" {J..A} {K..T} '!?,.' {Z..U}|sed 's/ //g'
dalam bash, tetapi harus sudah 13 karakter untuk menambahkan perintah sed, untuk menghapus yang kosong. Ini menghasilkan 57 karakter, dan sejauh ini belum ada triple. Dengan perintah hold sed, seharusnya mungkin, tetapi dalam 6 karakter, untuk mengalahkan solusi perl?Jawaban:
Perl, 63 karakter
Solusi ini menggunakan
say
fungsi (tersedia sejak Perl 5.10.0 dengan-E
switch, atau denganuse 5.010
). Tanpa itu, yang terbaik yang bisa saya lakukan adalah 67 karakter (dan baris baru tambahan di akhir output):Solusi 65-char sebelumnya:
Mengganti
say$1
denganprint$1.$/
memungkinkan kode berjalan pada perl yang lebih lama, dengan biaya 5 karakter tambahan.sumber
APL, 43 karakter
Ini berfungsi pada Dyalog APL . Saya berhasil menyelamatkan beberapa karakter dengan menghasilkan string output (semuanya setelah
⊃
). Saya akan menulis penjelasan ketika saya punya waktu!Begini tampilannya:
Penjelasan, dari kanan ke kiri:
6↑⌽⎕A
:⎕A
memberi kami string alfabet huruf besar, dari A ke Z. Kami kemudian membalikkan (⌽
) dan mengambil (↑
) 6 karakter pertama dari itu, memberi kami'ZYXWVU'
. (Dalam retrospeksi, pendekatan ini tidak berakhir dengan menyelamatkan karakter apa pun, tetapi saya akan membiarkannya karena lebih cocok.)'!?,.',
: Kami menyatukan (,
) string'!?,.'
dengan hasil sebelumnya.(10↑10⌽⎕A),
: Kami mengambil 10 karakter pertama (10↑
) dari alfabet, yang diputar pertama kali sepuluh kali (10⌽
), dan menyatukan ini dengan hasil sebelumnya. Sebagai contoh rotasi,5⌽'abcdef'
(string'abcdef'
diputar 5 kali) memberi kita'cdefab'
.(⌽10↑⎕A),
: Ambil 10 karakter pertama dari alfabet dan balikkan, dan gabungkan ini dengan string sebelumnya.(1⌽⎕D),
:⎕D
memberi kami digit sebagai string, dari 0 hingga 9, inklusif. Kami kemudian memutar ('⌽') string ini dengan 1, menghasilkan'1234567890'
. Seperti sebelumnya, kami menggabungkan ini dengan hasil sebelumnya.3,/
: Kami mengambil string, dalam kelompok tiga karakter, dan menyatukannya.⍪
untuk mengubah vektor string (benar-benar vektor vektor karakter) di sepanjang dimensi pertama. Ini memiliki efek mengubah bentuknya dari38
ke38 1
(matriks 38x1).sumber
J,
666245 karakterTernyata saya terlalu pintar setengahnya.
semua yang saya butuhkan selama ini.
Sebelumnya:
dan:
sumber
R (75 karakter)
Apa fungsinya?
strsplit
membagi string menjadi substring, dalam hal ini karakter individuembed
adalah fungsi yang sangat berguna yang mengubah vektor menjadi array elemen yang tumpang tindihIni menghasilkan dan mencetak array karakter:
sumber
embed
memang fungsi yang sangat berguna!70 scala karakter:
sumber
Mathematica, 73
Saya secara mandiri sampai pada metode yang sama dengan orang lain:
sumber
Groovy, 73
Semua hal pintar yang saya coba ternyata lebih lama daripada melakukannya dengan cara bodoh.
sumber
C, 98
104karakterKarena belum ada orang lain yang melakukannya, saya pikir saya akan benar-benar mencoba membuat string dengan cepat, menggunakan semacam pengkodean run-length untuk berjalan naik dan turun.
EDIT: Setelah sejumlah iterasi, inilah akhirnya solusi "pintar" yang terkait dengan solusi "bodoh" terpendek di C pada 98 karakter:
Kode membutuhkan 8-bit Latin-1 encoding (ISO-8859-1 atau Windows-1252), yang seharusnya bekerja dengan baik pada semua platform yang umum digunakan, tetapi menyimpan sumber dengan beberapa halaman kode 8-bit yang kurang populer, atau UTF- 8 tidak akan berfungsi.
String data dibuat oleh potongan emacs lisp berikut:
Bit "twiddle" digunakan untuk menghindari karakter kontrol ASCII yang tidak diinginkan dalam string data yang disandikan, dan untuk memastikan bahwa
i==0
hanya di akhir output.C, 98 karakter
Namun, bahkan di C Anda bisa mendapatkan program pendek hanya dengan mencetak triplet berturut-turut dari string asli:
sumber
Ruby
696562Berdasarkan contoh Groovy
sumber
Haskell, 80
sumber
Javascript, 103
sumber
for(a='1234567890JIHGFEDCBAKLMNOPQRST!?,.ZYXWVU';a[3];a=a.slice(1))console.log(a.slice(0,3))
Haskell, 94
sumber
Perl, 73 karakter:
Perl, 66 karakter:
saat dipanggil oleh:
sumber
D 124 karakter
sumber
JavaScript, 83 karakter
Memutuskan untuk melihat apakah saya bisa mengalahkan solusi stephencarmody . Inilah yang saya pikirkan.
sumber
Python, 73
sumber
Smalltalk
10299Saya tidak mengenal Smalltalk dengan baik sehingga agak aneh bagi saya. Itu kompilasi dengan
gst
orang lain tidak diuji.sumber
Q (
6663 karakter)sumber
Prolog, 131
Ini mungkin mengapa Anda tidak pernah melihat entri Prolog. Baris baru diperlukan (sebenarnya, spasi apa pun akan dilakukan tetapi harus ada spasi putih).
sumber
Q, 63
sumber
/// , 151 byte
Cobalah online!
Tidak bisakah golf lebih banyak? Ini, dalam arti tertentu, <152 byte.
sumber
i.e.
tidak mengabaikan arti dari sesuatu, itu hanya membantu Anda untuk lebih memahaminya, dalam pengertian saya. Juga, saya tidak memasukkan baris tambahan, mungkin itu sebabnya ini adalah 151 byte. Dan ya, saya membaca bagian itu.Jelly ,
4140 byteCobalah online!
Mungkin (masih) golf ...
sumber