Jadikan aku pohon alfabet


14

Intro

Dalam kebanyakan font semua karakter alfabet huruf besar selain BDOmemiliki garis tunggal sekitar menyentuh beberapa empat sudut persegi panjang berlari karakter: ACEFGHIJKLMNPQRSTUVWXYZ.

Misalnya, dua kaki A"menyentuh" ​​sudut kiri bawah dan kanan bawah karakter. Demikian juga, Cmenyentuh sudut kanan atas dan bawahnya (agak melengkung tapi cukup dekat). Lhanya menyentuh sudut kiri atas dan kanan bawahnya dengan garis tunggal. Sudut kiri bawah Ladalah titik, bukan akhir dari satu baris.

Berikut adalah tabel karakter apa yang disentuh sudut mana sesuai dengan font Stack Exchange I (dan mudah-mudahan Anda) lihat. 1untuk kiri atas, 2untuk kanan atas, 3kiri 4bawah , kanan bawah.

A: 3 4
C: 2 4
E: 2 4
F: 2 3
G: 2
H: 1 2 3 4
I: 1 2 3 4
J: 1 3
K: 1 2 3 4
L: 1 4
M: 3 4
N: 2 3
P: 3
Q: 4
R: 3 4
S: 2 3
T: 1 2
U: 1 2
V: 1 2
W: 1 2
X: 1 2 3 4
Y: 1 2
Z: 1 4

Mempersiapkan

Berpura-pura seperti ini garis sentuhan sudut memanjang ke arah sudut yang mereka sentuh sehingga pengaturan karakter ini pada kotak dapat "terhubung".

Misalnya, semua karakter dalam

 A
C X

terhubung karena kiri bawah Adan kanan atas Cterhubung, dan kanan bawah Adan kiri atas Xterhubung.

Namun,

CAX

tidak memiliki koneksi karena koneksi hanya terjadi secara diagonal dari satu karakter ke yang berikutnya .

Tantangan

Tuliskan program sesingkat mungkin (dalam byte) yang menampilkan semua karakter ACEFGHIJKLMNPQRSTUVWXYZdalam satu pohon besar yang sepenuhnya terhubung, sesuai dengan aturan di atas. Setiap karakter harus muncul tepat sekali. Gunakan spasi untuk ruang kosong.

Contoh

Segala sesuatu di pohon 23 huruf ini dapat dicapai dari apa pun melalui koneksi diagonal yang ditentukan di atas:

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

Catatan

  • Anda dapat membuat hardcode solusi Anda.
  • Output Anda hanya boleh berisi ACEFGHIJKLMNPQRSTUVWXYZ, spasi, dan baris baru. BDOtidak akan digunakan.
  • Leading / trailing space baik-baik saja selama semua koneksi diposisikan dengan benar.
  • Kisi keluaran tidak boleh lebih besar dari 30 kali 30 karakter (termasuk baris baru dan spasi).
  • Hanya koneksi sudut yang dipertimbangkan. Bagian bawah Ytidak terhubung ke apa pun. Anda harus menggunakan koneksi sudut dari tabel di atas.
  • Tidak semua sudut yang terhubung harus terhubung ke sesuatu. Sudut yang terhubung dan tidak terhubung dapat saling membatasi.
  • Output ke stdout. Tidak ada input.
  • Termasuk grafik konektivitas yang dibuat dengan garis miring seperti yang dilakukan Peter Taylor adalah sentuhan yang membantu tetapi tidak diperlukan.

Pembaruan:
githubhagocyte telah membuat pemeriksa validitas pohon alfabet di Github .


Anda dapat membuat hardcode solusi Anda?
edc65

2
@ edc65 Anda dapat membuat hardcode solusi Anda.
Calvin Hobbies

7
Lucu bagaimana 2 frase itu hanya memiliki 1 karakter yang berbeda: P
Teun Pronk

1
@githubphagocyte, itu akan lebih baik sebagai tambahan untuk pertanyaan daripada sebagai jawaban, mengingat itu bukan jawaban.
Peter Taylor

1
Golf yang bagus, @ Calvin'sHobbies. Yang ini sangat menyenangkan untuk melihat jawabannya.
Jordan

Jawaban:


1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Keluaran:

Q A P M F R L Z 
 U I N K S H X J 
  G T C V E W Y

