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 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
byte
contagem. Menor pontuação ganha!
Respostas:
CJam,
109107106104103 bytesO acima é um despejo xxd reversível.
Testando
Você pode gerar e executar o código acima executando isto no interpretador online :
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)
Depois de pressionar a corda (S), o seguinte é executado:
Moar golfing
Depois de pressionar a sequência não imprimível (U), o seguinte é executado:
Isso empurra a seqüência da versão imprimível. O restante do código funciona como antes.
fonte
~
por,
para verificar.]:+~
fez funcionar. Por que você não adiciona isso ao seu código?JavaScript (ES6) 164
Teste no console do FireFox / FireBug.
fonte
Python:
188 173 160153Eu 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
fonte
\
em\n
devido ao escape ...b
paraprint
:%
tem precedência maior que*
.CJam,
151 140 135 132 132128 128 bytes (Tweetable)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 :)
fonte
:D
emoticon está fazendo lá ?! Você está mandando mensagens para seus amigos durante a detenção? Vá para o escritório do diretor!T
alias 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)PHP, 0 bytes
Para executar esse código, você deve importar uma biblioteca chamada
data://text/plain,<?php...classroom.\n";
com isso:E você deve ter
allow_url_include
ativado no seuphp.ini
.Não há mais números ou extensões, graças a Dennis.
fonte
require_once "data://text/plain,The eighteen-hundreds...";
, o que não requer sh , não usa números e ainda tem 0 bytes.Rubi,
185180176 bytesEDIT: 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).
fonte
s.split.size.next
salva 5 caracteres (você não precisa especificar o espaço para dividir).(s.split.size+1).times
seria 1 byte menor?Java
249231230222Minha primeira resposta! Por que não começar a usar o idioma que eu conheço tão bem?
Ungolfed
fonte
public
classe e encurtarargs
para um único personagem. Você também pode fazer isso ema++<':'
vez de incrementá-lo separadamente. Como o OP não está contando as importações, você pode economizar um pouco maisimport static java.lang.System.*;
e não precisará escreverSystem.
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.C 171
No começo, tentei a versão simplista (189 bytes), que era melhor que a outra solução C ...
que depois otimizei um pouco ...
fonte
char *
.a
provavelmente porque é o padrãoint
, que pode aceitar umchar
valor. Não gosta, ab
menos que eu chame isso dechar[]
embora. VX, qual compilador você está usando?b
éint
muito, mas mantém o ponteiro para a string literal. Está completamente ok no GCC (eu tenho na minha máquina 4.8.2).for(a='a';++a<'z';)
JavaScript, ES6,
174 172154 154 bytesUsando o
replace
truque de @ edc65 . Obrigado!Funciona apenas no Firefox mais recente (34 e superior) devido ao uso de strings de modelo.
fonte
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.
fonte
Perl - 145
Fico feliz em ver tantas respostas! Aqui está uma solução Perl.
fonte
Desde que ela odeia tanto a matemática, por que não o Mathematica (177)
fonte
Javascript ES6,
198193 bytesSeu 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:
Deve ser executado no Firefox mais recente
fonte
with(Math)alert("long string here".repeat(exp(PI)+E|[]))
(q='aaaaa'.length)*q
"\x18".charCodeAt()
:! (codificar a seta para cima e você vai economizar uma tonelada!)Javascript -
178 bytes176 bytesMeu primeiro golfe, pensei em dar uma chance a alguns operadores de manobras, não saiu tão bem quanto esperava, mas tudo bem!
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í.
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)
fonte
C # -
229216 bytesusing
FTW grátis !Alternativa, contagem de mesmos bytes (mais
using
abuso, no entanto)fonte
a
':'-'!'
== 25), que é menor quea.Length
e 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)Befunge-93,
268260256 (tamanho da grade: 72x6 = 432)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.)
fonte
re a time
algum lugar?#
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.1
dígitos lá, que não são permitidosPitão 135
136 140Observe 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émabcdefghijklmnopqrstuvwxyz
e fica um a menos que seu comprimento para produzir as 25 saídas.fonte
Rubi -
152141http://repl.it/2Om/6
fonte
String#*
para repetir as linhas 25 vezes em vez deInteger#times
.puts"hi"
é legal).Python, 165 bytes
Funcionou muito bem que o comprimento de h é 25, que não era intencional. =)
fonte
Python 2 - 143
Uma resposta boba:
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 :)
fonte
from this import i
! Como você soube disso?import this
. Então pensei: "O que mais poderia estar nothis
módulo?" Então eu ligueidir(this)
. Eis que, juntamente com um dicionário, uma string ilegível, e uma"!"
variável, houve uma constante numérica ... igual a 25.PHP (
175157156 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:
Versão antiga:
Isso funciona porque o php alterna os caracteres, e apenas verificamos se não é
z
e paramos.(Uma curiosidade é que quando o php atinge
z
, ele passa aaa
).fonte
Python 2-155
Nota: como os caracteres de controle não aparecem no SE, substituí-o por
\x19
.Versão base 64:
fonte
from string import *
ou no entanto, ele é chamado em Python[]
colchetes na primeira linha, o que implicitamente cria uma tupla e a descompacta.ord('d')//len('aaaa') to before the string so you don't have to bracket it.
LiveScript - 181
Importações necessárias:
Se você deseja executá-lo no Node.js, instale o
LiveScript
( notlivescript
) e osprelude-ls
pacotes do npm, substituaalert
porconsole.log
e executelsc prog.ls
, ondeprog.ls
contém o programa.fonte
0123456789
"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.
fonte
Bash, 151 bytes
Praticamente um porto direto de sua própria resposta
fonte
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.
fonte
Ruby, 145
Explicação
String#upto
para imprimir as linhas 25 vezes. O intervalo"K".."c"
é de 25 caracteres.fonte
#{a="The "}
está realmente custando mais personagens para você!#{a}
é o mesmo comprimento queThe
Raquete 173
Ungolfed:
fonte
C,
215203199 bytesUngolfed
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 loopEdit:
a
é igual a argc, então seu valor já é 1 quando o programa é executado sem argumentos. Alteradoa>>='\xB'-'\xA'
para oa>>=!!'\xA'
qual é 4 bytes mais curto. Além disso, o texto foi exibido apenas 24 vezes. Corrigido. Removidos colchetes extras nowhile
.Editar 2: alterado
!!'\xA'
para!!a
. Parece funcionar e economiza 4 bytesfonte
puts
para salvar mais bytes.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.
Ungolfed:
Experimente online
fonte