Code-Bowling
Brunswick Bowling vous a embauché pour créer un programme simple permettant d'afficher le texte Code Bowling
sur ses moniteurs. Cette entreprise vaut un joli penny et vous sentez que vous pouvez les arnaquer pour un peu d'argent.
La description de poste indique clairement qu'ils paient sur une base de pointage et vous êtes persuadé que vous pouvez manipuler leur système de pointage à votre avantage et obtenir le plus gros chèque de paie possible de ces types. Pour ce faire, vous devrez insérer le plus de code possible dans votre programme / fonction, même si son système de notation est conçu pour vous empêcher de le faire.
Sortez vos tirelires, codons!
Défi
Le défi consiste simplement à sortir le texte Code Bowling
, exactement comme il est écrit ici, avec le score le plus élevé possible. (Voir la section: Système de notation ci-dessous)
Les nouvelles lignes (début et fin de ligne) sont acceptables.
Votre code peut être un programme entier ou juste une fonction exécutable.
Règles
Obligatoire: Ce défi utilise Code-Bowling: Common Rules, Revision 1.0.0 ; Voir Meta pour plus de détails.
Caractère: Ratio d'octets
Dans Code-Bowling, un nombre de caractères est préférable à un nombre d'octets. La raison en est évidente: les caractères unicode multi-octets (par exemple) peuvent être utilisés à la place des caractères unicode à un octet pour donner un nombre d'octets plus élevé et permettre au bowling de savoir qui renomme le plus de variables avec des caractères unicode à octets élevés que qui crée le plus stratégiquement un code complexe significatif.Noms de variable / fonction / objet
Tous les noms de variable (ou pointeurs d'objet, noms de fonction, etc.) doivent comporter 1 caractère. Le seul moment acceptable pour utiliser des noms de variables à 2 caractères est après utilisation de toutes les variables possibles à 1 caractère. Le seul moment acceptable pour utiliser des noms de variables à 3 caractères est une fois que toutes les variables à 2 caractères possibles ont été utilisées. Etc.Code non utilisé
Tout le code doit être utilisé. Cela signifie que le programme ne doit pas toujours terminer correctement la tâche si un caractère individuel (ou un ou plusieurs jeux de caractères) est / sont supprimés. Bien entendu, un sous-ensemble du programme ne devrait pas être en mesure de mener à bien la tâche sans le reste du programme.Commentaires Les
commentaires ne sont pas autorisés pour le décompte des caractères, à moins que ceux-ci ne soient utilisés par votre programme / fonction.
Système de notation:
Défi Pangram:
Un pangramme est une phrase qui utilise chaque lettre au moins une fois. (Le renard brun rapide saute par-dessus le chien paresseux).
Ce type de défi a un système de score conçu dans lequel un pangram parfait atteindrait le score maximum théorique (bien que vous ne soyez pas obligé d'utiliser chaque personnage au moins une fois.) De plus, l'utilisation de tout caractère plus d'une fois entraînera une pénalité. Ce défi ne concerne pas uniquement les caractères alphabétiques.
Mesure métrique:
- Chaque personnage utilisé augmente votre score de 1.
- L'utilisation répétée de tout caractère alphanumérique (az, AZ, 0-9) entraînera une déduction de 3 points par répétition (la première utilisation ne donne pas lieu à une déduction).
- L'utilisation répétée de la ponctuation de base
([!?.-,":';])
- y compris les crochets - donnera lieu à une déduction de 2 points par répétition.- L'utilisation répétée d'autres caractères ASCII
{`~@#$%^&*_+=|\/><}
- y compris les accolades - entraînera une déduction de 4 points par répétition.- L'utilisation d'espaces, de tabulations et de nouvelles lignes entraîne une déduction de 1 point par utilisation. C'est-à-dire qu'ils ne comptent pas dans le total des personnages.
- Les caractères non mentionnés ci-dessus (caractères exotiques) entraînent une déduction de 1 point par utilisation. C'est-à-dire qu'ils ne comptent pas dans le total des personnages.
Outil de notation:
Un widget de scoring automatisé a été créé et peut être trouvé ici .
Ceci est une variante code-bowling . Le programme avec le score le plus élevé gagne! (Puisqu'il y a un score maximum de 94
, celui qui l'atteint le premier (s'il peut être atteint) sera marqué comme la réponse acceptée, même si les autres sont libres de continuer à répondre pour le plaisir)
la source
Réponses:
Glypho , 94
Le fichier source est codé en CP437 .
Essayez-le en ligne!
Explication
Glypho est très utile pour des défis comme celui-ci, car il ne se soucie pas du tout des personnages utilisés. Au lieu de cela, il regarde chaque bloc de 4 caractères et la commande utilisée est déterminée par le motif que ces quatre caractères créent:
Cela signifie que nous pouvons simplement résoudre le problème et insérer ensuite des caractères uniques dans chaque quartet avec les caractères imprimables et tous les caractères répétés avec certains des caractères "exotiques", qui sont ignorés par la notation. Glypho est suffisamment détaillé pour qu'une solution manuscrite normale contienne suffisamment de caractères uniques pour contenir les 94 caractères imprimables qu'il contient. En fait, j’ai fini par jouer jusqu’à atteindre exactement 94, juste pour pouvoir utiliser des caractères exotiques uniques pour ceux qui se répètent (espérons-le, pour rendre plus difficile la réduction du programme).
La forme abrégée du programme ci-dessus est la suivante:
Où chaque ligne imprime un des caractères.
J'ai utilisé ce script Retina pour le convertir en Glypho
0123
. Ensuite, je viens de remplir les caractères à la place des chiffres.En théorie, il serait peut-être possible de réduire cela davantage, si quelqu'un réussissait à jouer avec le programme de raccourci, puis à recombiner les personnages de manière à ce que les bons modèles apparaissent, mais je ne suis pas sûr de savoir comment prouver ou d'infirmer que c'est possible. . Si quelqu'un parvient à former une solution valide à partir d'un sous-ensemble de mon programme, merci de me le faire savoir afin que je puisse supprimer la réponse jusqu'à ce qu'elle soit corrigée. Jusque-là, je dois supposer que cela est valide.
la source
94
c'est le score maximum. Tout le monde est libre de continuer à soumettre des réponses pour le plaisir .Python 3,
828788Merci à @JonathanAllan pour +1 point
Essayez-le en ligne!
Rien de spécial, juste trancher et sauter des caractères. La chaîne est inversée, vous ne pouvez donc pas supprimer les caractères et imprimer la chaîne d'origine.
la source
HIJKLMN...
) sauf pour chaque 8ème caractère bien sûr?> <> ,
9294Oui, je l'ai fait!
␑
est le caractère exotique\x11
avec la valeur décimale 17. Le programme se ferme avec une erreur après l’impression du résultat (c’est un dépassement de pile). Je devais gérer les miroirs et les commandes directionnelles que j’utilisais avec précaution, car je ne peux les utiliser qu’une seule fois.Essayez-le en ligne
Le programme de base:
Explication:
Poussez la chaîne
vCoUV␑3`h]Z_X >
(wraps d'exécution). Déplacer vers le bas. Inversez la pile et retirez lev
.Poussez
9
etc
(12). Multipliez pour obtenir108
(l
). Poussez7
. Appuyez surd
(13), soustrayez1
, divisez par2
pour obtenir6
. Mettezl
à (x, y) de (13,6), qui est en dessous de lae
. J'aurais pu le faire de manière plus courte, mais ceci est allongé, ce qui me permet de mettre plus de caractères ASCII.Montez dans une boucle. Poussez la longueur de la pile avec
l
. Si le nombre de caractères est supérieur à 14, créez une nouvelle pile avec les 10 meilleurs éléments, ajoutez 15, puis reflétez l'exécution, puis montez et sortez. Ceci est utilisé pour empêcher les espaces en trop et>
d'être imprimés à la fin, ainsi que pour transformer la chaîne d'aspect aléatoire en ce qui doit être imprimé. Continuer en boucle.Si l'une des lignes est plus courte (en supprimant un caractère), le programme ne fonctionnera plus, soit parce que les parties verticales du programme ne s'alignent plus, soit parce que la chaîne à imprimer n'est plus correcte. Tenter de supprimer un caractère situé devant chaque ligne modifiera la profondeur de la pile et l'emplacement de la
l
, ce qui causera également des problèmes.Poisson
la source
"
etl
avec pas mal de travail. Une fois que j’ai atteint 92 ans, j’étais persuadé qu’il devait y avoir un moyen de supprimer le derniero
. Il a cependant fallu un peu d'effort. Vous pouvez dire par l'historique de révision.Octave,
202122252733Le mieux que j'ai réussi jusqu'ici est
Cela crée une fonction anonyme
f
qui ne prend aucune entrée. Vous pouvez l'appelerf()
. Je dirais que le point-virgule à la fin est nécessaire, afin d'éviter l'impression du corps de la fonction.Il est possible que cela puisse être amélioré en combinant
eval
etprintf
, mais j'ai essayé et échoué encore et encore.Cela utilise tous les chiffres une fois, en expliquant le fait qu'Octave effectue une
mod(x,256)
opération lors de la conversion implicite de nombres en caractères. Cela signifie que nous pouvons utiliser des nombres négatifs, ainsi que des nombres situés en dehors de la32-126
plage normale . Les numéros suivants tout résultat dans la lettrei
lorsqu'il est converti en caractères:... -2455 -2199 -1943 ... 105 361 ...
. Au lieu d'utiliser'owling'
finalement, nous utilisons"nvkhmf"
et ajoutons 1. Cela crée un vecteur d'entiers qui sont implicitement convertis en caractères. Au lieu de1
, nous utilisons!0
(ounot(false)
. En outre, nous utilisons"
au lieu de'
éviter deux points de pénalité.Nous devons trouver l'ensemble des nombres qui donne le score le plus bas. La chaîne
Code Bowling
résulte dans la matrice suivante, lorsque nous soustrayons et ajoutons -10 * 256 - 10 * 256.Donc, les
['',2627 2415 2148 1893 -2528 66 -1169 -1161 2668 105 -146 103]
résultats dansans = Code Bowling
. Le défi consiste alors à trouver l'ensemble des chiffres et des caractères qui réduisent le plus le score. Bien sûr, utiliser tous les chiffres est bon, mais les doublons sont mauvais. Comme tous les chiffres sont utilisés, et non sont utilisés deux fois, il s'agit du meilleur mélange possible. En outre, nous arrivons à utiliser-
, résultant en un point.On pourrait prétendre qu’elle peut être réduite à la ligne inférieure (31 points), mais alors ce ne serait plus une "fonction exécutable" et aurait donc une fonctionnalité différente.
la source
function q();disp(...)
aussi? À part lei()
, ils ne se chevauchent pas bien.cot
danshorzcat
etnf
dans la chaîne réduira le score de manière drastique. Ce serait peut-être mieux si je supprimehorzcat
et crée la chaîne d'une autre manière, mais je ne peux pas non plus l'utiliser+!0
. Pour être honnête, je serais surpris que cela augmente le score. Cela ne fait que 7 caractères de plus que la réponse actuelle et j'obtiendrai une pénalité de 7 octets, en plus de celles que j'ai mentionnées.function
, mais je me suis dit que vous auriez peut-être déjà essayé et que je perdrais mon temps (au lieu de, vous savez, passer mon temps utilement sur PPCG)QBasic, 34
C'est du code non formaté (oui pour l'insensibilité à la casse). Vous pouvez l'exécuter dans QB64 ou sur archive.org ( sachez toutefois que ce dernier formatera le code au fur et à mesure que vous le tapez). Je pense avoir réussi à respecter toutes les règles.
Le
CLS
est nécessaire: sans cela, l’C
impression n’est pas garantie dans le coin supérieur gauche de l’écran, là où il s’aligneraode Bowling
. LeLOcatE
nécessaire: sans cela,ode Bowling
sera imprimé sur la ligne ci-dessousC
. Je ne crois pas qu'il y ait un sous-ensemble du programme (à l'exception des espaces) qui puisse être supprimé et conserve le même résultat.la source
Parse failed: Syntax error at 3:36: Token(Bowling)
LOCATE 1, 2
qui l’a faitC,
2729+2 points grâce à @ceilingcat!
la source
char q<:]
lieu dechar q[]
et auputs(q);%>
lieu deputs(q);}
+2 points thanks to ...
Haskell , score
213846472170Essayez-le en ligne! L'idée est d'obtenir le début
C
en construisant une chaîne de longueur 67 qui contient tous les caractères non utilisés par ailleurs et en convertissant la longueur de cette chaîne en un caractère. J'ai commencé avecputStr$toEnum(length""):"ode B\x6Fwling"
('\x6F'
c'est hexadécimal pour'\111'
lequel les rendements'o'
) et calculé tous les caractères imprimables ASCII non contenus dans le programme:Incidemment, il reste exactement 67 caractères ASCII imprimables qui peuvent être insérés dans la chaîne et
C
lui - même qui ne peuvent pas figurer dans la chaîne car le programme serait alors réductible àputStr"Code B\x6Fwling"
.Solution précédente: (score 21)
Définit une fonction
f
qui ne prend aucune entrée et imprime la chaîne. Essayez-le en ligne!la source
95
dans la chaîne et la soustraction4621
? (Je n'ai pas le temps de le vérifier moi-même pour le moment, maisJavaScript, 19
Pas un très bon score.
la source
z(){var x=alert('Code \nBowling');}
function
auparavantf
o
était inutiliséprompt('C\157de B\x6fwlin'+"g")
Jelly , 94
Essayez-le en ligne!
105 personnages uniques, 11 exotiques (
“¹³⁵⁷°⁹⁻”ḄỌ
).Comment?
Forme la chaîne à partir d'ASCII inversé sur 8 bits, chaque bit étant codé à l'aide du LSB de la valeur Unicode d'un caractère.
la source
Röda , 33 ans
Essayez-le en ligne!
J'ai essayé de suivre toutes les règles. Cela fonctionne en poussant d'abord la chaîne
ode Bowling!
dans le flux, puis en insérantC
= 3 * 4 + 57-2 au premier plan.la source
Cardinal 20
23 caractères non blancs
% #> / NI "CodeB8 ^ o) wl, ing
-3 pour répété "o"
Chemins de pointeur:
Étape 1: le
pointeur créé à% va à droite
Étape 2: Le
pointeur se sépare en # pour monter, à droite et en bas (P1, P2, P3)
Étape 3 :
P1 envoyé directement par>
P2 Aller à droite
P3 Définir attendre 3 étapes à 8h
Étape 4:
P1 réfléchi par \. \ changé en /
P2 Définit le mode d'impression par "
P3 Attend 2 ticks à 8
Étape 5:
P1 En descendant
P2 Imprimer C
P3 Attendre 1 tick à 8
Étape 6:
P1 Envoyé par ^
P2 Imprimer o
P3 Terminer attendre, continuer, extraire la valeur ASCII de "" (32) à partir de)
Étape 7: P1 En haut
P2 Imprimer d
P3 En bas
Étape 8: P1 reflète le droit de \ modifié en /
P2 Print e
P3 Caractère d’impression avec une valeur ASCII = 32 à partir de, opération
Étape 9:
P1 Reflété par / qui est changé en \
P2 Imprimer B
P3 Fin de champ atteinte et arrête
Étape 10:
P1 réfléchi par I
P2 Fin de champ atteinte et arrêts
Étape 11:
P1 Reflète juste par / qui a été changé en \. Retour à /
Étape 12:
P1 réfléchi à gauche par N
Étape 13:
P1 réfléchi par /
Étape 14:
P1 Définissez le mode d'impression par "
Étape 15:
Impression P1 o
Étape 16:
Impression P1 avec w
Étape 17:
Impression P1 l
Étape 18:
Impression P1 i
Étape 19:
Impression P1 n
Étape 20:
Impression P1 g
Étape 21:
P1 Atteint la fin du champ et s’arrête.
Essayez-le en ligne
la source
C, 73
Merci à @Laikoni!
Essayez-le en ligne!
C,
313335Merci à @ceilingcat et @DLosc pour deux points supplémentaires et à @ Ørjan Johansen pour deux autres points!
Essayez-le en ligne!
la source
8-
code et conserver un code valide.0xA-4+8
devrait fonctionner, cependant.0xA+32/8
travailler? (Sans que quelque chose soit amovible, c'est ça.)+32
,+3
,+2
,+3/8
,+2/8
,/8
ou+8
produit la sortie droite. Merci!0xD+4*8/32
. Non attendez, cela raccourcirait pour0xD+4/3
ne pas le faire.Lot, 19 caractères
Commençant par Windows Vista,
TMP
commence parC:\Users\
et constitue donc%TMP:~5,1%
une manière verbeuse d’écriree
, même s’il faut imposer une%
pénalité double à -4.la source
Brainfuck: -204
Bien, score épouvantable, mais c'était amusant à écrire.
la source
Java 8,
235131718192021247778 points+53 score (24 → 77) grâce à @Laikoni .
104 caractères
- alnum répété: -15 (
helng
)- ponctuation répétée: -10 (
"()""
)- autre ASCII répété: aucun
- caractères d'espacement: -1
SCORE: 78
Essayez-le en ligne.
Vieux 24 octets répondent:
30 caractères
- alnum répété: -3 (
1
)- ponctuation répétée: -2 (
"
)- autre ASCII répété: aucun
- caractères d'espacement: -1
SCORE: 24
Essayez-le en ligne.
la source
Object x(){return"C\157de Bowling";}
a quelques heures pour 17 points .. Apparemment, je ne l'ai pas encore modifié / sauvegardé dans ma soumission ..: S Quant au lambda, j'utilise Java 7, qui ne fonctionne pas ont encore des lambdas. Je pourrais cependant ajouter une réponse Java 8 avec lambda.7
. (Mais n'oubliez pas la concaténation.),,
par,;
+1. C'est drôle comme la chaîne qui utilise tous les fichiers ASCII imprimables disponibles est EXACTEMENT 97 caractères pour le code de caractèreC
. :)empilés , 42
Essayez-le en ligne!
Laisse la sortie sur la pile. Voici la ventilation:
Je pourrais probablement le faire plus haut, mais il est à 42 soo ....
Un autre concurrent, 40:
J'ai utilisé ce script pour le marquer.
la source
le mal , -81
Mieux que Brainfuck!
Explication
Soumis parce que personne ne fait rien dans le mal mais c'est assez amusant.
But:
Longueur = 63
Essayez-le en ligne!
EDIT: TiO semble gérer de manière incorrecte la création et la suppression de nouvelles cellules Wheel - J'ai déposé un rapport de bogue sur le sujet. Cela ne fonctionnera pas correctement là-bas, mais je l'ai exécuté sur mon propre interprète et cela fonctionne et vous pouvez vous fier à moi pour que je ne m'inquiète pas pour ça;)
la source
Perl:
29, 33But:
la source
05AB1E , 94 points
Essayez-le en ligne!
Convertit essentiellement (l'ASCII binaire de Code Bowling):
Dans une chaîne de 1 et de 0, chaque 1 est remplacé par une lettre de l'alphabet et chaque 0 par un espace, un symbole ou un chiffre.
Est la chaîne, où 1 sont des lettres et 0 sont des symboles, des chiffres ou toute autre chose. Nous parcourons ensuite, en voyant lesquels sont alphabétiques, en poussant 1 pour alphabétique 0 pour non alphabétique. Nous divisons ensuite en groupes de 7, reconvertissons en ASCII et imprimons chaque caractère.
la source
T-SQL,
651832! pointsInspiré par une astuce de la réponse QBasic de Dlosc , j'ai trouvé un moyen d'inclure les 10 chiffres et la plupart des opérateurs mathématiques (
%
reste / modulo, manquant seulement/
), principalement par essais et erreurs. Je ne pense pas qu'il soit possible d'obtenir un 67 en supprimant une combinaison de chiffres / symboles, mais vous pouvez essayer.Version 2 (18 points, trivial):
Pas un très bon score, mais c’est ce que ma première version a simplifié (merci, MickyT). Tout le reste que j'ai essayé (encodage et décodage de hex64, sélection d'éléments individuels dans une chaîne, conversion de valeurs ASCII, etc.) comportait trop de caractères répétés (en particulier des
ECR
symboles(),@
) qui le conduisaient au négatif.Version 1 (65 points, invalide):
J'ai utilisé la longueur de la chaîne pour déterminer le nombre de caractères que j'utilise du côté gauche. Par conséquent, si vous supprimez un seul caractère de la chaîne, le résultat de la division entière sera abaissé à 11, en sortie uniquement
Code Bowlin
.la source
DECLARE @ char(12)='Code Bowling'PRINT @
règles.; # , score -1163, non compétitif
Je ne pense pas que ce serait beaucoup de concurrence même si cela pouvait rivaliser.
Essayez-le en ligne! Remarque: TIO n'a pas; # d'interprète, seulement; # +.
la source
CJam , score 47
Espérons que cela ne pose aucun problème ...
Utilise un caractère exotique (séparateur d'unité, ASCII 31, représenté par
␟
) et un caractère répété ("
). Je pense que cela pourrait être encore plus long, mais je vais le laisser tel quel pour le moment.Essayez-le en ligne!
Le programme fonctionne en prenant cette longue chaîne et en la divisant en sous-chaînes de longueur 3. Chaque sous-chaîne est ensuite mappée sur le bloc, ce qui convertit ses caractères en leurs valeurs ASCII, vide les valeurs de la pile, prend la différence absolue des deux secondes, ajoute le résultat avec le premier, puis reconvertit le résultat final en ASCII. personnage.
la source
CJam, score 93
Essayez-le en ligne
Inspiré de la réponse Python de TidB .
Je ne sais pas s’il est possible d’éviter la répétition des guillemets.
Explication:
La chaîne contient "Cpde Bowling" en sens inverse, tous les 8 caractères.
7~%
extraits "Cpde Bowling" (7~
=-8
)2,.-
décrémente le caractère p (2,
=[0 1]
)la source
PHP, 33 points
C'était assez difficile à trouver.
Le score pourrait être amélioré à l'avenir.
La nouvelle ligne est supposée être une nouvelle ligne de style Linux! Le style Windows et le style Mac ancien ne fonctionneront pas correctement.
la source
Ruby, 75
Approximativement un port de la réponse Python, mais Ruby n’a pas cette fonction step cool, alors j’utilise
gsub
plutôt. J'ai aussi décidé de m'amuser un peu avec les personnages exotiques en lançant des phrases dans Google TranslateEssayez-le en ligne!
la source
USML, 12 ou 9 points (non en compétition)
Essayez-le en ligne!
Cette réponse trompe un peu en abusant du rendu HTML. La chaîne réellement créée par ceci est
"Code\tBowling "
. Des points sont perdus pour avoir répété le caractère "o".Pour une réponse non trompeuse:
USML en est encore à ses débuts et n’est pas encore en mesure d’augmenter la taille du programme.
la source
"Code&'Bowling
(* Remarque: remplacez-le&
par un saut de ligne, il ne me laissera pas les taper dans les commentaires)s
à la ligne suivante (obtenir une sous-chaîne de rien, donc ne pas modifier la sortie du tout) pour obtenir un score concurrent de 12, identique à votre score non concurrent, à l'exception d'un score réel. soumission valide: DCubix , 85
Essayez-le en ligne!
Cubifié avec des caractères insignifiants remplacés par.
Je pense avoir rendu le chemin assez fragile pour que le retrait de personnages le casse.
Regarde le courir
la source
VB.net, 68
Un test rapide mettant à profit l'insensibilité à la casse et le manque de "système" de VB.
la source
cONSOLE.WRITE("Code Bowling")
?Coquille: note 17
Score total: 17
la source
Acc !! , 171 caractères
Essayez-le en ligne!
Acc !! fonctionne bien pour ce défi car les espaces sont nécessaires et les boucles sont coûteuses. Je me suis servi de l’ accumulateur ici, mais mal, pour augmenter les caractères. Voici un bref aperçu de la page:
Les boucles en Acc, du moins pour le golf, sont pénibles. Ils ont besoin d'accolades et tous les espaces sont nécessaires. Sinon, c'est assez explicite.
la source