Koneksi, terima kasih kepada pemeriksa @ githubphagocyte:

Q   A   P   M   F   R   L   Z   
 \ / \ /   / \ /   / \   \   \  
  U   I   N   K   S   H   X   J   
     / \ /   / \ /   / \ / \ /    
    G   T   C   V   E   W   Y 

Menggabungkan trik byte nol @ grc dan sintaks Pyth yang sangat singkat. Membuat kisi saya sendiri untuk itu.

Penjelasan:

j adalah string python bergabung. dadalah ruang. \0adalah urutan pelarian untuk byte nol. Ini adalah NOP saat dicetak, sehingga baris ketiga memiliki tepat dua ruang di depan. Juga, perhatikan bahwa string dapat diakhiri EOL dalam Pyth, serta diakhiri dengan kutipan.


12

GolfScript (41 karakter)

'QZENRPMALHIFKSXJTUVWYGC'8/{' '*n' '+:n}/

Demo online

Grafik konektivitas:

Q   Z   E   N   R   P   M   A
 \   \   \ /   / \ /   / \ / \
  L   H   I   F   K   S   X   J
   \ / \ / \ /   / \ /   /   /
    T   U   V   W   Y   G   C

11

Python, 49

print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')

Contoh:

>>> print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')
    M Q R C N A F 
   X Z H L K S I P 
  G J W V U Y E T

Saya pikir itu terhubung dengan benar sekarang, tetapi saya mungkin telah melewatkan sesuatu lagi.


F4terlihat terhubung G1, yang tidak valid
Tymric

@Timmy But F2 terhubung ke A3. Semuanya terlihat terhubung dengan saya.
Calvin Hobbies

@ CalvinHobbies Saya pikir saya salah memahami persyaratan. Apakah dibolehkan memiliki sudut yang berdekatan yang tidak terhubung?
Tymric

2
@ Timim Tentu. Sepasang sudut itu tidak dihitung sebagai terhubung, tetapi kedua huruf mungkin terhubung dengan cara lain.
Calvin Hobbies

9

Marbelous 164 158 143

menggunakan pohon tanda ' karena hampir dioptimalkan dengan sempurna untuk Marbelous . Kode dalam hal ini hanyalah kode ascci untuk semua karakter (termasuk spasi dan baris baru) dari kiri ke kanan, dibatasi oleh spasi.

43 20 46 20 50 20 4D 20 51 20 52 20 45 20 41 14 20 58 20 48 20 4e 20 4C 20 4B 20 5A 20 49 20 53 14 47 20 59 20 56 20 20 20 55 20 4A 20 54 20 57

Keluaran:

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

Pendekatan Marbelous yang lebih baik 135 129

Ini menghasilkan pohon yang sama dengan satu ruang ekstra sebelum dan sesudah setiap baris, ia bekerja dengan memasukkan literal ke dalam subrutin yang mencetak spasi sebelum mencetak literal. Dan hanya mencetak spasi jika literalnya adalah spasi (20 HEX)

57
54
4A
55
20
56
59
47
14
53
49
5A
4B
4C
4E
48
58
20
14
41
45
52
51
4D
50
46
43
Sp
Sp:
20 I0
.. =V

Jawaban ini akan turun ke 96 ketika spasi antar sel tidak lagi diperlukan untuk kode sumber Marbelous, yang akan menjadi kasus hari ini.
overactor

1
Menggunakan bahasa atau fitur bahasa yang pascakencan pertanyaan dianggap curang.
Peter Taylor

4
@PeterTaylor Untuk saat ini jawaban ini hanya menggunakan fitur yang diterapkan ketika pertanyaan diajukan.
overactor

7

BrainF * ck 669

Membuat ini untuk terkikik. Output yang sama persis dengan contoh.
Akan memberikan solusi lain nanti. Tidak bisa memikirkan cara cerdas untuk melakukan ini di Lua jadi saya hanya akan tetap pada yang ini :)

