Écrire des lignes en détention

63

introduction

Mauvaises nouvelles les gars - vous avez la détention. Votre professeur d'anglais ne comprend pas ce site et souhaite que vous "cessez de faire des mathématiques avec vos dohickey numériques, c'est un cours d'anglais!"

Elle vous a condamné à écrire son dicton préféré au tableau 25 fois, ce qui donnera un total de 100 lignes au tableau.

The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.

Heureusement pour vous, vous êtes un lecteur assidu (sans parler d'un expert en code-golfeur)! Vous avez lu un truc qui pourrait vous aider facilement.

fox-trot

(Foxtrot par Bill Amend)

Malheureusement pour Jason, ça n'a pas marché. Mais vous avez une meilleure idée! Puisque votre professeur d'anglais pense que vous faites des maths, si vous laissez tous les chiffres en dehors de votre programme, cela pourrait marcher! Vous souhaitez également que votre programme soit aussi bref que possible car vous êtes un étudiant paresseux et vous ne voulez pas écrire beaucoup au tableau.

Ecrivez un programme qui respecte les règles suivantes:

  • Votre programme doit imprimer les 4 lignes ci-dessus 25 fois. Les lignes doivent être sorties dans cet ordre, en répétant. Totale exactement 100 lignes de sortie (une nouvelle ligne finale à la toute fin ou une nouvelle ligne principale au tout début est acceptable).
  • Vous ne pouvez pas utiliser les caractères 0123456789. Votre professeur est perturbé par les mathématiques et vous appellera!
  • Vous pouvez utiliser des importations et des bibliothèques externes sans compter les importations. Votre professeur d'anglais ne connaît pas la programmation. Jason aurait pu économiser beaucoup de travail en n'écrivant pas #include <stdio.h>et vous ne voulez pas commettre les mêmes erreurs!
  • Marquez votre programme en bytenombre. Le score le plus bas gagne!
hmatt1
la source
2
Si le texte avait lu "1900", écrire le résultat aurait été légèrement plus délicat.
Ingo Bürk
30
au comix: il n'imprime pas \ n's, et la boucle de 1 est assez maladroite (comme contre C nature) ...
VX
11
@VX Bill Amend est un Pascal de longue date, et chaque fois qu'il écrit C, cela devient assez évident.
moelleux
5
Cela ressemble beaucoup à l'un de mes anciens professeurs d'anglais.
Kaz Wolfe
2
Interdire + aurait eu du sens ici, mais cela aurait peut-être été trop difficile.
Pharap

Réponses:

9

CJam, 109 107 106 104 103 octets

0000000: 22 0c 20 4f 18 41 e4 d8 a5 f3 95 cf 5e 2b cb 1c  ". O.A......^+..
0000010: 44 64 2f bf 28 23 e2 47 4e 4e 77 73 fc 43 09 a2  Dd/.(#.GNNws.C..
0000020: 09 0b fb 18 29 e8 e8 49 5d fc 00 da b8 70 b6 3e  ....)..I]....p.>
0000030: 0c 24 d7 5a 5b 28 1c 45 2e 90 63 86 04 5c 3e 95  .$.Z[(.E..c..\>.
0000040: 4b ae 66 22 48 48 2a 62 46 47 2b 62 22 54 0a 20  K.f"HH*bFG+b"T. 
0000050: 2d 2e 22 27 7b 2c 57 25 7c 66 3d 7b 28 2f 29 2a  -."'{,W%|f={(/)*
0000060: 7d 5a 2a 43 44 2b 2a                             }Z*CD+*

Ce qui précède est un vidage xxd réversible.

Essai

Vous pouvez générer et exécuter le code ci-dessus en l'exécutant dans l' interpréteur en ligne :

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time ""T
 -."'{,W%|f#31bHH*b:c`'\2*/'\*"HH*bFG+b""T
 -."`"'{,W%|f={(/)*}Z*CD+*"]:+~

Pour voir le code généré (sans l'exécuter), supprimez le dernier ~.

Pour compter le nombre d'octets (un caractère est un octet dans ISO-8859-1), remplacez le dernier ~par a ,.

Version imprimable (122 octets)

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time "{(/)*}Z*CD+*

Après avoir poussé la chaîne (S), les opérations suivantes sont exécutées:

{    }Z*        " Repeat 3 times:     ";
 (              "     Q := S.shift()  ";
  /             "     T := S.split(Q) ";
   )            "     R := T.pop()    ";
    *           "     S := T.join(R)  ";
        CD+*    " S *= 12 + 13        ";

Moar jouer au golf

Après avoir poussé la chaîne non imprimable (U), les opérations suivantes sont exécutées:

HH*b                        " U := U.base(17 * 17) ";
    FG+b                    " U := U.base(15 + 16) ";
        "T\n -."            " P := 'T\n -.'        ";
                '{,W%|      " P |= 'zyx...\0'      ";
                      f=    " U[i] -> P[U[i]]      ";

Cela pousse la chaîne de la version imprimable. Le reste du code fonctionne comme avant.

Dennis
la source
En utilisant le code, je reçois ce code généré qui est de 144 octets. Est-ce que je fais quelque chose de mal ?
Optimiseur
Le codage UTF-8 entraînerait un nombre d'octets plus élevé, oui. Avec ISO-8859-1, le nombre d'octets est 109. Vous pouvez le remplacer ~par ,pour vérifier.
Dennis
2
J'ai eu le résultat exact obtenu par Optimizer, mais en l'ajoutant, ]:+~cela a fonctionné. Pourquoi ne pas simplement ajouter cela à votre code?
Lumineux
1
@ user23013: l'interpréteur Java respecte $ LANG pour les E / S. En interne, CJam n'a que des caractères 16 bits.
Dennis
3
En fait, vous n'avez pas besoin d'unicode-iser votre solution, car sans compression elle-même, elle ne contient que 124 octets, surpassant toutes les autres.
Optimiseur
77

JavaScript (ES6) 164

B='teen-hundreds were a time',alert(B.replace(/./g,
"The eigh"+B+" for rum.\nThe nine"+B+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

Testez dans la console FireFox / FireBug.

edc65
la source
19
C'est du génie!
Optimiseur
1
Oui, en remplaçant chaque caractère par la plus grande chaîne. Faire 25 copies de la plus grande chaîne.
Optimiseur
1
Ce @Optimizer est génial :)
FryAmTheEggman
3
@Malvolio En fait, la section répétée est composée de 30 caractères. Et je pouvais montrer une énorme séquence de tentatives, ajouter et couper des mots et remplacer les remplaçants avant de trouver cette solution simple.
Edc65
1
@IsmaelMiguel Je pense que vous voulez dire n'importe quel navigateur ES6. Problème: au moment de publier ce défi, les modèles de chaîne n'étaient implémentés dans aucun navigateur: Firefox était le premier - rel 34, premier déc 2014 - puis Chrome, mars 2015. Mais même sans chaînes de modèles, votre fouillis serait de 153, meilleur que le mien. . Vous devriez poster comme une réponse.
edc65
34

Python: 188 173 160 153

a="teen-hundreds were a time"
print"The eigh%s for rum.\nThe nine%s for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"%(a,a)*len(a)

Je ne python pas beaucoup, mais cela me semble assez court.

Edit: Donc je me suis trompé, ce n'était pas court du tout! Merci pour l'aide dans les commentaires: D

Géobits
la source
1
Vous pourriez perdre la nouvelle ligne et mettre en retrait sur la boucle for pour économiser quelques octets.
Holloway
1
@ Geobits, je fais que 157
Holloway
1
@ Geobits exécutez-vous sur une machine Windows? Les lignes de codage dans les fenêtres sont souvent \ r \ n au lieu de \ n. C'est peut-être pourquoi il affiche 157 octets pour nous, mais 160 pour vous.
Rob Watts
2
Ceci est 160 seulement. Vous sautez probablement les trois \en \nraison de votre fuite ...
Optimiseur,
1
Vous pouvez déplacer la valeur de bdans print: la %priorité est plus grande que *.
FryAmTheEggman
29

CJam, 151 140 135 132 130 128 octets (Tweetable)

"TeighYrum.TnineYfun.Ttwo-thousands are a time to run
a civilized classroom.""YT"["teen-hundreds were a time for ""
The "]erAF+*

Essayez-le ici

Je suis en mesure de réduire ce nombre à 110 octets en le convertissant en unicode, mais comme cela ne bat pas l'autre solution unicode, je préférerais ne pas le mettre :)

Optimiseur
la source
23
Hé, que fait cet :Démoticône là-bas?! Envoyez-vous des textos à vos amis pendant votre détention? Allez au bureau du directeur!
Poignée de porte
2
@Doorknob: D: P
Optimizer Le
Vous pourriez peut-être créer un Talias .\nThe , puis supprimer la ligne supplémentaire générée dès le début de la chaîne de sortie (mon cjam-fu n'est pas assez bon pour savoir si vous pouvez le faire facilement)
@professorfish qui consomme plus d'octets qu'il n'enregistre. mothereff.in/… *% 28Y% 2F% 28% 40 \
Optimiseur Le
Nitpicking: l’utilisation des 128 octets supérieurs d’une page de code compatible ASCII n’a rien à voir avec Unicode.
Dennis
23

PHP, 0 octet



Vous pouvez utiliser des importations et des bibliothèques externes sans compter les importations.

Pour exécuter ce code, vous devez importer une bibliothèque appelée data://text/plain,<?php...classroom.\n";avec ceci:

<?php require_once 'data://text/plain,<?php
  for($i=ord("z");$i>ord("a");$i--)
    echo "The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";'; ?>

Et vous devez avoir allow_url_includeactivé dans votre php.ini.

Plus de chiffres ou d'extensions, grâce à Dennis.

jimmy23013
la source
9
Mon premier instinct a été de crier quelque chose à propos des échappatoires, mais comme cette réponse est autonome, je pense que c'est une façon intelligente d'utiliser PHP pour exploiter une échappatoire créée délibérément pour les réponses Python. Puisque vous êtes déjà en train de tricher, vous pouvez simplement utiliser require_once "data://text/plain,The eighteen-hundreds...";, ce qui ne nécessite pas sh , n'utilise pas de chiffres et reste 0 octets.
Dennis
10
Je vais voter ceci pour la créativité mais je ne l'accepterai pas.
hmatt1
14

Rubis, 185 180 176 octets

EDIT: interpolation de chaîne, merci @britishtea

C'est mon premier golf, et je ne suis pas vraiment un rubiste (mais j'adore Ruby). En tout cas, ça y est (raccourci, suggestion de Doorknob).

t=' were a time for '
s="The eighteen-hundreds#{t}rum.
The nineteen-hundreds#{t}fun.
The two-thousands are a time to run
a civilized classroom."
s.split.size.next.times{puts s}
jmm
la source
1
Vous pouvez continuer à jouer en remplaçant certains des mots / groupes de mots répétés par une interpolation de chaîne.
britishtea
3
+1 pour avoir remarqué qu'il y a (presque) 25 mots dans la chaîne
Digital Trauma
2
s.split.size.nextenregistre 5 caractères (vous n'avez pas besoin de spécifier l'espace sur lequel se séparer).
Poignée de porte
Je ne connais pas Ruby, mais ne serait-il pas (s.split.size+1).timesplus court d'un octet?
seequ
1
@Sieg pas autorisé à utiliser des chiffres!
Réduire
13

Java 249 231 230 222

Ma première réponse! Pourquoi ne pas commencer par utiliser le langage que je connais si bien.

class c{public static void main(String[]g){for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));}}

