No menor número de caracteres Unicode possível, imprima o seguinte (144 caracteres):
1, 2, 3 o'clock, 4 o'clock rock,
5, 6, 7 o'clock, 8 o'clock rock,
9, 10, 11 o'clock, 12 o'clock rock,
We're gonna rock around the clock tonight.
Você não deve usar nenhum número no seu código, exceto o dígito 1
.
11
. A instrução significa que você só pode usar o número 1 ou o dígito 1?1
. Não especifiquei quantas vezes, então o fato de as pessoas terem usado11
é uma brecha inteligente, e sou a favor disso.Respostas:
Javascript -
140132O fato de que 11 é feito de dois 1s deixa eu passar as regras, eu acho.
Explicação
O k +++ s é igual a (k ++) + s, portanto, ele adiciona k primeiro a x, depois incrementa k e depois adiciona s a x. Este processo será realizado três vezes antes de adicionar a última frase.
fonte
k+++s
faz? É(k++) + s
ouk + (++s)
ou(k++) + (++s)
?x+=k+++s+k+++s+k+++t+s+k+++t+u
alert
é menor queconsole.log
. Usar a exibição automática do último cálculo no console é como trapacear.C # - 186
Melhor idioma de golfe ou melhor idioma de golfe?
fonte
i++ +
pedaçosWriteLine
->Write
e usando um literal\n
no final da string.Brainfuck (1574)
Não é um envio sério, mas segue as regras.
Pode ser testado aqui .
fonte
#RESPECT
Ruby, 100
fonte
s="%i, %i#{", %i o'clock"*-~1} rock,\n"
(substitua-o\n
por uma quebra de linha literal). Ótima idéia para usar$$
!r=-~1
in-line, poderá usar em"..."*-~r
vez des+s+s
, permitindo que você largue a tarefas
.Perl 123
A expressão regular corresponde a
(
,)
e*
. Eu usei o fato de que o código ASCII(
é 40,)
é 41 e*
42.O
r
sinalizador da expressão regular ativa "substituição no local" e oe
sinalizador permite a avaliação do código (semelhante aox.replace(/.../, function(m){...})
JavaScript).(clock,rock)
é uma matriz de duas "palavras simples".$&
é a correspondência atual da expressão regular eord$&
é seu valor ASCII.Mascarados por 3 ou
1+1+1
os valores ASCII agora são 0, 1 e 2, para que eu possa usá-los para recuperar o elemento da matriz correspondente. Como 2 está fora da matriz, o operador "curto-circuito"||
avalia++$i
. Na primeira partida$i
éundef
tão incremental que recebo 1, depois 2 e assim por diante ...Em palavras simples. Isso substitui
*
a ocorrência atual,(
por "clock" e)
por "rock".fonte
Bash + coreutils, 120 ASCII, 92 Unicode
ASCII:
Unicode:
versão Unicode codificada em base64 (caso as renderizações unicode sejam confusas):
fonte
eval
vez de canalizar parabash
oush
?$r
!Brainfuck, 1299
Bleuuuurgh . Foi terrivel. Não sei por que fiz isso, parecia bem fácil no começo. Primeiro e provavelmente último script Brainfuck. Experimente aqui.
Com alguma ajuda de um gerador de código automatizado , consegui escrever um script que reutilizou a maioria dos caracteres em vez de gerar cada um a partir do zero. É apenas 275 caracteres menor que o gerado automaticamente, publicado aqui .
A saída não é terminada por nova linha.
Eu poderia colocar um pouco de explicação mais tarde. Essencialmente, qualquer longa linha que não é algo como
>>>>>>>
ou<<<<<<<
ou>>.>>.>>.>>.
gera um personagem ou uma série delas.fonte
Lua -
217164154151149 149143Modificado o antigo para usar um loop, economiza uma carga de caracteres de barco. Agradeço a TeunPronk por me ajudar a cortar outros 10 caracteres e a WilliamBarbosa por me cortar outros 3 caracteres. Mais 2 caracteres pode ser salvo utilizando a variável
k
. Mais 6 caracteres são salvos, eliminando a variável,r=" rock,"
pois ela é usada uma vez.Ungolfed,
fonte
j
ek
.O
, removaO
a partirR
, coloque um espaço noR
e substituirR
porO,R
suaio.write
:)io.write
em uma variável (f=io.write
) e reduzir ainda mais longeCJam - 90 ASCII / 54 Unicode
ASCII:
Unicode:
Experimente-os em http://cjam.aditsu.net/
fonte
Python (123)
PYG (112)
fonte
Brainfuck - 680
teste aqui: ideone.com/Wi9ftB
como prometi, aqui está uma versão melhor. meu cérebro parece ... ooh, então é daí que o nome vem.
explicação: (porque é impossível de manter e não quero esquecer como funciona)
primeiro, você deve escolher o melhor layout de dados para esse desafio. eu vim com
-4 outmost loop -3 newline char -2 space -1 numbers 1 lowercase #1 2 lowercase #2 3 comma, apostrophe, period 4 condition (outmost loop < 3) 5 inner loop 6 second inner loop
Temos que acreditar que isso é ideal, a menos que haja muitos turnos (nesse caso, você precisará reorganizar o layout)
Depois disso, usei um loop 4x9x3 para definir os valores iniciais para nova linha, número, as duas letras minúsculas e a vírgula. (todos os códigos ASCII menores têm 4x9 = 36 e as duas letras minúsculas têm 4x9x3 = 108, então adicionei e subtraí algumas para obter seu valor real)
Quando a predefinição é concluída, o código entra no loop mais externo que é executado 3 vezes. Eu explico por pseudocódigo.
Quando esta seção estiver concluída, basta imprimir a última linha. Mas temos um W maiúsculo que deve ser produzido sem usar muitos caracteres. Neste ponto, estamos aqui:
então eu coloquei [-3] 4 vezes para [-1] e subtraia 3 para obter 87 (W):
>[>>++++<<-]>>---.
apague-o
[-]
e mova-o [-2] para este local [-1] para que o espaço fique próximo das letras minúsculas.
<[>+<-]
Depois disso, apenas imprime as letras. letras minúsculas nº 1 são para a parte inferior 97-107 e letras minúsculas nº 2 são para a região acima.
fonte
JavaScript,
111107 caracteres, sem usar nenhum número.Execute estes trechos no console JS do seu navegador:
107 (inspirado em http://xem.github.io/obfuscatweet/ mais a outra resposta do JS):
111 (apenas empacotando toda a corda e removendo a avaliação):
fonte
C - 145 - tente-me
C - 172 - tente-me
fonte
#include <stdio.h>
usarprintf
?main(){...
PHP - 125
129Versão 1 (129)
Versão 2 (125)
Versão limpa:
fonte
Perl,
114111110108110:
111:
114:
fonte
C ++
261203Editou minha primeira tentativa; funcionou quando o testei pela primeira vez, mas isso parece ser um acaso; o pós-incremento em um fluxo é "comportamento indefinido" e fazia coisas estranhas (incluindo a triagem em azul do Windows 7!) quando tentei executá-lo novamente. Eu acho que usar printf em vez de std :: cout poderia ser usado com pós-incremento para obter um programa mais curto.
Editado novamente, reduziu para 231 reimplementando o loop. Editado mais uma vez, agora com 203 ... esses #defines não eram úteis na versão em loop.
Para aqueles que se perguntam como o C ++ pode executar uma função "m", o ponto de entrada pode ser definido como qualquer função com apenas uma opção de compilador, assim como definir todas as funções como stdcall; Eu usei os dois switches ao compilar o acima. Se você não gostar do ponto de entrada redefinido, adicione 3 à minha contagem de caracteres.
fonte
m()
. No entanto, você pode soltarvoid
e salvar 5 caracteres (ou 2, se você nomear o métodomain
) #Swift -
136134fonte
Java, 228
Uma solução codificada provavelmente teria sido mais curta.
fonte
1+1+1
é 9 caracteres menor que"two".length()"
. E éString[] a
necessário?Befunge-98 (
402268)Agora um inabalável!
fonte
,,:,1+
,a11+/a*b1111+++-+w:,
, personagens de rua debaixo da principal linha de código ... típico Befunge. A maioria dos intérpretes online está tendo problemas com o comprimento da linha (está acima do limite), você conhece alguém que não se importa?Groovy -
140139 caracteresGolfe, influenciado pela resposta de William Barbosa :
Ungolfed:
fonte
Mathematica - 153
fonte
C ++ 252
fonte
P(", ")
no lugar deQ
salva dois caracteres.N
eR
apareça apenas uma vez: seria melhor incorporá-los do que criar uma macro.#include<iostream> #define P std::cout<<++i<< #define C" o'clock" #define F P", ";P", ";P C<<", ";P C<<" rock"<<std::endl; int i;main(){F F F std::cout<<"We're gonna rock around the clock tonight.";}
Java (v2) -
250241232 caracteresEste é um programa completo de execução, influenciado pela resposta de William Barbosa .
Golfe:
Ungolfed:
fonte
ECMAScript6 -
136135Nem usa o
1
dígito permitido :Testado no console do Firefox.
fonte
PowerShell,
123118109Depois de um começo horrível (167), me livrei de algumas expressões idiomáticas que nem precisava e, pelo menos, consegui mais curto que a referência.
fonte
Haskell -
138137 caracteresComo um programa independente:
Edit: Eu costumava ter uma função auxiliar usada para definir s por
mas acaba custando 1 caractere extra. Existe alguma maneira de comprimir todas as "horas" s / "rock" s / "ock" s?
fonte
JavaScript, 140
Eu faço uma string como "x, x, x horas x rock de horas, \ n ..." Então substituo os "x's" por números.
fonte
PHP 150
Nenhum número, incluindo o 11, que não seria dois 1's, mas o valor do número onze.
fonte
PowerShell,
156140136129127Ungolfed:
fonte
$i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', '
dentro do loop.Cobra - 193
fonte