Escreva linhas em detenção


63

Introdução

Más notícias, vocês foram detidos. Seu professor de inglês não entende este site e deseja que você "pare de fazer matemática em suas chaves digitais, esta é a aula de inglês!"

Ela condenou você a escrever seu ditado favorito no quadro-negro 25 vezes, o que dará um total de 100 linhas no quadro-negro.

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.

Para sua sorte, você é um ávido leitor (sem mencionar um especialista em códigos)! Você leu sobre um truque que pode facilitar sua vida.

foxtrot

(Foxtrot de Bill Amend)

Infelizmente para Jason, não deu certo. Mas você tem uma ideia melhor! Como seu professor de inglês pensa que você está fazendo matemática, se você deixar todos os números fora do seu programa, isso pode funcionar! Você também deseja manter o programa o mais curto possível, porque é um aluno preguiçoso e não quer escrever muito no quadro.

Escreva um programa que cumpra as seguintes regras:

  • Seu programa deve imprimir as 4 linhas acima 25 vezes. As linhas devem ser exibidas nessa ordem, repetindo. Totalize exatamente 100 linhas de saída (uma nova linha à direita no final ou uma nova linha à frente no início é aceitável).
  • Você não pode usar os caracteres 0123456789. Seu professor fica confuso com a matemática e chama você!
  • Você pode usar quaisquer importações e bibliotecas externas sem contar as importações. Seu professor de inglês não sabe sobre programação. Jason poderia ter poupado muito trabalho se não escrevesse #include <stdio.h>e você não quer cometer os mesmos erros!
  • Marque seu programa por bytecontagem. Menor pontuação ganha!

2
Se o texto tivesse "1900s", escrever a saída seria um pouco mais complicado.
Ingo Bürk

30
ao comix: ele não está imprimindo \ n da, e o circuito a partir de 1 é muito estranho (como contra a C natureza) ...
VX

11
@VX Bill Amend é um Pascal durão há muito tempo, e sempre que ele escreve C isso se torna bastante aparente.
fofo

5
Isso parece muito com um dos meus antigos professores de inglês.
Kaz Wolfe

2
A proibição do + faria sentido aqui, mas talvez isso fosse muito difícil.
Pharap

Respostas:


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

O acima é um despejo xxd reversível.

Testando

Você pode gerar e executar o código acima executando isto no interpretador online :

"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 o código gerado (sem executá-lo), remova o final ~.

Para contar o número de bytes (um caractere é um byte na ISO-8859-1), substitua o final ~por a ,.

Versão para impressão (122 bytes)

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

Depois de pressionar a corda (S), o seguinte é executado:

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

Moar golfing

Depois de pressionar a sequência não imprimível (U), o seguinte é executado:

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

Isso empurra a seqüência da versão imprimível. O restante do código funciona como antes.


Usando o código, recebo esse código gerado, que é de 144 bytes. Estou fazendo algo errado ?
Optimizer

A codificação UTF-8 resultaria em uma contagem de bytes mais alta, sim. Com ISO-8859-1, a contagem de bytes é 109. Você pode substituir ~por ,para verificar.
Dennis

2
Obtive o resultado exato que o Optimizer obteve, mas adicionar o ]:+~fez funcionar. Por que você não adiciona isso ao seu código?
Luminous

1
@ user23013: O interpretador Java respeita $ LANG para E / S. Internamente, o CJam possui apenas caracteres de 16 bits.
Dennis

3
Na verdade, você não precisa unicodeizar sua solução, pois, sem a compactação em si, são apenas 124 bytes, superando todas as outras.
Optimizer

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

Teste no console do FireFox / FireBug.


19
Isso é genial!
Optimizer

1
Sim, substituindo cada caractere pela string maior. Fazendo 25 cópias da sequência maior.
Optimizer

1
@Optimizer Isso é genial :)
FryAmTheEggman

3
@ Malvolio De fato, a seção repetida tem 30 caracteres. E eu pude mostrar uma enorme sequência de tentativas, adicionando e cortando palavras e substituindo substituições antes de encontrar esta solução simples.
Edc65

1
@IsmaelMiguel Acho que você quer dizer qualquer navegador ES6. Problema: no momento em que esse desafio foi lançado, as sequências de modelos não foram implementadas em nenhum navegador: o Firefox foi o primeiro - rel 34, dez de 2014 - depois o Chrome, março de 2015. Mas mesmo sem as sequências de modelos, seu scoure seria 153, melhor que o meu . Você deve publicá-lo como resposta.
edc65 27/09/2015

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)

Eu não python muito, mas isso parece muito curto para mim.

