Escribir líneas en detención


63

Introducción

Malas noticias, muchachos, tienes detención. Tu profesor de inglés no entiende este sitio y quiere que "dejes de hacer matemáticas en tus dohickeys digitales, ¡esta es una clase de inglés!"

Ella lo sentenció a escribir su dicho favorito en la pizarra 25 veces, lo que le dará un total de 100 líneas en la pizarra.

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.

¡Por suerte para ti, eres un ávido lector (sin mencionar un experto en códigos)! Tienes una lectura sobre un truco que posiblemente te haga fácil.

fox

(Foxtrot por Bill Enmienda)

Desafortunadamente para Jason, no funcionó. ¡Pero tienes una idea mejor! Como su profesor de inglés cree que está haciendo matemáticas, si deja todos los números fuera de su programa, ¡podría funcionar! También desea mantener su programa lo más corto posible porque es un estudiante perezoso y no quiere escribir mucho en la pizarra.

Escriba un programa que cumpla con las siguientes reglas:

  • Su programa debe imprimir las 4 líneas anteriores 25 veces. Las líneas deben salir en ese orden, repitiéndose. Totalice exactamente 100 líneas de salida (una nueva línea final al final o una nueva línea inicial al principio está bien).
  • No puedes usar los personajes 0123456789. ¡Tu profesor se confunde con las matemáticas y te llamará!
  • Puede usar cualquier importación y bibliotecas externas sin contar las importaciones. Tu profesor de inglés no sabe de programación. ¡Jason podría haber ahorrado mucho trabajo al no escribir #include <stdio.h>y no querrás cometer sus mismos errores!
  • Califica tu programa por byteconteo. ¡La puntuación más baja gana!

2
Si el texto hubiera leído "1900", escribir el resultado hubiera sido un poco más complicado.
Ingo Bürk

30
para la comix: no está imprimiendo \ n's, y el bucle de 1 es bastante incómodo (como contra C nature) ...
VX

11
@VX Bill Enmienda es un Pascal duro desde hace mucho tiempo, y cada vez que escribe C eso se vuelve bastante evidente.
esponjoso

55
Esto se parece mucho a uno de mis viejos profesores de inglés.
Kaz Wolfe

2
Prohibir + habría tenido sentido aquí, pero tal vez eso hubiera sido demasiado difícil.
Pharap

Respuestas:


9

CJAM, 109 107 106 104 103 bytes

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+*

Lo anterior es un volcado xxd reversible.

Pruebas

Puede generar y ejecutar el código anterior ejecutando esto en el intérprete en línea :

"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+*"]:+~

Para ver el código generado (sin ejecutarlo), elimine el final ~.

Para contar el número de bytes (un carácter es un byte en ISO-8859-1), reemplace el final ~con a ,.

Versión imprimible (122 bytes)

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

Después de presionar la cadena (S), se ejecuta lo siguiente:

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

Moar golf

Después de presionar la cadena no imprimible (U), se ejecuta lo siguiente:

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]]      ";

Esto empuja la cadena de la versión imprimible. El resto del código funciona como antes.


Usando el código, obtengo este código generado que es 144 bytes. Estoy haciendo algo mal ?
Optimizador

La codificación UTF-8 daría como resultado un recuento de bytes más alto, sí. Con ISO-8859-1, el recuento de bytes es 109. Puede reemplazarlo ~con ,para verificar.
Dennis

2
Obtuve el resultado exacto que hizo Optimizer, pero agregarlo lo ]:+~hizo funcionar. ¿Por qué no agregas eso a tu código?
Luminoso

1
@ user23013: El intérprete de Java respeta $ LANG para E / S. Internamente, CJam solo tiene caracteres de 16 bits.
Dennis

3
En realidad, no tiene que unicodeizar su solución, ya que sin la compresión en sí misma solo tiene 124 bytes, superando a todos los demás.
Optimizador

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"))

Prueba en la consola FireFox / FireBug.


19
Esto es genial!
Optimizador

1
Sí, reemplazando cada carácter por la cadena más grande. Hacer 25 copias de la cadena más grande.
Optimizador

