J'ai obtenu ce défi de Codingame et je suis curieux de trouver de meilleures solutions que la mienne:
Étant donné une largeur via l'entrée standard, dessinez un carré creux de «#» de largeur et de longueur données.
Exemple:
5 résultats dans
#####
# #
# #
# #
#####
J'ai utilisé python pour résoudre ce problème, donc je suis particulièrement intéressé par d'autres codes python. Mais n'hésitez pas à publier votre solution dans la langue de votre choix.
code-golf
string
ascii-art
number
code-golf
grid
code-golf
string
ascii-art
code-golf
alphabet
cipher
code-golf
math
number
code-golf
quine
code-golf
palindrome
polyglot
code-golf
number
array-manipulation
counting
logic
code-golf
string
primes
binary
decision-problem
code-golf
ascii-art
kolmogorov-complexity
popularity-contest
code-golf
probability-theory
code-golf
string
code-golf
python
polyglot
programming-puzzle
c++
code-golf
math
code-golf
binary
integer
bitwise
code-golf
rational-numbers
code-golf
string
palindrome
code-golf
ascii-art
code-golf
code-golf
string
fibonacci
code-golf
math
sequence
code-golf
code-golf
string
palindrome
code-golf
string
code-golf
math
primes
source-layout
code-golf
sequence
binary
integer
code-golf
math
arithmetic
game
code-golf
restricted-source
palindrome
code-golf
restricted-source
palindrome
code-golf
combinatorics
binary
code-golf
string
math
code-golf
ascii-art
number
code-golf
cipher
code-golf
base-conversion
counting
code-golf
sequence
random
classification
code-golf
string
subsequence
code-golf
permutations
code-golf
string
code-golf
string
cipher
code-golf
kolmogorov-complexity
arithmetic
integer
code-golf
quine
markov-chain
code-golf
string
code-golf
code-golf
ascii-art
maze
sebingel
la source
la source
Réponses:
Pyke, 11 octets
Essayez-le ici!
la source
Fusain , 6 octets
Code:
Explication:
Essayez-le en ligne!
la source
N
peut également être utilisé dans une expression, commeint(input())
en Python. Si ce défi consistait à "dessiner un rectangle creux avec une largeur et une hauteur données", la solution pourrait êtreBNN#
.MATL , 12 octets
Essayez-le en ligne!
Explication
la source
Jolf, 8 octets
la source
#
?Python 2,
6254 octetsRenvoie
#\n#
lorsque l'entrée est1
Version de 55 octets qui imprime
Version de 62 octets qui fonctionne pour n'importe quelle entrée:
la source
f=
moins que vous ne l'utilisiez - ce que vous ne faites pas.COW ,
426405348330 octetsEssayez-le en ligne! Remplacez le nombre de la deuxième ligne par n'importe quel nombre pour modifier la sortie.
L'interpréteur COW que j'utilise ici a été écrit en Perl (et est plus récent que ce défi), mais vous pouvez toujours obtenir le même résultat en saisissant le code ici .
Explication
la source
Python 2,
5958 octetsrepl.it
Remarque: Une entrée de
1
produit une sortie de##
, mais un carré creux ne serait jamais produit pour une entrée inférieure à3
, donc je suppose que c'est bien.la source
Java 7,
113112110 octets1 octet économisé grâce à @ OlivierGrégoire ;
2 octets enregistrés grâce à @cliffroot .
Solution dérivée basée sur ma réponse Création d'un carré croisé .
Essayez-le ici.
la source
for(int i=n,j;i-->0;r+="\n")
? Puisque nous ne nous soucions pas de savoir quelle est la ligne du bas ou la ligne du haut, cela n'a aucun sens de garder cet ordre, non?PowerShell v2 +,
4847 octets-1 octet grâce à JohnLBevan
Prend l'entrée
$n
, définit$z
comme des$n
hachages, avec$n
post-décrémenté. Encapsule cela en parens pour placer une copie sur le pipeline. Utilise ensuite l'opérateur virgule pour créer un tableau de pré-décrémenté$n
lignes#
, espaces,#
. Ceux-ci sont laissés sur le pipeline. Place ensuite à$z
nouveau sur le pipeline. La sortie via impliciteWrite-Output
à la fin introduit une nouvelle ligne entre les éléments, nous l'obtenons donc gratuitement.Puisque le code de l' OP ne fonctionne pas pour la saisie
n <= 1
, j'ai compris que nous n'avions pas non plus besoin de prendre en charge la saisie1
.Exemples
la source
param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
C, 98 octets
Usage:
la source
05AB1E , 20 octets
Essayez-le en ligne!
Ou 18 octets si on peut ignorer
1 <= n
:Essayez-le en ligne!
la source
WinDbg,
206200182170 octets-6 octets pour supprimer les parens
.if
et les utiliserj
au lieu de la seconde.if
-18 octets en utilisant
f
au lieu d'un.for
pour construire les chaînes.-12 octets par des chaînes ne se terminant pas par NULL, en passant plutôt la longueur à
da
L'entrée est transmise via le pseudo-registre
$t0
(par exempler $t0 = 5; {above-code}
).Explication:
Exemple de sortie:
la source
JavaScript,
6158 octetsEnregistré 3 octets grâce à @lmis !
(Ne gère pas
0
ou1
)Pour 13 octets supplémentaires (à 71 octets ), c'est possible!
Ces solutions sont assez simples: elles font beaucoup de stockage pour ne pas se répéter pour économiser quelques octets. Non minifié sans le variablsm, il ressemblerait à:
Essayez!
la source
!n?'':n==1?'#':
, 15 octets supplémentaires au début du corps de la fonction, vous pouvez gérer les entrées0
et1
.n=>(b='#'[r='repeat'](n))
et puis#${" "[r](n-=2)}
etc. vous économise 3 octets en évitant de répéterrepeat
:)Python, 109 octets
la source
list(' '*n)
par[' ']*n
. Vous pouvez également remplacerx%(n-1)
parx%~-n
for
bloc en une compréhension de liste, vous pouvez économiser plus de 20 octetsint()
et les crochets autourprint
.<1
au lieu de==0
.Rubis, 39 octets
Se révèle être plus court de cette façon que toutes les choses fantaisistes que j'essayais. Sachez que cela ne gère pas du tout 0 ou 1.
la source
Python 2, 50 octets
Fonctionne pour
n>=2
. Imprime chaque ligne avec un signe dièse,n-2
du symbole approprié, puis un autre signe dièse.Le repliement du symbole de la livre donne la même longueur:
Autres tentatives:
la source
Haskell, 49 octets
Fonctionne pour
n>=2
. Définit l'opération de prise en sandwich d'un caractère entre#
unen
chaîne terminée par un saut de ligne de caractère, puis l'applique deux fois pour créer une grille 2D.Appelez comme:
la source
C,
8382807877 octetsSe faufiler dans une multiplication et enregistrer un octet ...
Comptez également j et économisez quelques autres ...
Compte à rebours i de n à zéro et économise quelques octets ...
Un peu plus facile à comprendre et 1 octet de plus
la source
&&
plutôt&
?Groovy,
5150 octetsla source
PHP,
8169 octetsCourir avec
-r
; fournir une entrée comme argument.Lance un
DivisionByZeroError
pour entrée =1
.la source
R, 68
70octetsFonctionne pour n> 1. Merci à @Billywob pour quelques octets échangeant le tableau pour une matrice.
Utilise rbind et cbind pour placer des lignes et des colonnes de
#
's autour d'une matrice carrée n-2 d'espaces. Les retours à la ligne sont également liés aux lignes. La nouvelle ligne dans la source est importante. L'entrée provient de STDINla source
\n
. Vous pouvez enregistrer deux octets en utilisantmatrix
au lieu dearray
bien.Lisp commun,
150130 octets-20 grâce à @Cyoce et @AlexL.
Usage:
Utilise essentiellement
format
deux fois pour le haut et le bas et une boucle pour les lignes entre les deux. L'appel de format pour le haut et le bas génère une ligne commençant par#
et complétée à la largeur appropriée avec#
s. L'appel de format pour les lignes entre les deux fonctionne de manière similaire, sauf que le remplissage est des espaces et un#
est imprimé à la fin de la ligne.Remarque: Je suis plutôt nouveau pour Lisp et je m'attends à avoir beaucoup de marge d'amélioration à ce sujet.
la source
s
? Ou suis-je une fonction anonyme?dotimes (h (- v 2))
ou pourrait-il êtredotimes(h(- v 2))
?Haskell, 67 octets
Exemple d'utilisation:
Comment ça marche:
la source
Gelée , 13, octets
TryItOnline! ou essayez de 0 à 15
Comment?
la source
Pip , 16 octets
15 octets de code, +1 pour l'
-n
indicateur.Fonctionne pour la saisie> = 2. Essayez-le en ligne!
Explication d'une version quelque peu non golfée
Tout d'abord, nous définissons une fonction
y
qui prend un argument de chaîne, le répètea-2
fois (oùa
est la première entrée de ligne de commande) et encapsule le résultat#
.Ensuite, nous appliquons cette fonction deux fois - une fois normalement, puis à nouveau avec map - pour obtenir le carré sous forme de liste de chaînes:
Pour l'entrée de
4
,(y s)
résulte en"# #"
ety M (y s)
en["####"; "# #"; "# #"; "####"]
. Cette dernière valeur est ensuite imprimée, le-n
drapeau entraînant sa séparation par des sauts de ligne.Astuces de golf
Pour passer de la version non golfée à la version golfée:
Y
est un opérateur, ce qui signifie que nous pouvons l'utiliser dans une expression. Au lieu d'êtreY...
suivi(ys)
, nous pouvons simplement le faire(Y...s)
.y
; donc çayM(Y_Xa-2WR'#s)
ne marchera pas. Solution: permutez les opérandes de l'M
opérateur ap. Tant que l'un d'eux est une fonction et l'autre est un type itérable, peu importe l'ordre dans lequel ils entrent.la source
Raquette 113 octets
Non golfé:
Essai:
Sortie:
la source
SpecBAS - 57 octets
?
est un raccourci pourPRINT
,#13
est un retour chariot qui peut être cloué à la fin d'une chaîne sans avoir besoin+
de se joindre à eux.L'apostrophe déplace le curseur d'impression d'une ligne vers le bas.
la source
Coincé,
2927 octetsC'est sacrément long pour une langue de "golf", mais j'ai oublié comment ça marche: P
Explication:
la source
C #,
154152 octetsGolfé:
Non golfé:
EDIT1: optimisation de la plage de boucle.
la source
Lithp , 117 octets
Ligne divisée en deux pour plus de lisibilité:
Exemple d'utilisation:
la source