Skittles são doces coloridos, onde existem 5 sabores distintos; uva, maçã verde, limão, laranja e morango representados por (p) uple, (g) reen, (y) ellow, (o) range e (r) ed, respectivamente. Eu costumava comer skittles, classificando todas as cores diferentes e depois comendo em sequência. Depois de receber alguns olhares estranhos no escritório, agora finjo comê-los como uma pessoa normal. Sua tarefa é emular isso:
Seu código (programa ou função completo) receberá uma variedade de pinos (10x10) como entrada (em qualquer formato razoável). Essa matriz representará uma pilha de skittles não classificados. Sua tarefa é "comê-los" da sua cor menos favorita à favorita. Meu pedido preferido é uva, maçã verde, limão, laranja, morango, mas você pode escolher qualquer pedido desde que seja sempre aplicado (liste sua preferência em sua inscrição para que eu possa julgá-lo). Depois de comer cada pedaço de doce, seu código produzirá (no mesmo formato que você digitou) a pilha restante com o pedaço comido substituído por um espaço. Você repetirá até que apenas restem os seus favoritos. Você pode escolher qualquer bolinho para comer (pode ser aleatório ou determinístico). Espaços à direita devem ser mantidos.
Por exemplo, sua sequência de saída pode ficar assim (usando 5x5 por questões de brevidade e mostrando espaços como .
)
start 1 2 3 4 5 n
.org. .org. .org. .org. .or.. .or.. ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r ....r
oyyor oyyor oyyor oyyor oyyor oyyor ....r
.r.p. .r.p. .r.p. .r... .r... .r... .r...
Isso é código-golfe , então o código mais curto em bytes ganha
Regras TL; DR:
- O envio pode ser um programa ou função completo
- A entrada pode ser obtida em qualquer formato razoável (string, lista, matriz, etc.) por qualquer método razoável (STDIN, argumentos de função, etc.). No entanto, deve haver alguma delimitação entre linhas
- A saída deve ser produzida no mesmo formato da entrada por qualquer método razoável (STDOUT, retorno da função, ect.). Saída intermediária pode ou não ser delimitada
- A primeira saída será a primeira entrada
- Os espaços à direita devem ser preservados
- Qualquer ordem de cores pode ser usada (lista na sua resposta)
- Qualquer pino da cor atual pode ser consumido
- A última saída será apenas sua cor e espaços favoritos
- Se possível, inclua um link para um compilador online para testar seu envio
Respostas:
Geléia ,
16 1413 bytesTryItOnline!
O favorito dos menos favorecidos, assim como para qualquer pessoa que seja séria sobre o TOC, é alfabético!
Recebe entradas e saídas como texto (ou seja, as linhas são delimitadas por novas linhas).
3 bytes salvos invertendo a direção e usando um método diferente: classifique mais do que localize caracteres do alfabeto.
Quão?
fonte
JavaScript (ES6),
747574 bytesOs sabores são pedidos conforme descrito no desafio: uva, maçã verde, limão, laranja, morango.
As saídas intermediárias são separadas por novas linhas.
Caso de teste
Este caso de teste está usando o exemplo 5x5. Qualquer outro tamanho de grade deve funcionar conforme o esperado.
Mostrar snippet de código
fonte
Bater,
48., 46 bytesATUALIZAR:
Golfe
Recebe entrada em stdin, imprime em stdout. Come roxo, verde, amarelo e depois laranja.
Um programa sed equivalente seria:
Saída de amostra (os delimitadores são apenas para clareza)
Experimente online!
fonte
Python 2,
60 5756 bytesrepl.it
Função recursiva que come em ordem alfabética inversa, deixando os verdes para o final.
Entrada
s
é uma sequência com um delimitador de linha com um ordinal menor que o de a'g'
(por exemplo, uma nova linha ou vírgula).A função imprime sua entrada e depois se repete se essa entrada contiver algo maior que um 'g', passando a entrada com a primeira ocorrência do caractere máximo substituído por um espaço.
(Quase um porto da minha resposta Jelly .)
fonte
Perl,
5346 + 2 = 48 bytesCorrer com
-0n
-10 bytes graças a @Dada
Edit: Também obrigado a @Dada por apontá-lo, esqueci de imprimir a entrada como a primeira saída. Isso foi consertado.
Há um pouco de truque envolvido nesta resposta, então vou detalhar o que está acontecendo.
Primeiro de tudo, o Perl não gosta de passar parâmetros de várias linhas. A variável
$/
é o separador de registro de entrada e, sempre que uma entrada encontra o caractere armazenado, o intérprete finaliza essa entrada e inicia uma nova entrada. O conteúdo padrão é o caractere de nova linha\n
, o que significa que não é possível transmitir uma sequência de várias linhas. Para fazer isso, devemos remover$/
o conteúdo. É aí que o-0
sinalizador entra: a configuração-0
será armazenadanull
na variável$/
, permitindo que o intérprete leia tudo na variável implícita de$_
uma só vez.O próximo truque é a
eval
afirmação. Exatamente o que exatamente estamoseval
ing? Estamoseval
obtendo o resultado dasprintf
declaração, que é dividida da seguinte forma:A primeira coisa que
sprintf
é passada é a sequência"say while s/%s/./;"
repetida 4 vezes, portanto:Em seguida,
sprintf
são passados quatro caracteres de palavra de barrap,o,g,r
, que são interpolados nasprintf
instrução, substituindo cada instância de%s
. O que obtemos então é a seguinte string, que é passada para aeval
função:Cada
while
loop avalia a expressãos/[color]/./
, que substitui a primeira instância de qualquer cor que estiver na variável implícita$_
por um ponto. Se uma substituição for feita, ela retornará1
, caso contrário, ela não retornará nada. Comos///
tem efeitos colaterais, modifica a variável original$_
, cujo conteúdo é impresso viasay
. São executadas quatro versões desse loop, substituindo os roxos, as laranjas, os verdes e depois os vermelhos, deixando apenas os amarelos.A razão pela qual os amarelos são deixados é porque
y
não pode ser uma palavra de barra, porque na verdade é uma função, e ter umay
letra em vez de uma dessas letras geraria um erro. Eu poderia mudar isso colocando aspas (+2 bytes) ou usando Y maiúsculo e tornando o regex sem distinção entre maiúsculas e minúsculas (+1 byte), mas para código-golfe , cada byte conta, então decidi que realmente gostava skittles de limão mais.TL; DR:
Grape, Orange, Green Apple, Strawberry, Lemon
fonte
-0
flag deve economizar em torno de 10 bytesFirst output shall be the first input
Perl,
303133 + 2 =323335 bytesCorra com
-n0
(penalidade de 2 bytes).Aparentemente, eu gosto de comer Skittles em ordem alfabética, porque o programa fica mais curto dessa maneira. O programa realmente não precisa de muita explicação:
-n0
lê a entrada implicitamente (-n
significa "ler entrada implicitamente",-0
significa "não interromper a entrada em novas linhas");for$x(g..r)
executa um loop com o$x
conjunto de cada letra deg
parar
por sua vez;say;
imprime a entrada atual, após qualquer mutação;s/$x/ /
substitui uma cópia$x
(especificamente a primeira) por um espaço, se possível; e&&redo
repete o código dentro dos colchetes (sem avançar o contador de loop) se a substituição tiver sido bem-sucedida.Este programa pode ser facilmente generalizado para mais sabores do Skittle sem alterar seu comprimento e funcionará com uma pilha de qualquer tamanho.
Aqui está um link Ideone onde você pode testá-lo. (O Ideone não permite que você especifique opções de linha de comando; portanto, tive que adicionar algumas linhas no início da configuração
-n0
e as-M5.010
que você obtém gratuitamente.)fonte
say;for$x(g..r){say while s/$x/ /}
?for$x(p,o,g,r)
que não.say while
é apenas um byte mais longo, e algo que eu considerava uma alternativa, para que eu possa simplesmente mudar para isso.say;
porque as regras dizem #First output shall be the first input
for$x(g,o,p,r)
versão que copia a entrada primeiro. (Demora um tempo extra pesquisando se há cores faltando, mas você não esperaria ter uma cor faltando em um pacote de skittles.) Para o registro, a versão comsay;
primeiro seria 37 bytes.C #,
134148 bytesOrdem:
G -> O -> Y -> P -> R
Usou algumas coisas semelhantes da resposta de @ Poke, atualmente um pouco mais longa, já que eu preciso converter a matriz de caracteres em uma string; (
fonte
Java 7,
139 135 130 151 138135 bytesCome skittles na ordem: amarelo, laranja, verde, roxo, vermelho
Eu acho que isso é melhor do que 2 declarações de impressão>.>
fonte
s.length
C 145 - 5 - 18 - 1 = 121 bytes
ungolfed + pretty
Aqui
a[][11]
significa pegar n-strings de comprimento 11 onde 1 caractere é necessário para a terminação, portanto, tecnicamente apenas 10 caracteres visíveis.ordem: alfabética
essa função verifica
'g'
a entrada fornecida e a elimina 1/1, em seguida, incrementa a retenção da variável'g'
até encontrar uma próxima correspondência (provavelmente letra'o'
) e elimina os caracteres correspondentes.A desvantagem é que essa função é muito cuidadosa. Portanto, se seus skittels fossem de
26
cores diferentes, com o codinome das letras az, essa função também manipulará essa entrada ...fonte
#define
. Esse corte queda de 19 bytesOitava, 49 bytes
Come skittles em ordem alfabética, o código ASCII mais alto primeiro.
fonte
ES6 (Javascript),
72, 71 bytesEDITAR% S:
Uma versão não recursiva em Javascript.
Golfe
Entrada e saída são cadeias de linhas múltiplas, tomam pílulas na ordem "roxo => laranja => verde => amarelo".
Teste
fonte
Python
3-1419975 bytesPrograma come skittles nesta ordem -
Orange Red Green Yellow Purple
.Editar - Obrigado ao Flp.Tkc, que ajudou a reduzir 24 bytes!
Eu acredito que pode ser ainda mais jogado, pois parece muito simples.
fonte
orgy
.Vim
5755 bytesSalvando dois bytes removendo meu delimitador de linha. Infelizmente, torna muito mais difícil ler e verificar a exatidão :(.
Não imprimíveis:
TryItOnline
Come na ordem oypg, deixando todos os r's para o final :)
fonte
Mathematica, 67 bytes
Come vermelhos, depois amarelos, laranjas e roxos.
fonte
Java 7, 125 bytes
Roxo, Amarelo, Verde, Vermelho, Laranja. Estou gostando de poder escolher meu pedido nesta solução. : D
Golfe
Ungolfed
Experimente aqui!
Uma abordagem diferente da outra resposta Java do @Poke. Começamos fazendo uma cópia da string original. Iterando através de cada cor, substituí-lo sempre que encontrar um espaço e anexar o novo layout à sequência de saída, retornando depois que comemos tudo, menos o laranja.
Notas
A separação entre as etapas é feita com uma nova linha dupla
\n\n
, mas se a grade de entrada puder ser obtida com uma nova linha à direita no final, ela poderá ser reduzida para apenas\n
.fonte
Haskell, 60 bytes
Entrada é uma única sequência na qual as linhas são separadas
,
. Valor de retorno é uma lista de cadeias com todas as etapas intermediárias. A ordem é alfabética, a maior em primeiro lugar, então o verde permanece. Exemplo de uso:Recursão simples. Salve a lista de entrada para o valor de retorno, substitua o maior elemento maior
g
por um espaço e chame a função novamente. O caso base é quando não há nenhum elemento a ser removido.fonte
MATL, 24 bytes
Experimente online! Prefiro comer meus skittles em ordem alfabética inversa: verde é minha cor favorita. Explicação:
fonte
QBasic, 125 bytes
Abuso de regras criativas!
Este envio pressupõe que muitas coisas estão bem:
GORPY
)Eu também tenho uma versão de 130 bytes que usa letras minúsculas e não erro.
Aqui está um exemplo de execução no QB64 ,
109
alterado para29
para uma grade 5x5:Explicação
DATA 71,89,82,79
armazena os códigos ASCII deG
,Y
,R
, eO
.?INPUT$(109)
obtém 109 pressionamentos de tecla do usuário e os imprime.Em seguida, inserimos uma
DO ... LOOP
construção infinita . A cada vez,READ
inserimos o código ASCII do Skittle atuals
. Em seguida, fazemos um loop sobre linhas e colunas de 1 a 10.SCREEN(r,c)
obtém o código ASCII do caractere na tela na linhar
, colunac
. Se esta é igual à corrente Skittles
, queSLEEP
por um segundo e, em seguida, imprimir um espaço nor
,c
.O loop principal é executado quatro vezes, removendo os Skittles verdes, amarelos, vermelhos e laranja. Na quinta iteração,
READ
erros porque estamos sem dados.fonte