Le but de ce défi est de produire une version ASCII de la couverture de ce superbe album du groupe de rock Pink Floyd.
Les jonctions de briques sont composées de caractères _
et |
. Les briques ont des caractères de largeur 7 et de hauteur 2, à l'exclusion des jonctions. Donc, l'unité de base, y compris les jonctions, est:
_________
| |
| |
_________
Chaque rangée de briques est décalée d'une demi-largeur de brique (4 caractères) par rapport à la rangée précédente:
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
Le mur est paramétré comme suit. Tous les paramètres sont mesurés en caractères, jonctions comprises:
- Décalage horizontal de la première rangée,
F
. C'est la distance entre la marge gauche et la première jonction verticale de la rangée la plus haute. (Rappelez-vous également le décalage relatif de demi-brique entre les lignes). Ses valeurs possibles sont0
,1
, ...,7
. - Totale largeur ,
W
. Cela inclut les jonctions. Sa valeur est un entier positif. - Totale hauteur ,
H
. Cela inclut les jonctions. Sa valeur est un entier positif.
Le sommet du mur coïncide toujours avec le haut d'une rangée. Le fond peut être déchiqueté (si la hauteur totale n’est pas un multiple de 3
). Par exemple, voici la sortie pour 6
, 44
, 11
:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
et une explication visuelle des paramètres:
F=6
......
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
H=11 . | | | | | |
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
............................................
W=44
Règles supplémentaires
Vous pouvez fournir un programme ou une fonction.
Le format d'entrée est flexible comme d'habitude. La sortie peut être via STDOUT ou un argument renvoyé par une fonction. Dans ce cas, il peut s'agir d'une chaîne avec des nouvelles lignes ou d'un tableau de chaînes.
Les espaces de fin ou les nouvelles lignes sont autorisés.
Le code le plus court en octets gagne.
Cas de test
Les entrées sont dans l'ordre indiqué ci-dessus, à savoir: décalage horizontal de la première ligne, largeur totale, hauteur totale.
6, 44, 11:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
2, 20, 10:
____________________
| | |
| | |
____________________
| |
| |
____________________
| | |
| | |
____________________
1, 1, 1:
_
1, 2, 3:
__
|
|
3, 80, 21:
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
Réponses:
Pyth,
43 à27 octetsJ'ai besoin de jouer beaucoup au golf ... le score est trop honteux.
Essayez-le déjà en ligne.
Format d'entrée
Format de sortie
Explication
la source
C,
86858382 octets3 octets sauvés grâce à Lynn.
1 octet sauvegardé grâce à charlie.
la source
for(i=0;++i<w*h;)
ou sii
est fait local (param astuce):for(;++i<w*h;)
i;
pari=1;
et enregistrez un octet supplémentaire dans la boucle for.for(i=1;i<w*h;++i)
->for(i=0;++i<w*h;)
enregistre 1C, 92 octets
Invoquer comme
b(F, W, H)
.la source
Perl, 63 octets
En comptant le shebang comme 2, l'entrée est prise à partir de stdin, espace séparé.
Exemple d'utilisation
la source
Haskell, 83 octets
Ceci définit une fonction infixe ternaire
!
qui renvoie une liste de chaînes. Exemple d'utilisation:Comment ça fonctionne:
la source
JavaScript (ES6),
9695 octetsExplanation: Crée une chaîne composée du
|
motif répétitif de 7 espaces ou plus ou de_
s répétés , mais au moins suffisamment longue pour pouvoir extraire lesw
caractères requis pour chaque ligne. Les trois premières lignes commencent à la positionf^7
, puis les trois lignes suivantes à la positionf^3
. Pour ce faire, jepermute le bit 2 deutilisant le bit 2 opposé sur les deux dernières lignes de chaque bloc de 6 pour une économie de 1. octet.f
toutes les trois lignes enla source
MATL,
423633 octetsFormat d'entrée est:
nCols
,offset
,nRows
Essayez-le en ligne
L’approche consiste ici à créer un "modèle" dans lequel nous indexons en utilisant les index de ligne (
[1 2 ... nRows]
) et les index de colonne décalés de la première entrée ([1 2 ... nCols] - shift
). Grâce à l'indexation modulaire de MATL, il en résulte automatiquement une sortie en mosaïque. En passant, pour économiser de l’espace, techniquement, je travaille avec une version transposée du modèle, puis je prends une transpose (!
) à la fin.Le modèle est le suivant:
la source
Python 2,
9388 octetsLe deuxième niveau d'indentation est un ongletSauvegarde de quelques octets grâce à Leaky Nun et à quelques modifications propres, également le décalage correct:code précédent:
Même longueur que lambda sans nom:
la source
F,W,H=input()
print
h/3%2*4
ouh%6/3*4
au lieu de4*(h%6>3)
print
déclaration sur la même ligne que lafor
déclaration"| "
est plus court que("|"+7*" ")
si je compte correctementQBasic,
121109 octets(Testé sur QB64)
Merci à @DLosc pour avoir joué mon
IF
énoncé avec un équivalent mathématique. Cela valait 12 octets.Méthode générale:
Boucle à travers chaque cellule une à la fois et de déterminer si elle doit être
_
,ou en
|
fonction de son emplacement.MOD
les instructions et la logique booléenne sont utilisées pour déterminer les limites des briques et leur degré d'échelonnement.Code:
Note d'utilisation:
QBasic s'attend à ce que les entrées soient des nombres séparés par des virgules.
la source
IF
/THEN
ajoute encore plus de parenthèses mais enregistre 12 octets:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
Java,
149,147,146, 143 octetsGolfé:
Ungolfed:
la source
> 0
ce qui pourrait sauver deux caractères. Et bien sûr, vous pouvez combiner les déclarations àint y=0,x
.int
avantx
et utiliserint y=0,x
dans la première boucle for au lieu de sauvegarder 2 octets. En outre, vous pouvez actuellement changery%3==0
poury%3<1
. (Ce n'est pas possible pour...%8==0
à...&8<1
bien, car votre opération pourrait renvoyer un nombre négatif.)int...o
comme paramètre et modifierw
too[1]
,h
too[2]
eto
too[0]
-3 octets.Rubis,
7266 octetsMerci @Value Ink pour 6 octets!
Multiplication et découpage de chaînes simples.
Fonctionne dans Ruby 2.3.0 (la version 2.1 d'Ideone renvoyait une erreur de syntaxe).
la source
i%6/4*4
au lieu de(i%6>3?4:0)
et utilisez?_
au lieu de'_'
,?|
au lieu de'|'
.?
, et la partie "maths" est vraiment impressionnante!((' '*7+?|)*w)[f^7^i%6&4,w]
vous sauve deux octets.Julia:
150128116108107 octetscourir avec des arguments:
julia -e 'o=2;h=18;w=40;include("codegolf.jl")'
Si vous sentez que téléphoner depuis bash est une triche et que vous voulez une fonction dans l'interpréteur, la version de la fonction est de 117 octets :)
démo
(Merci, @ glen-o pour le conseil supplémentaire permettant d'économiser des octets!)
la source
h
etw
en briques, pas en caractèresrepmat([32],6,8)
), puis en renommant repmat pour supprimer un autre caractère (g=repmat;b=g([32],6,8)
et plus tardb=g(b,h,w)[1:h,o+1:o+w+1]
). Puis remplacezreinterpret
parmap
. À mon compte, vous économiserez 9 octets entre ces modifications.JavaScript,
172168165157147 147142137 octetsla source
s.repeat(w)
au lieu deArray(w).fill(s).join``
?Dyalog APL, 29 octets
↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'
essais:
6 44 11
,2 20 10
,1 1 1
,1 2 3
,3 80 21
⎕
est évalué l'entrée; comme l'expression exécute de droite à gauche, il demandeF
,W
etH
dans cet ordre¯8↑'|'
est' |'
⎕⌽
est une rotation, elle coupe les caractères F de l'avant et les met à la fin de la chaînel'autre
⌽
moyen inverse'_',2⍴⊂
crée un 3-tuple de '_' suivi de deux copies séparées de la chaîne jusqu'à présenta,4⌽¨a←
ajouter les 4 rotations de tout jusqu'à présent, nous nous retrouvons avec un 6 tuple⎕⍴¨
remodeler chaque élément à la largeur⎕⍴
remodeler à la hauteur↑
mélanger le vecteur de vecteurs dans une matricela source
En fait ,
444340 octetsC'est un portage réel de l'algorithme dans la réponse JS de Neil . Les suggestions de golf sont les bienvenues. Essayez-le en ligne!
Ungolfing:
la source
PowerShell ,
10188 octetsEssayez-le en ligne!
la source
Octave
8076 octetsà partir du terminal:
octave --eval "o=2;h=18;w=44; codegolf"
(alternativement, si vous pensez que l'appel du terminal est en train de tricher: p alors une implémentation de fonction anonyme prend 86 octets :)
Appeler
f(2,18,44)
à l'interprète d'octave.la source
Bash + Sed,
411395381370 octets:Eh bien, voici ma toute première réponse dans Bash, ou n'importe quel langage de script shell. C'est aussi de loin la réponse la plus longue ici. Prend une séquence d'arguments de ligne de commande séparés par des espaces dans le format
Offset Width Height
. Cela peut probablement être beaucoup plus court qu’il ne l’est actuellement, alors tous les trucs et astuces pour jouer au golf plus sont appréciés.la source
Delphi / Object Pascal,
305,302, 292 octetsProgramme console complet qui lit 3 paramètres.
non-golfé
Malheureusement, Delphi n’a pas d’opérateur ternaire et c’est un langage assez prolixe.
cas de test
Éditer: Pourrait supprimer 3 octets en utilisant octet comme type pour toutes les variables.
Edit 2: Et les applications de console n'ont pas besoin de la déclaration de programme, -10
la source