알파벳 트리 만들기


14

소개

대부분의 글꼴에서 대문자 알파벳 문자는 BDO모두 문자 경계 사각형의 네 구석 중 일부에 거의 닿는 단일 행을 갖습니다 ACEFGHIJKLMNPQRSTUVWXYZ.

예를 들어 A캐릭터의 왼쪽 하단 및 오른쪽 하단 모서리를 "터치" 하는 두 다리가 있습니다. 마찬가지로, C상단과 하단 오른쪽 모서리를 터치합니다 (약간 구부러졌지만 충분히 가까움). L한 줄로 왼쪽 상단과 오른쪽 하단에만 닿습니다. 왼쪽 하단 모서리 L는 단일 선의 끝이 아닌 정점입니다.

다음은 Stack Exchange 글꼴에 따라 어떤 문자가 어떤 모서리에 닿는 지에 대한 표입니다. 1왼쪽 위, 2오른쪽 위, 3왼쪽 4아래, 오른쪽 아래입니다.

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

설정

이러한 모퉁이 접촉 선은 모퉁이의 방향으로 연장되어 격자에서 이러한 문자의 배열을 "연결"할 수 있습니다.

예를 들어

 A
C X

연결의 왼쪽 하단 A및 오른쪽 상단과 C연결의 오른쪽 하단 A및 왼쪽 상단 때문에 X연결됩니다.

하나,

CAX

연결 은 한 문자에서 다음 문자로 대각선으로 만 발생 하기 때문에 연결 이 없습니다 .

도전

ACEFGHIJKLMNPQRSTUVWXYZ위의 규칙에 따라 모든 문자 를 하나의 큰 완전히 연결된 트리에 출력하는 가능한 가장 짧은 프로그램 (바이트)을 작성하십시오 . 각 문자는 정확히 한 번만 나타나야합니다. 빈 공간에는 공백을 사용하십시오.

이 23 글자 트리의 모든 것은 위에 정의 된 대각선 연결을 통해 다른 것으로부터 도달 할 수 있습니다.

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

노트

  • 솔루션을 하드 코딩 할 수 있습니다.
  • 출력에는 ACEFGHIJKLMNPQRSTUVWXYZ공백, 개행 문자 만 포함되어야합니다 . BDO사용되지 않습니다.
  • 모든 연결부가 올바르게 배치되어 있으면 선행 / 트레일 공간이 좋습니다.
  • 출력 그리드는 30 x 30 자 (줄 바꿈 및 공백 포함)보다 크지 않아야합니다.
  • 코너 연결 만 고려됩니다. 하단은 Y아무 것도 연결하지 않습니다. 위 표의 코너 연결을 사용해야합니다.
  • 모든 연결 가능한 코너가 무언가에 연결될 필요는 없습니다. 연결 가능하고 연결 불가능한 모서리가 서로 경계를 이룰 수 있습니다.
  • 표준 출력으로 출력합니다. 입력이 없습니다.
  • Peter Taylor 처럼 슬래시로 만든 연결 그래프를 포함시키는 것은 유용한 터치이지만 필수는 아닙니다.

업데이트 :
githubhagocyte가 Github 에서 알파벳 트리 유효성 검사기 만들었습니다 .


솔루션을 하드 코딩 할 수 있습니까?
edc65

2
@ edc65 솔루션을 하드 코딩 할 수 있습니다.
Calvin 's Hobbies

7
이 두 구절에 하나의 다른 캐릭터 만있는 것이 재미있다 : P
Teun Pronk

1
@ githubphagocyte, 그것은 대답이 아니라면 대답보다 질문에 대한 부록으로 더 좋습니다.
피터 테일러

1
멋진 골프, @ Calvin'sHobbies. 이것에 대한 답변을 보는 것은 많은 재미입니다.
Jordan

답변:


1

피시스 , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

산출:

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

@githubphagocyte의 검사기 덕분에 연결 :

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

@grc의 null 바이트 트릭과 Pyth의 매우 짧은 구문을 결합합니다. 지옥에 대한 나만의 그리드를 만들었습니다.

설명:

j파이썬의 문자열 조인입니다. d공간입니다. \0널 바이트의 이스케이프 시퀀스입니다. 인쇄시 NOP이므로 세 번째 줄의 앞쪽에 정확히 두 칸이 있습니다. 또한 문자열은 Pyth에서 EOL로 끝나고 따옴표로 끝날 수 있습니다.


12

GolfScript (41 자)

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

온라인 데모

연결성 그래프 :

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

11

파이썬, 49

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

예:

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

나는 그것이 제대로 연결되어 있다고 생각하지만 다시는 뭔가를 놓쳤을 수도 있습니다.


