Il semble que nous ne nous lassions jamais des défis liés à l'alphabet ...
La recette
Donné
- une chaîne de lettres
S
, et - deux entiers positifs
M
,N
,
produire une soupe alphabétique avec les lettres d' S
occuper des positions aléatoires dans un bol rectangulaire de taille M
× N
, encadrée par un caractère non alphabétique et non spatial pour représenter le bord du bol.
Les positions non utilisées par les lettres doivent être affichées sous forme d'espaces. Voir les exemples ci-dessous .
Règles supplémentaires
- La taille
M
×N
fait référence à l' intérieur du bol. La taille incluant la jante estM+2
×N+2
. - Chaque personnage de
S
devrait apparaître une fois dans le bol, dans une position différente ; c'est-à-dire qu'un caractère ne peut pas en écraser un autre. S
peut contenir des doublons . Par exemple, siS
est la chaîne'abcc'
, la soupe doit contenir una
, unb
et deuxc
(tous dans des positions différentes).- Les entrées satisferont les restrictions
M >= 1
,N >= 1
,1 <= length(S) <= M*N
. - Le bord du bol peut être n'importe quel caractère non alphabétique, sans espace , cohérent entre les exécutions de programme et les valeurs d'entrée.
- Les positions des lettres dans le bol sont aléatoires, le résultat peut donc différer à chaque exécution du programme avec les mêmes entrées.
- Compte tenu de l'entrée, chaque ensemble possible de positions de lettres doit avoir une probabilité non nulle . Comme cela ne peut pas être vérifié à partir de quelques réalisations du programme, veuillez expliquer comment votre code remplit cela.
- Les espaces blancs avant ou arrière autour de la jante sont autorisés.
S
ne contiendra que des lettres majuscules . Si vous le souhaitez, vous pouvez choisir de ne prendre que des lettres minuscules .- L'entrée et la sortie sont flexibles comme d'habitude. Par exemple, la sortie peut être une chaîne avec des retours à la ligne, un tableau de caractères 2D ou une liste de lignes.
- Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
- Le code le plus court en octets gagne.
Exemples
Les entrées sont représentées par S, [M N]
, où M
est le nombre de lignes et le N
nombre de colonnes. Le caractère #
est utilisé pour la jante.
'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 #
###########################################
|+-
?Réponses:
05AB1E ,
2018161514 octetsPrend trois entrées dans l'ordre: hauteur, largeur, chaîne. Sortie sous forme de liste 2D de caractères.
Utilise
8
comme bordure, mais peut être n'importe quel chiffre.-1 octet grâce à @Grimy .
Essayez-le en ligne ou vérifiez tous les cas de test . (TIO contient
}}J»
dans le pied de page pour imprimer le résultat; n'hésitez pas à le supprimer pour voir la liste 2D réelle des caractères à la place.)Explication:
la source
*j
! Voici 13 pour l'héritage , ou un laid 14 pour le moderne (génère un tableau de caractères 2D).1,1,"O"
, donc je pense qu'il doit également être le 14 octets pour l'héritage. Merci pour -1 cependant.APL (Dyalog Unicode) , 25 octets SBCS
Essayez-le en ligne!
-22 grâce à @ngn, -7 grâce à @ngn et @ Adám
Explication:
APL (Dyalog Extended) , 21 octets SBCSLes angles de la jante sont des caractères différents
Essayez-le en ligne!
Utilisation du dfn pour afficher la boîte.
la source
'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/)
Essayez-le en ligne!{'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
(ou≥
au lieu de>
si⎕io=1
)'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
Python 3 , 110 octets
Essayez-le en ligne!
Randomise en utilisant une
set
compréhension et renvoie un tableau de caractères 2D.la source
f'{s:{m*n}}'
partie? Parce que c'est la syntaxe d'une chaîne formatée, ce qui arrive aussi par coïncidence au début avec unf
.Bash + coreutils,
139125 caractèresExemple d'exécution:
Essayez-le en ligne!
Bash + coreutils + boxes, 97 caractères
Exemple d'exécution:
Essayez-le en ligne! (En partie, car il
boxes
n'est pas installé sur TIO.)la source
J ,
3029 octets-1 octet grâce à Jonah
Essayez-le en ligne!
la source
9!:1]6!:9''
corrige cela{.
. Légère modification pour 29'#'|.@|:@,^:4[$*/@[(?~@[{{.)]
: Essayez-le en ligne!PowerShell ,
16311193 octetsEssayez-le en ligne!
Prend l'entrée comme
$w
idth,$h
huit,$s
tring.Construit une chaîne de
#
l'$w
idth approprié , chaîne-joint cela avec du calcul, puis à nouveau cette même#
chaîne. Le calcul commence par prendre le$s
tring d' entrée , et faire un .padRight
jusqu'à l'$w
idth de$h
huit longueurs (c'est-à-dire, faire une chaîne assez longue pour occuper complètement l'espace rectangulaire. Nous convertissons ensuite cette chaînet
oCharArray
, etsort
elleRandom
ly. Cela donne nous la partie médiane mélangée. Enfin, nous la-replace
divisons en morceaux d'égale$w
idth, et entourons ces morceaux de#
s.-52 grâce à l'inspiration d'AZTECCO
-18 octets grâce à mazzy
la source
-replace
lieu de diviser et de rejoindre.JavaScript (ES7), 125 octets
Renvoie une chaîne. Utilise
0
comme caractère de trame.Essayez-le en ligne!
Commenté
la source
APL (Dyalog Extended) , 23 octets SBCS
Fonction infixe tacite anonyme. Prend
[M,N]
comme argument de gauche etS
comme argument de droite.Essayez-le en ligne!
×/⍛(
…)
Appliquer la fonction suivante entre les arguments, en remplaçant l'argument gauche par son produit:↑
prendreM
×N
caractères deS
, remplissage avec des espaces à droite⊇
réorganiser cela dans l'ordre suivant:?⍨⍤
les indices mélangés de 1 à…⊣
l'argument de gauche (M
×N
)⍴
r Eshape que de la forme suivante:⊣
l'argument de gauche (c'est-à-dire lesM
lignes et lesN
colonnes)'#'
…⍣4
Appliquer la fonction suivante quatre fois, chaque fois avec le caractère de hachage comme argument de gauche:∘⍉
transposer l'argument de droite∘⌽
refléter l'argument de droite,
concaténer une colonne de hachages sur le côté gauche de celui-cila source
PHP 7.4,
1079994 caractèresGrâce à:
join()
(-8 caractères)chunk_split()
le$end
paramètre de (-5 caractères)Essayez-le en ligne!
PHP 7.3,
117112108 caractèresGrâce à:
join()
(-5 caractères)chunk_split()
le$end
paramètre de (-4 caractères)Exemple d'exécution:
Essayez-le en ligne!
la source
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";
devrait fonctionner en PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ), et une version canditate a été publiée ( wiki.php.net/todo/php74 ), donc, c'est un "compilateur" disponible qui est venu avant ce défi, et tout le monde peut l'utiliser.join()
, mais sans réduire la taille. ☹chunk_split
: 94 octets J'ai également supprimé le dernier point-virgule car je pense qu'il n'est pas nécessaire, vous avez écrit une fonction, donc le code qui va l'attribuer à une variable ne devrait pas compter.MATL ,
2219 octetsEssayez-le en ligne!
Merci à @LuisMendo d'avoir économisé 3 octets, alors maintenant, il a le même octet que la réponse de @ flawr , mais suffisamment différent pour publier quand même. Présentation de l'agorithme de haut niveau:
la source
Z}&O
parZ"
, et cela vous permet également de supprimer la finalec
1$O
.Rubis , 121 octets
Crée le bol, interroge les index de tous les espaces du bol, échantillonne un nombre d'espaces égal à la taille de la chaîne et les remplit.
sample
Ne renvoie pas de liste triée, il n'est donc pas nécessaire de mélanger. La recherche d'indices jusqu'à9*m*n
(qui va presque certainement hors de portée) obtiendra toujours tous les espaces et est 1 octet plus courte quer.size
.Essayez-le en ligne!
la source
Rouge ,
120116114112 octets-2 octets grâce à @Kevin Cruijssen!
Essayez-le en ligne!
la source
+ 1
et en utilisant à lato"""00"0 n
place.copy
, pour le même nombre d'octets.t
ligne en tant qu'élément de début / fin avant de boucler pour enregistrer sur les deux en vracprint t
serait plus court? J'en doute, mais comme je ne sais pas comment ajouter des éléments à une liste, je n'en suis pas sûr.Perl 6 ,
7467 octets-5 octets grâce à Jo King
Essayez-le en ligne!
Explication
la source
Perl 5
-lF
,9997 octets-2 octets avec l'aimable autorisation de @NahuelFouilleul
Essayez-le en ligne!
la source
($i++%$n==0)
pourrait être modifié par!($i++%$n)
k4,
3228 octetsedit: -4 grâce à Galen Ivanov!
appelé comme
explication:
la source
#
à la fin de chaque ligne et transposez / inversez 4 fois, quelque chose comme ça .Java (JDK) ,
180178 octetsPas une seule importation supplémentaire:
Essayez-le en ligne!
Ce fut toute la lutte pour obtenir ce golf. En particulier, les importations impliquées avec les méthodes Collections.shuffle () / Arrays étaient trop à accepter, j'ai donc dû créer mon propre algorithme de réarrangement de chaîne (probablement ni efficace ni uniformément distribué). Un grand merci à Steven pour prouvé que n'importe quel ensemble de positions peut être généré à partir de l'algorithme.
Formaté (avec explication):
la source
.replaceAll("(.{"+n+"})","\n#$1#")
peut devenir.replaceAll(".{"+n+"}","\n#$0#")
Fusain , 27 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend la saisie dans l'ordre largeur, hauteur, chaîne. Explication:
Saisissez la largeur et la hauteur.
Cadrez le bol.
Faites une boucle sur les caractères de la chaîne.
Sautez à une position aléatoire dans le bol jusqu'à ce qu'un endroit vide soit trouvé.
Imprimez le caractère actuel sans déplacer le curseur.
la source
Move(:UpLeft)
nécessaire? Cela fonctionne très bien sans cela, mais peut-être que vous l'avez ajouté pour une raison à laquelle je ne pense pas?Japt
-R
,2118 octetsEssayez-le
la source
MATL ,
29 2719 octetsEssayez-le en ligne!
Merci @LuisMendo pour -8 octets!
Explication:
p
calcule le nombre de pixels de soupe.Z@
Produit ensuite une permutation aléatoire de la taille du nombre de pixels de la soupe. Nous l'utiliserons comme des indicesiy~h
auxquels est la chaîne d'entrée avec suffisamment d'espaces ajoutés.w)
échange les deux et indexe l'un avec l'autre. Nous remodelons ensuite1Ge
la forme dans le rectangle souhaité et la#
remplissons à l'aide deTT35&Ya
.la source
T-SQL 2017, 232 octets
Le test en ligne est une ancienne version de sql-server qui coûte un autre personnage. J'ai posté la version courte.
Golfé:
Essayez-le en ligne
Non golfé:
la source
C (clang) ,
169164162160 octetsEssayez-le en ligne!
-2 mettre a = o dans time () appeler // for (srand (time (a = o)); ...
7 suggestions @ceilingcat enregistrées pour utiliser - ~ variable et stockage automatique pour la chaîne o ainsi que de nombreuses améliorations.
Degolf:
la source
*a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;
place de--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
Icon ,
136133131118 octetsEssayez-le en ligne!
la source
Gelée , 16 octets
Un lien dyadique acceptant une liste d'entiers,
[M, N]
à gauche et une liste de caractèresS
, à droite qui donne une liste de listes de caractères, les lignes. Utilise le caractère tilde,,~
comme bordure.Essayez-le en ligne!
Toutes les sorties possibles ont une chance non nulle d'être cédées puisque nous mélangeons (
Ẋ
) une liste des caractères deS
ainsi que le nombre approprié d'espaces.Le code
Ṿ€«”~ZƊ⁺
enregistre l'octet qui, j'imagine, serait nécessaire pour rejoindre les sauts de ligne que les programmes complets utilisant un entier tel que zéro devraient utiliser (par exempleP⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Y
ouP⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y
). Peut-être qu'il existe un moyen d'économiser plus ...?la source