Este é um teclado QWERTY.
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
Podemos "espiralar" neste teclado, começando por G. A espiral começará em G, vai para H, depois para Y, depois para T, depois F, depois V, depois V, depois B, depois N, depois J e U , então R, então D, então C, ... etc. Seu desafio é, dado um número 1 ≤ N ≤ 26, gerar os primeiros N caracteres nesta espiral. (Se você estiver confuso, consulte as figuras no final da postagem.)
A pegada? A pontuação do seu programa é proporcional aos índices de caracteres encontrados dentro da espiral!
Pontuação
- Para cada letra (sem distinção entre maiúsculas e minúsculas) no seu código, adicione o índice desse caractere na espiral à sua pontuação (começando em 1).
- Para cada personagem que não esteja na espiral, adicione 10 à sua pontuação.
- A pontuação mais baixa vence.
Por exemplo, o programa print("Hello, World!")
tem uma pontuação de 300.
Para sua conveniência, escrevi uma niveladora automática de programas.
Outras regras
- Seu envio pode ser um programa ou função.
- Você pode pegar N iniciando em 0 ou 1 e terminando em 25 ou 26, respectivamente, mas as saídas ainda devem começar com "G" e terminar com "GHYTFVBNJURDCMKIESXLOWAZPQ".
- Você deve imprimir os caracteres na espiral em ordem .
- Se uma função, você pode retornar uma lista de caracteres em vez de uma string.
- Você pode ter uma nova linha à direita após a saída.
- Você pode usar letras minúsculas em vez de letras maiúsculas ou uma combinação de ambas.
Casos de teste
number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ
As fotos
A espiral sobreposta:
ascii-art
code-challenge
keyboard
Conor O'Brien
fonte
fonte
Respostas:
Japt ,
304264162 pontosGuardado 40 pontos graças a @ ConorO'Brien
Teste online!
Para salvar o máximo de pontos possível, a sequência inteira é condensada em 9 caracteres Unicode, interpretando cada execução de 3 letras como um número base-36 e convertendo em um ponto de código. O programa em si pega essa sequência compactada (que custa 110 pontos, incluindo as aspas) e mapeia cada
c
harcode convertendo-o em umas
sequência na base-36 (G
após;
o início).î
recebe os primeiros {input} caracteres disso, que são impressos implicitamente.fonte
C, pontuação: 544
Experimente online!
fonte
g
é a letra mais barata de acordo com a pontuação usada no desafio.Espiral , pontuação:
619215127471546554191Um intérprete pode ser encontrado aqui .
Explicação:
O programa começa no
0
personagem na quarta linha. O primeiro pedaço de código a ser executado é0;vg
.;
pega um número como entrada e o coloca na pilha.v
coloca o que está no registrador (um zero) na pilha. Será usado como contador.g
é um rótulo, quando é atingido, o controle salta para a outra ocorrência da letrag
no código.Então é aqui que o controle está agora:
Como existe espaço em branco em todas as outras direções, o ponteiro da instrução começa a se mover para cima.
v
coloca um zero na pilha eX
a lança imediatamente. Como o valor exibido é zero, o ponteiro da instrução se move paraX
(caso contrário, ele seria tratado como espaço em branco).Por padrão, o fluxo de controle está no modo virar à direita; agora, quando atinge a junção, o ponteiro da instrução gira para a direita.
v
mais uma vez, empurra um zero para a pilha,*
incrementa o registro em um.O próximo
v
coloca o que está no registrador (número 1) na pilha, o ponteiro da instrução tenta girar para a direita, pressionando o próximoX
. O valor adicionado à pilha é exibido e colocado no registro. Como ele é diferente de zero,X
não é inserido e o IP prossegue para o próximo*
à direita, aumentando novamente o valor no registro.Isso acontece repetidamente até chegarmos ao final desta parte e a linha de
*
s começa. Até agora, o valor no registro é 6, que é a letrag
ASCII menos a letra ASCIIa
. Assim, com uma linha de 97*
s, aumentamos o valor no registro para 103, que corresponde à letrag
que queremos imprimir.v
empurra-o para a pilha eP
é outro rótulo ao bater, que pulamos para o outroP
na primeira linha do código.Aqui
.
aparece o valor da pilha e o imprime como um caractere. Depois disso,X
aparece o zero estranho da pilha e~
compara os dois valores restantes na pilha (os valores sendo o contador e o valor de entrada). Se os valores forem iguais, o operador coloca zero na pilha (caso contrário, -1 ou 1). Novamente, o controle tenta virar à direita.X
exibe o valor da comparação da pilha, se for zeroX
, e depois de!
inserida, finalizando o programa.Caso contrário, o IP continuará no
Z
, que é um rótulo que, neste caso, salta apenas um passo para a direita. A razão para fazer isso é que pular define o valor no registro de volta a zero.*
incrementa o registro ev
coloca o 1 resultante na pilha.+
exibe os dois elementos principais da pilha (o 1 e o contador), os adiciona e coloca o resultado na pilha (na verdade, isso incrementa o contador em um).^
copia o resultado da pilha para o registro sem removê-lo da pilha.#
diminui o valor no registro em um,v
empurra o valor diminuído para a pilha, o IP tenta virar para a direita eX
exibe o valor da pilha. Se o valor for diferente de zero, o IP continuará se movendo para o leste, diminuindo o valor no registro, até atingir zero, e o IP entrar em umaX
ramificação.A ramificação leva a um rótulo correspondente ao valor do contador. Ao atingir o rótulo, o controle salta para a outra ocorrência do rótulo na seção em que começamos com o rótulo
g
, iniciando outra iteração. Assim como emg
, o valor no registro é incrementado até o valor ASCII da letra que precisamos imprimir. Em seguida, o caractere é impresso e o contador incrementado, outra etiqueta é selecionada. Isso acontece até depois da última iteração, o contador é igual à entrada e o programa termina.Editar:
Consegue a mesma coisa que
mas com menos espaço em branco.
Edição 2:
Pode ser usado em vez de:
fonte
Haskell , 471
Experimente online!
Isso é um pouco de referência, acho que deve haver uma maneira melhor, mas é a melhor que encontrei até agora.
Explicação
Suponho que devo explicar isso para aqueles que não conhecem muito bem Haskell. A função
take
pega os primeiros n elementos da lista. É chamado assim:Queremos pegar os primeiros n elementos da picada
"GHYTFVBNJURDCMKIESXLOWAZPQ"
, então queremos algo comoPodemos fazer melhor, porém, podemos infixar
take
usando backticksE agora isso pode ser feito sem sentido
fonte
partial
no Clojure. Era isso que eu estava procurando, maspartial
era muito caro.Geléia , 211 pontos
19 bytes
Experimente online!
economizou um monte de pontos graças à sugestão de Emigna para usar
œ?
: Dfonte
Vim ,
461418Obrigado @pacholik pela pontuação -43!
Experimente online!
fonte
CGHYTFVBNJURDCMKIESXLOWAZPQg©G@" D
(© é escape)Befunge, Pontuação: 531
Eu sinto que esse desafio teria sido mais interessante se o resultado também estivesse em espiral.
fonte
TI-Basic (TI-84 Plus CE),
454432 pontos-22 pontos de Conor O'Brien
Corra com
5:prgmNAME
.Retorna / imprime a
sub
sequência de1
atéAns
(a entrada numérica).O TI-Basic é um idioma tokenizado , por isso estou pontuando isso pelos valores de bytes dos tokens.
sub(
é 0xbb 0x0c, então 20"
é 0x2a, então*
, então 10 * 2 = 20Letras maiúsculas não são alteradas, portanto a string é 351
,
é 0x2b, então+
, então 10 * 2 = 201
é 0x31, então1
, então 10Ans
é 0x72, ou sejar
, 1120 + 20 + 351 + 20 + 10 + 11 = 432
fonte
Python 3, pontuação =
762753Entrada baseada em 1. Isso é pior do que a abordagem trivial, pois usa 37 letras não. É um pouco interessante, no entanto.
-9 graças a Leo .
Experimente online!
fonte
[:g*3][-3:]
pode tornar-se[g*3-3:g*3]
diminuir a pontuação total em 9 pontos #05AB1E , pontuação: 204
Experimente online!
fonte
Brainf ** k, pontuação = 2690
Insira um único byte variando de
0x1
até0x1a
.Experimente online!
fonte
APL (Dyalog) , pontuação: 391
Experimente online!
O único uso para letras latinas no Dyalog está em nomes de variáveis e em algumas funções do sistema. Além disso, apenas glifos e algumas letras gregas são usadas.
fonte
Python 3, 522
Experimente online!
Um lambda anônimo utilizando o fatiamento de strings do Python (
"asdf"[:i]
obtém os primeirosi
caracteres de"asdf"
)fonte
Clojure,
484474 pontos-10 pontos porque aparentemente um
%
pode existir após um número sem um espaço que os separa !? Talvez eu precise voltar e melhorar alguns envios.Uma função anônima. Basicamente, uma porta Clojure do que já foi publicado. Pontuações agradavelmente! Eu acho que este é o primeiro programa Clojure que eu já escrevi que não contém um único espaço.
fonte
Ly , 521 pontos
Experimente online!
Não sinto que isso seja otimizável.
fonte
Bash , pontuação: 465
Experimente online!
fonte
Casca , 293 bytes
Este é o mais curto que pude encontrar, o próximo mais próximo,
¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨
com uma pontuação de 293 ..Experimente online!
Explicação
Pesquisa por força bruta, verifica-se que todas as letras minúsculas deram a melhor pontuação. É basicamente o mesmo que a solução do @Wheat Wizard,
take
(↑
) em uma string compactada (¨
).fonte
Lisp comum, pontuação: 580
Experimente online!
fonte
Excel, 490 pontos
A convenção para usuários do Excel deve receber contribuições
A1
. Alterar isso paraG1
corta 22 pontos (468).fonte
C # , pontuação 546
fonte
Ferrugem, pontuação 443
Não é sempre que o Rust é bom em golfe de código, mas aqui ele vence muitos idiomas
fonte
Golang, pontuação 861
Jogue online!
fonte
Javascript ES6, 527 pontos
Tente !
fonte
PHP, 590 pontos
Experimente online!
fonte
PHP, pontuação 584
mexeu um pouco com o dicionário; o fato de xorar a corda a cortar tornava
substr
obsoleto.Experimente online .
fonte
Mathematica, 528
Experimente online!
fonte
Pyth , pontuação: 371
Experimente aqui.
Quão?
fonte
Ruby , 453 pontos
Experimente online!
fonte
> <> , 558 + 16 = 574 pontos
Usa o
-v
sinalizador para enviar a entrada para a pilha.Empurra a espiral para a pilha na ordem inversa e depois gira a entrada para o topo. Então, enquanto o topo da pilha é diferente de zero, imprime a próxima letra e diminui o topo da pilha.
Experimente online!
fonte
Pyth , 261 pontos
Experimente aqui!
Isso gera letra maiúscula. Para minúsculas, você pode tentar o 261 byter alternativo .
fonte