Ungolfed

import static java.lang.System.*;
class c
{
    public static void main(String[]g)
    {
        for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));
    }
}
Lumineux
la source
9
Bienvenue! Vous pouvez supprimer le contenu de publicvotre classe et le réduire argsà un seul personnage. Vous pouvez également le faire a++<':'au lieu de l'incrémenter séparément. Puisque l'OP ne compte pas les importations, vous pouvez économiser un peu plus avec import static java.lang.System.*;, alors vous n'avez pas besoin d'écrire System.plus tard (là où ça compte). En faisant cela, je suis descendu à environ 230. Si vous ne l'avez pas déjà fait, vous pouvez jeter un coup d'œil à la page des astuces Java .
Geobits
@Optimizer Merci! Je n'ai tout simplement pas vu le barrage ci-dessus.
Lumineux
@Luminous NP :)
Optimiseur Le
@ Geobits Merci! Apparemment, vous pouvez également coller du code directement dans la boucle elle-même. N'ajoutez ou ne supprimez rien, mais je pense que cela ressemble plus à du golf de cette façon.
Lumineux
4
L'abus de boucle est assez commun. Si vous avez plusieurs déclarations dans le corps, vous pouvez en placer une à l'extérieur et le reste à l'intérieur pour sauvegarder un seul caractère (car vous avez de toute façon besoin d'un point-virgule à l'extérieur). Beaucoup de golfes finissent par être une grosse boucle de cette façon. Aussi, "semble plus golfé" est une raison tout à fait valable de faire n'importe quoi même si cela ne sauve pas: P
Geobits
11