F4연결 G1이 잘못되었습니다
Tymric

@Timmy 그러나 F2는 A3에 연결됩니다. 그것은 모두 나에게 연결된 것처럼 보입니다.
Calvin 's Hobbies

@ Calvin'sHobbies 요구 사항을 잘못 이해했다고 생각합니다. 연결되지 않은 인접한 모서리를 가질 수 있습니까?
Tymric

2
@Timmy 물론입니다. 이 모서리 쌍은 연결된 것으로 간주되지 않지만 두 글자는 다른 방식으로 연결될 수 있습니다.
Calvin 's Hobbies

9

Marbelous 164 158 143

사용 bmarks '나무 가 거의 완벽에 최적화 된 이후 Marbelous . 이 경우 코드는 공백으로 구분 된 왼쪽에서 오른쪽으로 모든 문자 (공백 및 줄 바꿈 포함)의 ASCII 코드입니다.

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

산출:

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

더 나은 Marbelous 방법 (135) 129

이것은 각 줄 앞뒤에 하나의 여분의 공간이있는 동일한 트리를 출력하며 리터럴을 인쇄하기 전에 공백을 인쇄하는 서브 루틴에 리터럴을 공급하여 작동합니다. 리터럴이 공백이면 공백을 인쇄하십시오 (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 소스 코드에 더 이상 셀 사이에 공백이 필요하지 않은 경우 96까지 내려갑니다.
overactor

1
질문을 게시 한 언어 또는 언어 기능을 사용하는 것은 부정 행위로 간주됩니다.
피터 테일러

4
@PeterTaylor 현재로서는이 답변은 질문을받을 때 구현 된 기능 만 사용합니다.
overactor

7

BrainF * ck 669

이것을 킥킥 웃음으로 만들었습니다. 예제와 정확히 동일하게 출력합니다.
나중에 다른 솔루션을 제공 할 것입니다. Lua 에서이 작업을 수행하는 영리한 방법을 생각할 수 없으므로이 방법을 고수하겠습니다. :)

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

산출

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

2
코드 골프 도전에 아무리 미치더라도 거의 항상 답이 있습니다. 좋아합니다 +1
Pharap

@AndoDaan 아니에요. 나는 그것을 사용하지 않았다. 나는 언제나처럼 나만의 두뇌를 만들었습니다. 나는 그것을 많이 사용하고 BF를 작성할 때 항상 사용하는 대부분의 트릭을 배웠으므로 시뮬레이션처럼 보일지라도 놀라지 않을 것입니다.
Teun Pronk

단순하지 않고 동일합니다. 길이는 669 바이트입니다. 모두 문자 방식으로 동일한 문자를 사용하고 (모두 최적화하지 않음) 모든 플러시 기호, 광산 기호 및 기타 기호가있는 위치와 동일합니다.
AndoDaan

2
그렇다면 우연의 일치 여야합니다. 나는 도전의 재미에 참여하고 BF를 생성하는 재미를 보지 못합니다. 조금 재미 있을 수 있는 유일한 방법 은 발전기를 직접 썼을 때입니다.
Teun Pronk

6

PHP 46

이것은 프로그래밍보다는 퍼즐 해결과 비슷했기 때문에 제 대답은 코드보다는 퍼즐 솔루션과 비슷합니다. 그러나 유효한 PHP 프로그램이므로 제출하고 있습니다.

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

Perl에서 동일하게 업데이트 하십시오. 길이는 여전히 46입니다.

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

4

HTML, 55

암호

<pre>C F P M Q R E A
 X H N L K Z I S
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


2

스타 타 63

편집 : 이제 내 자신의 솔루션. 모든 글자 여야합니다.

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

자바 스크립트 83

솔루션 하드 코딩부터 시작하겠습니다

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

와이 짧게 alert대신console.log
마크 가브리엘

2
@MarkGabriel 더 똑똑한 방식으로 짧게 만들고 싶습니다. Alert는 ASCII 아트를 표시하기에 적합한 글꼴이 아닙니다.
edc65

1
내가 참조. 경고 형식이 다른 것을 잊었습니다. :)
Mark Gabriel

1

PHP, 69

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

준다

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

출력에 대각선으로 연결되어 있지 않습니다
edc65

@ MartinBüttner-고맙습니다. 고칠 바이트가 필요했습니다.
Victory

이 (그리고 다른 많은) 응답의 문제점은 출력이 코드보다 짧다는 것입니다 (core1024 php 참조)
edc65

정규식을 다음과 같이 바꾸면 2 바이트를 줄일 수 있습니다."/\w/",'\0 '
ATaco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.