Écrivez un programme ou une fonction qui prend un entier positif N, et imprime ou renvoie une chaîne d'art ASCII N × N dont la moitié supérieure est un demi-cercle fait de (
's et dont la moitié inférieure est un triangle pointant vers le bas fait de V
' s, avec espaces utilisés comme rembourrage.
En d'autres termes, faites un cornet de crème glacée ASCII: (sortie pour N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Exemples
Voici les sorties pour N = 1 à 5. Notez que pour N impair, le triangle doit toujours être la moitié la plus grande.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
Et voici une implémentation de référence Python 3 non golfée:
N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
for x in range(N):
if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
ic[y][x] = '('
for y in range(N//2, N):
for x in range(y - N//2, N - (y - N//2)):
ic[y][x] = 'V'
for line in ic:
print(''.join(line))
Détails
- Prenez l'entrée de stdin, de la ligne de commande ou comme argument de fonction. Sortie vers stdout ou similaire, ou vous pouvez renvoyer la chaîne si vous écrivez une fonction.
- La partie conique doit correspondre exactement à l'implémentation de référence pour tous les N.
- La portion de crème glacée n'a pas besoin de correspondre exactement à la mise en œuvre de référence tant qu'elle est clairement sous la forme d'un demi-cercle pour tous les N. .)
- Il ne doit pas y avoir d'espaces de début inutiles mais il peut y avoir des espaces de fin superflus.
- La sortie peut éventuellement contenir une nouvelle ligne de fin.
- Vous pouvez éventuellement utiliser les 3 autres distincts ASCII imprimables caractères à la place
(
,V
et l' espace.
Notation
La soumission la plus courte en octets l' emporte. Tiebreaker va à la soumission la plus ancienne.
Réponses:
CJam, 46 octets
Essayez-le en ligne.
Je crois que cela imite actuellement exactement les spécifications d'origine, ce qui était nécessaire lorsque j'ai commencé à produire cette réponse. Il peut être possible d'économiser quelques octets en rendant les calculs moins précis par rapport à la spécification d'origine, mais jusqu'à ce que je vois un moyen d'enregistrer plus d'un ou deux octets, je le laisserai tel quel.
Explication
la source
2
'et1
' au lieu de(
'etV
'.inca2
129123121111107Cela utilise principalement les formules de l'exemple python, mais en utilisant des jot-dots et des iotas au lieu de la double boucle. La
i
fonction effectue le test circulaire pour laj
fonction qui invoque jot-dot sur elle. Et lak
fonction effectue le test du triangle pour lal
fonction. Lac
fonction catenates les résultats dej
etl
et remodèle à N × N.edit: -6 combine 2 cartes en 1.
edit: -2 supprime les ravels inutiles.
edit: meilleur dactylographie.
edit: -10 applique une expression répétée dans le tableau.
edit: -4 factorise l'expression répétée en fonction.
edit: commentaire ligne par ligne.
Plus en détail, le point d'entrée est la
c
fonction qui prend un argument nommé implicitementy
.La
j
fonction reçoit la même valeur d'entrée que sony
paramètre.Le point-jot fait ici la double boucle. Il appelle la
i
fonction avec chaque combinaison d'éléments des tableaux gauche et droit (0..n / 2 et 0..n). Ainsi, lai
fonction reçoit commex
l' index y de la table, et elle reçoit commey
l' index x . Les noms ont un peu reculé ici :).d'où
q
vientretour à
i
Le sol ne devrait pas être nécessaire. Mais apparemment, il y a un bug dans l'interpréteur.
La
l
fonction fonctionne de manière similaire à laj
fonction, en utilisant un point-jot.La
k
fonction donne un booléen mis à l'échelle par 2 afin que les valeurs puissent être distinguées des valeurs de la crème glacée plus tard, dans la cartographie.En action (passe
tr
à travers pour supprimer les caractères de tabulation qui sont l'invite du REPL):la source
Python 2,
193192N'utilise pas de chaînes, uniquement des mathématiques
s(L,U)
renvoie un certain nombre de la forme "U
-digits avec lesL
zéros les plus à droite et les autres"f(N,m)
renvoie un nombre à N chiffres avec la section intérieure de2
et une bordure large de m de1
chaque côtég(N,m)
fait la même chose, mais en utilisant7
pour la 'couleur' de la section intérieure car elle correspond plus étroitement à la texture du côneProduction
la source
Perl 6, 175
Mise en œuvre assez simple sans beaucoup de golf, juste une suppression des espaces blancs / ponctuation:
la source