C 171

a='a';b="teen-hundreds were a time for ";main(){for(;a++<'z';)printf("The eigh%srum.\nThe nine%sfun.\nThe two-thousands are a time to run\na civilized classroom.\n",b,b);}

Au début, j'ai essayé la version simpliste (189 octets), qui était meilleure que l'autre solution C ...

main(a){for(a='a';a<'z';++a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

que j'ai optimisé un peu plus tard ...

VX
la source
1
Hein, c'est chouette. Je n'avais pas réalisé que les variables statiques auxquelles les littéraux de chaîne leur étaient affectés implicitement avaient un type char *.
FireFly
@FireFly GCC compile bien sur le supposé aparce qu'il vaut par défaut int, ce qui peut accepter une charvaleur. Il n'aime pas à bmoins que je l'appelle un char[]si. VX, quel compilateur utilisez-vous?
Level River St
best inttrop, mais il contient le pointeur sur le littéral de chaîne. C'est complètement ok dans GCC (j'ai sur ma machine 4.8.2).
VX
1
for(a='a';++a<'z';)
seequ
9

JavaScript, ES6, 174 172 154 octets

Utiliser le replacetruc de @ edc65 . Merci!

alert((d="teen-hundreds were a time").replace(/./g,`The eigh${d} for rum.
The nine${d} for fun.
two-thousands are a time to run
a civilized classroom.
`))

Fonctionne uniquement dans les dernières versions de Firefox (34 et plus) en raison de l'utilisation de chaînes de modèle.

Optimiseur
la source
@ Nijikokun Vous savez que cela causera 30 répétitions au lieu de 25, n'est-ce pas?
Optimiseur
Je suppose que ff 34 est une version bêta ou quelque chose comme ça depuis que je suis au plus tard (juste vérifié) et il est 33 et il ne fonctionne pas là
Sammaye
8

BrainFuck ( 1 597 caractères )

+++++++++++++++++++++++++[>->-[--->+<]>-.[---->+++++<]>-.---.--[--->+<]>-.+[->+++<]>++.++++.--.+.++++++++++++.+++[->+++<]>..+++++++++.[----->++<]>+.[->++++++++<]>.[--->+<]>---.-------.----------.++++++++++++++.-------------.-.--[--->+<]>---.+[---->+<]>+++.--[->++++<]>-.[->+++<]>.+++++++++++++.-------------.--[--->+<]>-.[->+++<]>+.-[->+++<]>.---[->++++<]>.-----------.++++.--------.--[--->+<]>-.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.---[----->++<]>.+++.--------.+[----->++<]>++.>++++++++++.>-[--->+<]>-.[---->+++++<]>-.---.--[--->+<]>-.+[----->+<]>+.-----.+++++.---------.[--->+<]>---.+++[->+++<]>..+++++++++.[----->++<]>+.[->++++++++<]>.[--->+<]>---.-------.----------.++++++++++++++.-------------.-.--[--->+<]>---.+[---->+<]>+++.--[->++++<]>-.[->+++<]>.+++++++++++++.-------------.--[--->+<]>-.[->+++<]>+.-[->+++<]>.---[->++++<]>.-----------.++++.--------.--[--->+<]>-.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.++[->+++<]>.-[--->+<]>--.-------.[----->++<]>++.>++++++++++.>-[--->+<]>-.[---->+++++<]>-.---.--[--->+<]>-.---[->++++<]>.+++.--------.[->+++++<]>++.+[--->++<]>.------------.+++++++.++++++.--.++[->+++<]>++.+++++++++++++.----------.--[--->+<]>---.+[---->+<]>+++.[->+++<]>+.--[--->+<]>---.-------------.--[--->+<]>-.[->+++<]>+.-[->+++<]>.---[->++++<]>.-----------.++++.--------.--[--->+<]>-.---[->++++<]>.-----.[--->+<]>-----.---[----->++<]>.+++.-------.>++++++++++.--[--->++++<]>+.-[->+++<]>.+[->+++<]>.++++++.[->++++++<]>.[------>+<]>.+++.---.-[--->+<]>++.---[->+++<]>.-.-[--->+<]>-.+[->+++<]>.+++++++++.-----------.--[--->+<]>--..-.---..--.+[----->++<]>++.>++++++++++.[[-]<+]<-]

Cela peut encore être joué si quelqu'un est intéressé.

Vous pouvez tester cela et vérifier qu'il donne le bon résultat tout en respectant toutes les règles.

Kevin Brown
la source
5
Qu'est-ce que c'est ça? Je vous ai dit d'écrire des phrases, pas des gribouillis aléatoires! Il n'y a même pas de mots ici!
Riking
5
Ummm .. Je pense que l'objectif est d'utiliser le moins de caractères possible. Vous avez bien gagné "l'anti-but" :-)
Carl Witthoft
7

