Votre patron vous demande d’écrire un programme "hello world". Puisque vous êtes payé pour des lignes de code, vous voulez le rendre aussi complexe que possible. Toutefois, si vous ajoutez simplement des lignes absurdes, ou bien des éléments évidemment inutiles ou obscènes, vous ne l'obtiendrez jamais grâce à la révision du code. Le défi consiste donc à:
Ecrivez un programme "hello world" aussi complexe que possible, à condition que vous puissiez "justifier" chaque complexité du code.
Le comportement requis du programme consiste à ne générer qu'une seule ligne "Hello world" (sans les guillemets, mais avec une nouvelle ligne à la fin), puis à sortir correctement.
Les "justifications" comprennent:
- compatibilité de mots à la mode ("Le logiciel moderne est orienté objet!")
- Bonnes pratiques de programmation généralement acceptées ("Tout le monde sait qu'il faut séparer le modèle et la vue")
- maintenabilité ("si on le fait de cette façon, on pourra plus facilement faire XXX plus tard")
- et bien sûr, toute autre justification que vous pouvez imaginer utiliser (dans d'autres situations) pour du code réel.
De toute évidence, les justifications stupides ne seront pas acceptées.
En outre, vous devez "justifier" votre choix de langue (donc si vous choisissez une langue intrinsèquement verbeuse, vous devrez justifier pourquoi c'est le choix "correct"). Les langages amusants comme Unlambda ou Intercal ne sont pas acceptables (à moins que vous ne puissiez donner une très bonne justification pour les utiliser).
Le score des entrées qualifiantes est calculé comme suit:
- 1 point pour chaque déclaration (ou l'équivalent d'une déclaration dans la langue de votre choix).
- 1 point pour chaque définition d'une fonction, d'un type, d'une variable, etc. (à l'exception de la fonction principale, le cas échéant).
- 1 point pour chaque instruction d'utilisation de module, directive d'inclusion de fichier, espace de nom utilisant une instruction ou similaire.
- 1 point pour chaque fichier source.
- 1 point pour chaque déclaration préalable nécessaire (si vous pouviez vous en débarrasser en réarrangeant le code, vous devez "justifier" pourquoi l'arrangement que vous avez choisi est le "bon" choix).
- 1 point pour chaque structure de contrôle (si, tant que, pour, etc.)
Rappelez-vous que vous devez "justifier" chaque ligne.
Si la langue choisie est suffisamment différente pour que ce schéma ne puisse pas être appliqué (et que vous puissiez donner une bonne "justification" à son utilisation), veuillez suggérer une méthode de notation qui ressemble le plus à la méthode ci-dessus pour la langue de votre choix.
Les candidats sont invités à calculer le score de leur participation et à l'écrire dans la réponse.
la source
Réponses:
C ++, trollpost
Mon cerveau ne peut pas justifier d'écrire un plus long :)
la source
Je démontrerai ici la puissance et la convivialité du langage de script appelé Python en résolvant gracieusement et efficacement une tâche assez complexe au moyen des opérateurs et des générateurs de structures de données du langage de script susmentionnés, tels que des listes et des dictionnaires .
Cependant, j'ai bien peur de ne pas comprendre entièrement l'utilisation des expressions "complexe possible" et "justification". Néanmoins, voici un aperçu de ma stratégie habituelle, assez explicite et simple, suivie de la mise en œuvre réelle en Python que vous trouverez, est tout à fait fidèle à la nature ludique et de haut niveau de la langue:
Définir l'alphabet - première étape évidente. Pour l'évolutivité, nous choisissons toute la gamme ascii. Notez l'utilisation du générateur de liste intégré qui peut nous épargner des heures d'initialisation fastidieuse.
Dites combien de lettres de l'alphabet nous allons utiliser. Ceci est simplement représenté comme une autre liste!
Fusionner ces deux listes dans un dictionnaire pratique, où les clés sont des points ascii et les valeurs sont la quantité désirée.
Nous sommes maintenant prêts à commencer à créer des personnages! Commencez par créer une chaîne de caractères en dehors du dictionnaire. Cela contiendra tous les caractères dont nous avons besoin dans notre sortie finale, et la bonne quantité de chacun!
Déclarez l'ordre souhaité des caractères et créez une nouvelle liste qui contiendra notre sortie finale. Avec une simple itération, nous allons mettre les personnages générés dans leur position finale et imprimer le résultat!
Voici l'implémentation réelle
Ok, je suis juste allé pour un court mais stupide et a ajouté un tas de texte plutôt qu'une solution de code TL; DR
la source
n
ici compte 1 ligne ou 11?Hello World de Dart compilé sur JS (2 936 012)
http://code.google.com/p/dart/issues/detail?id=14686
(Je laisserai cependant Google le justifier)
la source
Scala, score: 62
D'accord, je jette mon chapeau dans le ring.
ContentProvider.scala:
HWCChain.scala:
HHWCChain.scala:
eHWCChain.scala:
theLThing.scala:
indexéLHWCChain.scala:
theOThing.scala:
indexéOHWCChain.scala:
BlankHWCChain.scala:
WHWCChain.scala:
rHWCChain.scala:
dHWCChain.scala:
TermeHWCChain.scala:
HelloWorldCharChainChecker.scala:
Bien sûr, pour une approche purement fonctionnelle, 0 variable puante. Tout est mis en forme dans le système de types et simple. Un compilateur intelligent peut l'optimiser au strict minimum.
Le programme est clair, simple et facile à comprendre. Il est facilement testable et générique et évite le piège de la sur-ingénierie (mon équipe voulait recoder les chaînes indexedOHWCC et IndexedLHWCC en un trait secondaire commun, qui comporte un ensemble de cibles et un champ de longueur, mais cela aurait été ridicule!).
la source
complex
comme le demande la question d'origine. C'est juste trèsverbose
. Il existe une différence.Pure Bash pas de fourchette (certains comptent, semblent être environ 85 ...)
Caractéristiques :
gzip
etuuencode
viaperl
(plus communément installé queuudecode
)Réécriture complète (corrections de bugs, dessin ascii-art et rôle à deux niveaux):
(La clé utilisée
V922/G/,2:
est baséeHelloWorld
aussi, mais peu importe;)Résultat (à la demande):
Il y a une autre version:
Utiliser la même clé et peut rendre quelque chose comme:
la source
Tout le monde sait que la loi de Moore a pris un nouveau tournant et que toutes les avancées réelles en matière de puissance de calcul de la prochaine décennie se produiront dans le GPU. Dans cet esprit, j'ai utilisé LWJGL pour écrire un programme Hello World extrêmement rapide qui tire pleinement parti du GPU pour générer la chaîne "Hello World".
Depuis que j’écris java, c’est idiomatique de commencer par copier-coller du code d’une autre personne, j’ai utilisé http://lwjgl.org/wiki/index.php?title=Sum_Example
la source
Assembly (x86, Linux / Elf32): 55 points
Tout le monde sait que lorsque vous voulez un programme rapide, vous devez écrire en assembleur.
Parfois, nous ne pouvons pas compter sur
ld
son travail. Pour des performances optimales, il est préférable de créer notre propre en-tête Elf pour notre exécutable hello world. Ce code nécessite seulementnasm
de construire, il est donc très portable. Il ne repose sur aucune bibliothèque externe ni exécution.Chaque ligne et déclaration est absolument cruciale au bon fonctionnement du programme - il n’ya pas de cruauté, rien ne peut être omis.
De plus, c'est le moyen le plus rapide de le faire sans utiliser l'éditeur de liens - il n'y a pas de boucles inutiles ou de déclarations inutiles pour gonfler la réponse.
Notation
org
,db
,dw
,dd
,equ
,global _start
): 37dd _start
,dd filesize
,dw ehdrsize
,dw phdrsize
: 4ehdr:
,phdr:
,section .data,
,section .text
,_start:
): 5la source
PHP / HTML / CSS (88pts)
Tout le code est disponible ici: https://github.com/martin-damien/code-golf_hello-world
index.php
autoload.php
classes / Page.php
classes / Title.php
classes / XMLElement.php
design / stylesheets / hello_world.css
design / templates / layouts / pagelayout.twig
design / templates / pages / hello_world.twig
la source
Brainfuck
369 expressions, 29 boucles while = 398
Sortie à partir de K & R Exemple de langage de programmation C:
la source
Ti-Basic 84, 1 Point
Ti-Basic est assez basique. Mais si vous voulez vraiment une explication justifiée, la voici:
:
démarre chaque commande, fonction, instruction, structure, sous-programme, nommez-leDisp
est une fonction prédéfinie qui affiche un paramètre à l'écranaka
whitespace
Permet à la fonction deDisp
savoir qu’elle a été appelée et qu’un paramètre doit suivre le caractère unique d’espace, qui est effectivement collé avecDisp
"
Commence à définir le littéral de chaîneHELLO WORLD
Une partie du texte dans le littéral de chaîne!
Bien qu’il s’agisse d’un opérateur mathématique factoriel, il n’est pas évalué car il se trouve dans un littéral de chaîne."
Termine la définition du littéral de chaînela source
Donc, j'ai un très ... ... ... gestionnaire particulier. Il a cette idée étrange que plus un programme est simple, plus il doit être beau et artistique. Comme il
Hello World
s’agit d’un des programmes les plus faciles à écrire, il a demandé quelque chose de si formidable qu’il pouvait être accroché au mur. Après quelques recherches, il a insisté pour que la chose soit écrite en Piet.Maintenant, je ne suis pas du genre à remettre en question les mérites de la personne la plus intelligente qui soit jamais offerte à la haute direction, alors j’ai été chargée d’écrire ce programme, qui peut être exécuté sur cet interprète en ligne. Peut-être qu'il est temps de chercher un gestionnaire plus sain d'esprit ...
la source
Un lipogramme en C:
Les mots 'w' et 'r' sur mon ordinateur sont masqués. Cela peut poser problème avec certaines langues. Presque tous les dirctivs pr-compilr en C us que lttr. Le code ci-dessus émet des avertissements sur une déclaration implicite de printf (), mais je ne peux pas nous dire #includ (stdio.h), mais ça marche bien.
la source
Ill mettre ceci en référence comme wiki de communauté. C'est un C # one avec de mauvaises pratiques. Je définis ma propre structure de données ascii. Je ne veux pas que ce soit un concurrent, mais plutôt "Kid's, tu vois cet homme là-bas ... si tu ne manges pas de légumes, tu deviendras comme lui", genre d'exemple.
SI VOUS ÊTES FACILEMENT PERTURBÉ PAR LE MAUVAIS CODE, REGARDEZ DÈS MAINTENANT
J'utilise généralement cela pour effrayer les enfants à l'Halloween. Vous devez également noter que je ne pourrais pas insérer tous mes 256 caractères asci ici car le nombre total de caractères est d'environ 40 000. N'essayez pas de reproduire ceci pour 2 raisons:
Alors euh ... ouais "amusez-vous!". Aussi , si vous aimez le nettoyage et l' amélioration du code toux révision du code de la toux cela pourrait vous tenir occupé pendant un certain temps si vous êtes à la recherche d'une occupation non rentable.
la source
J'ajouterai quelques commentaires plus tard.
la source
main
de la classeMain
:ConsoleDisplay
n'a pas de membre nommégetInstance
. Vouliez-vous direConsoleDisplayFactory
? BTW, s'il vous plaît indiquer explicitement le langage (Java je suppose) et les points.Points: 183
System
? Quoi qu'il en soit, disons 0.MustOverride
, que je vais compter.Total: 62 + 43 + 0 + 1 + 1 + 76 = 183
Entrée
Documentation
OptimizedStringFactory
détient des chaînes optimisées. Il a un cache qui permet des références à efficaceIEnumerable(Of Char)
s tout en évitant les problèmes inhérents aux références. Il a été porté à mon attention que .NET inclut une sorte de pool de chaînes. Cependant, la mise en cache intégrée n'en sait pas assez sur les objets que nous utilisons - elle n'est pas fiable, j'ai donc créé ma propre solution.ConcurrentOutputCharacter
classe permet une synchronisation aisée de la sortie multithread à un caractère. Cela empêche la sortie de se brouiller. Dans les meilleures pratiques de la programmation orientée objet, il est déclaréMustInherit
et chaque caractère ou chaîne à afficher en est dérivé, et également déclaréNotInheritable
. Il contient plusieurs assertions pour assurer que des données valides sont transmises.*Character
contient un seul caractère pour notre cas spécifique de sortie de chaîne.Beau, non?
Il est même extensible, grâce aux boucles et à l'héritage susmentionnés, ainsi qu'au chargement dynamique de classes basé sur la réflexion. Cela évite également les obscurcissements excessifs, ainsi personne ne peut réclamer notre code en l’obscurcissant. Pour changer les chaînes, créez simplement un dictionnaire qui mappe les caractères d'entrée à différentes classes de caractères de sortie avant que le code de réflexion ne les charge de manière dynamique.
la source
Javascript, BEAUCOUP de points
Et c'est parti:
la source
Programme C pour Hello World: 9 (?)
Combinaison de caractères ASCII et d'un tableau de caractères contenant un entier! Fondamentalement, l'impression de chaque chiffre en format de caractères.
la source
Python utilisant des instructions if-else
Explication
Cela crée un dictionnaire des valeurs ASCII et des caractères associés car cela permettra au code de n'utiliser que ces valeurs et rien d'autre. Nous nous assurons de référencer les voyelles dans une liste séparée et de faire savoir ensuite que l'avant-dernier caractère se répète dans les deux chaînes.
Cela fait, nous créons une liste de dictionnaires avec des règles définissant la longueur du mot, ses premier, dernier et caractères récurrents, puis définissons également une instruction vrai / faux pour savoir si les répétitions doivent être vérifiées.
Une fois cette opération effectuée, le script parcourt la liste des dictionnaires et la transmet à une fonction qui crée toutes les permutations possibles des caractères du dictionnaire de référence, en prenant soin d’ajouter des caractères récurrents, si nécessaire.
Ensuite, il est alimenté par une deuxième fonction qui crée encore plus de permutations pour chaque permutation, mais en fixant une longueur maximale. Ceci est fait pour nous assurer que nous trouvons les mots que nous voulons mâcher. Au cours de ce processus, il le transmet ensuite via une fonction qui utilise une combinaison d'instructions if-else qui déterminent si elle mérite d'être expulsée. Si la permutation correspond à ce que les instructions demandent, elle génère ensuite une déclaration true / false et la fonction qui l'a appelée l'ajoute à une liste.
Une fois que cela est fait, le script prend ensuite le premier élément de chaque liste et les combine pour indiquer "hello world".
J'ai également ajouté des fonctionnalités de débogage pour vous informer de la lenteur des choses. J'ai choisi de le faire car vous n'avez pas besoin d'écrire "hello world" pour le faire cracher "hello world" si vous savez comment construire la phrase.
la source
C'est bien.
la source
Golf-Basic 84, 9 Points
Explication
Demander à l'utilisateur s'il veut quitter
Enregistrer leur réponse
S'ils souhaitaient effectivement mettre fin à leurs activités, ils cesseraient
S'ils ne se terminent pas, il affiche Hello World.
la source
Le hachage, puis la force brute déchaque les caractères pour "Bonjour le monde!", Les ajoute à un
StringBuilder
et les enregistre avec un enregistreur.la source
C # - 158
Je vous dis quoi, développeurs, de nos jours, ne prêtant aucune attention aux principes SOLID. De nos jours, les gens négligent combien il est important de bien exécuter les tâches simples.
Premièrement, nous devons commencer par les exigences:
Commençons par la localisation. Pour localiser correctement les chaînes, nous avons besoin d'un alias pour la chaîne à utiliser dans le programme et des paramètres régionaux dans lesquels nous voulons que la chaîne soit insérée. Nous devons évidemment stocker ces données dans un format facilement interopérable, XML. Et pour faire du XML correctement, nous avons besoin d’un schéma.
StringDictionary.xsd
Cela définit notre structure XML et nous permet de bien démarrer. Ensuite, nous avons besoin du fichier XML lui-même, contenant les chaînes. Faites de ce fichier une ressource incorporée dans votre projet.
Cela dit, une chose que nous ne voulons absolument pas, ce sont des chaînes codées en dur dans notre programme. Utilisez Visual Studio pour créer dans votre projet des ressources que nous utiliserons pour nos chaînes. Veillez à modifier
XmlDictionaryName
le nom de votre fichier de chaînes XML défini précédemment.Puisque nous sommes l'inversion de dépendance, nous avons besoin d'un conteneur de dépendance pour gérer l'enregistrement et la création de nos objets.
IDependencyRegister.cs
IDependencyResolver.cs
Nous pouvons fournir une implémentation simple de ces deux interfaces ensemble sur une classe.
DependencyProvider.cs
Commençant par le niveau le plus bas et en remontant, nous avons besoin d’un moyen de lire le code XML. Après le
S
etI
dans SOLID, nous définissons une interface utilisée par notre code de dictionnaire de chaînes XML:Penser à la conception appropriée pour la performance. Récupérer ces chaînes va être sur le chemin critique de notre programme. Et nous voulons être sûrs de toujours récupérer la chaîne correcte. Pour cela, nous allons utiliser un dictionnaire où la clé est le hachage du nom de la chaîne et de la langue, et la valeur contient notre chaîne traduite. Encore une fois, suivant le principe de responsabilité unique, notre dictionnaire de chaînes ne doit pas se préoccuper de la manière dont les chaînes sont hachées. Nous créons donc une interface et fournissons une implémentation de base.
IStringHasher.cs
Sha512StringHasher.cs
Avec cela, nous pouvons définir notre magasin de chaînes XML qui lit un fichier XML à partir d'une ressource incorporée et crée un dictionnaire contenant les définitions de chaîne.
EmbeddedXmlStringStore.cs
Et la
StringInfo
structure associée pour contenir les informations de chaîne:StringInfo.cs
Comme nous avons plusieurs façons de rechercher des chaînes, nous devons isoler le reste du programme de la façon dont les chaînes sont exactement récupérées. Pour ce faire, nous définissons
IStringProvider
ce qui sera utilisé dans le reste du programme pour résoudre les chaînes:ILocaleStringProvider.cs
Avec une implémentation:
StringDictionaryStoreLocaleStringProvider.cs
Maintenant, pour gérer les paramètres régionaux. Nous définissons une interface pour obtenir les paramètres régionaux actuels de l'utilisateur. Il est important de l'isoler, puisqu'un programme exécuté sur l'ordinateur de l'utilisateur peut lire les paramètres régionaux du processus, mais que sur un site Web, les paramètres régionaux de l'utilisateur peuvent provenir d'un champ de base de données associé à celui-ci.
ILocaleProvider.cs
Et une implémentation par défaut qui utilise la culture actuelle du processus, car cet exemple est une application console:
Le reste de notre programme ne se soucie pas vraiment de savoir si nous servons des chaînes localisées ou non, nous pouvons donc cacher la recherche de localisation derrière une interface:
IStringProvider.cs
Notre implémentation de StringProvider est responsable de l'utilisation des implémentations fournies de
ILocaleStringProvider
etILocaleProvider
de renvoyer une chaîne localisée.DefaultStringProvider.cs
Enfin, nous avons notre point d’entrée de programme, qui fournit la racine de la composition et obtient la chaîne, l’imprimant sur la console:
Program.cs
Et c’est ainsi que vous écrivez un programme Hello World, prêt pour le microservice d’entreprise, tenant compte des paramètres régionaux.
Partitions: Fichiers: 17 Espace de noms Comprend: 11 Classes: 14 Variables: 26 Méthodes: 17 Instructions: 60 Flux de contrôle: 2 Déclarations en avant (membres d'interface, xsd complexTypes): 11 Total: 158
la source
iX2Web
la source