Edit: Então eu estava errado, não foi curto! Obrigado pela ajuda nos comentários: D


1
Você pode perder a nova linha e o recuo no loop for para economizar alguns bytes.
Holloway

1
@Geobits, I make that 157
Holloway

1
@ Geobits você está executando em uma máquina Windows? As codificações de linha nas janelas são freqüentemente \ r \ n em vez de apenas \ n. Pode ser por isso que está mostrando 157 bytes para nós, mas 160 para você.
Rob Watts

2
Isso é apenas 160 . Você provavelmente está ignorando os três \em \ndevido ao escape ...
Optimizer

1
Você pode mover o valor para bpara print: %tem precedência maior que *.
FryAmTheEggman

29

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

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

Experimente aqui

Eu sou capaz de reduzir isso para 110 bytes, convertendo-o em unicode, mas como isso não está superando a outra solução unicode, prefiro não colocá-lo :)


23
Ei, o que esse :Demoticon está fazendo lá ?! Você está mandando mensagens para seus amigos durante a detenção? Vá para o escritório do diretor!
Maçaneta

2
@Doorknob: D: P
Otimizador

Talvez você poderia fazer Talias para .\nThe , em seguida, remover a linha extra que isso produz desde o início da cadeia de saída (meu cjam-fu não é bom o suficiente para descobrir se você pode facilmente fazer isso)

@professorfish que acaba consumindo mais bytes do que economiza. mothereff.in/… *% 28Y% 2F% 28% 40 \
Otimizador

Nitpicking: o uso dos 128 bytes superiores de uma página de código compatível com ASCII não tem nada a ver com Unicode.
Dennis

23

PHP, 0 bytes



Você pode usar quaisquer importações e bibliotecas externas sem contar as importações.

Para executar esse código, você deve importar uma biblioteca chamada data://text/plain,<?php...classroom.\n";com isso:

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

E você deve ter allow_url_includeativado no seu php.ini.

Não há mais números ou extensões, graças a Dennis.


9
Meu primeiro instinto foi gritar algo sobre brechas, mas como essa resposta é realmente independente, acho que é uma maneira inteligente de usar o PHP para explorar uma brecha que foi criada deliberadamente para respostas em Python. Como você já está trapaceando, você pode apenas usar require_once "data://text/plain,The eighteen-hundreds...";, o que não requer sh , não usa números e ainda tem 0 bytes.
Dennis

10
Voto isso por criatividade, mas não aceito.
hmatt1

14

Rubi, 185 180 176 bytes

EDIT: Interpolação de strings, obrigado @britishtea

É o meu primeiro golfe de todos os tempos, e eu não sou muito Rubist (mas eu certamente amo Ruby). Enfim, é isso (encurtado, sugestão da maçaneta da porta).

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
Você pode resolver isso ainda mais, substituindo algumas das palavras / grupos de palavras repetidos pela interpolação de String.
britishtea

3
+1 para perceber que existem (quase) 25 palavras na string
Digital Trauma

2
s.split.size.nextsalva 5 caracteres (você não precisa especificar o espaço para dividir).
Maçaneta

Não conheço Ruby, mas não (s.split.size+1).timesseria 1 byte menor?
25/10

1
@ Sii não tem permissão para usar números!
rjdown

13

Java 249 231 230 222

Minha primeira resposta! Por que não começar a usar o idioma que eu conheço tão bem?

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

9
Bem vinda! Você pode se livrar da publicclasse e encurtar argspara um único personagem. Você também pode fazer isso em a++<':'vez de incrementá-lo separadamente. Como o OP não está contando as importações, você pode economizar um pouco mais import static java.lang.System.*;e não precisará escrever System.mais tarde (onde é importante). Fazendo isso, reduzi para 230. Você pode dar uma olhada na página de dicas sobre Java, se ainda não o fez.
Geobits

@Optimizer Thanks! Eu simplesmente não vi o strikeout acima.
Luminous

@Luminous NP :)
Otimizador

@Geobits Thank you! Aparentemente, você também pode inserir código diretamente no próprio loop. Não adicionou nem removeu nada, mas acho que parece mais assim.
Luminous

4
O abuso de loop é bastante comum. Se você tivesse várias declarações no corpo, poderia colocar uma por fora e a outra por dentro para salvar um único caractere (já que você precisa de um ponto e vírgula fora de qualquer maneira). Muitos campos de golfe acabam sendo um grande laço dessa maneira. Além disso, "parece mais jogado" é uma razão totalmente válida para fazer qualquer coisa, mesmo que não seja salva: 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);}