Perl - 145

Je suis heureux de voir autant de réponses! Voici une solution Perl.

$s="teen-hundreds were a time for";print"The eigh$s rum.
The nine$s fun.
The two-thousands are a time to run
a civilized classroom.
"for b..z
hmatt1
la source
7

Comme elle déteste tellement les mathématiques, pourquoi pas Mathematica (177)

   a = "teen-hundreds were a time for "; Do["The eigh" <> a <> "rum.
   The nine" <> a <> "fun.
   The two-thousands are a time to run a civilized classroom." // Print, {StringLength@a}]
Ryan Polley
la source
6

Javascript ES6, 198 193 octets

m=Math;alert("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n".repeat(~~(m.exp(m.PI)+m.E)))

Votre professeur ne veut pas de chiffres, mais comme ils sont professeurs d’anglais, ils n’ont aucune idée de ce qu’ils veulent Math.floor(Math.exp(Math.PI)+Math.E)dire.

Plus lisiblement:

alert("The eighteen-hundreds were a time for rum.\n\
 The nineteen-hundreds were a time for fun.\n\
 The two-thousands are a time to run\na civilized\n classroom.".repeat(Math.floor(Math.exp(Math.PI)+Math.E)))

Doit être exécuté dans le dernier firefox

scrblnrd3
la source
1
Manquant une nouvelle ligne à la fin, les première et dernière lignes sont donc ajoutées, ce qui donne 75 lignes
edc65
Je vais attribuer +1 pour avoir plié les règles avec la référence de e ^ pi de XKCD, mais avec + e par opposition à -pi ... Bravo!
WallyWest
-4 octets:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore
Oh bien, oubliez Math:(q='aaaaa'.length)*q
edc65
Oubliez @ edc65 commentez aussi! Utilisez ceci "\x18".charCodeAt():! (codez la flèche vers le haut et vous économiserez une tonne!)
Ismael Miguel
6

Javascript - 178 octets 176 octets

Mon premier golf, en pensant que je tenterais le coup avec des opérateurs un peu difficiles, n’a pas été aussi réussi que prévu, mais bon!

c="teen-hundreds were a time for "
b=!!c
alert(Array((b+b+b<<b+b)+b<<b).join("The eigh"+c+"rum.\nThe nine"+c+"fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

Depuis que je suis déjà en détention, et évidemment j'ai du mal à me comporter ... Javascript - 71 Bytes

Celui-ci me causera probablement plus de problèmes, mais si je me suis déjà retrouvé en détention ET si je prévois de tromper ma détention, il me manque apparemment un bon jugement sur la manière dont je devrais me comporter en classe. Peut-être que si je peux en mettre un sur mon enseignant, je peux en avoir un sur tous les autres golfeurs.

b=+true;alert( Array((b+b+b<<b+b)+b<<b).join($('code')[+!b].innerHTML))

Rapide! Utilisateurs de Chrome / IE 11 / Firebug, ouvrez MAINTENANT vos consoles et essayez-les.

(S'il vous plaît ne me faites pas trop mal, je pensais que c'était drôle)

Sidney
la source
1
Le 72 est amusant. 176 est souvent faux: Array (25) .join () donne 24 répétitions et une nouvelle ligne à la fin de la phrase est manquante. Au total, 24 * 3 = 72 rangées au lieu de 100 (garçon paresseux!)
edc65
AUGH, ok fixé. Maintenant, 178 et 71.
Sidney,
1
Vous pouvez économiser 2 octets en ajoutant le t et un espace de fin dans "een-centaines ... pour".
Lumineux
Que fait le second code?
moitié
1
@justhalf, il utilise JQuery, une bibliothèque JavaScript commune que le réseau SO utilise apparemment. Le $ est en fait une fonction qui, parmi beaucoup d'autres choses, prend beaucoup de travail dans la sélection des éléments du DOM. En utilisant $ ('<sélecteur>'), qui est dans ce cas tous les éléments avec la balise 'code', j'obtiens un objet contenant tous les éléments. En utilisant [+! B], j'obtiens la valeur entière de false, qui est zéro, alors je sélectionne le 0ème index, qui se trouve être le premier bloc de code de l'OP, qui est en fait le dicton préféré des enseignants.
Sidney
5

C # - 229 216 octets

usingFTW gratuit !

using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=a.Length,i=b-b;i++<b;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}

Alternative, même nombre d'octets (plus d' usingabus, cependant)

using i=System.Int32;
using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=new i();b++<a.Length;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}
William Barbosa
la source
4
~~ (° □ ° ╯︵ ╯︵
William Barbosa
Vous pouvez ajouter "pour" àa
FryAmTheEggman
@FryAmTheEggman la chaîne est composée de 25 caractères, il l'utilise pour obtenir le nombre 25 de manière discrète. Cependant, il peut échanger cette méthode pour simplement soustraire les caractères les uns des autres ( ':'-'!'== 25), ce qui est plus court que a.Length, et permettra d’être inclus comme vous le suggérez. (Alternativement, faites comme les autres réponses, et faites une boucle entre !et :, c'est drôle, nous avons tous choisi les mêmes caractères)
VisualMelon
@VisualMelon Oups, vous avez tout à fait raison.
FryAmTheEggman
1
Je pensais que je pouvais, puisque les utilisations ne sont même pas comptées, est-ce que OP a clarifié cela?
William Barbosa
5

