Nos parece que no conseguir cansados de desafíos relacionados con el alfabeto ...
La receta
Dado
- una cadena de letras
Sy - dos números enteros positivos
M,N,
produzca una sopa de letras con las letras de Socupar posiciones aleatorias en un recipiente rectangular de tamaño M× N, enmarcado por un carácter no alfabético y sin espacio para representar el borde del recipiente.
Las posiciones no utilizadas por las letras deben mostrarse como espacios. Vea los ejemplos a continuación .
Reglas adicionales
- El tamaño
M× seNrefiere al interior del cuenco. El tamaño que incluye el borde esM+2×N+2. - Cada personaje
Sdebe aparecer una vez en el tazón, en una posición diferente ; es decir, un personaje no puede sobrescribir a otro. Spuede contener duplicados . Por ejemplo, siSes la cadena'abcc', la sopa debe contener unoa, unoby dosc(todos en diferentes posiciones).- Las entradas estarán satisfacer las restricciones
M >= 1,N >= 1,1 <= length(S) <= M*N. - El borde del cuenco puede ser cualquier carácter no alfabético, no espacial , coherente en las ejecuciones del programa y los valores de entrada.
- Las posiciones de las letras en el bol son aleatorias, por lo que el resultado puede diferir cada vez que el programa se ejecuta con las mismas entradas.
- Dada la entrada, cada posible conjunto de posiciones de letras debe tener una probabilidad distinta de cero . Como esto no puede verificarse desde algunas realizaciones del programa, explique cómo su código cumple con esto.
- Se permiten espacios en blanco iniciales o finales alrededor del borde.
Scontendrá son solo letras mayúsculas . Si lo desea, puede elegir tomar solo letras minúsculas .- La entrada y la salida son flexibles como de costumbre. Por ejemplo, la salida puede ser una cadena con nuevas líneas, una matriz de caracteres 2D o una lista de líneas.
- Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
- El código más corto en bytes gana.
Ejemplos
Las entradas se muestran como S, [M N], donde Mes el número de filas y el Nnúmero de columnas. El personaje #se usa para el borde.
'O', [1 1]:
###
#O#
###
'HEY', [1 3]:
#####
#YHE#
#####
'HELLO', [4 11]:
#############
# O #
# H #
# LE #
# L #
#############
'ADVNJSGHETILMVXERTYIOJKCVNCSF', [8 12]:
##############
#K V L S #
# A V X H #
#T M C #
# I O N#
# YC #
# G I R SE#
# J F #
#JT D V EN #
##############
'OOOOOOOOOOXXXXX', [13 31]:
#################################
# X #
# O #
# #
# X #
# O #
# X O #
# O #
# X #
# O #
# X #
# O #
# O O O #
# O #
#################################
'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', [11 41]
###########################################
# JU#
# Q C M G R T U Y H #
# KI E H M YO #
# V BW I JC #
# SV D P B U #
# A F RF J KP E #
# E N TH Z #
# N BM O Q I AS N WX #
# S O K G L P Q #
#Z L T R L A F DD#
# V Y WX C G XZ #
###########################################