No começo, tentei a versão simplista (189 bytes), que era melhor que a outra solução 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 depois otimizei um pouco ...


1
Huh, isso é bacana. Eu não percebi que variáveis ​​estáticas com literais de string atribuídos a eles implicitamente têm tipo char *.
FireFly

O @FireFly GCC compila muito bem, aprovavelmente porque é o padrão int, que pode aceitar um charvalor. Não gosta, a bmenos que eu chame isso de char[]embora. VX, qual compilador você está usando?
Level River St

bé intmuito, mas mantém o ponteiro para a string literal. Está completamente ok no GCC (eu tenho na minha máquina 4.8.2).
VX

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

9

JavaScript, ES6, 174 172 154 154 bytes

Usando o replacetruque de @ edc65 . Obrigado!

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 apenas no Firefox mais recente (34 e superior) devido ao uso de strings de modelo.


@Nijikokun Você sabe que causará 30 repetições em vez de 25, certo?
Optimizer

Eu estou supondo que ff 34 é beta ou algo assim desde que eu estou na mais recente (apenas verificado) e é 33 e ele não funciona lá
Sammaye

8

BrainFuck ( 1.597 caracteres )

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

Isso ainda pode ser jogado ainda mais, se alguém estiver interessado.

Você pode testar isso e confirmar se ele fornece a saída correta ao cumprir todas as regras.


5
O que é isso? Eu lhe disse para escrever frases, não rabiscos aleatórios! Não há nem palavras aqui!
Riking

5
Ummm .. Acho que o objetivo é usar o menor número de caracteres. Tem certeza ganhou o "anti-meta" :-)
Carl Witthoft

7

Perl - 145

Fico feliz em ver tantas respostas! Aqui está uma solução 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

Desde que ela odeia tanto a matemática, por que não o 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)))

Seu professor não quer números, mas como é professor de inglês, não tem idéia do que Math.floor(Math.exp(Math.PI)+Math.E)significa.

Mais facilmente:

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

Deve ser executado no Firefox mais recente


1
Faltando uma nova linha no fim, para a primeira e última linhas são anexado dando 75 linhas
edc65

Eu atribuirei +1 por dobrar as regras com a referência de e ^ pi do XKCD, mas com + e em vez de -pi ... Bravo!
Wally West

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

Bem, esqueça a matemática:(q='aaaaa'.length)*q
edc65 24/10

Esqueça o comentário @ edc65 também! Use isto "\x18".charCodeAt():! (codificar a seta para cima e você vai economizar uma tonelada!)
Ismael Miguel

6

Javascript - 178 bytes 176 bytes

Meu primeiro golfe, pensei em dar uma chance a alguns operadores de manobras, não saiu tão bem quanto esperava, mas tudo bem!

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

Desde que eu já estou detido, e obviamente tenho problemas para me comportar ... Javascript - 71 Bytes

Provavelmente, isso me causará problemas mais profundos, mas, se eu já me detive, e estou planejando enganar minha detenção, aparentemente me falta um bom julgamento sobre como devo me comportar na sala de aula. Talvez se eu puder puxar um sobre o meu professor, eu posso puxar um sobre todos os outros golfistas por aí.

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

Rápido! Usuários do Chrome / IE 11 / Firebug, abra seus consoles AGORA e experimente.

(Por favor, não me machuque muito, eu pensei que era engraçado)


1
Os 72 são divertidos. O 176 está muitas vezes errado: a matriz (25) .join () fornece 24 repetições e falta uma nova linha na frase final. Tudo em todos os 24 * 3 = 72 linhas em vez de 100 (menino preguiçoso!)
edc65

AUGH, tudo bem. Agora 178 e 71.
Sidney

1
Você pode salvar 2 bytes adicionando ot e um espaço à direita em "een-centenas ... para".
Luminous

O que o segundo código está fazendo?
Just-

1
@justhalf, utiliza o JQuery, uma biblioteca JavaScript comum que aparentemente a rede SO utiliza. O $ é na verdade uma função que, entre muitas outras coisas, tira muito do trabalho da seleção de elementos DOM. Usando $ ('<selector>'), que neste caso é todos os elementos com a tag 'code', obtenho um objeto contendo todos os elementos. Usando [+! B], obtenho o valor inteiro false, que é zero, então seleciono o 0º índice, que passa a ser o primeiro bloco de código do OP, que é o ditado favorito dos professores.
Sidney

5

C # - 229 216 bytes

usingFTW grátis !

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, contagem de mesmos bytes (mais usingabuso, no entanto)

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

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

Você pode adicionar "for" aa
FryAmTheEggman