Befunge-93, 268 260 256 (taille de la grille: 72x6 = 432)

#v"K">:!#@_v>$"enin">,,,,::-" rof emit a erew sderdnuh neet">:#,_$::!!-#
, ,,,"The "<|\!\%-"\^"::%-" #":-!!:
   -"#-"-::$_ "hgie"^v1"two-thousands are a time to run"
$_$  "nuf"v"rum"
v1-"##",,,<      >:#,_"moorssalc dezilivic a"1
_# < ^,,\-"AK."$_,#!:

C’est la première fois que je joue au golf, j’ai donc décidé d’essayer un langage qui n’avait pas déjà été fait pour résoudre ce problème, car je n’ajouterais rien sinon. Comme il est compatible avec Befunge-93 (s’intègre dans une grille 80x25 et n’utilise que des instructions Befunge-93), il devrait également fonctionner avec Befunge-98. Juste au cas où, j’évitais également que le pointeur passe sur des caractères autres que des caractères autres que l’espace. Je ne me souvenais pas si la spécification définissait réellement ces caractères comme des no-ops, et je n'aurai aucun démon nasal dans mon code.

Vous ne pouvez pas vraiment ungolf code Befunge. L'essentiel à noter ici est que Befunge place les caractères dans la pile en tant que valeurs ASCII, ce qui rend relativement simple la référence à des nombres sans les référencer littéralement. le"K" chiffre en haut à gauche est 75, indiquant le nombre de répétitions multiplié par le nombre de clauses "les" par répétition; J'utilise le module et d'autres astuces sur (des copies de) ce numéro pour déterminer quel chemin emprunter à travers l'impression à chaque remise. ::-est un bel idiome pour zéro, utile pour les chaînes à terminaison zéro; Je l'utilise deux fois ici.