++++[->++++++++<]>..[-->+++++<]>+.>++++++++++.[->+++<]>++.[->++<]>+.-[-->+<]>.+++++[->++<]>.--[->++++<]>...>-[--->+<]>---.>++++++++++.+[->++++++<]>+.-[-->+<]>-.>-[--->+<]>.[----->++<]>--...>-[--->+<]>--.+[--->+<]>++++.--[->+++<]>-.[->+++<]>-.[->+++<]>++.++++[->++<]>+.-[->++++<]>.++++++[->++<]>+.-----[->++++<]>.[-->+++++<]>--.>++++++++++.[->+++++++<]>-.-[-->+<]>--.++++[->++<]>.[->++++<]>.[++++>---<]>.>++++++++++.[->+++<]>++.+++[->++<]>.[-->+<]>---.++++++[->++<]>.[-->+<]>------.>-[--->+<]>-.>++++++++++.[->+++++++<]>+.+[->++++<]>...--[->+++<]>.[--->+<]>++.--[-->+++++<]>.---[->++++<]>.[-->+++++<]>.>++++++++++.[->+++<]>++.....>+[--->++<]>.+[--->+<]>+++.---[->+++<]>.

Keluaran

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

2
Tidak peduli seberapa gila tantangan codegolf itu, selalu ada jawaban brainfuck. Harus menyukainya +1
Pharap

@AndoDaan Tidak, itu tidak akan terjadi. Saya tidak menggunakannya. Aku membuat otakku sendiri seperti yang selalu kulakukan. Saya memang sering menggunakannya dan mempelajari sebagian besar trik yang selalu saya gunakan saat menulis BF jadi saya tidak akan terkejut jika terlihat simular.
Teun Pronk

Tidak simular, identik. Panjangnya 669 byte. Keduanya menggunakan karakter yang sama dengan metode karakter (tidak ada optimasi sama sekali), dan juga keduanya identik dengan kemana semua plussy, miney, dan simbol-simbol haly lainnya pergi.
AndoDaan

2
Pasti kebetulan saja. Saya berpartisipasi untuk bersenang-senang tantangan dan saya tidak melihat kesenangan menghasilkan BF. Satu-satunya cara yang bahkan bisa sedikit menyenangkan adalah ketika Anda menulis generator sendiri.
Teun Pronk

6

PHP 46

Ini lebih seperti pemecahan puzzle daripada pemrograman, jadi jawaban saya lebih seperti solusi puzzle daripada kode. Namun ini adalah program PHP yang valid, jadi saya mengirimkannya.

C A Q S R P M J
 X Z I F K N H
G T U V W Y E L

Perbarui yang sama di Perl. Panjangnya masih 46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg

4

HTML, 55

kode

<pre>C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

keluaran:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

3

Bash + coreutils, 46

sed 's/\S/ &/g'<<<"CAQSRPMJ
 XZIFKNH
GTUVWYEL"

Sekarang meminjam pohon optimal @ core1024 tanpa malu-malu :

Keluaran:

$ ./alphatree.sh
 C A Q S R P M J
  X Z I F K N H
 G T U V W Y E L
$

2

STATA 63

Sunting: sekarang solusi saya sendiri. Seharusnya semua surat.

di 'C F P M Q R E A' di ' X H N L K Z I S' di 'G Y V   U J T W'

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

1

Javascript 83

Saya akan mulai dengan hardcoding solusi ANDA

console.log('  Q\n A J   R\nC U   S Y\n I M N\nE H X\n F L T\nG   Z K P\n     V W')

membuatnya lebih pendek dengan alertbukannyaconsole.log
Mark Gabriel

2
@ MarkGabriel Saya ingin membuatnya lebih pendek dalam beberapa cara yang lebih cerdas. Lansiran tidak memiliki fonta yang tepat untuk menampilkan ascii art.
edc65

1
Saya melihat. Lupa pemformatan lansiran menjadi berbeda. :)
Mark Gabriel

1

PHP, 69

<?php echo preg_replace("/(\w)/",'\1 ',"CAQSRPMJ
 XZIFKNH
GTUVWYEL");

memberi

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L

Anda tidak memiliki koneksi diagonal sama sekali dalam output Anda
edc65

@ MartinBüttner - terima kasih, saya perlu biaya satu byte untuk memperbaikinya.
Kemenangan

Masalah dengan respons ini (dan banyak lainnya) adalah bahwa output lebih pendek dari kode (lihat core1024 php)
edc65

Anda dapat mencukur dua byte dengan mengganti regex Anda dengan"/\w/",'\0 '
ATaco
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.