|+-?Respuestas:
05AB1E ,
2018161514 bytesToma tres entradas en el orden: altura, ancho, cadena. Salida como una lista 2D de caracteres.
Se usa
8como borde, pero podría ser cualquier dígito.-1 byte gracias a @Grimy .
Pruébelo en línea o verifique todos los casos de prueba . (TIO contiene
}}J»en el pie de página para imprimir el resultado; no dude en eliminarlo para ver la lista de caracteres 2D de salida real en su lugar).Explicación:
fuente
*j! Aquí hay 13 para legado , o un feo 14 para moderno (genera una matriz de caracteres 2D).1,1,"O", por lo que creo que también tiene que ser el 14-byter para el legado. Gracias por -1 sin embargo.APL (Dyalog Unicode) , SBCS de 25 bytes
Pruébalo en línea!
-22 gracias a @ngn, -7 gracias a @ngn y @ Adám
Explicación:
APL (Dyalog Extended) , SBCS de 21 bytesLos ángulos de la llanta son caracteres diferentes.
Pruébalo en línea!
Usando el dfn para mostrar el cuadro.
fuente
'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/)Pruébalo en línea!{'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}(o en≥lugar de>if⎕io=1)'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}Python 3 , 110 bytes
Pruébalo en línea!
Aleatoriza utilizando una
setcomprensión y devuelve una matriz de caracteres 2D.fuente
f'{s:{m*n}}'parte? Porque esa es la sintaxis de una cadena formateada, que casualmente también comienza con unf.Bash + coreutils,
139125 caracteresEjecución de muestra:
Pruébalo en línea!
Bash + coreutils + boxes, 97 caracteres
Ejecución de muestra:
Pruébalo en línea! (Parcialmente, ya
boxesque no está instalado en TIO).fuente
J ,
3029 bytes-1 byte gracias a Jonás
Pruébalo en línea!
fuente
9!:1]6!:9''arregla eso{.. Ligero ajuste para 29'#'|.@|:@,^:4[$*/@[(?~@[{{.)]: ¡ Pruébelo en línea!PowerShell ,
16311193 bytesPruébalo en línea!
Toma la entrada como
$width,$hocho,$string.Construye una cadena de
#la$width apropiada , une la cadena con algunos cálculos, y luego esa misma#cadena nuevamente. El cálculo comienza con la toma de la entrada de$sTring, y haciendo un .padRighthasta el$width por$hocho longitud (es decir, hacen una cadena de tiempo suficiente para tomar por completo el espacio rectangular. Entonces convertimos esa cadenatoCharArray, ysortseRandomLy. Eso le da nosotros la parte media mezclada. Finalmente, la dividimos-replaceen trozos de igual$width y rodeamos esos trozos con#s.-52 gracias a la inspiración de AZTECCO
-18 bytes gracias a mazzy
fuente
-replacelugar de dividir y unir.JavaScript (ES7), 125 bytes
Devuelve una cadena. Usos
0como el carácter del marco.Pruébalo en línea!
Comentado
fuente
APL (Dyalog Extended) , 23 bytes SBCS de
Función de infijo tácito anónimo. Toma
[M,N]como argumento izquierdo yScomo argumento derecho.Pruébalo en línea!
×/⍛(...)aplique la siguiente función entre los argumentos, reemplazando el argumento izquierdo con su producto:↑tomarM×Npersonajes deS, relleno con espacios a la derecha⊇reordena eso al siguiente orden:?⍨⍤los índices barajados 1 a ...⊣el argumento izquierdo (M×N)⍴r dale forma a la siguiente forma:⊣el argumento izquierdo (es decir,Mfilas yNcolumnas)'#'…⍣4Aplique la siguiente función cuatro veces, cada vez con el carácter hash como argumento izquierdo:∘⍉transponga el argumento derecho∘⌽refleje el argumento derecho,concatene una columna de hashes al lado izquierdo de esefuente
PHP 7.4,
1079994 caracteresGracias a:
join()(-8 caracteres)chunk_split()el$endparámetro (-5 caracteres)Pruébalo en línea!
PHP 7.3,
117112108 caracteresGracias a:
join()(-5 caracteres)chunk_split()el$endparámetro (-4 caracteres)Ejecución de muestra:
Pruébalo en línea!
fuente
fn($s,$r,$c)=>($b=str_repeat(9,$c+2))."\n9".join("9\n9".str_split(str_shuffle(str_pad($s,$r*$c)),$c))."9\n$b";debería funcionar en PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ), y se lanzó un canditate de lanzamiento ( wiki.php.net/todo/php74 ), por lo que es un "compilador" disponible que vino antes de este desafío, y cualquiera puede usarlo.join(), pero no pude reducir el tamaño. ☹chunk_split: 94 bytes obtuve . También eliminé el último punto y coma, ya que creo que no es necesario, ha escrito una función, por lo que el código que la asignará a una variable no debe contar.MATL ,
2219 bytesPruébalo en línea!
Gracias @LuisMendo por guardar 3 bytes, por lo que ahora tiene el mismo bytecount que la respuesta de @ flawr , pero lo suficientemente diferente como para publicar de todos modos. Descripción general del agoritmo de alto nivel:
fuente
Z}&OporZ", y eso también te permite eliminar la finalc1$O.Ruby , 121 bytes
Crea el cuenco, consulta los índices de todos los espacios dentro del cuenco, muestrea un número de espacios igual al tamaño de la cadena y los completa.
sampleNo devuelve una lista ordenada, por lo que no es necesario barajarlos. La búsqueda de índices hasta9*m*n(que casi con seguridad se sale de rango) seguirá obteniendo todos los espacios y es 1 byte más corto quer.size.Pruébalo en línea!
fuente
rojo ,
120116114112 bytes-2 bytes gracias a @Kevin Cruijssen!
Pruébalo en línea!
fuente
+ 1y usar en suto"""00"0 nlugar.copypor el mismo número de bytes.tlínea como elemento inicial / final antes de hacer un bucle para guardar en los dos elementos sueltosprint t? Lo dudo, pero como no sé cómo agregar elementos a una lista, no estoy seguro.Perl 6 ,
7467 bytes-5 bytes gracias a Jo King
Pruébalo en línea!
Explicación
fuente
Perl 5
-lF,9997 bytes-2 bytes cortesía de @NahuelFouilleul
Pruébalo en línea!
fuente
($i++%$n==0)podría ser cambiado por!($i++%$n)k4,
3228 byteseditar: -4 gracias a Galen Ivanov!
llamado como
explicación:
fuente
#al final de cada línea y transpone / invierte 4 veces, algo como esto .Java (JDK) ,
180178 bytesNi una sola importación extra:
Pruébalo en línea!
Fue toda una lucha conseguir que esto se redujera. En particular, las importaciones relacionadas con los métodos Collections.shuffle () / Arrays eran demasiado para aceptar, por lo que tuve que crear mi propio algoritmo de barajado de cadenas (probablemente ni eficiente ni distribuido uniformemente). Enormes gracias a Steven por demostrar que se puede generar cualquier conjunto de posiciones partir del algoritmo.
Formateado (con explicación):
fuente
.replaceAll("(.{"+n+"})","\n#$1#")puede convertirse.replaceAll(".{"+n+"}","\n#$0#")Carbón , 27 bytes
Pruébalo en línea!El enlace es a la versión detallada del código. Toma entrada en el orden ancho, alto, cadena. Explicación:
Ingrese el ancho y la altura.
Enmarca el tazón.
Recorre los caracteres de la cadena.
Salta a una posición aleatoria en el tazón hasta encontrar un lugar vacío.
Imprime el carácter actual sin mover el cursor.
fuente
Move(:UpLeft)necesario? Funciona bien sin él, pero ¿tal vez lo has agregado por una razón en la que no pienso?Japt
-R,2118 bytesIntentalo
fuente
MATL ,
29 2719 bytesPruébalo en línea!
¡Gracias @LuisMendo por -8 bytes!
Explicación:
pcalcula el número de píxeles de sopa. LuegoZ@produce una permutación aleatoria del tamaño del número de píxeles de sopa. Usaremos esto como índices a losiy~hcuales se encuentra la cadena de entrada con suficientes espacios agregados.w)intercambia los dos e indexa uno con el otro. Luego volvemos a dar1Geforma a la forma en el rectángulo deseado y lo#rellenamos conTT35&Ya.fuente
T-SQL 2017, 232 bytes
Probar esto en línea es una versión anterior de sql-server que cuesta otro personaje. Publiqué la versión más corta.
Golfizado:
Pruébalo en línea
Sin golf:
fuente
C (sonido metálico) ,
169164162160 bytesPruébalo en línea!
-2 poniendo a = o en time () call // for (srand (time (a = o)); ...
Se guardó la sugerencia de 7 @ceilingcat para usar: ~ almacenamiento variable y automático para la cadena o más muchas mejoras.
Degolf:
fuente
*a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;lugar de--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;Icono ,
136133131118 bytesPruébalo en línea!
fuente
Jalea , 16 bytes
Un enlace diádico que acepta una lista de enteros,
[M, N]a la izquierda y una lista de caracteresS, a la derecha que produce una lista de listas de caracteres, las líneas. Utiliza el carácter tilde~, como borde.Pruébalo en línea!
Todas las salidas posibles tienen una probabilidad distinta de cero de ser producidas ya que barajamos (
Ẋ) una lista de los caracteresSjunto con el número apropiado de espacios.El código
Ṿ€«”~ZƊ⁺guarda el byte que imagino que se necesitaría para unirse a las nuevas líneas que los programas completos que usan un número entero como cero necesitarían emplear (por ejemplo,P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡YoP⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y). Tal vez hay una manera de ahorrar más ...?fuente