Parfois, le pointeur doit passer par un endroit où je définis une chaîne, d'où le choix spécifique des caractères utilisés pour obtenir certains nombres à certains endroits.

La bonne chose à propos de beaucoup d’interprètes de Befunge est que vous pouvez regarder le pointeur fléchir autour de la grille, ainsi que voir quelles valeurs sont dans la pile. De cette façon, vous pourrez voir comment le programme fonctionne vous-même, plus ou moins! Je recommanderais d'utiliser http://befungius.aurlien.net/ si vous n'avez pas votre propre interprète Befunge préféré.

Cela peut probablement être réduit un peu (ou beaucoup) plus. S'il vous plaît donnez-moi des commentaires! Si je dois fournir une meilleure explication, quelqu'un me le fera savoir. Je suis nouveau à cela.

Edit - supprimez quelques octets en supprimant la redirection inutile vers la dernière ligne à la fin du programme (en plaçant simplement @où se trouvait ^auparavant).

Une autre édition - rasé quelques octets supplémentaires dans divers endroits, principalement avec des ruses. (A également ajouté la taille de la grille, comme cela semble être la tendance avec les réponses Befunge.)

Kasran
la source
Salut Kasran, bienvenue dans la pile de codegolf! Cette réponse a fière allure. Votre explication est bonne et vous avez lié à un interprète Befunge, ce qui est vraiment utile pour les langages étranges. Tout le monde n’a pas de compilateur (les gens font généralement des choses comme "exécuter ceci ici").
hmatt1
Befunge est un langage très dur, et vous devez garder la taille du code dans votre esprit lorsque vous écrivez. Votre code a fière allure et fonctionne. Mais est-ce que cela réduirait la taille si vous économisiez re a time quelque part?
Ismael Miguel
Je ne connais aucune instruction ni aucun comportement spécifique à Funge-98, mais depuis que j'ai écrit cette réponse, j'ai appris que certains comportements de l'interpréteur Befungius n'étaient pas standard, à savoir l'utilisation #d'un bout de ligne pour sauter le caractère à l'autre extrémité (dans CCBI , par exemple, le #saute l'espace infini entre lui et le caractère à l'autre extrémité), ce qui rompt ce programme. Je n'ai pas pris la peine de revenir et de corriger cette soumission en gardant cela à l'esprit.
Kasran
Il y a quelques 1chiffres, qui ne sont pas autorisés
Jo King
4

Pyth 135 136 140

