Bana bir alfabe ağacı yap


14

giriş

En yazı olarak büyük harfli alfabe tüm karakterler yanında BDOyaklaşık karakterin sınırlama dikdörtgenin dört köşe bazı dokunmadan tek satırları vardır: ACEFGHIJKLMNPQRSTUVWXYZ.

Örneğin, iki bacağı Akarakterin sol alt ve sağ alt köşelerine "dokunur". Aynı şekilde, Csağ ve sağ alt köşelerine dokunur (biraz kavislidir, ancak yeterince yakındır). Lsadece sol üst ve sağ alt köşelere tek satırlarla dokunur. Öğesinin sol alt köşesi, Ltek bir satırın sonu değil, bir tepe noktasıdır.

İşte Stack Exchange yazı tipine (ve umarım) göre hangi köşelerin hangi köşelere dokunduğunu gösteren bir tablo. 1sol 2üst, sağ üst, 3sol 4alt, sağ alt içindir.

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

Kurmak

Köşeye temas eden bu çizgilerin, bu karakterlerin bir ızgara üzerindeki düzenlemelerinin "bağlanabilmesi" için temas ettikleri köşenin yönünde uzandığını varsayalım.

Örneğin, tüm karakterler

 A
C X

alt sol çünkü bağlanır Aüst sağ ve Cbağlantı ve alt hakkını Asol ve üst Xbağlantı.

Ancak,

CAX

yalnızca bir karakterden diğerine çapraz olarak gerçekleştiğinden bağlantı yoktur .

Meydan okuma

ACEFGHIJKLMNPQRSTUVWXYZYukarıdaki kurallara göre, tüm karakterleri tam olarak bağlı büyük bir ağaçta veren en kısa programı (bayt cinsinden) yazın . Her karakter bir kez görünmelidir. Boş alan için boşluk kullanın.

Misal

Bu 23 harfli ağaçtaki her şeye yukarıda tanımlanan diyagonal bağlantılar üzerinden her şeyden ulaşılabilir:

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

notlar

  • Çözümünüzü kodlayabilirsiniz.
  • Çıktınızda yalnızca ACEFGHIJKLMNPQRSTUVWXYZboşluklar ve yeni satırlar bulunmalıdır . BDOkullanılmayacak.
  • Tüm bağlantılar uygun şekilde konumlandırıldığı sürece öndeki / arkadaki boşluklar iyi.
  • Çıktı ızgarası 30 x 30 karakterden (satırsonu ve boşluk dahil) büyük olmamalıdır.
  • Sadece köşe bağlantıları dikkate alınır. Alt kısmı Yhiçbir şeye bağlanmaz. Yukarıdaki tablodan köşe bağlantılarını kullanmalısınız.
  • Tüm bağlanabilir köşelerin bir şeye bağlanması gerekmez. Bağlanabilir ve bağlanamaz köşeler birbirlerini sınırlayabilir.
  • Stdout'a çıktı. Hiçbir girdi yok.
  • Peter Taylor'ın yaptığı gibi eğik çizgilerle yapılmış bir bağlantı grafiği eklemek yararlı bir dokunuş ama gerekli değil.

Güncelleme:
githubhagocyte Github üzerinde bir alfabe ağacı geçerlilik denetleyicisi yaptı .


Çözümünüzü kodlayabilir misiniz?
edc65

2
@ edc65 Çözümünüzü kodlayabilirsiniz.
Calvin'in Hobileri

7
Komik bu 2 cümle sadece 1 farklı karakter var: P
Teun Pronk

1
@githubphagocyte, bu bir cevap olmadığı göz önüne alındığında, soruya bir cevap olarak değil, bir ek olarak daha iyi olurdu.
Peter Taylor

1
Güzel golf, @ Calvin'sHobbies. Bu cevapları görmek çok eğlenceli.
Ürdün

Yanıtlar:


1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Çıktı:

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

@ Githubphagocyte adlı kullanıcının denetleyicisi sayesinde bağlantılar:

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

@ Grc'nin boş bayt numarasını ve Pyth'in son derece kısa sözdizimini birleştirir. Cehennem için kendi ızgaramı yaptım.

Açıklama:

jpython'un dize birleşimidir. duzaydır. \0null byte için kaçış dizisidir. Yazdırıldığında bir NOP'tur, bu nedenle üçüncü satırın önünde tam olarak iki boşluk vardır. Ayrıca, dizelerin Pyth içinde EOL ile sonlandırılabileceğini ve tırnak içine alınabileceğini unutmayın.


12

GolfScript (41 karakter)

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

Çevrimiçi demo

Bağlantı grafiği:

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')