@FryAmTheEggman a string tem 25 caracteres, ele a usa para obter o número 25 discretamente. No entanto, ele pode trocar esse método simplesmente subtraindo caracteres um do outro ( ':'-'!'== 25), que é menor que a.Lengthe permitirá a inclusão como você sugere. (Alternativly, faça como outras respostas parecem, e apenas laço entre !e :, engraçado como todos nós escolhemos os mesmos caracteres)
VisualMelon

@VisualMelon Opa, você está totalmente certo.
FryAmTheEggman

1
Eu pensei que poderia, já que os usos nem estão sendo contados, a OP esclareceu isso?
William Barbosa

5

Befunge-93, 268 260 256 (tamanho da grade: 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 é minha primeira vez jogando golfe, então imaginei que tentaria um idioma que ainda não havia sido feito para esse problema, pois não adicionaria nada de outra maneira. Como é compatível com o Befunge-93 (cabe dentro de uma grade de 80x25 e usa apenas as instruções do Befunge-93), ele também deve funcionar no Befunge-98. Por precaução, também evitei que o ponteiro passasse sobre qualquer caractere que não fosse uma instrução que não fosse o espaço. Eu não conseguia lembrar se a especificação realmente definia esses caracteres como não-ops e não terei demônios nasais no MEU código.

Você não pode realmente desmascarar o código Befunge. O principal a ser observado aqui é que o Befunge envia os caracteres para a pilha como seus valores ASCII, tornando relativamente simples a referência a números sem literalmente se referir a eles. O "K"canto superior esquerdo é 75, referindo-se ao número de repetições vezes o número de cláusulas "the" por repetição; Eu uso o módulo e alguma outra habilidade em (cópias) desse número para determinar qual caminho seguir na impressão em cada volta. ::-é um bom idioma para zero, útil para cadeias de terminação zero; Eu uso duas vezes aqui.

Ocasionalmente, o ponteiro precisa passar por um local onde estou definindo uma sequência, daí as escolhas específicas de caracteres usadas para obter determinados números em alguns pontos.

O bom de muitos intérpretes do Befunge é que você pode assistir o ponteiro disparar pela grade e ver quais valores estão na pilha. Dessa forma, você pode avançar e ver como o programa funciona, mais ou menos! Eu recomendo usar http://befungius.aurlien.net/ se você não tiver seu próprio intérprete Befunge preferido.

Provavelmente isso pode ser reduzido um pouco (ou muito) mais. Por favor me dê feedback! Se eu precisar fornecer uma explicação melhor, alguém me avise; Eu sou novo nisso.

Editar - eliminou alguns bytes eliminando o redirecionamento desnecessário para a última linha quando o programa termina (apenas colocando o local @onde ^costumava estar).

Outra edição - raspou mais alguns bytes em vários lugares, principalmente com truques. (Também foi adicionado o tamanho da grade, como parece ser a tendência nas respostas do Befunge.)


Hey Kasran, bem-vindo à troca de pilhas codegolf! Essas respostas estão ótimas. Sua explicação é boa e você vinculou a um intérprete do Befunge, o que é realmente útil para idiomas estranhos, nem todos têm um compilador (as pessoas geralmente fazem coisas como "execute isso aqui").
hmatt1

O Befunge é uma linguagem muito difícil, e você deve manter o tamanho do código em mente ao escrever. Seu código parece ótimo e funciona. Mas isso reduziria o tamanho se você salvasse em re a time algum lugar?
Ismael Miguel

Não estou usando nenhuma instrução ou comportamento específico do Funge-98 que eu conheço, mas desde que escrevi esta resposta, aprendi que certos comportamentos do intérprete de Befungius não são padrão - ou seja, usar #em uma extremidade de uma linha para ignorar o caractere do outro lado (no CCBI , por exemplo, #apenas pula o espaço infinito entre ele e o caractere do outro lado), o que interrompe esse programa. Não me preocupei em voltar e corrigir essa submissão com isso em mente.
Kasran

Há alguns 1dígitos lá, que não são permitidos
Jo King

4

Pitão 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 

Observe o espaço à direita.

Usa praticamente o mesmo truque que o @Geobits e seus amigos comentadores no Python respondem para construir a string. Agora também usa parte dessa resposta .

Isso usa a variável interna G, que contém abcdefghijklmnopqrstuvwxyze fica um a menos que seu comprimento para produzir as 25 saídas.


1
Isso parece ter 136 bytes em vez de 135
Optimizer

1
@Optimizer Desculpe, eu deveria ler minhas próprias anotações: Eu esqueci o espaço à direita quando eu colei lá mim mesmo: S
FryAmTheEggman

4

Rubi - 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 literais de caracteres do 1.8! Você pode usar String#*para repetir as linhas 25 vezes em vez de Integer#times.
britishtea

@britishtea - trabalhou um mimo :)
Mikey