*ltG%"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"*hhZ("teen-hundreds were a time for "".\nThe 

Notez l'espace de fuite.

Utilise à peu près la même astuce que @Geobits et ses amis commentateurs dans la réponse en Python pour construire la chaîne. Maintenant utilise également une partie de cette réponse .

Ceci utilise la variable intégrée G, qui contient abcdefghijklmnopqrstuvwxyzet obtient une longueur inférieure à sa longueur pour produire les 25 sorties.

FryAmTheEggman
la source
1
Cela semble être 136 octets au lieu de 135
Optimiseur
1
@Optimizer Désolé, je devrais lire mes propres notes: j'ai oublié l'espace de fuite quand je l'ai collé moi-même: S
FryAmTheEggman
4

Ruby - 152 141

puts"The eight#{e="een-hundreds were a time for "}rum.
The ninet#{e}fun.
The two-thousands are a time to run
a civilized classroom.
"*(?X-??)

http://repl.it/2Om/6

Mikey
la source
1
Utilisation intelligente des littéraux de caractères de 1.8! Vous pourrez peut-être utiliser String#*pour répéter les lignes 25 fois au lieu de Integer#times.
britishtea
@britishtea - a travaillé une friandise :)
Mikey
1
Vous pouvez supprimer quelques octets supplémentaires en n'attribuant pas les lignes en premier. L'espace entre les options de vente et le littéral de chaîne est facultatif ( puts"hi"légal).
britishtea
Associer e à l'interpolation est une bonne idée.
Wayne Conrad
3

Python, 165 octets

h="hundreds were a time for "
t="The "
for i in h:print t+"eighteen-"+h+"rum.\n"+t+"nineteen-"+h+"fun.\n"+t+"two-thousands are a time to run\na civilized classroom."

Cela a très bien fonctionné que la longueur de h soit 25, ce n'était pas intentionnel. =)

DJMcMayhem
la source
3

Python 2 - 143

Une réponse idiote:

from this import i
a="teen-hundreds were a time for ",".\nThe "
print"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"%(a+a)*i

Notez que le nombre total est 162. J'ai laissé de côté tous from this import i .

Utilise des substituts similaires à ma stratégie pythique, mais je ne pouvais pas m'empêcher de poster ceci après avoir découvert l'hilarité d'importer à partir de cela :)

FryAmTheEggman
la source
+1 Pour une utilisation de from this import i! Comment avez-vous su à ce sujet?
Beta Decay
1
@ BetaDecay J'étais ennuyé et j'ai décidé de lire le zen de python. Je suis donc allé voir mon interprète et j'ai écrit import this. Puis j'ai pensé: "Que pourrait-il y avoir d'autre dans le thismodule?" Alors j'ai appelé dir(this). Et voilà, avec un dictionnaire, une ficelle "!"
tronquée
3

PHP (175 157156 octets; 152 avec unix EOF):

Pas la solution la plus golfée, mais fait sûrement le travail et est plus petit que certaines tentatives.

Voici le code:

$a=a;$f='re a time';$r="teen-hundreds we$f for";while($a++<z)echo"The eigh$r rum.
The nine$r fun.
The two-thousands a$f to run
a civilized classroom.
";

Ancienne version:

$a=a;while($a++!=z)echo"The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";

Cela fonctionne parce que php effectue un cycle des caractères, et nous vérifions simplement si ce n'est pas le cas zet nous arrêtons.

(Une curiosité est que lorsque php atteint z, il va ensuite à aa.)

Ismael Miguel
la source
3
La convention générale ici est de compter les nouvelles lignes comme un seul octet, à moins que votre langue ne soit si obstinée qu'elle n'accepte que CRLF, ce qui n'est pas le cas pour PHP.
nyuszika7h
3

Python 2 - 155

Remarque: comme les caractères de contrôle n'apparaissent pas sur SE, je les ai remplacés par\x19.

a,b='\nThe ','teen-hundreds were a time for '
print(a+'eigh'+b+'rum.'+a+'nine'+b+'fun.'+a+'two-thousands are a time to run\na civilized classroom.')*ord('\x19')

Version base 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=
Beta Decay
la source
En ce qui concerne l'importation, je pense que vous pourriez économiser un peu avec from string import *ou comment il s'appelle en Python
FireFly
1
Vous pouvez déplacer "adolescent" dans b.
FryAmTheEggman
2
Vous pouvez supprimer les []crochets de la première ligne, ce qui crée implicitement un tuple, puis le décompresse.
Poignée de porte
Vous pouvez également déplacer leord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman
1
@Dennis La dernière édition de l'OP autorise les nouvelles lignes.
Beta Decay
3

LiveScript - 181

p=(a,b)->"The #{a}teen-hundreds were a time for #b.\n"
each console.log,map (->(p \eigh \rum)+(p \nine \fun)+'The two-thousands are a time to run\na civilized classroom.'),[\A to\Y]

