Considérez une question rédigée dans un anglais simple et dont la réponse implique deux mots ou expressions raisonnablement précis (mais potentiellement intelligents) pouvant être séparés par le mot 'et':
Q: Quels sont les deux côtés d'une pièce? A: têtes et queues
Q: Quels sont les meilleurs moyens de voyager? A: avion et jetpack
Q: Pourquoi un corbeau est-il comme un bureau? A: parce qu'il y a un 'b' dans les deux et un 'n' dans les deux
Objectif
Ecrivez un programme qui, lorsqu'il est exécuté normalement, pose une telle question.
Lorsque tous les autres caractères sont supprimés du programme en commençant par le deuxième caractère et que le résultat est réexécuté, la sortie doit être celle qui se trouve à gauche des 'et' dans la réponse.
Lorsque tous les autres caractères du programme sont supprimés en commençant par le premier caractère et que le résultat est ré-exécuté, la sortie doit être celle qui se trouve à droite des 'et' dans la réponse.
(Le 'et' n'est pas sorti.)
Exemple
Si le programme est
A1B2C3D4E5F6G7H8I9
et sa sortie est
What are the two sides of a coin?
Ensuite, le résultat de ABCDEFGHI
devrait être heads
, et le résultat de 123456789
devrait être tails
.
Règles concernant les questions et réponses
- Vous pouvez utiliser mes exemples de questions mais je vous encourage à composer les vôtres.
- La question et les deux parties de la réponse:
- doivent tous être distincts
- devrait être commun anglais grammatical signifiant
- ne peut contenir que de l' ASCII imprimable (hex 20 à 7E)
- Idéalement, la question sera mise en majuscule et ponctuée (mais les réponses ne doivent pas nécessairement l'être).
- La question doit comporter au moins 30 caractères et avoir une entropie supérieure ou égale à 3,5. (Tapez la chaîne, cliquez sur calculer , recherchez le dernier H (X) .)
- Les deux parties de la réponse (excluant l’
[space]and[space]
entre les deux) doivent comporter au moins 5 caractères avec une entropie supérieure ou égale à 2. - Le mot 'et' peut apparaître dans les deux réponses.
Règles concernant le code
- Aucun des 3 extraits de code ne peut:
- contient des commentaires ou tout autre élément traditionnellement ignoré par le compilateur / interprète (ne vous inquiétez pas pour ajouter un point-virgule supplémentaire ou deux, mais si vous pensez que c'est un commentaire, c'est probablement le cas)
- quitter le programme en cours d'exécution
- Le code peut contenir n’importe quel caractère, y compris Unicode et ASCII non imprimable.
- Il peut avoir un nombre pair ou impair de caractères.
- La sortie passe à stdout ou dans un fichier ou quoi que ce soit qui semble raisonnable. Il n'y a pas d'entrée.
Notation
Puisque je ne veux pas encourager les réponses au golf mais que je veux encourager encore plus les réponses intelligentes, la notation sera quelque chose entre le concours de code-golf et la popularité:
Score = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)
Le score le plus élevé gagne.
(Utilisez http://mothereff.in/byte-counter comme compteur d'octets.)
la source
x0=00;;
. Grand défi!00;
est traditionnellement ignoré par le compilateur ...It may have an odd or even number of characters
Y a-t-il un nombre de caractères qui n'est pas impair ou pair?Réponses:
Javascript (148 octets)
Crée des littéraux dépourvus de sens, avec comme effet secondaire de créer une alerte * pour la question. (les divisions se ressemblent, mais créent des alertes * pour chacune des réponses).
Splits:
et
Question:
What is the ideal breakfast???
Réponses:
bacon
etscrambled eggs
la source
Brainfuck (437 caractères)
Je dois avouer que c'est mon premier programme de brainfuck qui fait quelque chose de significatif. Le programme est hautement optimisé pour les systèmes à faible mémoire puisqu'il n'utilise que 4 emplacements de mémoire.
Question:
What are the two main groups of trees?
Réponses:
conifers
etbroadleafs
Boucle principale
Le programme consiste en une boucle principale (qui n'est pas vraiment une boucle car tous les blocs [] ne sont exécutés qu'une seule fois) et deux sections.
Si vous souhaitez tester des sections indépendamment, vous devez prendre en compte la boucle principale. L'emplacement 0 contient -1 en réponse paire, 1 en réponse impaire et 2 en section de question.
Section de réponse
Même réponse (instructions impaires supprimées):
Réponse impaire (même les instructions ont été supprimées):
Section de questions
J'ai décidé de stocker de l'espace pour séparer l'emplacement car sa valeur diffère radicalement des autres personnages. Cela permet d’imprimer simplement de l’espace
<.>
.Mise à jour finale
Dans ma dernière mise à jour, j'ai optimisé les multiplications afin que les instructions minimales soient utilisées. Inclure également 'l' au deuxième groupe de caractères dans la section des réponses impaires s'est avéré être une énorme amélioration. L'économie d'un seul caractère dans les réponses impaires signifiait fondamentalement deux caractères de l'ensemble du programme, car elle réduit également le remplissage de la réponse paire. J'ai également supprimé quelques instructions inutiles d'ici et là et je ne pense pas pouvoir optimiser davantage le code.
la source
Lot - 84
Assez fier de celui-ci
Programme complet: Quels sont les deux côtés d'une pièce? (console)
Uniquement en tête: têtes (fichier 'c')
Cotes seulement: queues (fichier 'x')
Fonctionne en redirigeant la sortie d'erreur vers un fichier dans les deux cas.
la source
Python -
10496 (golfé: 76)Ma solution est plutôt simple (et en quelque sorte lisible):
Sortie:
Honnêtement, j'ai trouvé l'idée de la première ligne dans la réponse de bitpwner.
Alternative encore plus lisible: -
11310597Alternative encore plus courte: -
8676la source
zebra
. Et cela s’intègre parfaitement dans une version "golfée" avec une question d’exactement 30 caractères. J'ai donc légèrement modifié ma solution. :)Rebmu : 79 caractères OU (37 + longueur (p1) + 2 * max (longueur (p2), longueur (p3)))
Je vais d'abord donner une solution à 79 caractères qui demande quelles langues devez-vous apprendre? (entropie 4.0, 30 lettres non comprises
?
) et vous propose les suggestions de Rebol et [Rouge] :Une tactique unique disponible ici, qui ne figure pas dans d'autres langues, consiste à tirer parti du fait que les accolades sont un délimiteur de chaîne asymétrique, qui peut s'emboîter légalement:
Cela me permet de produire une solution généralisée, qui peut fonctionner sans effort sur n'importe quel programme qui n'utilise pas de séquences d'échappement. La version à 79 caractères était assez simple pour être raccourcie, mais pour contenir correctement une source de programme arbitraire pour les programmes p2 et p3, vous auriez besoin du modèle complet. Si nous avions utilisé cela, cela aurait été 87 caractères:
Le schéma d'utilisation de cette forme générale est que si vous avez trois textes sources de caractères séquentiels de longueurs variables (Utilisons un exemple comme
AAA
,BBBBB
,CCCCCCC
) vous pouvez les coder comme quelque chose le long des lignes de:(Remarque: bien que ce modèle ne fonctionne pas sans des modifications sur les programmes qui utilisent des caractères d'échappement, ce n'est pas une faille fatale. Obtenir une accolade gauche incomparable dans une chaîne délimitée par des accolades nécessite quelque chose comme
{Foo ^{ Bar}
... mais vous pouvez facilement réécrire cela en utilisant la notation de chaîne alternative"Foo { Bar"
et les cas combinés peuvent être gérés en collant un mélange de chaînes non échappées.)Alors ... que diriez-vous d'un exemple? Une fois la forme générale disponible, ce programme de 573 caractères a été assemblé en seulement quelques minutes à partir de 3 solutions de golf de code antérieures:
Si vous ne modifiez pas le programme, c'est la solution du sablier .
Si vous ne prenez que les caractères impairs et que vous le lancez, il imprimera les 99 bouteilles de poème de bière
Seuls les personnages pairs feront une petite conversion en chiffres romains pour vous.
Si quelqu'un veut essayer d'écrire ce programme dans la langue de son choix et pense pouvoir battre 573, faites le moi savoir. Si vous le faites, je vous récompenserai énormément - en supposant que votre langue de choix n'est pas Rebmu, car je sais que ces programmes ne sont pas minimes. :-)
Ce "gaspillage" espacement que vous obtenez à la fin est ce qui se produit lorsque p2 et p3 sont de longueurs déséquilibrées. Mais tous les 3 programmes ont des tailles différentes dans ce cas, il n’ya donc pas de bonne paire à choisir pour p2 / p3. (Je les ai choisis parce qu’il n’y avait pas de données externes en entrée, comme un labyrinthe ou autre, mais pas parce qu’elles avaient la même longueur. Bien que j’aurais pu écrire de nouveaux programmes plus optimaux, j’ai passé assez de temps et le but était: vous n'êtes pas obligé d'écrire de nouveaux programmes ...)
Comment ça marche
(Remarque: j'ai commencé avec une approche plus "créative" qui n'était pas aussi simple, mais plus intéressante. Je l'ai déplacée dans une entrée de mon blog car la description de cette approche est déjà longue.)
Une clé ici est la "ruse" du code eval en tant que chaîne "comme d’autres entrées, elle a juste la carte maîtresse du délimiteur de chaîne asymétrique. Je commencerai par expliquer le fonctionnement du cas des 80 caractères.
Voici le programme "entier", ajustant les espaces pour la lisibilité de cette affaire:
Nous définissons ici DD comme synonyme de DO (alias "eval"). Mais le truc, c'est que lorsque les programmes divisés par deux sont exécutés, ils finissent par exécuter du code dont le seul effet est de définir D comme littéral inoffensif 1.
Voici ce que le code de caractères impairs crée, l'espace à nouveau ajusté:
Et voici le code des caractères pairs:
En fait, pour le programme non divisé par deux, le
dd {dd {(arbitrary code)qt}}
programme exécutera le code que vous voulez. Cependant, il existe deux appels à évaluer au lieu d'un seul. En effet, bien que les accolades imbriquées fonctionnent parfaitement dans le code entrelacé, elles gâchent le comportement eval de DO. Car:Charge la chaîne en tant que programme, mais ce programme n'est finalement que la constante de chaîne
{print "Hello"}
. Donc, l’astuce que j’utilise ici est de prendre mon DD (en gardant la même valeur de fonction que DO) et de l’exécuter deux fois. Les deux moitiés mâchent les différentes parties de la chaîne, mais ils ne mâchent pas les deux si la régularité / la bizarrerie est correcte pour le contenu et parce que ce qui reste en dehors de la chaîne après la réduction de moitié est juste la constante intégrale,d
il est inoffensif.Avec ce modèle, il n’est pas difficile d’écrire le comportement du programme s’il n’est pas divisé en deux: vous pouvez entrer n'importe quoi tant que la longueur du code est paire (impair si vous comptez le QT, qui est QUIT). Si vous devez obtenir le nombre pair d'un nombre impair, insérez un espace (il y a donc un +1 dans la formule ci-dessus sur p1 pour les longueurs de programme impaires de p1) . L'astuce semblerait écrire ce code entrelacé par la suite, qui doit passer à l'analyseur s'il n'est pas divisé par deux. (Il ne sera pas exécuté à cause de QT, mais il doit être chargé avant d'être exécuté.)
Cette affaire est triviale;
pp
charge bien comme symbole même s'il n'est pas défini et est divisé enp
impression dans chaque demi-programme. Mais nous pouvons faire une autre astuce en utilisant à nouveau un littéral de chaîne. Les programmes divisés en deux ont toujours DO défini normalement, alors nous aurions aussi pu dire:En faisant en sorte que la seule partie de l’analyseur, dans l’ensemble du cas, soit le mot symbolique
ddoo
et un littéral de chaîne, nous pouvons alors entrelacer deux programmes que nous souhaitons à l’intérieur de ce littéral de chaîne et ne pas irriter l’analyseur. Les versions divisées en deux diront simplement:..et...
Comme je le disais, cette partie semble familière aux autres solutions qui traitent les programmes comme des chaînes et les évaluent. Mais dans le cas de la concurrence, lorsque les programmes que vous packagez contiennent des chaînes imbriquées, cela crée des clés pour eux. Ici, les seules choses qui vous poseront des problèmes sont les échappements via des carets (
^
) ... faciles à contourner.(Petite note de "triche": j'ai ajouté QT pour "QUIT" en réponse à ce problème. En fait, j'avais volontairement supprimé l'abréviation pour quitter avant ... parce que je pensais que c'était seulement bon pour une utilisation en console Un espace de deux lettres s'il n'était pas dans une REPL. Je l'ajoute parce que je me suis trompé, mais je ne l'ai pas ajouté pour ce cas en particulier. Néanmoins, avant ce changement, il aurait fallu 2 caractères de plus. Quand j'ai posté la solution pour la première fois, il y avait un bogue dans Rebmu qui l'empêchait de fonctionner même s'il aurait dû le faire ... maintenant, cela fonctionne.)
la source
Perl
186139135Quelles sont les meilleures choses dans la vie?
écrase tes ennemis
entendre les lamentations de leurs femmes
En utilisant des réponses moins longues:
Perl
7972What are my preferred weapons?
(30 octets, H (X) = 3,76)swords
(H (X) = 2,25) etmaces
(H (X) = 2,32)la source
Python -
139103What are the ingredients for success?
->Unicorns
etRainbows
Tester:
Ancienne version:
la source
Haskell, 117
Travailler avec le paradigme fonctionnel de Haskell signifie que tout doit être affecté à une variable ou commenté avec des commentaires de ligne
--
ou de bloc{- -}
; le fait d'exécuter des fonctions non-sens sans affectation est épuisé. Donc, pour rester saine d'esprit, j'ai gardé la question et les réponses aussi courtes que le permettaient les règles.Question: De quoi ne puis-je pas en avoir assez?
"Chaussures" et "gâteaux":
NB: l'apparition de
crank
"Que puis-je ne pas en avoir assez?" ne devrait pas être considéré comme significatif.la source
Wa
est dans le commentaire de bloc, donc, non, ce n'est pas réellement anpttLWa.Lisp (76 caractères)
Question à 31 caractères, 6 caractères dans chaque réponse ⟹ longueur - charge utile = 33
Je voulais utiliser «Quelle est votre couleur préférée?», Mais même avec une orthographe britannique, il n’atteignait que le minimum de 30 caractères pour la longueur de la question, et j’avais besoin d’une question de longueur impaire pour équilibrer les guillemets.
Ils disent que Common Lisp est prolixe, mais vous ne le croiriez pas. Ce n'est même pas très obscur, il suffit d'insérer un peu d'espace pour voir ce qui est cité et ce qui est exécuté.
De nombreuses implémentations Lisp vont crier les couleurs, car elles déforment les symboles en majuscules. Si cela vous dérange, changez
''fmuacghesnitaa
en""fmuacghesnitaa""
.la source
STATA 295
Question: Quels sont les meilleurs desserts à cuire en ce moment? Réponse: brownies et biscuits.
Explication: Les commandes dans STATA sont délimitées par de nouvelles lignes.
Alors que "//" est un commentaire dans STATA, "///" indique au compilateur de continuer à la ligne suivante et d'inclure son contenu dans la commande en cours.
Les commandes de STATA peuvent souvent être abrégées au point où elles sont considérées comme suffisamment uniques pour pouvoir être différenciées (ainsi, "generate" devient "g", "global" devient "gl" ou "glo", "capture" devient "cap", " display "devient" di ", etc.). La commande d'affichage affiche le texte à l'écran. La commande de capture capture toutes les erreurs (y compris les erreurs de syntaxe), raison pour laquelle ce programme est compilé correctement.
Je suppose que si vous voulez être pointilleux, les "/" supplémentaires après les 3 premiers consécutifs d'une ligne sont ignorés par le compilateur. En outre, dans le programme "Brownies", techniquement "" est un commentaire. Mais je prétends que cela compte toujours parce que la commande de capture l'aurait toujours rendue inutile même si ce n'était pas un commentaire.
Merci d'avoir lu ma très longue explication. Passons maintenant au code:
"Quels sont les meilleurs desserts à cuire en ce moment?"
"Brownies"
"biscuits"
la source
Ksh (82 caractères)
Question à 35 caractères, 5 caractères dans chaque réponse ⟹ longueur - charge utile = 37
J'abuse de la syntaxe de définition de fonction au-delà de POSIX. Dash et bash ne peuvent pas le prendre mais ksh (domaine public ou ATT) le peut.
Rien d'extraordinaire, juste un peu d'écho. Ne gaspille pas, ne veux pas.
la source
PowerShell 88
Quel est mon équipement préféré? (30 caractères, H (X) = 4.0314)
épée (5 caractères, H (X) = 2.32193)
bouclier (5 caractères, H (X) = 2.58496)
Sur le programme complet, il redirige les chaînes vides vers une variable non existante
${x}
(les guillemets de ces chaînes vides sont utilisés pour former une chaîne non-sens qui est redirigée vers un bloc vide{}
ou une variable non existante$x
sur les versions paires / impaires), puis affiche la question et déclare 2 variables inutilisées (qui sont imprimées et placées à côté d’une autre variable inutilisée$XXXXXX
ou$XXXXXXX
sur les différents cas).la source
GolfScript, 51 octets
Sortie
Comment ça marche
.;
duplique la chaîne et supprime la copie.""
pousse une chaîne vide.thaeialdss
est indéfini, donc il ne fait rien.Odd chars
Sortie
Comment ça marche
;
supprime la première chaîne de la pile.Même les caractères
Sortie
Comment ça marche
Wihaetesdso
eton
sont noops..
duplique la chaîne vide sur la pile.la source