Desafio
Crie o programa mais curto que atenda aos requisitos
Exigências
O código deve gerar uma grade 5x5 de 0s, da seguinte forma:
00000 00000 00000 00000 00000
O código deve aceitar uma entrada (coluna, linha, caractere). A grade deve mudar de acordo:
Começar:
00000 00000 00000 00000 00000
Entrada:
(2,5,*)
Resultado:
0*000 00000 00000 00000 00000
(Nota: o canto inferior esquerdo é a posição 1,1.)
O programa deve retornar uma mensagem de erro diferente da grade se a entrada de linha / coluna não for 1,2,3,4 ou 5. Essa pode ser qualquer mensagem de sua escolha (desde que não seja a grade), por isso
0
é uma saída de erro aceitável.O programa deve funcionar com todos os caracteres ASCII imprimíveis (de um teclado americano).
O VENCEDOR
O vencedor será a pessoa que tiver o código mais curto e atender a todos os requisitos. Se mais de uma resposta funcionar e tiver o mesmo comprimento (menor), a pessoa que responder primeiro será a vencedora.
0
por erro e a grade para obter sucesso?Respostas:
Dyalog APL ,
171310 bytesSolicita uma matriz fechada contendo (linha, coluna) e, em seguida, um caractere. Dá ERRO INDEX a entrada defeituosa.
Experimente online!
⊖
virar de cabeça para baixo o resultado de⍞
caractere de entrada@
substituindo o conteúdo na posição⎕
entrada avaliada (linha fechada, coluna)⊢
do5 5⍴
Matriz 5 × 5 de0
zerosfonte
⊢
necessário? Eu acho que neste caso é redundante.(⊂⎕)5 5
como uma única matriz de 3 elementos - o argumento para⍴
.Ruby,
157149 bytesErro na entrada malformada ou na posição fora do limite
Agradecimentos a ConorO'Brien (8 bytes) e afuous (2 bytes) por ajudar a salvar bytes
fonte
loop do...end
->loop{...}
; Eu acho queArray.new(5,[0]*5)
funciona também, ou até mesmo[*[0]*5]*5
.Array.new(5,[0]*5)
faça uma matriz de referência e[*[0]*5]*5
faça uma matriz plana*
. Então isso ainda cria uma matriz de referências.Array.new(5){[0]*5}
pode ser substituído por(1..5).map{[0]*5}
para salvar 2 bytes.Lote, 199 bytes
Erros fora se a posição estiver fora da faixa.
fonte
<
, como^<
. não tenho certeza tho.PHP,
11110097 bytesimprime
E
se a linha / coluna está fora do intervalo.Correr com
php -r <code> <row> <column> <character>
fonte
Python, 66 bytes
fonte
Dyalog APL,
242018 bytesEconomizou 4 bytes graças ao Zgarb! Economizou 2 bytes graças a Adam!
Solicita entrada. Veja abaixo uma explicação.
20 bytes
Atribua a uma função e chame-a
y x f 'c'
. Por exemplo:Explicação
{...}
é uma função com argumento à esquerda⍺
e argumento à direita⍵
.⋄
separa instruções, então existem três instruções:A primeira instrução é
a←5 5⍴0
definidaa
como a5
por5
grade de0
s.A segunda declaração define o membro nas coordenadas ditadas por
⍺
para⍵
(ou seja, o caractere).Por fim, realizamos
⊖
ema
e retornar que, produzindo as estreias dea
revertida.fonte
{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}
salva alguns bytes.a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
JavaScript (ES6),
7376 bytesLança a
TypeError
se a coluna ou a linha estiver fora do intervalo.Demo
Mostrar snippet de código
fonte
c
our
é menor que 1?c == 0 || r == 0
. Mas acho que você está certo: vou atualizá-lo para evitar valores negativos.C #, 199 bytes
Com base na resposta de Pete Arden
Ungolfed:
fonte
05AB1E ,
2722 bytesRetorna sem grade quando linha / coluna> 5.
Experimente online!
Versão anterior
fonte
Gelatina , 28 bytes
Isso parece muito longo ...
TryItOnline!
Quão?
fonte
JavaScript (ES6), 89 bytes
Porque eu amo recursão. Lança
ReferenceError
coordenadas inválidas.fonte
Mathematica, 38 bytes
fonte
Brain-Flak 415 bytes
Inclui +3 para
-c
Experimente Online!
Leva o caractere para inserir primeiro, depois a linha e a coluna sem espaços.
A maior parte disso é apenas manipulação de erros. O Brain-Flak não tem uma boa maneira de verificar se os valores estão dentro de um intervalo. Por erros, ele não gera nada ou apenas o caractere que deveria ser inserido. A resolução do problema real leva apenas 211 bytes:
fonte
Excel VBA, 67 bytes
Saídas para o intervalo A1: E5 na planilha ativa do projeto vba, sai com
quando uma entrada inválida é fornecida.
Código:
Uso:
Saída (do exemplo acima) :
fonte
C #, 208 bytes
Golfe:
Ungolfed:
Teste:
fonte
c
e / our
estiver fora dos limites, será emitido um,IndexOutOfRangeException
assim você poderá remover a primeira instrução if, embora eu não tenha verificado as especificações adequadamente para isso. Você pode compilar a umFunc<int, int, char, string>
para salvar bytes, eu acredito que você precisa adicionarusing System.Linq;
por causa daReverse
chamada embora eu não me lembro fora do topo da minha cabeçad[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
parad[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);
salvar 4 bytesWinDbg, 95 bytes
Quase metade disso apenas verificando os índices estão dentro do alcance ... A entrada é feita configurando os registros psuedo
$t0
,$t1
e$t2
(onde$t2
detém o valor ASCII do caractere para substituir). Por exemplo,(2,5,*)
como o exemplo seria:Imprime
0
com erro.Como funciona:
Saída de amostra:
fonte
Haskell, 77 bytes
Exemplo de uso:
Se
x
ey
estiver dentro do alcance, faça um loop externo e interno[1..5]
e pegue o caracterec
se ele atingir o dadox
ey
e um0
contrário. Se estiverx
ouy
não estiver dentro do alcance, umaNon-exhaustive patterns
exceção será gerada.fonte
Octave 49 bytes
fonte
QBIC ,
5350 bytesEDIT: Agora que sei que não preciso mostrar a grade inicial, troquei as entradas do usuário
_!_!_?
pelos parâmetros da linha de comando::;
, economizando 3 bytes.Versão original: entre a impressão da grade 0 e as coordenadas da substituição, mostrando a grade 0.
Imprime 5 cadeias de 5
0
, solicita ao usuário 2 entradas numéricas e 1 entrada de cadeia, verifica se os números são <5 e usa aLOCATE
função do QBasic para substituir o caractere correto.fonte
Java, 99 bytes
fonte
> <> (Peixe), 36 bytes (não concorrente)
Experimente aqui!
Este é executado colocando os parâmetros para a pilha como [
chr
,y
,x
]. Na verdade, um dos zeros na parte inferior é alteradochr
pela instruçãop
. Provavelmente existem maneiras melhores de fazer isso, mas achei que era uma situação única e divertida, em que esse recurso> <> é útil.Explicação
Este programa simplesmente subtrai 1 de
x
(como em> <>,0
na verdade seria a primeira coluna), trocax
comy
e altera o ponto do codeboxx, y
parachr
viap
.y
não precisa de 1 subtraído, pois o código já está todo compensado por 1!Explicação não concorrente
Isso não é concorrente porque na verdade não produz saída. Achei isso extremamente divertido. Se isso for considerado uma saída válida, entre em contato!
Também não é concorrente porque
y
pode ser 0, mas acredito que esse é o único problema com a resposta. Vou corrigir se isso for considerado uma saída válida, mas, caso contrário, isso tornará a resposta menos divertida ...fonte
Bash, 59 bytes
Golfe
$ 1 , $ 2 - linha, coluna, $ 3 - char de substituição, o erro é relatado via código de saída
Teste
fonte
Vim,
60474276 pressionamentos de teclasA entrada está no formato (na primeira linha):
Com o cursor começando no começo
Se a entrada é inválida, lança:
E492: Not an editor command: ^
O objetivo que produz a saída é de apenas
42
bytes, mas, para criar um erro, meu número de bytes é aumentado drasticamente.fonte
Java 8,
194192 bytesExperimente aqui com a entrada correta.
Experimente aqui com entrada incorreta.
Isso seria
116114 bytes como função, em vez de programa completo:Experimente aqui.
Explicação:
fonte