Importations requises:

{each, map} = require 'prelude-ls'

Si vous souhaitez l'exécuter sous Node.js, installez les packages LiveScript( not livescript ) et prelude-lsnpm, remplacez-les alertpar console.loget exécutez-les lsc prog.ls, où prog.lscontient le programme.

nyuszika7h
la source
13
Voir les règles: "Vous ne pouvez pas utiliser les caractères 0123456789"
Paul R
2
Belle prise, fixe.
Nyuszika7h
2

T-SQL: 206

Utilise une jointure croisée sur cinq lignes pour générer 25 lignes en sélectionnant la phrase. Les sauts de ligne sont importants pour la sortie.

with c as(SELECT\ N FROM(VALUES(\),($),($),($),($))A(B))SELECT REPLACE('The eigh$rum.
The nine$fun.
The two-thousands are a time to run
a civilized classroom.','$','teen-hundreds were a time for ')FROM c a,c b
MickyT
la source
2

Bash, 151 octets

Plutôt un port droit de votre propre réponse

t="teen-hundreds were a time for"
for i in {a..y};{
echo "The eigh$t rum.
The nine$t fun.
The two-thousands are a time to run
a civilized classroom."
}
Trauma numérique
la source
2

C, 196 caractères

Ce n’est pas une tâche facile pour un bon vieux C. L’affacturage avec le motif "% steen-centaines ..." m’en épargne deux caractères.

Espace blanc pour plus de clarté, inclure non compté.

#include <stdio.h>
main(){
  for (char*p="The %steen-hundreds were a time for %s.\n",
           *s="The two-thousands are a time to run\na civilized classroom.",
           *q=p;
       *q++ - 'a';
       puts(s))
   printf(p,"eigh","rum"), printf(p,"nine","fun");
}
Luciole
la source
2

Ruby, 145

?K.upto(?c){puts"The eigh#{x="teen-hundreds we#{t="re a time "}for "}rum.
The nine#{x}fun.
The two-thousands a#{t}to run
a civilized classroom."}

Explication

  • Utilisez String#uptopour imprimer les lignes 25 fois. La plage "K".."c"est de 25 caractères.
  • Utilisez une interpolation de chaîne de base pour raccourcir les lignes.
britishtea
la source
2
#{a="The "}vous coûte en réalité plus de caractères! #{a}est la même longueur queThe
Mikey
2

Raquette 173

(let([x"teen-hundreds were a time for "])(for([z(+ #xa #xf)])(displayln(~a"The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a time to run\na civilized classroom."))))

Ungolfed:

(let ([x "teen-hundreds were a time for "])
  (for([z(+ #xa #xf)])
    (displayln (~a "The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a
     time to run\na civilized classroom."))))
Matthew Butterick
la source
2

C, 215 203 199 octets

main(a){a<<='\xC'+'\xD';while(a>>=!!a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

Ungolfed

main(a)
{
  a<<='\xC'+'\xD';
  while(a>>=!!a)
    printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");
}

J'ai utilisé peu de décalage pour itérer sans aucun nombre.

a<<='\xC'+'\xD' définit a sur 0b1 [25 zéros]

a>>=!!a décale juste un bit pour chaque fois que nous parcourons la boucle

Modifier : a est égal à argc, donc sa valeur est déjà 1 lorsque le programme est exécuté sans argument. Changé a>>='\xB'-'\xA'à a>>=!!'\xA'qui est plus court de 4 octets. De plus, le texte n'a été affiché que 24 fois. Fixe le. Suppression des crochets supplémentaires dans le fichier while.

Edit 2: changé !!'\xA'en !!a. Semble fonctionner et enregistre 4 octets

Ethiraric
la source
1
Vous pouvez utiliser putspour enregistrer plus d'octets.
Spikatrix
2

Rant, 191 octets

Pas la solution la plus courte, mais toujours cool. J'ai écrit un sous-programme pour écrire les trois premières lignes et je l'ai conçu pour que l'appelant avec un argument vide renvoie une chaîne de 25 caractères. Je passe ensuite sa longueur au répéteur.

[pin:][$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ][r:[len:[$_:]]]{[step:][$_:eigh]for rum.\N[$_:nine]for fun.\N[step:][$_:two-]to run\Na civilized classroom.\N}

Ungolfed:

[pin:]
[$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ]
[r:[len:[$_:]]]
{
    [step:]
    [$_:eigh]for rum.\N
    [$_:nine]for fun.\N
    [step:]
    [$_:two-]to run\N
    a civilized classroom.\N
}

Essayez-le en ligne

Berkin
la source