1
@Optimizer That is genius :)
FryAmTheEggman

3
@Malvolio De hecho, la sección repetida tiene 30 caracteres. Y podría mostrar una secuencia enorme de intentos, agregar y cortar palabras y reemplazar reemplazos antes de encontrar esta solución simple.
edc65

1
@IsmaelMiguel Creo que te refieres a cualquier navegador ES6. Problema: en el momento en que se publicó este desafío, las cadenas de plantillas no se implementaron en ningún navegador: Firefox fue el primero - rel 34, diciembre primero 2014 - luego Chrome, marzo de 2015. Pero incluso sin cadenas de plantilla, su scoure sería 153, mejor que el mío . Debes publicarlo como respuesta.
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)

No hago mucho pitón, pero esto me parece bastante corto.

Editar: Así que me equivoqué, ¡no fue corto en absoluto! Gracias por la ayuda en los comentarios: D


1
Podría perder la nueva línea y la sangría en el bucle for para guardar un par de bytes.
Holloway

1
@Geobits, hago eso 157
Holloway

1
@Geobits, ¿estás corriendo en una máquina con Windows? Las codificaciones de línea en Windows son frecuentemente \ r \ n en lugar de solo \ n. Esa podría ser la razón por la que muestra 157 bytes para nosotros, pero 160 para usted.
Rob Watts el

2
Esto es solo 160 . Es probable que esté omitiendo los tres \en el \nresultado del escape ...
Optimizador

1
Puede mover el valor de bal print: %tiene mayor precedencia que *.
FryAmTheEggman

29

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

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

Pruébalo aquí

Puedo acortar esto a 110 bytes convirtiéndolo en unicode, pero como eso no está superando a la otra solución unicode, prefiero no decirlo :)


23
Oye, ¿qué está :Dhaciendo ese emoticón allí? ¿Estás enviando mensajes de texto a tus amigos durante la detención? ¡Ve a la oficina del director!
Pomo de la puerta

2
@Doorknob: D: P
Optimizer

Tal vez usted podría hacer Talias para .\nThe , a continuación, quitar la línea extra que esto produce desde el inicio de la cadena de salida (mi CJAM-fu no es lo suficientemente bueno para averiguar si puede hacerlo fácilmente)

@professorfish que termina consumiendo más bytes de los que guarda. mothereff.in/… *% 28Y% 2F% 28% 40 \
Optimizador

Nitpicking: el uso de los 128 bytes superiores de una página de códigos compatible con ASCII no tiene nada que ver con Unicode.
Dennis

23

PHP, 0 bytes



Puede usar cualquier importación y bibliotecas externas sin contar las importaciones.

Para ejecutar este código, debe importar una biblioteca llamada data://text/plain,<?php...classroom.\n";con esto:

<?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.
";'; ?>

Y debes haber allow_url_includehabilitado en tu php.ini.

No más números o extensiones, gracias a Dennis.


99
Mi primer instinto fue gritar algo sobre las lagunas, pero como esta respuesta es realmente autónoma, creo que esta es una forma inteligente de usar PHP para explotar una laguna que se ha creado deliberadamente para las respuestas de Python. Como ya estás haciendo trampa, puedes usar require_once "data://text/plain,The eighteen-hundreds...";, que no requiere sh , no usa números y sigue siendo 0 bytes.
Dennis

10
Votaré esto por creatividad, pero no lo aceptaré.
hmatt1

14

Rubí, 185 180 176 bytes

EDITAR: interpolación de cadenas, gracias @britishtea

Es mi primer golf, y no soy muy Rubista (pero ciertamente amo a Ruby). De todos modos, esto es todo (acortado, sugerencia 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}

1
Puede reducir esto aún más si reemplaza algunas de las palabras / grupos de palabras que se repiten con la interpolación de cadenas.
britishtea

3
+1 por notar que hay (casi) 25 palabras en la cadena
Digital Trauma

2
s.split.size.nextahorra 5 caracteres (no necesita especificar el espacio para dividir).
Pomo de la puerta

