Je veux une couverture qui ressemble à ça. Chaque bande va plus, moins, plus, moins. Pouvez-vous l'imprimer?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Les espaces de fin à la fin de chaque ligne et les retours à la ligne de fin sont acceptables.
N'oubliez pas qu'il s'agit de code-golf , donc le code avec le moins d'octets gagne.
Classements
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
la source
Réponses:
Python 2, 84 octets
Merci à Sp3000 pour 6 octets de transformer les opérations arithmétiques en bits.
la source
i+~j>>2&1^i+j>>1&2^i&4
, peut-être?Pyth, 36 octets
Essayez-le en ligne: Démonstration
Explication:
On peut déterminer le symbole en vérifiant 3 conditions:
Si nous interprétons
[A,B,C]
comme un nombre binaire, nous obtenons le mappage suivant:Nous pouvons également interpréter
[A,B,C]
comme un nombre décimal et effectuer une recherche indexée modulaire dans la chaîne. Cela ne fait aucune différence car10 mod 8 = 2
.Passons maintenant au code:
V24
itèreN
(row-idx) sur[0, 1, ..., 23]
.sm...48
mappe les nombresd
(column-idx) en[0, 1, ..., 47]
caractères et imprime la chaîne combinée.++BNd
génère la liste[N, N+d]
,+...t-Nd
ajouteN-d-1
. Nous avons donc la liste[N, N+d, N-d-1]
.m<3%k8
vérifie pour chaque nombre calculék
, si3 < k % 8
, donc cela donne la liste avec les conditions[A, B, C]
.i...T
convertit cela en un nombre décimal, puis@" \// \/\\"
effectue la recherche dans la chaîne.Plus ou moins le même code en Python2: 98 octets :
la source
Perl, 209 + 17 = 226 octets
Courez avec
-mList::Util=max -M5.010
(le deuxième drapeau est gratuit). Ce n'est pas gagner des concours de comptage d'octets, mais voici ma solution.Lisible:
Génère de manière procédurale chaque segment, puis répète le motif 6 fois, puis génère le résultat total 3 fois.
la source
Python 3,
174172138 138 octetsJ'ai trouvé le plus petit motif que je pouvais trouver dans la couverture (le motif "sous" et "sur"), l'ai collé dans une liste et ajouté une certaine compréhension de la liste et une manipulation de chaîne pour tout décompresser. Substitue toutes les barres obliques inversées échappées par "b" et les remplace plus tard pour économiser quelques octets.
Merci à Oliver d'avoir joué au golf sur 2 octets!
Pris 34 octets en changeant le modèle - le modèle entier pour la couverture est maintenant dans une seule liste, donc une seule boucle est nécessaire pour dérouler le modèle.
la source
0*6
etu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 octetsPas joli et pas intelligent. Définit simplement les variables pour les groupes de chaînes les plus utilisés, puis les combine et imprime le résultat 3 fois. Peut essayer de jouer au golf plus tard si je ne trouve pas une meilleure approche.
1 octet enregistré en utilisant l'entrée brute sur une affectation. Merci @ nedla2004
-2 en assignant quelques variables mais toujours pas un concurrent sérieux
la source
*6
chaque élément de tuple. Des idées?exec r"print'\n'.join(d);"*3
.SOML , 106 octets
une version non concurrente utilisant une fonction que je n'ai que récemment ajoutée: (
836766 octets)explication:
la source
Rubis, 75 octets
Mieux jouer au golf, en utilisant une seule recherche de chaîne de 8 octets indexée par j & 4 en plus des autres paramètres, plutôt qu'une chaîne de 4 octets modifiable.
Rubis, 81 octets
Imprime les rayures diagonales caractère par caractère. Le caractère correct est sélectionné dans une chaîne de 4 caractères en fonction de la présence / absence de chaque brin. Le caractère de chevauchement varie en fonction du brin qui se trouve en haut.
Commenté
la source
Perl,
132131113 octetsNon golfé:
la source
05AB1E , 37 octets
Utilise l' encodage CP-1252 .
Essayez-le en ligne!
Explication
Utilise l'astuce mod-8 expliquée de manière experte dans la réponse pyth de Jakube .
la source
Python,
245236234233230216212198195 195 octetsOK, plus longue que ma dernière (et toute autre) réponse, mais je serais intéressé à recevoir des commentaires sur l'approche.
Éditer
-9 en raison de @ nedla2004 étant plus sur le ballon que moi
-2 en prenant le lambda en dehors de la boucle et en perdant ainsi 2 espaces en retrait
-1 en utilisant
in' '*3
au lieu dein 0,1,2
puisque je n'utilise pas deh
toute façon. c'est juste un compteur.-3 Pourquoi, pourquoi, pourquoi ai-je laissé un saut de ligne et 2 retraits entre le second pour et l'impression ??? Il est tard. Reviendra demain.
-14 Peut réellement perdre complètement le lambda et inclure simplement le décodeur de base 3 directement après l'instruction d'impression. Ça a l'air malpropre mais après tout, c'est du golf de code :)
-4 Aucun point définissant une variable pour la liste entière. Utilisez-le directement dans la seconde boucle for.
-14 et aucun point en utilisant la boucle externe. Multipliez simplement le tuple entier par 3 (volé sans vergogne à @ nedla2004 pour obtenir moins de 200 :))
-3 Sauvegardé 3 en faisant \ = 0, / = 1 et espace = 2. Cela rend la liste entière plus courte car trois des nombres de base 3 ont maintenant des 0 en tête
Comment ça marche (et ça marche)
Étant donné que seuls 3 caractères sont utilisés:
l est une liste des 8 motifs répétitifs en tant qu'équivalents entiers de leur représentation en base 3 en supposant que "" = 0, "\" = 1 et "/" = 2
Le lambdaLe premier code après l'instruction print est un convertisseur léger d'un entier en une chaîne de base 3La première boucle fait 3 boucles et la seconde imprime chaque ligne avec les 3 caractères de base multipliés par 6 et remplacés par /, \ ou espace.
Je suis sûr que je pourrais utiliser un regex au lieu du replace imbriqué () mais je suis trop fatigué pour essayer maintenant. Ce n'était qu'une expérience et plus longue que mon effort Python précédent, mais j'ai posté juste pour tout commentaire sur l'approche (et aussi parce que je n'ai jamais travaillé en base 3 auparavant et j'ai bien aimé travailler sur le convertisseur).
la source
Rubis, 135 octets
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
Le tableau de nombres correspond à chaque composant de chaque ligne, traduit en base 3:
= 0,
\
= 1,/
= 2, puis converti en décimal. Les appels à gsub () sont cependant trop importants.Et, tout à l'heure, j'ai vu la réponse de @ ElPedro. :-( Juste une coïncidence.
la source
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. Vous pouvez également enregistrer un octet en divisant tous les nombres du tableau par 4 et en les remplaçante
par(e*4)
.tr("021"," /\\")
.PHP
157126octetsPrendre les modifications des listes @Titus dans les commentaires ... Je suis ennuyé d'avoir raté le point 1 que j'aurais dû attraper, mais je ne savais pas que strtr () existait, c'est là que la plupart des économies viennent - beau travail Titus!
NOUVEAU:
VIEUX:
Parce que toutes les barres obliques inverses doivent s'échapper, cela économise beaucoup d'espace pour les empaqueter en tant que caractères différents et les remplacer pour la sortie, puis une fois que j'appelle str_replace (), il est logique de l'utiliser aussi souvent que possible.
la source
-r
. Suivez ces cinq étapes pour enregistrer 30 octets supplémentaires : ideone.com/wt4HGB 1) utilisez$a[...]
directement commestr_replace
paramètre au lieu de l'attribuer. 2)strtr
au lieu destr_replace
. 3) Utilisez des chiffres au lieu de lettres. 4) Inclure l'affectation dans l'écho. 5) Ne pas attribuer$a
, utilisez-le.Python 2,
169161165160155154152Basé sur la réponse de @ ElPedro, avec de petites améliorations. Pour voir l'explication, voir leur réponse . Il s'agit de Python 2, même s'il semble y avoir des parenthèses près du
print
.8 octets enregistrés en utilisant une variable pourCela ne fonctionne que pour les chaînes, et l'utilisation d'une fonction serait plus longue.replace
.J'ai sauvé 4 octets en voyant que @ElPedro s'est rendu compte qu'ils n'avaient pas besoin de l, et moi non plus.
Enregistré 5 octets en ne retournant pas le
range(8)
, et au lieu d'utiliser+=
pour ajouter à r, en ajoutant r à la fin du nouveau chiffre. Essayez-le en utilisant repl.itEnregistré 5 octets en volant la nouvelle liste de valeurs de @ ElPedro.
1 octet enregistré en supprimant l'espace entre le
in
et(
.Enregistré 2 octets en supprimant la variable a.
la source
in
et(
le premier poura=3**i
. Utilisez simplementfor i in range(8):r=
x / 3 ** i% 3+r
pour enregistrer un couple. la priorité de l'opérateur s'occupe du reste :)PHP, 184 octets
Production:
la source
Lot, 152 octets
Le traitement des chaînes dans Batch est nul, c'est donc probablement la meilleure approche. L'appel-et-fall-through est très légèrement plus court qu'une
for
boucle imbriquée . Au moins, je n'ai pas à citer mes barres obliques inverses!la source
APL, 110 octets
Je suis nouveau sur APL, c'est donc une solution simpliste.
Voici mon approche: notez qu'après les 8 premières lignes de la couverture, le motif se répète. Par conséquent, je n'ai qu'à définir les 8 premières lignes, puis je peux les répéter 3 fois. Notez également que chaque ligne se répète après les 8 premiers caractères. Par conséquent, pour définir une seule ligne, il suffit de définir les 8 premiers caractères, puis de les répéter 8 fois.
Voici une solution non golfée:
J'ai noté ci-dessus que D est l'inverse de B, E est l'inverse de A et H est l'inverse de F. Dans mon code actuel, j'en profite en ne définissant pas D, F ou H et en utilisant la fonction inverse
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
la source
Rubis, 132 octets
réponse très simple.
la source
Haskell, 96 octets
la source