Introduction:
Lorsque nous pensons aux coccinelles, nous pensons généralement à un insecte rouge ou orange foncé avec des taches noires. Bien que cela ne soit pas nécessairement vrai, car il existe également des coccinelles tachetées de rouge / orange ou des coccinelles sans taches , nous imaginons principalement des coccinelles quelque chose comme cette coccinelle asiatique:
Une autre chose à noter est que les taches sur les coccinelles sont presque toujours symétriques. Et c'est là que ce défi entre en jeu.
Défi:
Étant donné un entier n
( >= 0
), sortez une ou plusieurs fois la coccinelle ASCII-art suivante, avec des taches symétriques réparties également entre les deux côtés, ainsi que les deux coccinelles ou plus.
Voici la disposition par défaut des coccinelles:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Si n=0
, nous sortons la coccinelle ci-dessus telle quelle.
Quand n
est plus grand que zéro, nous remplissons soit les espaces du bug ASCII-art avec des minuscules o
, soit nous remplaçons ceux |
du centre par des majuscules O
. Le but est d'apporter des n
modifications aux coccinelles «vides», tout en produisant une sortie symétrique (par coccinelle), et en produisant le moins de coccinelles possible.
Les sorties valides pour n=1
sont donc:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Mais cela serait invalide:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Les sorties valides pour n=2
sont:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
La première n
qui n'est plus possible de s'intégrer dans une seule coccinelle est n=24
. Dans ce cas, vous devrez le diviser aussi uniformément que possible en deux coccinelles (vous pouvez choisir de les afficher côte à côte ou sous l'une l'autre - avec éventuellement un espace ou une nouvelle ligne entre elles). Par exemple:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
OU:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Règles du défi:
n
sera de l'ordre de0-1000
.- Vous pouvez choisir de sortir vers STDOUT, de retourner sous forme de chaîne ou de tableau / liste de caractères 2D, etc. Votre appel.
- Les nouvelles lignes ou les espaces blancs inutiles ne sont pas autorisés. Les espaces blancs à la fin et une seule nouvelle ligne à la fin sont autorisés.
- Comme mentionné ci-dessus, lorsque deux ou plusieurs coccinelles sont nécessaires, vous pouvez choisir de les produire côte à côte ou en dessous l'une de l'autre (ou un mélange des deux ..)
- Lorsque deux ou plusieurs coccinelles sont imprimées côte à côte, un seul espace facultatif entre les deux est autorisé. Lorsque deux ou plusieurs coccinelles sont imprimées l'une sur l'autre, une seule nouvelle ligne facultative entre les deux est autorisée.
- Vous pouvez choisir la disposition des coccinelles à n'importe quelle étape de la séquence, à condition qu'elles soient symétriques et égales à l'entrée
n
. - Puisque le but est d'avoir des
n
changements ET aussi peu de coccinelles que possible, vous commencerez à utiliser plus d'une coccinelle au-dessusn=23
. La disposition de ces coccinelles ne doit pas nécessairement être la même. En fait, ce n'est même pas possible pour certaines entrées, commen=25
oun=50
pour n'en nommer que deux. - De plus, il n'est parfois pas possible de répartir également les points entre deux coccinelles ou plus. Dans ce cas, vous devrez les diviser aussi uniformément que possible, avec au plus une différence de 1 entre eux.
Donc n=50
, en gardant à l'esprit les deux dernières règles, ce serait une sortie possible valide (où le premier bogue a 16 points et les deux autres 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
o
et à laO
place. J'ai un peu changé le libellé.n=50
exemple, je pense que vous voulez dire que le premier bogue a 16 taches et les deux autres en ont 17.Réponses:
Fusain ,
8481 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Saisissez le nombre total de spots.
Calculez le nombre de coccinelles nécessaires.
Faites une boucle sur chaque coccinelle.
Calculez le nombre de taches à mettre sur cette coccinelle.
Imprimez la tête et l'aile droite de la coccinelle.
S'il y a plus de 21 points, imprimez deux points, sinon imprimez le verso.
Si le nombre de taches est impair, imprimez une autre tache, sinon imprimez le reste du dos.
Divisez le nombre de spots par deux et répartissez-les sur trois rangées de 3, 4 et 3 spots.
Passez au début de la prochaine coccinelle.
Réfléchissez la toile vers la gauche, en gardant le dos.
la source
Python 2 ,
252249238212211213209 octetsEssayez-le en ligne!
la source
.replace('A','|O'[b%2])
et utiliser à lac=" _V_\n /(@I@)\ \n /361"+'|O'[b%2]+"163\ \n|4087B7804|\n \\529B925/\n ''-!-''"
place?[' o','|O'][i>9]
en' |oO'[i>9::2]
et en utilisant|
au lieu de logique ou. Passant égalementfor i in range(11)
à uneexec
instruction enregistré 4 octets.for
boucle, supprimant également une variable inutile.JavaScript (ES6),
183186 octetsUtilise la même formule que la réponse de TFeld pour partager les taches entre les coccinelles.
Démo
Afficher l'extrait de code
la source
Befunge,
292279 octetsEssayez-le en ligne!
Explication
L'art ASCII pour la coccinelle est codé dans une seule chaîne Befunge, décalée de 15, pour permettre aux 15 premiers caractères imprimables d'être réservés à des fins spéciales. Les deux premiers de ces caractères spéciaux représentent la nouvelle ligne et le
|
caractère, qui, autrement, ne seraient pas imprimables. Le troisième n'est pas utilisé, car c'est un"
, qui ne peut pas être utilisé dans une chaîne. Les deux suivants représentent les grandes taches au centre. Et les dix autres sont pour les taches sur les ailes.Ces caractères spéciaux sont traduits dans leur forme finale via une table de recherche, qui est écrite sur la première partie de la première ligne.
Pour le rendre plus facile à expliquer, voici le code avec les différents composants mis en évidence:
Nous commençons par initialiser la nouvelle ligne et le
|
caractère dans la table de recherche, car ils sont constants.Ensuite, nous lisons le nombre de taches de stdin et calculons le nombre de coccinelles nécessaires.
Nous pouvons ensuite démarrer la boucle externe pour l'ensemble des bogues, en calculant le nombre de taches pour la prochaine coccinelle à rendre.
Pour chaque coccinelle, nous calculons si le grand point central doit être affiché (si
spots%2 == 1
), et écrivons la valeur appropriée dans la table de recherche.De même, nous calculons si l'autre paire de grands spots doit être affichée (si
spots/2 > 10
), mettant à jour à nouveau la table de recherche. Nous calculons également les taches restantes requises sur chaque aile.La dernière partie de l'initialisation de la table de recherche est une boucle qui calcule quels petits points doivent être affichés. Essentiellement, l'algorithme est: si
(spotnum*spotcount+4)%10 > ((spotnum+1)*spotcount+4)%10
, alors le spot doit être affiché.Ensuite, nous poussons la représentation de chaîne codée de la coccinelle sur la pile. Il s'agit essentiellement d'une simple chaîne, mais elle est devenue un peu compliquée alors que j'essayais de la presser dans les lacunes du code afin que la source forme un rectangle.
À ce stade, nous sommes prêts à commencer la boucle de sortie, en traitant les caractères un par un, en convertissant les cas spéciaux (les taches, les sauts de ligne, etc.) via la table de recherche précédemment construite.
Enfin, nous vérifions si nous avons affiché toutes les coccinelles requises, sinon revenons au début de la boucle externe.
la source
Rubis ,
203193190 octetsEssayez-le en ligne!
la source
{|m|m.
peut être remplacé par{$&.
;b=(n-1)/23+1
peut être remplacé parb=1+~-n/23
; etx=[z=d>21,d%2>0,z]⏎s.gsub!(?x){x.pop ? ?O:?|}
peut être remplacé parx=[d%2,d<=>21]*2⏎s.gsub!(?x){"|O|"[x.pop]}
.%q{XY}
au lieu de'X'+"Y"
sur les huit premières lignes et quelques autres en faisant à lad=n>0?n/(b=1+~-n/23):b=0
place den>0?d=n/(b=(n-1)/23+1):d=b=0
.