Los identicones son representaciones visuales de valores hash, a menudo hechos de arreglos simétricos de formas geométricas. Tu avatar predeterminado de Stack Exchange es un identicon. Este desafío se trata de crear "wordenticons" , versiones simples basadas en texto de identicons que se aplican a cadenas de letras minúsculas, es decir, palabras.
Desafío
Escriba un programa o función que tome una cadena S y genere su icono de wordent. Se garantiza que S no está vacío y solo contiene letras minúsculas en inglés az. Opcionalmente, puede suponer que S tiene una nueva línea final.
El icono de wordent de S será una cuadrícula de texto cuadrada con longitudes laterales 2*length(S)
compuestas de espacios (
), barras verticales, ( |
) y barras horizontales ( ―
).
Para generar el icono de wordent de S, forme una cuadrícula cuadrada donde cada columna corresponda a una letra de S (en el orden normal de lectura de izquierda a derecha) y cada fila corresponda a una letra de S (en el orden normal de lectura de arriba a abajo )
Por ejemplo, si S es food
nuestra cuadrícula inicial se ve así
food
f....
o....
o....
d....
donde .
es solo un marcador de posición.
Para cada punto vacío (cada .
) en la cuadrícula:
- Si la letra de la columna viene antes de la letra de la fila alfabéticamente, reemplace la
.
con|
. - Si la letra de la columna viene después de la letra de la fila alfabéticamente, reemplace la
.
con―
. - Si las letras de columna y fila son iguales, reemplace
.
con
Aquí está el food
ejemplo después de cada uno de estos pasos:
Agregando
|
:food f...| o|..| o|..| d....
Agregando
―
:food f.――| o|..| o|..| d―――.
Agregando
food f ――| o| | o| | d―――
Para completar el icono de wordenticon, elimine la fila y columna superfluas que contienen las palabras
――|
| |
| |
―――
luego refleja todo en horizontal
――||――
| || |
| || |
――― ―――
y finalmente reflejarlo nuevamente verticalmente
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
dando como resultado la 2*length(S)
cuadrícula de texto de longitud lateral que es el icono de wordent final.
Ejemplos
Aquí hay algunos ejemplos adicionales de wordenticon. Tenga en cuenta que diferentes palabras pueden tener wordenticons idénticos y algunos wordenticons pueden estar completamente hechos de espacios (desafortunadamente, la rebaja no quiere representarlos).
food
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
mood
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
foof
―― ――
| || |
| || |
―― ――
―― ――
| || |
| || |
―― ――
fool
――――――
| || |
| || |
|―― ――|
|―― ――|
| || |
| || |
――――――
a [2*2 grid of spaces]
to
||
― ―
― ―
||
it
――
| |
| |
――
tt [4*4 grid of spaces]
abc
――――
| ―― |
|| ||
|| ||
| ―― |
――――
and
――――
| || |
|― ―|
|― ―|
| || |
――――
but
――――
| || |
|― ―|
|― ―|
| || |
――――
you
||||
― ―― ―
―| |―
―| |―
― ―― ―
||||
bob
― ―
| || |
― ―
― ―
| || |
― ―
cat
|――|
― ―― ―
|| ||
|| ||
― ―― ―
|――|
cart
|――――|
― ―――― ―
|| ―― ||
||| |||
||| |||
|| ―― ||
― ―――― ―
|――――|
todo
||||||
― | | ―
―― ―― ――
― | | ―
― | | ―
―― ―― ――
― | | ―
||||||
mice
||||||
― |||| ―
―― ―― ――
――| |――
――| |――
―― ―― ――
― |||| ―
||||||
zyxw
||||||
― |||| ―
―― || ――
――― ―――
――― ―――
―― || ――
― |||| ―
||||||
banana
|―|―||―|―|
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|―|―||―|―|
codegolf
――――――――――――――
| ||| |||| ||| |
|― ―――――――――― ―|
|―| ―――――――― |―|
|―|| ――||―― ||―|
| ||| |||| ||| |
|―|||― || ―|||―|
|―||――― ―――||―|
|―||――― ―――||―|
|―|||― || ―|||―|
| ||| |||| ||| |
|―|| ――||―― ||―|
|―| ―――――――― |―|
|― ―――――――――― ―|
| ||| |||| ||| |
――――――――――――――
programming
―||―||||||||||||―||―
| || |||||||||||| || |
―― |―||||||||||||―| ――
――― ―|―――― ――――|― ―――
| || |||||||||||| || |
――――― ―――――――――― ―――――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
―――|―|―― ―||― ――|―|―――
―――|―|||| || ||||―|―――
――― ―|―――― ――――|― ―――
――― ―|―――― ――――|― ―――
―――|―|||| || ||||―|―――
―――|―|―― ―||― ――|―|―――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
――――― ―――――――――― ―――――
| || |||||||||||| || |
――― ―|―――― ――――|― ―――
―― |―||||||||||||―| ――
| || |||||||||||| || |
―||―||||||||||||―||―
abcdefghijklm
――――――――――――――――――――――――
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
|||||||||||| ||||||||||||
|||||||||||| ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
――――――――――――――――――――――――
Puntuación
Este es el código de golf , gana el código más corto en bytes. Tiebreaker va a la respuesta anterior.
Notas
- Cualquier instancia de barra horizontal (
―
) en su código puede contarse como 1 byte en lugar de los 3 bytes UTF-8 que realmente ocupa. (Hasta diez instancias). - Si lo desea, puede usar guiones regulares (
-
) en lugar de barras horizontales (―
). - No está permitido eliminar o agregar espacios finales en las líneas de un icono de gusano (incluso si la forma permanece sin cambios). Debe ser un
2*length(S)
cuadrado de texto de longitud lateral exacta . - El icono de salida de salida puede tener opcionalmente una nueva línea final.
programming
,and
ycodegolf
aunque se le olvidópuzzles
...Respuestas:
MATL,
2015 bytesPruébalo en MATL Online
Explicación
fuente
Java,
329305264259192 bytesGracias a:
StringBuilder
conString
.Golfizado:
Sin golf:
Definitivamente uno divertido. El primer intento fue una función que fue
O(n)
reemplazada por esta forma más simple después de que me frustré demasiado.Y, para probar:
fuente
\u2015
. Usar barra horizontal (o simplemente guión) en el código sin procesar está bien.String
usarasStringBuilder
la respuesta normal en lugar de la respuesta podría ser mucho más corta ... (a pesar de que puede requerir mucha más memoria)int
s en la misma línea:int i,j,l=m.length();for(i=0;i<l;i++){...
Haskell, 93 bytes
Ejemplo de uso:
Cómo funciona (nota:
(f <*> g) x
se define comof x (g x)
):Versión alternativa: la función "buscar reemplazo"
((("- |"!!).fromEnum).).compare
también se puede escribira#b|a<b='-'|a>b='|'|1<2=' '
y llamar a través(#)
del mismo número de bytes.fuente
Jalea , 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 94 bytes
Uso un guión porque generalmente ejecuto el shell SpiderMonkey JS en Windows y Unicode no funciona si lo hago.
fuente
[...s,s].reverse()
+1Pyth
3130Banco de pruebas
Lamentablemente, no puedo soltar el
Q
s debido a los varios bifurcados. Algoritmo bastante básico hasta ahora, cuenta trata la barra horizontal como 1 byte.fuente
Haskell, 66 bytes
fuente
JavaScript ES6,
138126123 bytesla mayor parte del código es el reflejo / volteo
fuente
J
2620 bytes6 bytes gracias a @Zgarb .
Respuesta anterior de 26 bytes
Utiliza el mismo algoritmo que la respuesta de Dennis.
Uso:
(
>>
entrada de significado (STDIN),<<
salida de significado (STDOUT))fuente
' |-'{~3*@-/~@u:[,|.
Mathematica,
124110104102 bytesFunción anónima. El carácter Unicode es U + F3C7 para
\[Transpose]
.fuente
Javascript
146142132130124 bytesBanco de pruebas:
¡Gracias por @HelkaHomba, por ayudar a eliminar al menos 50 bytes, y por @Downgoat por 3 bytes!
fuente
En realidad, 53 bytes
Una vez más, las pobres habilidades de procesamiento de cuerdas de Actually son su criptonita. Todavía es más corto que Java, así que tengo eso para mí, lo cual es bueno.
Pruébalo en línea!
Explicación:
El código se puede separar en 3 partes distintas: el código de traducción, el código de procesamiento y el código reflejado. Para facilitar la lectura, voy a explicar cada sección por separado.
Código de traducción (comienza con la cadena de entrada,,
s
en la pila):Código de procesamiento (comienza con una lista de
n**2
caracteres, correspondiente a la esquina inferior derecha):Código reflejado (comienza con una
n**2+n
cadena de longitud, con puntos que actúan como líneas nuevas)fuente
> <> , 109 bytes
La entrada es a través de STDIN. Pruébalo en línea!
Explicación:
La entrada leyó y se reflejó en la primera línea. Para la entrada
abcd
, esto dejadcbaabcd
en la pila. Cada mitad se refleja para darabcddcba
(línea 2). Luego, cada elemento se duplica y se deja en su propia pila (líneas 3 y 4). Después de este proceso, la pila de pilas se parece un poco a esto:Para cada pila, el valor de la fila (la parte inferior de la pila) se compara con el valor de la columna (la parte superior de la pila). El carácter apropiado se selecciona
- |
y se escribe en STDOUT. Los valores de la columna se rotan para que la siguiente columna esté en la parte superior de la pila (línea 6).Una vez que se han considerado todas las columnas, se descarta el valor de la fila, se imprime una nueva línea y los valores de la columna se colocan en la pila anterior (línea 7), para que el proceso de salida comience nuevamente.
El
]
comando, además de aparecer en la pila de pilas, vacía la pila actual si es la única que queda. La condición final del programa es si la pila está vacía, ya que se han procesado todas las filas (línea 5).fuente
C #,
169150 bytesgracias FryAmTheEggman
sin golf:
más consejos de golf apreciados
fuente
t+=c==k?" ":c>k?"|":"-";
Deberia trabajar. No he jugado mucho al C #, pero es muy posible que el uso defor
bucles regulares sea más corto.Reverse()
yToArray()
son parte deSystem.Linq
lo que se requiere una declaración de uso.C #
166143 bytes,Explicación:
Prueba:
fuente
IEnumerable<char>
, puede guardar algunos bytes al usar.Reverse()
directamente en la cadena omitiendo el.ToCharArray()
var a = new[] { '-', ' ', '|' };
avar a = "- |";
porque puede usar la indexación en cadenasCJam, 20 bytes
Pruébalo aquí.
Utiliza el enfoque obvio de calcular un producto externo y usar la diferencia y sgn para calcular el carácter en cada celda.
fuente
Clojure, 171 bytes
sin golf:
fuente
J,
7570 bytes5 bytes guardados gracias a Dennis.
Trabajaré para convertirlo en un verbo tácito más tarde.
fuente
Octava, 39 bytes
Crea una función anónima que se puede ejecutar usando
ans('string')
.Manifestación
Explicación
Esta solución combina la cadena de entrada (
x
) y es inversa (flip(x)
) usando[x, flip(x)]
. La inversa es asignado ay
acortar la respuesta,[x, y = flip(x)]
. Entonces se crea un vector columna de lo mismo mediante la combinación dex
yy
y tomando la transpuesta:[x,y]'
. Luego tomamos la diferencia que se transmitirá automáticamente para crear una matriz 2D de diferencias entre cualquier representación ASCII de letras en las cadenas. Utilizamossign
para hacer estos tampoco-1
,0
o1
y luego añadir2
para obtener los valores de índice basado en 1 válido. Luego los usamos para indexar en la cadena inicial'| -'
.fuente
Julia, 70 bytes
Este es mi primer intento de golf de código y no he usado a Julia antes, así que dime qué piensas:
Pruébalo en línea!
Sin golf:
Creo que probablemente podría hacerse más corto. Este código almacena los caracteres del wordicon en una matriz:
Desafortunadamente, no pude producir la salida deseada usando la matriz.
fuente
Jolf, 42 bytes
Apenas golfizado. Probablemente me estoy olvidando de una matriz incorporada que tiene Jolf.
Pruébalo aquí! Este código utiliza una función de flecha (
Ψ
) para el mapa matricial.fuente
Javascript, 303 bytes
Sin golf
No hay fantasía de ecma 2015 aquí
fuente
var x = 1
, solo hazlox = 1
. En el código de golf, a nadie le importa adherirse a las mejores prácticas. :)Python 2, 126 bytes
Esto es esencialmente un puerto de mi solución de hecho .
Pruébalo en línea
Explicación:
fuente
Python 3.5,
250223175 bytes:¡Pruébelo en línea! (Ideone) (Los dos últimos casos de prueba no aparecerán en la salida ya que son solo líneas en blanco. Sin embargo, mi programa los está procesando, lo que confirma el hecho de que hay 10 casos de entrada, pero solo aparecen 8 salidas).
Ungolfed seguido de una Explicación:
p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]
Cree una lista,
p
donde a|
se agrega si el valor de punto Unicode de la letra de la columna es menor que el valor de la letra de la fila,–
se agrega a si el valor de punto Unicode de la letra de la columna es mayor que el valor de la letra de la fila, o asi ambos Los valores son iguales.
u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])
Cree una cadena unida de nueva línea
u
, a partir de la lista,p
dividiéndola en segmentos de cadena unidos, cada uno de los cuales consta de un número de caracteres de longitud de entrada tanto hacia adelante como hacia atrás, lo que hace que cada uno tenga la longitud de 2 veces la cantidad de caracteres que hay en la entrada. Esta es la mitad superior de su icono de wordent. Entonces, en el caso de que su entrada seafood
, esto devolvería:print(u+'\n'+u[::-1])
Finalmente, salida
u
seguida de una nueva línea y luegou
invertida para reflejar verticalmente la primera mitad para la segunda mitad. Este es su icono de wordent completo, que para el caso de pruebafood
finalmente sería:fuente
R , 101 bytes
101 bytes ya que estoy usando
―
(que creo que se ve mejor que-
).Pruébalo en línea!
Me sorprendió que no hubiera una respuesta R antes, ya que podemos explotar la simetría y las matrices de R para obtener una respuesta bastante competitiva, a pesar de ser
string
problema.Explicación no golfista:
fuente
C (gcc) , 202 bytes
Pruébalo en línea!
Funciona recorriendo cada carácter y luego actualizando el carácter resultante (y sus reflexiones).
fuente
05AB1E (heredado) ,
202221 bytes+2 bytes como corrección de errores para entradas de un solo carácter.
-1 byte usando guiones regulares en
-
lugar de―
, ya que podemos usar en… |-
lugar de"… |―"
(ya que… |―
que actuaría incorrectamente como una cadena de diccionario)Utiliza la versión heredada de 05AB1E, ya que se une implícitamente a las nuevas líneas cuando se refleja, lo que requiere un explícito adicional
»
en la nueva versión.Pruébalo en línea o verifique todos los casos de prueba .
Explicación:
fuente