1
Você pode economizar mais alguns bytes não atribuindo as linhas primeiro. O espaço entre put e uma string literal é opcional ( puts"hi"é legal).
britishtea

Atribuir e dentro da interpolação é um toque agradável.
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."

Funcionou muito bem que o comprimento de h é 25, que não era intencional. =)


3

Python 2 - 143

Uma resposta boba:

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

Observe que a contagem completa é 162. Eu deixei de fora todos from this import i.

Usa substituições semelhantes à minha estratégia de pyth, mas não pude resistir a postar isso depois de descobrir a alegria de importar disso :)


+1 Para uso de from this import i! Como você soube disso?
Decay Beta

1
@BetaDecay Na verdade, eu estava entediado e decidi ler o zen do python, então fui ao meu intérprete e escrevi import this . Então pensei: "O que mais poderia estar no thismódulo?" Então eu liguei dir(this). Eis que, juntamente com um dicionário, uma string ilegível, e uma "!"variável, houve uma constante numérica ... igual a 25.
FryAmTheEggman

3

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

Não é a solução mais eficiente, mas certamente faz o trabalho e é menor do que algumas tentativas.

Aqui está o 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.
";

Versão antiga:

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

Isso funciona porque o php alterna os caracteres, e apenas verificamos se não é ze paramos.

(Uma curiosidade é que quando o php atinge z , ele passa a aa).


3
A convenção geral aqui é contar novas linhas como apenas um byte, a menos que talvez seu idioma seja tão teimoso que aceite apenas CRLF, o que não é o caso do PHP.
nyuszika7h

3

Python 2-155

Nota: como os caracteres de controle não aparecem no SE, substituí-o 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')

Versão base 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

Em relação à importação, eu acho que você poderia salvar um pouco com from string import *ou no entanto, ele é chamado em Python
FireFly

1
Você pode mover "teen" para b.
FryAmTheEggman

2
Você pode remover os []colchetes na primeira linha, o que implicitamente cria uma tupla e a descompacta.
Maçaneta

Você também pode mover oord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman 24/10

1
@Dennis A edição mais recente do OP permite novas linhas de liderança.
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]

Importações necessárias:

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

Se você deseja executá-lo no Node.js, instale o LiveScript( not livescript ) e os prelude-lspacotes do npm, substitua alertpor console.loge execute lsc prog.ls, onde prog.lscontém o programa.


13
Veja as regras: "Você não pode usar os caracteres 0123456789"
Paul R

2
Boa captura, fixa.
nyuszika7h

2

T-SQL: 206

Utiliza uma junção cruzada em cinco linhas para gerar 25 linhas selecionando a frase. As quebras de linha são importantes para a saída.

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

Praticamente um porto direto de sua própria resposta

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

Essa não é uma tarefa fácil para o bom e velho C. Fatorar o padrão "O% steen-centenas ..." me poupa dois caracteres inteiros .

Espaços em branco para maior clareza, incluem não contados.

#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

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

Explicação

  • Use String#uptopara imprimir as linhas 25 vezes. O intervalo "K".."c"é de 25 caracteres.
  • Use a interpolação básica de String para reduzir as linhas.

2
#{a="The "}está realmente custando mais personagens para você! #{a}é o mesmo comprimento queThe
Mikey

2

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

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

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

Eu usei o deslocamento de bits para iterar sem nenhum número.

a<<='\xC'+'\xD' define a como 0b1 [25 zeros]

a>>=!!a muda para a direita um pouco para cada vez que iteramos o loop

Edit: a é igual a argc, então seu valor já é 1 quando o programa é executado sem argumentos. Alterado a>>='\xB'-'\xA'para o a>>=!!'\xA'qual é 4 bytes mais curto. Além disso, o texto foi exibido apenas 24 vezes. Corrigido. Removidos colchetes extras no while.

Editar 2: alterado !!'\xA'para !!a. Parece funcionar e economiza 4 bytes


1
Você pode usar putspara salvar mais bytes.
Spikatrix

2

Rant, 191 bytes

Não é a solução mais curta, mas ainda é legal. Eu escrevi uma sub-rotina para escrever as três primeiras linhas e a projetei, chamando-a com um argumento vazio, retornando uma string de 25 caracteres. Depois passo seu comprimento para o 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}

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
}

Experimente online

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.