Code-Bowling
Você foi contratado pela Brunswick Bowling para criar um programa simples para exibir o texto Code Bowling
em seus monitores. Esta empresa vale um centavo bonita e você sente que você pode enganar-los por muito o pouco de dinheiro.
A descrição do trabalho indica claramente que eles pagam com base na pontuação e você está bastante confiante de que pode manipular o sistema de pontuação deles a seu favor e obter o maior cheque de pagamento possível desses caras. Para fazer isso, será necessário que você insira o máximo de código possível em seu programa / função, mesmo que o sistema de pontuação tenha sido projetado para impedir que você faça isso.
Saia dos seus cofrinhos, vamos codificar!
Desafio
O desafio é simplesmente imprimir o texto Code Bowling
, exatamente como está escrito aqui, com a maior pontuação possível. (Veja a seção: Sistema de pontuação abaixo)
Novas linhas iniciais e finais (quebras de linha) são aceitáveis.
Seu código pode ser um programa inteiro ou apenas uma função executável.
Regras
Obrigatório: Este desafio está usando o Boliche de Código: Regras Comuns, Revisão 1.0.0 ; Veja Meta para detalhes.
Proporção de caracteres: bytes
No boliche de código, uma contagem de caracteres é preferível a uma contagem de bytes. O raciocínio óbvio para isso é que caracteres unicode de vários bytes (por exemplo, 🁴) podem ser usados no lugar de caracteres unicode de byte único para aumentar a contagem de bytes e tornar o boliche mais sobre quem renomeia a maioria das variáveis com caracteres unicode de byte alto. do que quem estrategicamente cria código complexo e significativo.Nomes de variáveis / funções / objetos
Todos os nomes de variáveis (ou ponteiros de objetos, nomes de funções etc.) devem ter 1 caractere. O único momento aceitável para usar nomes de variáveis de 2 caracteres é após todas as variáveis de 1 caractere possíveis terem sido usadas. O único momento aceitável para usar nomes de variáveis de 3 caracteres é depois que todas as variáveis de 2 caracteres possíveis foram usadas. Etc.Código não utilizado
Todo o código deve ser usado. Significando que o programa deve falhar em sempre sempre concluir a tarefa corretamente, se qualquer caractere individual (ou conjunto (s) de caracteres variável) for / for removido. Naturalmente, um subconjunto do programa não deve ser capaz de concluir a tarefa sozinho, sem o restante do programa.Comentários
Não são permitidos comentários para contagem de caracteres, a menos que seja utilizado de alguma forma pelo seu programa / função.
Sistema de pontuação:
Desafio Pangram:
Um pangram é uma frase que usa todas as letras pelo menos uma vez. (A raposa marrom rápida pula sobre o cachorro preguiçoso).
Esse tipo de desafio possui sistemas de pontuação projetados onde um pangram perfeito alcançaria a pontuação máxima teórica (embora você não precise usar todos os personagens pelo menos uma vez.) Além disso, o uso de qualquer personagem mais de uma vez começará a sofrer uma penalidade. Esse desafio também se expande para mais do que apenas os caracteres alfabéticos.
Métrica de pontuação:
- Cada personagem usado aumenta sua pontuação em 1.
- O uso repetido de qualquer caractere alfanumérico (az, AZ, 0-9) resultará em uma dedução de 3 pontos por repetição (o primeiro uso não resulta em dedução).
- O uso repetido da pontuação básica
([!?.-,":';])
- incluindo os colchetes - resultará em uma dedução de 2 pontos por repetição.- O uso repetido de outros caracteres ASCII
{`~@#$%^&*_+=|\/><}
- incluindo os colchetes - resultará em uma dedução de 4 pontos por repetição.- O uso de espaços, tabulações e novas linhas resultará em uma dedução de 1 ponto por uso. Ou seja, eles não contam para o total de caracteres.
- Os caracteres não mencionados acima (caracteres exóticos) resultarão em uma dedução de 1 ponto por uso. Ou seja, eles não contam para o total de caracteres.
Ferramenta de pontuação:
Um widget de pontuação automatizado foi criado e pode ser encontrado aqui .
Esta é uma variante do código-boliche . O programa com a maior pontuação vence! (Como existe uma pontuação máxima de 94
, quem chegar primeiro (se for possível) será marcado como a resposta aceita, embora outros sejam livres para continuar a responder por diversão)
fonte
Respostas:
Glypho , 94
O arquivo de origem está codificado no CP437 .
Experimente online!
Explicação
O Glypho é bastante útil para desafios como esse, porque não se importa com os personagens reais que estão sendo usados. Em vez disso, ele analisa cada parte de 4 caracteres e o comando usado é determinado pelo padrão que esses quatro caracteres formam:
Isso significa que podemos resolver o problema e preencher caracteres únicos em cada quarteto com os caracteres imprimíveis e todos os repetidos com alguns dos caracteres "exóticos", que são ignorados pela pontuação. O Glypho é suficientemente detalhado para que uma solução manuscrita normal contenha caracteres únicos suficientes para caber todos os 94 caracteres imprimíveis. Na verdade, acabei jogando golfe até ter exatamente 94, apenas para que eu pudesse usar caracteres exóticos exclusivos para os repetidos (espero, para tornar mais difícil a redução do programa).
A forma abreviada do programa acima é esta:
Onde cada linha imprime um dos caracteres.
Eu usei esse script Retina para convertê-lo em Glypho usando
0123
. Depois, acabei de preencher os caracteres no lugar dos dígitos.Em teoria, seria possível reduzir ainda mais isso, se alguém conseguisse jogar golfe no programa taquigráfico e depois recombinasse os caracteres para que os padrões certos aparecessem, mas não tenho certeza de como provar ou refutar que isso é possível . Se alguém conseguir formar uma solução válida a partir de um subconjunto do meu programa, informe-me para que eu possa excluir a resposta até que ela seja corrigida. Até lá, terei que assumir que isso é válido.
fonte
94
é a pontuação máxima. Todos os outros são livres para continuar enviando respostas por diversão .Python 3,
828788Obrigado a @JonathanAllan pela pontuação +1
Experimente online!
Nada de especial, apenas cortar e pular caracteres. A sequência é invertida para que você não possa remover caracteres e que a sequência original esteja sendo impressa.
fonte
HIJKLMN...
), exceto para cada oitavo personagem, é claro?> <> ,
9294Sim, eu fiz isso!
␑
é o caractere exótico\x11
com valor decimal 17. O programa sai com um erro após imprimir o resultado (é um estouro de pilha). Eu tive que gerenciar quais espelhos e comandos direcionais usei com cuidado, pois só posso usar cada um uma vez.Experimente online
O programa principal:
Explicação:
Empurre a corda
vCoUV␑3`h]Z_X >
(execução envolve). Mover para baixo. Inverta a pilha e remova ov
.Empurre
9
ec
(12). Multiplique para obter108
(l
). Empurre7
. Pressioned
(13), subtraia1
, divida por2
para obter6
. Coloquel
em (x, y) de (13,6), que está abaixo dee
. Eu poderia ter feito esse caminho mais curto, mas isso é prolongado, então eu tenho espaço para colocar mais caracteres ASCII.Mover para cima em um loop. Empurre o comprimento da pilha com
l
. Se for maior que 14, caractere de saída, crie uma nova pilha com os 10 principais elementos, adicione 15 e reflita a execução logo em seguida. Isso é usado para impedir que os espaços extras>
sejam impressos no final, além de transformar a sequência de aparência aleatória no que precisa ser impresso. Continue dando laços.Se alguma das linhas for mais curta (removendo um caractere), o programa não funcionará mais, porque as partes verticais do programa não estão mais alinhadas ou porque a sequência a ser impressa não está mais correta. Tentar remover um caractere na frente de cada linha alterará a profundidade da pilha e a
l
localização da mesma, causando também problemas.Peixe
fonte
"
el
com bastante trabalho. Quando atingi 92, tive certeza de que havia uma maneira de remover o últimoo
. Demorou um pouco de esforço, no entanto. Você pode dizer pelo histórico de revisões.Oitava,
202122252733O melhor que eu consegui até agora é
Isso cria uma função anônima
f
que não recebe entrada. Você pode ligarf()
. Eu diria que o ponto e vírgula no final é necessário, para evitar a impressão do corpo da função.É possível que isso possa ser melhorado combinando
eval
eprintf
, mas tentei e falhei várias vezes.Isso usa todos os dígitos uma vez, explorando o fato de o Octave executar uma
mod(x,256)
operação ao converter implicitamente números em caracteres. Isso significa que podemos usar números negativos, assim como números fora do32-126
intervalo normal . Os seguintes números todos resultam na cartai
quando convertido para caracteres:... -2455 -2199 -1943 ... 105 361 ...
. Em vez de usar'owling'
no final, usamos"nvkhmf"
e adicionamos 1. Isso cria um vetor de números inteiros que são implicitamente convertidos em caracteres. Em vez de1
, usamos!0
(ounot(false)
. Além disso, usamos em"
vez de'
evitar dois pontos de penalidade.Precisamos encontrar o conjunto de números que apresenta a menor pontuação. A sequência
Code Bowling
resulta na seguinte matriz, quando subtraímos e adicionamos -10 * 256 - 10 * 256.Então,
['',2627 2415 2148 1893 -2528 66 -1169 -1161 2668 105 -146 103]
resulta emans = Code Bowling
. O desafio é encontrar o conjunto de números e caracteres que reduz mais a pontuação. É claro que usar todos os dígitos é bom, mas duplicatas são ruins. Como todos os dígitos são usados e não são usados duas vezes, essa é a melhor combinação possível. Além disso, chegamos a usar-
, resultando em um ponto.Pode-se afirmar que ele pode ser reduzido à linha abaixo (31 pontos), mas não seria mais uma "função executável" e, portanto, teria uma funcionalidade diferente.
fonte
function q();disp(...)
também? Exceto peloi()
, eles não são sobrepostos.cot
na cordahorzcat
enf
na corda diminuirá a pontuação bastante drasticamente. Pode ser melhor, se eu removerhorzcat
e criar a string de outra maneira, mas também não posso usá-la+!0
. Eu ficaria surpreso se aumentar a pontuação para ser honesto ... São apenas 7 caracteres a mais do que a resposta atual, e receberei uma penalidade de 7 bytes, além dos que mencionei.function
, mas achei que você já deveria ter tentado isso e estaria perdendo meu tempo (em vez de, você sabe, gastar meu tempo com utilidade no PPCG)QBasic, 34
Este é um código não formatado (sim, para não diferenciar maiúsculas de minúsculas). Você pode executá-lo no QB64 ou no archive.org (observe que o último formatará o código enquanto você o digita). Eu acho que consegui cumprir todas as regras.
O
CLS
necessário: sem ele,C
não há garantia de impressão no canto superior esquerdo da tela, onde será alinhadoode Bowling
. OLOcatE
necessário: sem ele,ode Bowling
será impresso na linha abaixoC
. Não acredito que exista um subconjunto do programa (exceto espaços em branco) que possa ser excluído e mantenha a mesma saída.fonte
Parse failed: Syntax error at 3:36: Token(Bowling)
LOCATE 1, 2
que fez issoC,
2729+2 pontos graças a @ceilingcat!
fonte
char q<:]
vez dechar q[]
e emputs(q);%>
vez deputs(q);}
+2 points thanks to ...
Haskell , pontuação
213846472170Experimente online! A idéia é obter a liderança
C
construindo uma sequência de comprimento 67 que contém todos os caracteres não utilizados de outra forma e convertendo o comprimento dessa sequência em um caractere. Comecei computStr$toEnum(length""):"ode B\x6Fwling"
('\x6F'
é hexadecimal para o'\111'
qual produz'o'
) e calculei todos os caracteres ASCII imprimíveis não contidos no programa:Aliás, permanecem exatamente 67 caracteres ASCII imprimíveis que podem ser inseridos na string, e eles
C
mesmos que não podem aparecer na string, porque o programa seria redutível para apenasputStr"Code B\x6Fwling"
.Solução anterior: (21 pontos)
Define uma função
f
que não aceita entrada e imprime a sequência. Experimente online!fonte
95
na string e subtraindo4621
? (Eu não tenho tempo para verificar isso sozinho agora, mas vou olhar para ele algum tempo depois)JavaScript, 19
Não é uma pontuação muito alta.
fonte
z(){var x=alert('Code \nBowling');}
function
antesf
o
não foi utilizadoprompt('C\157de B\x6fwlin'+"g")
Jelly , 94
Experimente online!
105 caracteres únicos, 11 exóticos (
“¹³⁵⁷°⁹⁻”ḄỌ
).Quão?
Forma a cadeia de caracteres de ASCII invertido de 8 bits, em que cada bit é codificado usando o LSB do valor Unicode de um caractere.
fonte
Röda , 33
Experimente online!
Eu tentei seguir todas as regras. Ele funciona pressionando primeiro a corda
ode Bowling!
no fluxo e inserindoC
= 3 * 4 + 57-2 na frente.fonte
Cardeal 20
23 caracteres não em branco
% #> / NI "CodeB8 ^ o) wl, ing
-3 para "o" repetido
Caminhos do ponteiro:
Etapa 1:
ponteiro criado em% indo para a direita
Etapa 2: o
ponteiro se divide em # para subir, direita e baixo (P1, P2, P3)
Etapa 3 :
P1 Enviado à direita por>
P2 Indo para a direita
P3 Defina a espera por 3 etapas em 8
Etapa 4:
P1 Refletido em \. \ alterado para /
P2 Defina para o modo de impressão por "
P3 Aguarde 2 tiques às 8
Etapa 5:
P1 Abaixo
P2 Impressão C
P3 Aguarde 1 tiquetaque às 8
Etapa 6:
P1 Enviado por ^
P2 Print o
P3 Conclua a espera em continuar, selecione o valor ASCII de "" (32) em)
Etapa 7: P1 Subindo
P2 Impressão d
P3 Subindo
Etapa 8: P1 Refletido à direita por \ que foi alterado para /
P2 Print e
P3 Print character com valor ASCII = 32 de, operação
Etapa 9:
P1 Refletido por / alterado para \
P2 Print B
P3 Atingido o final do campo e para
Etapa 10:
P1 Refletido por I
P2 Atingido o final do campo e para
Etapa 11:
P1 Refletido à direita por / que foi alterado para \. Altera de volta para /
Etapa 12:
P1 refletido deixado por N
Etapa 13:
P1 refletido por /
Etapa 14:
P1 Defina o modo de impressão por "
Etapa 15:
P1 Imprimir o
Etapa 16:
Impressão P1 w
Etapa 17:
Impressão P1 l
Etapa 18:
Impressão P1 i
Etapa 19:
Impressão P1 n
Etapa 20:
Impressão P1 g
Etapa 21:
P1 Chega ao final do campo e para.
Experimente Online
fonte
C, 73
Obrigado a @Laikoni!
Experimente online!
C,
313335Obrigado a @ceilingcat e @DLosc por mais dois pontos e obrigado a Ørjan Johansen por mais dois pontos!
Experimente online!
fonte
8-
código e ainda ter um código válido.0xA-4+8
deve funcionar, no entanto.0xA+32/8
? (Sem que algo seja removível, isto é.) #+32
,+3
,+2
,+3/8
,+2/8
,/8
ou+8
produz a saída direita. Obrigado!0xD+4*8/32
. Não, espere, isso diminuiria para0xD+4/3
não.Lote, 19 caracteres
A partir do Windows Vista,
TMP
começa comC:\Users\
e, portanto,%TMP:~5,1%
é uma maneira detalhada de escrevere
, apesar de exigir uma%
penalidade dupla com -4.fonte
Brainfuck: -204
Bem, pontuação horrível, mas foi divertido de escrever.
fonte
Java 8,
235131718192021247778 pontos+53 pontos (24 → 77) graças a @Laikoni .
104 caracteres
- alnum repetido: -15 (
helng
)- pontuação repetida: -10 (
"()""
)- outro ASCII repetido: nenhum
- caracteres em branco: -1
PONTUAÇÃO: 78
Experimente online.
Resposta antiga de 24 bytes :
30 caracteres
- alnum repetido: -3 (
1
)- pontuação repetida: -2 (
"
)- outro ASCII repetido: nenhum
- caracteres em branco: -1
PONTUAÇÃO: 24
Experimente online.
fonte
Object x(){return"C\157de Bowling";}
algumas horas atrás por 17 pontos .. Aparentemente, eu não editei / salvei na minha submissão, no entanto ..: S Quanto ao lambda, eu uso o Java 7, que não ainda tem lambdas. Eu poderia adicionar uma resposta Java 8 com lambda, no entanto.7
. (Mas não se esqueça a concatenação.),,
com,;
a outra +1. Engraçado como a String usando todos os ASCII imprimíveis disponíveis restantes é EXATAMENTE 97 caracteres para código de charC
. :)empilhadas , 42
Experimente online!
Deixa a saída na pilha. Aqui está o detalhamento:
Eu provavelmente poderia aumentar, mas é de 42 soo ....
Outro candidato, 40:
Eu usei esse script para marcá-lo.
fonte
mal , -81
Melhor que Brainfuck!
Explicação
Enviado porque ninguém faz nada no mal, mas é meio divertido.
Ponto:
Comprimento = 63
Experimente online!
EDIT: TiO parece manipular incorretamente a criação e exclusão de novas células Wheel - eu arquivei um relatório de bug sobre o assunto. Não funcionará corretamente lá, mas eu o executei no meu próprio intérprete e funciona e você pode confiar em mim para que eu não me preocupe;)
fonte
Perl:
29, 33Ponto:
fonte
05AB1E , 94 pontos
Experimente online!
Basicamente converte (o ASCII binário do boliche de código):
Em uma sequência de 1 e 0, substitui cada 1 por uma letra do alfabeto e cada 0 por um caractere de espaço ou símbolo ou dígito.
É a string, onde 1 é letras e 0 são símbolos, números ou qualquer outra coisa. Em seguida, iteramos, vendo quais são alfabéticos, pressionando 1 para alfabético 0 para não alfabético. Em seguida, dividimos em grupos de 7, convertemos novamente em ASCII e imprimimos cada caractere.
fonte
T-SQL,
651832! pontosInspirado por um truque na resposta QBasic de Dlosc , encontrei uma maneira de incluir todos os 10 dígitos e a maioria dos operadores matemáticos (
%
restante / módulo, faltando apenas/
), principalmente por tentativa e erro. Eu não acho que exista uma maneira de obter um 67 removendo qualquer combinação de dígitos / símbolos, mas você pode tentar.Versão 2 (18 pontos, trivial):
Não é uma pontuação excelente, mas é para isso que minha primeira versão foi simplificada (obrigado, MickyT). Tudo o que eu tentei (codificar e decodificar hex64, escolher elementos individuais de uma string, converter valores ASCII etc.), todos tinham muitos caracteres repetidos (especialmente
ECR
símbolos e(),@
) que o direcionavam para o negativo.Versão 1 (65 pontos, inválida):
Eu usei o comprimento da string para determinar quantos caracteres eu uso no lado esquerdo; portanto, remover qualquer caractere único da string reduzirá o resultado da divisão inteira para 11, produzindo apenas
Code Bowlin
.fonte
DECLARE @ char(12)='Code Bowling'PRINT @
as regras.; # , pontuação -1163, não competidor
Eu não acho que isso seria muita competição, mesmo que pudesse competir.
Experimente online! Nota: O TIO não possui; # intérprete, apenas; # +.
fonte
CJam , pontuação 47
Espero que não haja problemas com isso ...
Usa um caractere exótico (Separador de Unidade, ASCII 31, representado por
␟
) e um caractere repetido ("
). Eu acho que poderia demorar ainda mais, mas vou deixar como está por enquanto.Experimente online!
O programa funciona pegando essa cadeia longa e dividindo-a em substrings de comprimento 3. Cada substring é mapeada para o bloco, que converte seus caracteres em seus valores ASCII, despeja os valores na pilha, pega a diferença absoluta dos dois segundos, adiciona o resultado ao primeiro e depois converte o resultado final em ASCII personagem.
fonte
CJam, pontuação 93
Experimente online
Inspirado na resposta Python do TidB .
Não tenho certeza se existe alguma maneira de evitar a repetição das aspas duplas.
Explicação:
A string contém "Cpde Bowling" no sentido inverso, a cada 8 caracteres.
7~%
extrai "Cpde Bowling" (7~
=-8
)2,.-
diminui o caractere p (2,
=[0 1]
)fonte
PHP, 33 pontos
Isso foi bastante difícil de conseguir.
A pontuação pode ser melhorada no futuro.
A nova linha é assumida como uma nova linha no estilo Linux! O estilo Windows e o estilo Mac antigo não funcionarão corretamente.
fonte
Ruby, 75
Aproximadamente uma porta da resposta do Python, mas Ruby não tem essa função de etapa legal, então eu uso
gsub
. Também decidi me divertir um pouco com os personagens exóticos, lançando frases no Google TradutorExperimente online!
fonte
USML, 12 ou 9 pontos (não concorrente)
Experimente online!
Essa resposta engana um pouco, abusando da maneira como o HTML é renderizado. A string realmente criada por isso é
"Code\tBowling "
. Pontos são perdidos por repetir o caractere "o".Para uma resposta não enganosa:
O USML ainda está bastante adiantado no desenvolvimento e ainda não é capaz de aumentar ainda mais o tamanho do programa.
fonte
"Code&'Bowling
(* Nota: Substitua&
por uma quebra de linha, não me permitirá digitá-las nos comentários)s
à próxima linha (obtendo uma subcadeia de nada, sem alterar a saída) para obter sua pontuação competitiva em até 12, a mesma que a pontuação não concorrente, exceto uma pontuação real. apresentação válida: DCubix , 85
Experimente online!
Cubificado com caracteres insignificantes substituídos por.
Eu acho que tornei o caminho frágil o suficiente para que a remoção de caracteres o interrompa bastante.
Assista correr
fonte
VB.net, 68
Um teste rápido aproveitando a insensibilidade do caso do VB e a falta de "sistema".
fonte
cONSOLE.WRITE("Code Bowling")
?Shell: 17 pontos
Pontuação total: 17
fonte
Acc !! , 171 caracteres
Experimente online!
Acc !! funciona bem para esse desafio, pois o espaço em branco é necessário e os loops são caros. Usei o simulador Acc aqui, mas mal, para aumentar os caracteres. Aqui está uma breve visão geral da página:
Loops em Acc, pelo menos para o golfe, são uma dor. Eles exigem chaves e todo o espaço em branco é necessário. Caso contrário, é bastante auto-explicativo.
fonte