No conozco a Ruby, pero ¿no (s.split.size+1).timessería 1 byte más corto?
seequ

1
¡@Sieg no puede usar números!
rjdown

13

Java 249 231 230 222

Mi primera respuesta! ¿Por qué no comenzar usando el idioma que conozco tan 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 ")));}}

Sin golf

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 ")));
    }
}

99
¡Bienvenidos! Puedes deshacerte de él publicpara tu clase y acortarlo argsa un solo personaje. También podría hacerlo en a++<':'lugar de incrementarlo por separado. Dado que el OP no cuenta las importaciones, puede ahorrar un poco más import static java.lang.System.*;, luego no necesita escribir System.más tarde (donde cuenta). Al hacerlo, lo reduje a alrededor de 230. Es posible que desee echar un vistazo a la página de consejos de Java si aún no lo ha hecho.
Geobits

@Optimizer ¡Gracias! Simplemente no vi el ponche arriba.
Luminoso

@Luminous NP :)
Optimizer

@Geobits Gracias! Aparentemente, también puedes pegar el código directamente en el bucle. No agregué ni quité nada, pero creo que se ve más golfizado de esa manera.
Luminoso

44
El abuso de bucles es bastante común. Si tenía varias declaraciones en el cuerpo, podría poner una en el exterior y el resto en el interior para guardar un solo carácter (ya que de todos modos necesita un punto y coma fuera). Muchos campos de golf terminan siendo un gran circuito de esa manera. Además, "parece más golfista" es una razón totalmente válida para hacer cualquier cosa, incluso si no ahorra: 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);}

Al principio, probé la versión simplista (189 bytes), que era mejor que la otra solución 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 luego optimicé un poco ...


1
Huh, eso es ingenioso. No me di cuenta de que las variables estáticas con literales de cadena asignados implícitamente tienen tipo char *.
FireFly

@FireFly GCC compila bien en el apresumiblemente porque su valor predeterminado es int, que puede aceptar un charvalor. No me gusta a bmenos que lo llame un char[]pensamiento. VX, ¿qué compilador estás usando?
Level River St el

bes intdemasiado pero contiene el puntero a la cadena literal. Está completamente bien en GCC (tengo en mi máquina 4.8.2).
VX

1
for(a='a';++a<'z';)
seequ

9

JavaScript, ES6, 174 172 154 bytes