Misal:

>>> 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

Sanırım şimdi düzgün bir şekilde bağlanıyor, ama yine bir şeyleri kaçırmış olabilirim.


F4bağlı görünüyor G1, bu geçersiz
Tymric

@Timmy But F2 A3'e bağlı. Hepsi bana bağlı görünüyor.
Calvin'in Hobileri

@ Calvin'sHobbies Sanırım gereksinimleri yanlış anladım. Bitişik olmayan köşelerin birbirine bağlı olmasına izin veriliyor mu?
Tymric

2
@Timmy Sure. Bu köşe çiftleri sadece bağlı olarak sayılmaz, ancak iki harf başka bir şekilde bağlanabilir.
Calvin'in Hobileri

9

Marbelous 164 158 143

Kullanılmış bmarks' ağaç neredeyse mükemmel için optimize beri Marbelous . Bu durumda kod, soldan sağa tüm karakterler (boşluklar ve yeni satırlar dahil) için boşluklarla ayrılmış ascci kodlarıdır.

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

Çıktı:

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

Daha iyi bir Marbelous yaklaşım 135 129

Bu, her satırdan önce ve sonra fazladan bir boşlukla aynı ağacı çıkarır, hazır bilgileri yazdırmadan önce boşluk yazdıran bir alt rutine besleyerek çalışır. Değişmez alan bir boşluksa yalnızca bir boşluk yazdırma (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

Marbelous kaynak kodu için hücreler arasındaki boşluklar artık gerekli olmadığında bu cevap 96'ya düşecek ve bu da bugün daha sonra olacak.
overactor

1
Soruyu güncelleyen dilleri veya dil özelliklerini kullanmak hile olarak kabul edilir.
Peter Taylor

4
@PeterTaylor Şimdilik bu cevap sadece soru sorulduğunda uygulanan özellikleri kullanıyor.
overactor

7

BrainF * ck 669

Bunu kıkırdamalar için yaptım. Örnekle tamamen aynı çıktıyı verir.
Daha sonra başka bir çözüm sağlayacaktır. Bunu Lua'da yapmanın akıllıca bir yolunu düşünemiyorum, bu yüzden buna sadık kalacağım :)

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

Çıktı

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

2
Codegolf meydan okuma ne kadar çılgın olursa olsun, neredeyse her zaman beyin fırtınası yanıtı vardır. +1
sevmeli

@AndoDaan Hayır olmazdı. Bunu ben kullanmadım. Kendi beynimi her zaman yaptığım gibi yaptım. Bunu çok kullandım ve BF yazarken her zaman kullandığım hilelerin çoğunu öğrendim, bu yüzden simüler görünüyorsa şaşırmam.
Teun Pronk

Simüler değil, aynı. Her ikisi de 669 bayt uzunluğunda. Hem karakter yöntemiyle aynı karakteri (hiç optimizasyon yok) kullanmak hem de tüm peluş, miney ve diğer şey sembollerinin nereye gittiğiyle aynıdır.
AndoDaan

2
O zaman tesadüf olmalı. Meydan okuma eğlencesine katılıyorum ve BF oluşturma eğlencesini görmüyorum. Hatta tek yolu olabilir Eğer jeneratörü kendini yazdığında eğlenceli bir biraz.
Teun Pronk

6

PHP 46

Bu programlamadan çok bulmaca çözme gibiydi, bu yüzden cevabım koddan ziyade bulmaca çözümü gibi. Ancak geçerli bir PHP programı, bu yüzden gönderiyorum.

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

Aynı şeyi Perl'de güncelleyin . Uzunluk hala 46:

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

4

HTML, 55

kod

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

çıktı:

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


2

STATA 63

Düzenleme: şimdi kendi çözümüm. Tüm harfler olmalı.

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

SİZİN çözüm kodlaması ile başlayacağım

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')

alertyerine kısaltmakconsole.log
Zaenille

2
@MarkGabriel Daha akıllı bir şekilde kısaltmak istiyorum. Alert, ascii resmini görüntülemek için doğru yazı tipine sahip değil.
edc65

1
Anlıyorum. Uyarının biçimlendirmesinin farklı olduğunu unuttum. :)
Zaenille

1

PHP, 69

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

verir

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

Çıktınızda hiç çapraz bağlantınız yok
edc65

@ MartinBüttner - teşekkür ederim, düzeltmem için bir bayt maliyeti var.
Zafer

Bu (ve diğer birçok) yanıtla ilgili sorun, çıktının koddan daha kısa olmasıdır (bkz. Core1024 php)
edc65 22

"/\w/",'\0 '
Normal ifadenizi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.