Fammi un albero dell'alfabeto


14

Intro

Nella maggior parte dei tipi di carattere di tutti i caratteri alfabetici maiuscoli oltre BDOhanno linee singole di circa toccano alcuni dei quattro angoli del rettangolo di delimitazione del personaggio: ACEFGHIJKLMNPQRSTUVWXYZ.

Ad esempio, le due gambe di un A"tocco" gli angoli in basso a sinistra e in basso a destra del personaggio. Allo stesso modo, Ctocca i suoi angoli in alto e in basso a destra (è un po 'curvo ma è abbastanza vicino). Ltocca solo gli angoli in alto a sinistra e in basso a destra con linee singole. L'angolo in basso a sinistra di Lè un vertice, non la fine di una singola riga.

Ecco una tabella di quali personaggi toccano quali angoli in base al carattere Stack Exchange I (e, si spera, tu) vedi. 1è per in alto a sinistra, 2è per in alto a destra, in 3basso a sinistra, in 4basso a destra.

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

Impostare

Fai finta che queste linee toccanti dell'angolo si estendano nella direzione dell'angolo che toccano in modo che le disposizioni di questi personaggi su una griglia possano essere "connesse".

Ad esempio, tutti i personaggi in

 A
C X

sono collegati perché la parte inferiore sinistra Ae la parte superiore destra della Cconnessione e la parte inferiore destra Ae la parte superiore sinistra della Xconnessione.

Tuttavia,

CAX

non ha connessioni perché le connessioni si verificano solo in diagonale da un carattere all'altro .

Sfida

Scrivi il programma più breve possibile (in byte) che genera tutti i caratteri ACEFGHIJKLMNPQRSTUVWXYZin un grande albero completamente connesso, secondo le regole sopra. Ogni personaggio deve apparire esattamente una volta. Usa gli spazi per lo spazio vuoto.

Esempio

Tutto in questo albero di 23 lettere può essere raggiunto da qualsiasi altra cosa tramite le connessioni diagonali sopra definite:

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

Appunti

  • È possibile codificare la soluzione.
  • L'output deve contenere solo ACEFGHIJKLMNPQRSTUVWXYZspazi e nuove righe. BDOnon verrà utilizzato.
  • Gli spazi iniziali / finali vanno bene purché tutte le connessioni siano posizionate correttamente.
  • La griglia di output non deve essere più grande di 30 per 30 caratteri (inclusi righe e spazi).
  • Vengono prese in considerazione solo le connessioni d'angolo. La parte inferiore di Ynon si collega a nulla. È necessario utilizzare le connessioni angolari dalla tabella sopra.
  • Non tutti gli angoli collegabili devono connettersi a qualcosa. Gli angoli collegabili e non collegabili possono delimitare l'un l'altro.
  • Uscita su stdout. Non ci sono input.
  • Includere un grafico di connettività realizzato con barre come ha fatto Peter Taylor è un tocco utile ma non necessario.

Aggiornamento:
githubhagocyte ha effettuato un controllo di validità dell'albero alfabetico su Github .


Potresti hardcode la tua soluzione?
edc65,

2
@ edc65 Puoi hardcodificare la tua soluzione.
Hobby di Calvin il

7
Divertente come quelle 2 frasi abbiano solo 1 personaggio diverso: P
Teun Pronk

1
@githubphagocyte, sarebbe meglio come aggiunta alla domanda che come risposta, dato che non è una risposta.
Peter Taylor,

1
Bel golf, @ Calvin'sHobbies. È molto divertente vedere le risposte per questo.
Giordania,

Risposte:


1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Produzione:

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

Collegamenti, grazie al checker di @ githubphagocyte:

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

Combina il trucco a byte nullo di @ grc e la sintassi estremamente breve di Pyth. Creato la mia griglia per l'inferno.

Spiegazione:

jè il join di stringhe di Python. dè spazio. \0è la sequenza di escape per il byte null. È un NOP quando stampato, quindi la terza riga ha esattamente due spazi davanti. Inoltre, nota che le stringhe possono essere EOL-terminate in Pyth, così come virgolette.


12

GolfScript (41 caratteri)

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

Demo online

Grafico della connettività:

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

Esempio:

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

Penso che ora si connetta correttamente, ma potrei essermi perso di nuovo qualcosa.


F4sembra collegato G1, il che non è valido
Tymric

@Timmy Ma F2 è collegato ad A3. Mi sembra tutto collegato.
Hobby di Calvin il

@ Calvin'sHobbies Penso di aver frainteso i requisiti. È consentito avere angoli adiacenti che non sono collegati?
Tymric,

2
@Timmy Certo. Quelle coppie di angoli non contano come connesse, ma le due lettere possono essere collegate in un altro modo.
Hobby di Calvin il

9

Marbelous 164 158 143

usava l'albero dei bmarks poiché era quasi perfettamente ottimizzato per Marbelous . Il codice in questo caso è solo il codice ascci per tutti i caratteri (inclusi spazi e newline) da sinistra a destra, delimitati da spazi.

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

Produzione:

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

Un migliore approccio marbelous 135 129

Questo produce lo stesso albero con uno spazio in più prima e dopo ogni riga, funziona alimentando i letterali in un sottoprogramma che stampa uno spazio prima di stampare il letterale. E basta stampare uno spazio se il valore letterale è uno spazio (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

Questa risposta scenderà a 96 quando gli spazi tra le celle non sono più necessari per il codice sorgente Marbelous, come sarà il caso oggi.
overactor

1
L'uso di lingue o funzionalità linguistiche che postdatano la domanda è considerato imbroglione.
Peter Taylor,

4
@PeterTaylor Per ora questa risposta utilizza solo funzionalità implementate quando è stata posta la domanda.
overactor

7

BrainF * ck 669

Fatto questo per risatine. Emette esattamente lo stesso dell'esempio.
Fornirà un'altra soluzione in seguito. Non riesco a pensare a un modo intelligente per farlo in Lua, quindi mi limiterò a questo :)

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

Produzione

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

2
Non importa quanto sia folle la sfida del codegolf, c'è quasi sempre una risposta geniale. Devo
adorarlo

@AndoDaan No, non lo sarebbe. Non l'ho usato però. Ho creato il mio cervello * come faccio sempre. L'ho usato molto e ho imparato la maggior parte dei trucchi che uso sempre quando scrivo BF, quindi non sarei sorpreso se sembra similare.
Teun Pronk,

Non simulare, identico. Entrambi i 669 byte di lunghezza. Entrambi usano lo stesso personaggio con il metodo del personaggio (nessuna ottimizzazione), ed entrambi identici a dove vanno tutti i simboli plussy, miney e altri oggetti.
AndoDaan,

2
Deve essere una coincidenza quindi. Partecipo per il divertimento della sfida e non vedo il divertimento di generare un BF. L'unico modo in cui anche un po ' potrebbe essere divertente è quando hai scritto tu stesso il generatore.
Teun Pronk,

6

PHP 46

Questo era più simile alla risoluzione di puzzle piuttosto che alla programmazione, quindi la mia risposta è più simile alla soluzione di puzzle piuttosto che al codice. Tuttavia è un programma PHP valido, quindi lo sto inviando.

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

Aggiorna lo stesso in Perl. La lunghezza rimane ancora 46:

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

4

HTML, 55

codice

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

produzione:

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

Modifica: ora la mia soluzione. Dovrebbero essere tutte le lettere.

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

Inizierò con hardcoding la TUA soluzione

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

abbrevialo con alertinvece diconsole.log
Mark Gabriel il

2
@MarkGabriel Vorrei renderlo più breve in un modo più intelligente. Alert non ha il carattere giusto per visualizzare ascii art.
edc65,

1
Vedo. Dimenticato che la formattazione degli avvisi è diversa. :)
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

Non ci sono connessioni diagonali nell'output
edc65

@ MartinBüttner - grazie, mi è costato un byte per la correzione.
Vittoria,

Il problema con questa (e molte altre) risposte è che l'output è più breve del codice (vedi core1024 php)
edc65

Puoi radere due byte sostituendo il tuo regex con"/\w/",'\0 '
ATaco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.