Usando el replacetruco de @ edc65 . ¡Gracias!

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.
`))

Funciona solo en la última versión de Firefox (34 y superior) debido al uso de cadenas de plantillas.


@Nijikokun Sabes que eso causará 30 repeticiones en lugar de 25, ¿verdad?
Optimizador

Supongo que ff 34 es beta o algo así ya que estoy en la última versión (recién verificado) y es 33 y no funciona allí
Sammaye

8

BrainFuck ( 1.597 caracteres )

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

Esto todavía se puede jugar más, si alguien está interesado.

Puede probar esto y confirmar que proporciona el resultado correcto mientras cumple con todas las reglas.


55
¿Qué es esto? ¡Te dije que escribieras oraciones, no garabatos al azar! ¡Ni siquiera hay palabras aquí!
Riking

55
Ummm .. Creo que el objetivo es usar la menor cantidad de personajes. Seguro que ganaste el "anti gol" :-)
Carl Witthoft

7

Perl - 145

¡Estoy feliz de ver tantas respuestas! Aquí hay una solución 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

7

Como ella odia tanto las matemáticas, ¿por qué no 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}]

6

Javascript ES6, 198 193 bytes

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)))

Tu profesor no quiere ningún número, pero como son profesores de inglés, no tienen idea de lo que Math.floor(Math.exp(Math.PI)+Math.E)significa.

Más legible:

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)))

Debe ejecutarse en la última versión de Firefox


1
Falta una nueva línea al final, por lo que la primera y la última fila se agregan dando 75 filas
edc65

Otorgaré +1 por doblar las reglas con la referencia de XKCD de e ^ pi, pero con + e en lugar de -pi ... ¡Bravo!
WallyWest

-4 bytes:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore

Bueno, olvídate de las matemáticas:(q='aaaaa'.length)*q
edc65

¡Olvídate del comentario de @ edc65 también! Use esto "\x18".charCodeAt():! (¡codifique la flecha hacia arriba y ahorrará una tonelada!)
Ismael Miguel

6

Javascript - 178 bytes 176 bytes

Mi primer golf, pensé en intentarlo con operadores un poco retorcidos, no resultó tan bien como esperaba, pero ¡bueno!

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"))

Como ya estoy detenido, y obviamente tengo problemas para comportarme ... Javascript - 71 Bytes

Este probablemente me meterá en problemas más profundos, pero, si ya me detuve y estoy planeando engañarme, aparentemente no tengo buen juicio sobre cómo debería comportarme en clase. Tal vez si puedo detener a uno de mis maestros, puedo detener a todos los demás golfistas.

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

¡Rápido! Usuarios de Chrome / IE 11 / Firebug, abra sus consolas AHORA MISMO y pruébelo.

(Por favor no me lastimes demasiado, pensé que era divertido)


1
El 72 es divertido. El 176 es muchas veces incorrecto: Array (25) .join () da 24 repeticiones, y falta una nueva línea al final de la oración. En total, 24 * 3 = 72 filas en lugar de 100 (¡vago!)
edc65

AUGH, ok arreglado. Ahora 178 y 71.
Sidney

1
Puede guardar 2 bytes agregando la t y un espacio final en "een -cientos ... para".
Luminoso

¿Qué está haciendo el segundo código?
justhalf

1
@justhalf, utiliza JQuery, una biblioteca de JavaScript común que aparentemente utiliza la red SO. $ Es en realidad una función que, entre muchas otras cosas, elimina gran parte del trabajo de la selección de elementos DOM. Al usar $ ('<selector>'), que es en este caso todos los elementos con la etiqueta 'código', obtengo un objeto que contiene todos los elementos. Al usar [+! B] obtengo el valor entero de falso, que es cero, así que selecciono el índice 0, que resulta ser el primer bloque de código del OP, que de hecho es el dicho favorito de los maestros.
Sidney

5

C # - 229 216 Bytes

usingFTW gratis !

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");}}

Alternativa, recuento del mismo byte ( usingaunque más abuso)

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");}}

44
~~ (╯ ° □ °) ╯︵ ┻━┻
William Barbosa

Puede agregar "for" aa
FryAmTheEggman el

@FryAmTheEggman la cadena tiene 25 caracteres de longitud, la está usando para obtener el número 25 discretamente. Sin embargo, puede cambiar este método simplemente restando caracteres entre sí ( ':'-'!'== 25), que es más corto que a.Length, y permitirá que se incluya como usted sugiere. (Alternativamente, haga lo que parecen otras respuestas, y simplemente entre !y :, curioso, cómo todos elegimos los mismos caracteres)
VisualMelon

@VisualMelon Whoops, tienes toda la razón.
FryAmTheEggman

1
Pensé que podría ya que los usos ni siquiera se cuentan, ¿OP lo ha aclarado?
William Barbosa

5

Befunge-93, 268 260 256 (tamaño de cuadrícula: 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."$_,#!:

Esta es mi primera vez jugando al golf, así que pensé en probar un idioma que no se había hecho para este problema, ya que de lo contrario no agregaría nada. Dado que es compatible con Befunge-93 (cabe dentro de una cuadrícula de 80x25 y usa solo instrucciones de Befunge-93), también debería funcionar en Befunge-98. Por si acaso, también evité que el puntero pasara sobre cualquier carácter que no sea de instrucción que no sea espacio. No podía recordar si la especificación realmente definía esos caracteres como no-ops, y no tendré demonios nasales en MI código.

Realmente no se puede eliminar el código de Befunge. Lo clave a tener en cuenta aquí es que Befunge empuja los caracteres a la pila como sus valores ASCII, lo que hace que sea relativamente simple referirse a los números sin referirse literalmente a ellos. El "K"de arriba a la izquierda es 75, refiriéndose al número de repeticiones multiplicado por el número de "las" cláusulas por repetición; Utilizo el módulo y alguna otra astucia en (copias de) este número para determinar qué camino tomar a través de la impresión en cada vuelta. ::-es un buen modismo para cero, útil para cadenas de terminación cero; Lo uso dos veces aquí.

En ocasiones, el puntero debe pasar por un lugar donde estoy definiendo una cadena, de ahí las elecciones específicas de caracteres utilizados para obtener ciertos números en algunos puntos.

Lo bueno de muchos intérpretes de Befunge es que puedes ver el puntero moverse alrededor de la cuadrícula, así como ver qué valores hay en la pila. De esa manera, puede avanzar y ver cómo funciona el programa usted mismo, ¡más o menos! Recomiendo usar http://befungius.aurlien.net/ si no tiene su propio intérprete Befunge preferido.

Esto probablemente se puede reducir un poco (o mucho) más. Por favor dame tu opinión! Si necesito dar una mejor explicación, alguien me avisa; Soy nuevo en esto.

Editar : eliminó algunos bytes al deshacerse de la redirección innecesaria a la última fila cuando el programa termina (simplemente colocando el lugar @donde ^solía estar).

Otra edición : eliminó algunos bytes más en varios lugares, principalmente con trucos. (También se agregó el tamaño de la cuadrícula, como parece ser la tendencia con las respuestas de Befunge).


¡Hola Kasran, bienvenido al intercambio de codegolf stack! Estas respuestas se ven geniales. Su explicación es buena y se vinculó a un intérprete Befunge que es realmente útil para idiomas extraños para los que no todos tienen un compilador (la gente comúnmente hace cosas como "ejecutar esto aquí").
hmatt1

Befunge es un lenguaje realmente difícil, y debes tener en cuenta el tamaño del código cuando escribes. Su código se ve muy bien y funciona. ¿Pero reduciría el tamaño si guarda en re a time algún lugar?
Ismael Miguel

No estoy usando ninguna instrucción o comportamiento específico de Funge-98 que conozca, pero desde que escribí esta respuesta aprendí que ciertos comportamientos del intérprete Befungius no son estándar, es decir, usar #en un extremo de una línea para saltar el personaje en el otro extremo (en CCBI , por ejemplo, #simplemente omite el espacio infinito entre él y el personaje en el otro extremo), lo que rompe este programa. No me he molestado en volver y arreglar este envío con esto en mente.
Kasran

Hay algunos 1dígitos allí, que no están permitidos
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 

Tenga en cuenta el espacio final.

Utiliza casi el mismo truco que @Geobits y sus amigos comentaristas en la respuesta de Python para construir la cadena. Ahora también usa parte de esta respuesta .

Esto usa la variable incorporada G, que contiene abcdefghijklmnopqrstuvwxyzy obtiene una menos que su longitud para producir las 25 salidas.


1
Esto parece ser 136 bytes en lugar de 135
Optimizer

1
@Optimizer Lo siento, debería leer mis propias notas: olvidé el espacio final cuando lo pegué allí mismo: S
FryAmTheEggman

4

Rubí - 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


1
¡Uso inteligente de los literales de caracteres de 1.8! Es posible que pueda usar String#*para repetir las líneas 25 veces en lugar de Integer#times.
britishtea

@britishtea - trabajó un placer :)
Mikey

1
Puede reducir algunos bytes más al no asignar primero las líneas. El espacio entre put y un literal de cadena es opcional ( puts"hi"es legal).
britishtea

Asignar e dentro de la interpolación es un buen toque.
Wayne Conrad

3

Python, 165 bytes

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."

Funcionó muy bien que la longitud de h es 25, eso no fue intencional. =)


3

Python 2 - 143

Una respuesta tonta:

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

Tenga en cuenta que la cuenta completa es 162. Dejé fuera todo from this import i.

Utiliza reemplazos similares a mi estrategia de Pyth, pero no pude resistir publicar esto después de descubrir la diversión de importar de esto :)


+1 Para uso de from this import i! ¿Cómo supiste sobre eso?
Beta Decay

1
@BetaDecay En realidad estaba aburrida y decidí leer el zen de Python, así que fui a mi intérprete y escribí import this. Entonces pensé: "¿Qué más podría haber en el thismódulo?" Entonces llamé dir(this). He aquí que, junto con un diccionario, una cadena confusa y una "!"variable, había una constante numérica ... igual a 25.
FryAmTheEggman

3

PHP (175 157156 bytes; 152 con unix EOF):

No es la solución más desarrollada, pero seguramente hace el trabajo y es más pequeña que algunos intentos.

Aquí está el código:

$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.
";

Versión antigua:

$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.
";

Esto funciona porque php cambia los caracteres, y simplemente verificamos si no es así zy nos detenemos.

(Una curiosidad es que cuando php alcanza z, luego va a aa).


3
La convención general aquí es contar las nuevas líneas como un solo byte, a menos que tal vez su lenguaje sea tan terco que solo acepte CRLF, que no es el caso de PHP.
nyuszika7h

3

Python 2 - 155

Nota: dado que los caracteres de control no se muestran en SE, lo he reemplazado por\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')

Versión base 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

Con respecto a la importación, creo que podría ahorrar un poco con from string import *o como se llame en Python
FireFly

1
Puede mover "adolescente" a b.
FryAmTheEggman

2
Puede eliminar los []corchetes en la primera línea, lo que implícitamente crea una tupla y luego la descomprime.
Pomo de la puerta

También puede mover elord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman

1
@Dennis La última edición del OP permite nuevas líneas principales.
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]

Importaciones requeridas:

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

Si desea ejecutarlo en Node.js, instale LiveScript( no livescript ) y prelude-lspaquetes desde npm, reemplace alertcon console.logy ejecute lsc prog.ls, donde prog.lscontiene el programa.


13
Ver reglas: "No puedes usar los personajes 0123456789"
Paul R

2
Buena captura, arreglado.
nyuszika7h

2

T-SQL: 206

Utiliza una unión cruzada en cinco filas para generar 25 filas seleccionando la frase. Los saltos de línea son importantes para la salida.

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

2

Bash, 151 bytes

Más o menos un puerto directo de tu propia respuesta

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."
}

2

C, 196 caracteres

Esta no es una tarea fácil para el buen C. El factorizar el patrón "El% steen-cientos ..." me ahorra dos caracteres completos .

Espacio en blanco para mayor claridad, incluye sin contar.

#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");
}

2

Rubí, 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."}

Explicación

  • Use String#uptopara imprimir las líneas 25 veces. El rango "K".."c"es de 25 caracteres.
  • Utilice la interpolación de cadenas básica para acortar las líneas.

2
#{a="The "}en realidad te está costando más personajes! #{a}tiene la misma longitud queThe
Mikey

2

Raqueta 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."))))

Sin golf:

(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."))))

2

C, 215 203 199 bytes

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");}

Sin golf

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");
}

Usé bit shift para iterar sin ningún número.

a<<='\xC'+'\xD' establece a en 0b1 [25 ceros]

a>>=!!a se desplaza un bit hacia la derecha cada vez que iteramos el bucle

Editar: a es igual a argc, por lo que su valor ya es 1 cuando el programa se ejecuta sin argumentos. Se cambió a>>='\xB'-'\xA'a a>>=!!'\xA'4 bytes más corto. Además, el texto se mostró solo 24 veces. Arreglado. Se eliminaron los corchetes adicionales en el while.

Edición 2: cambiado !!'\xA'a !!a. Parece funcionar y ahorra 4 bytes


1
Puede usar putspara guardar más bytes.
Spikatrix

2

Rant, 191 bytes

No es la solución más corta, pero sigue siendo genial. Escribí una subrutina para escribir las primeras tres líneas, y la diseñé para que llamarla con un argumento vacío devolviera una cadena de 25 caracteres. Luego paso su longitud al repetidor.

[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}

Sin golf:

[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
}

Pruébalo en línea

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.