Eu estava esperando publicar algo mais complexo como meu primeiro quebra-cabeça no PCG, mas uma pergunta específica sobre dever de casa no Stack Overflow me inspirou a postar isso. Eles querem:
imprima o seguinte padrão para qualquer palavra que contenha número ímpar de letras:
P M R A O R G O R R A P M
Observe que as letras são separadas por um cavaleiro no padrão que você precisa imprimir. Portanto, todas as outras colunas estão vazias. - (Obrigado xnor por apontar isso.)
Regras
- É proibido o uso de C ++. Como posso vincular essa pergunta lá.
- Você pode usar
stdout
, ou qualquer outro meio de gerar uma string rapidamente (por exemplo,alert()
em JavaScript). - Como sempre, o código mais curto vence.
Respostas:
Pyth , 22
Teste:
Explicação:
fonte
~
não fosse bit a bit em Pyth. Então poderíamos mudart-lzd
para+lz~d
- ainda 5 caracteres.Vz
é um truque legal: eu não sabia o queU<string>
davarange(len(<string>))
.APL (
37353427)É preciso entrada do teclado, assim:
fonte
Python
2-94 90 8988Entrada:
Saída:
fonte
i in[j,L+~j]
.L+~j
.+~
truque ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
para salvar um char? (Eu não tenho acesso ao Python 2 agora para testar.) #Caracteres Python 3: 75
Para a linha
i
, começamos com uma lista de espaços e configuramos as entradasi
da frente e de trás para serem iguais às letras da sequência de entrada. Então, imprimimos o resultado.Seqüências de caracteres Python são imutáveis, portanto,
a
deve haver uma lista de caracteres. A listaa
deve ser inicializada dentro do loop ou as modificações serão transferidas entre os loops. Usamosprint(*a)
para imprimir cada caractere da lista, separado por espaço, o que requer Python 3.As linhas de saída são simétricas, portanto, podemos ter uma
i
contagem regressiva em vez de aumentar usando um loop while.Também funciona para um número par de letras.
fonte
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
29 bytes ... Acho que vou ter que tentar outra coisa para vencer o APL. Além disso, uma para a prova que o Python 3 pode out-golf Python 2 (às vezes)len("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
também é válido no python 2 (ele age de maneira um pouco diferente); portanto, a menos que a entrada para o desafio seja bastante rigorosa, o python 2 geralmente vencerá.print" ".join(a)
seu código é mais curto (82) que o meu.CJam,
2725 bytesExperimente online.
Exemplo de execução
Como o exemplo na resposta, cada linha possui espaços em branco à direita.
Como funciona
fonte
Java - 168
Um loop aninhado simples, não há nada realmente especial acontecendo aqui.
Com quebras de linha:
fonte
Pure Bash, 94 bytes
fonte
t%l
cálculos. Salve-o no primeiro uso em uma variável((x=t%l))
e use a variável para reduzi-lo para 94 caracteres.x=t%l
ey=t/l
e já não era ... não passou pela minha cabeça apenas para uso x somenteRuby, 64
Explicação
String
.n
no total):n
espaços.i
th en-i
th (~i
, graças xnor) pelo caráter thi
en-i
th da entrada.fonte
-i-1
como complemento de bits~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(assume que a entrada não é finalizada por uma nova linha, por exemploecho -n CODE-GOLF
). Pode-se fazer uso adicional.chars
para salvar outro personagem:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95 129 136Editar espaçamento incorreto de letras. Fixo.
Editar Mais simples e mais curto usando o clássico para loops
Como função, faça a saída via pop-up.
Versão anterior usando .map
Teste no console do FireFox / FireBug
Saída
fonte
Befunge-93,
6871Você pode testá-lo aqui . Ele aparecerá com uma caixa de diálogo de entrada em cada passagem
~
; digite sua palavra, um caractere de cada vez (afinal, a entrada é 'klunky'), terminando com um espaço.Não será impresso no console; isso não seria o Befunge sem uma pitada de auto-modificação, afinal! Em vez disso, modificará sua própria grade para exibir a mensagem. Depois que terminar, a grade será mais ou menos assim:
(Observe o nobre sacrifício da célula em (0,0), depois que soubermos que o ponteiro não irá mais para lá, com o objetivo de armazenar um dado.)
Também funciona com entradas de comprimento uniforme. Observe que, como o Befunge-93 é limitado a uma grade de 80x25, o tamanho da entrada é limitado a 21 caracteres se você o executar em um intérprete do Befunge-93. Executá-lo como Befunge-98 deve remover esse limite.
Editar - Agora funciona mais ao longo da linha de saída pretendida, às custas de apenas três caracteres.
fonte
Javascript 102
84 85Edit: teve que corrigir o espaçamento. Não é mais tão pequeno.
fonte
function(s)
desde que não recorra?CJam,
3836353432 bytesTeste aqui. Isso lê a palavra de entrada de STDIN. Também funciona para um número par de caracteres. Isso imprime uma coluna de espaços à direita, mas não vejo nada nas regras contra isso.
Explicação
O conteúdo da pilha é impresso automaticamente no final do programa.
fonte
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
em um guardanapo de↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... risadaC, 105
duas maneiras ligeiramente diferentes de fazê-lo.
Se você deseja adicionar espaços extras, substitua
putchar(
comprintf(" %c",
por um extra de 5 caracteres.fonte
J -
3630 bytes:Editar: 6 caracteres mais curtos, os créditos vão para @algorithmshark .
por exemplo:
Bônus: também funciona com cadeias de comprimento par:
fonte
Prolog - 240 bytes
Invocação:
Legível:
fonte
Tela , 5 bytes
Experimente aqui!
Explicação:
fonte
R ,
99989389 bytesExperimente online!
A linha 1 lê a sequência de entrada, divide-a em caracteres, armazena seu comprimento e cria uma matriz com a palavra na diagonal principal - as letras da palavra são sobrepostas em uma matriz de identidade (e repetidas por padrão para corresponder ao seu comprimento) e apenas as que correspondem 1s são retidos, outros sendo substituídos por espaços.
A linha 2 imprime uma matriz formada por elementos da matriz diagonal ou de sua versão espelhada horizontalmente, o que for maior.
−2 + 1 = -1 byte graças a JayCe
-4 bytes graças a Giuseppe
fonte
pmax
e incorporando mais algumas atribuições.C # (
214212)(Certamente mal) Versão Golfed:
Versão não destruída:
Quaisquer dicas, dicas, truques ou observações são muito bem-vindas, pois esta é minha primeira tentativa no CodeGolf. Eu só queria experimentá-lo, mesmo sabendo que meu comprimento de byte em C # nem chegará nem perto do dobro das melhores soluções;)
E como vocês contam seus bytes? Acabei de publicar o que foi dito acima em uma janela do Quick Watch e o fiz
.Length
. Eu poderia escrever um pequeno programa para contar bytes para mim, mas aposto que há uma maneira mais fácil que ainda não conheço.fonte
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 bytesColoque isso no console do Firefox e execute como
f('PROGRAM')
:f("CODE-GOLF")
:fonte
Mathematica, 149 bytes
Entrada passada como parâmetro para a função; A função retorna a sequência de saída. Há uma nova linha no final da saída.
Explicação: Criamos uma matriz diagonal com a sequência e, em seguida, criamos uma cópia dela invertida verticalmente usando
Reverse@#
para reverter as linhas. Então temos uma terceira matriz das mesmas dimensões, contendo apenas 32 (espaço ascii). UsamosMapThread
o máximo de três matrizes por elemento. Por fim,Riffle
espaçamos em cada linha,Append
uma nova linha no final eFlatten
o resultado.fonte
C , 119
Isso pode não ser compilado como C ++, portanto, espero não ter violado as regras :)
fonte
i=0
ej=0
não é necessário, pois as variáveis globais são inicializadas em zero. 3. Você pode usar emmain(l,v)char**v;
vez demain(int l,char**v)
. 4. Se você atualizari
comoi+=puts("")
, poderá se livrar dos colchetes do loop externo.Perl - 90
Pode ser possível extrair mais alguns caracteres disso:
89
+1
para-n
.Correr com:
Saída:
fonte
T-SQL: 180
Tomando a entrada da variável @i
Isso reúne caracteres únicos / decrescentes desde o início e o fim em uma sequência de espaços.
Resultado do teste
fonte
PowerShell
11810297Saídas:
fonte
Gelatina , 11 bytes
Experimente online!
fonte
JavaScript (Node.js) , 81 bytes
EDIT : -1 Obrigado Joe King. Eu não vi o TIO fornece pasta direta pré-formatada para CG.
Experimente online!
fonte
-i-1
pode ser+~i
C # 208
fonte
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( DEMO )
fonte
Não importa quanto tempo, sempre tem que haver uma resposta em ...
Java -
289234 bytesUngolfed:
A saída, mal feita, é:
Adicionado oPorra, eu realmente sou péssima nisso.import java.util.Scanner
interior do código, porque eu nunca me lembro se as importações contam para a contagem de bytes ...fonte
from math import floor as f
que é um pouco cheatySystem.out.print
chamadas em uma, usando alguns operadores ternários.System.out.print
chamada no final.C # (192/170)
Ou, como "Somente Main ()":
fonte