Há quase seis anos, steenslag, membro do PPCG, lançou o seguinte desafio:
Em um dado padrão (dado), os números são organizados de modo que faces opostas aumentem para sete. Escreva o programa mais curto possível no seu idioma preferido, que produz um lance aleatório seguido por 9 dicas aleatórias. Uma gorjeta é um quarto de volta dos dados, por exemplo, se os dados estão voltados para 5, todas as gorjetas possíveis são 1,3,4 e 6.
Exemplo de saída desejada:
1532131356
Portanto, agora que todo mundo se esqueceu completamente e a resposta vencedora já foi aceita há muito tempo, escreveremos um programa para validar as seqüências de derrubada de matriz geradas pelas soluções enviadas. (Isso faz sentido. Apenas finja que sim.)
Desafio
Seu programa ou função recebe uma sequência como 1532131356
. Valide que cada dígito consecutivo é:
- Diferente do dígito anterior
- Diferente de 7 menos o dígito anterior
(Você não precisa validar o primeiro dígito.)
Regras
- Seu programa deve retornar um valor verdadeiro se a entrada for válida e um valor falsey caso contrário.
- Você pode assumir que a entrada consiste apenas nos dígitos 1 a 6 e tem pelo menos 1 caractere. As seqüências não terão um comprimento fixo, como no desafio de steenslag.
- Você pode considerar a entrada como uma string (
"324324"
), uma matriz ou uma estrutura de dados semelhante a uma matriz ([1,3,5]
) ou como vários argumentos (yourFunction(1,2,4)
).
Aplicam-se regras de E / S padrão e brecha .
Casos de teste
Truthy
1353531414
3132124215
4142124136
46
4264626313135414154
6
2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323
5414142
Falsey
Dígito repetido
11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411
Lado oposto do dado
16 42123523545426464236231321 61362462636351 62362462636361
fonte
3132124225
retornos5
.n and p*(7-p!=n!=p)
.Python, 44 bytes
Magia bit a bit! Essa é uma função anônima que pega uma lista de números inteiros e verifica se o XOR de cada dois elementos consecutivos está entre 1 e 6, inclusive.
Por que funciona
Primeiro, o XOR está sempre entre 0 e 7, inclusive, já que 7 está
111
na base 2 e nossos números têm no máximo 3 dígitos binários. Pela igualdade,a^b == 0
se e somente sea == b
. Além disso, temos7-a == 7^a
quando0 ≤ a ≤ 7
e, portanto,a^b == 7
se e somente sea == 7^b == 7-b
.fonte
05AB1E ,
119 bytes-2 bytes para a idéia inteligente de Osable de usar um produto.
Experimente online!
Terceira abordagem usando 05AB1E, que não usa o comando pairwise:
0
se violar as propriedades embriagadas.Not 0
se não houvesse nada impedindo que fosse embriagado.fonte
Á
. Agradável!¥¹D7-Á+«P
. Ele gera 0 quando há um 0 na matriz ou qualquer outro valor caso contrário.R,
39373231 bytesExperimente online!
Recebe entrada de stdin. Usa
diff
para verificar se dois dígitos consecutivos são iguais; então compara cada dígito a 7 menos o dígito anterior. RetornaTRUE
ouFALSE
.Economizou 5 bytes graças a Jarko Dubbeldam e outro graças a JayCe.
fonte
q
e depois testar em2*x+q-7
vez dec(0,x)!=c(7-x,0)
salvar alguns bytes. Sex1 + x2 = 7
então2*x1 + diff(x1,x2) = 7
. A verificação2*x+q - 7
então testa explicitamente!=0
.05AB1E , 10 bytes
Usa a codificação CP-1252 . Experimente online!
fonte
Ê
: P Legal!1*[] = []
mas simproduct(1, []) = 1
. É bom saber disso.[]
deve ser 1. #)1*
,)1s*
e)1P
são[]
enquanto)1sP
é 1.[]
dá um erro e é descartado. É por isso que dá 1. Vou tentar consertar quando chegar em casa.R,
4944 bytesLê entrada de stdin (separado por espaço) e saídas
TRUE/FALSE
. Emite um aviso se a entrada for do tamanho um, mas ainda funcionar.Edit: salvou alguns bytes graças a @rturnbull
fonte
all(x)&all(y)
paraall(x,y)
salvar alguns bytes. Você também pode mudarrle(x)$l==1
pararle(x)$l-1
, que retornará um conjunto de todosFALSE
sex
for válido; depois mude!=
para mais tarde para==
eall
para!any
. Isso gera!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))
, economizando 5 bytes no total. (PS, Eu escrevi uma solução alternativa você pode estar interessado em.)05AB1E , 15 bytes
Experimente online! ou como um conjunto de testes
fonte
JavaScript (ES6),
4340 bytesRetorna
0
/true
.Casos de teste
Mostrar snippet de código
fonte
test()
Perl 6 , 22 bytes
Usando uma regex:
Toma a entrada como uma sequência. Inspirado pela resposta Ruby da GB .
Como funciona:
/ /
: Um regex.(.)
: Corresponde a qualquer caractere e capture-o como$0
.<{ }>
: Gere dinamicamente um sub-regex a ser correspondido nessa posição."$0|" ~ (7 - $0)
: O sub-regex que geramos é aquele que corresponde apenas ao dígito anterior ou 7 menos o dígito anterior (por exemplo5|2
).Assim, a regex geral corresponderá se encontrar um par consecutivo inválido de dígitos em qualquer lugar.
{! }
: Coerce com um booleano (fazendo com que o regex seja comparado$_
), negue-o e transforme tudo em um lambda (com parâmetro implícito$_
).Perl 6 , 38 bytes
Usando o processamento de lista:
Toma a entrada como uma matriz de números inteiros.
Como funciona:
.[1..*] Z $_
: Zip a lista de entrada com uma versão offset a uma, para gerar uma lista de 2 tuplas de dígitos consecutivos.[!=] 7 - .[1], |$_
: Para cada um deles, verifique se(7 - b) != a != b
.all ( )
: Retorne um valor verdadeiro ou falso dependendo se todas as iterações de loop retornaram True.fonte
Python, 38 bytes
Uma função recursiva que aceita argumentos como
f(1,2,3)
.Isso utiliza o argumento de descompactação para extrair o primeiro número
h
e o restante na tuplat
. Set
estiver vazio, produza True. Caso contrário, use o truque de bit do Zgarb para verificar se os dois primeiros testes de dados são incompatíveis. Em seguida, verifique se o resultado também se aplica à chamada recursiva na cauda.fonte
Ruby, 34 bytes
fonte
#[]
método string :->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
JavaScript
6143 bytesOs comentários mencionaram que eu não posso usar funções C # linq sem incluir a instrução using, então aqui está exatamente o mesmo em menos bytes usando o JS padrão ...
C #,
996765 bytesRecebe entrada como uma matriz int
a
Explicação:
fonte
0
ou em1
vez defalse
outrue
> <> (Peixe) 47 bytes
Bem simples;
Linha 1: verifique se foi inserido um número, se nenhum número (EOF), então temos uma verdade para imprimir outros cheques.
Linha 2: resultado da impressão.
Linha 3: transforme a entrada em número (ASCII 0 - da entrada) e verifique se é igual à entrada anterior.
Linha 4: verifique se a entrada está do lado oposto da matriz.
fonte
Brain-Flak 128 Bytes
Saídas 0 para falsey ou -7 para verdade.
Experimente Online! (Verdade)
Experimente Online! (Flasey)
Explicação (t representa o topo e s representa o segundo do topo):
fonte
MATLAB, 30 bytes
fonte
PHP, 63 bytes
recebe entrada como lista de argumentos de comando; sai com
1
(erro) se a entrada for inválida,0
(ok) se válida.Corra com
-nr
.entrada como argumento de cadeia, 65 bytes
fonte
PowerShell ,
574441 bytes( Riscado 44 ainda é regular 44 )
Experimente online!
(O OP esclareceu que aceitar entradas como argumentos separados é bom - salvou 13 bytes ... salvou outros 3 bytes ao eliminar
$b
)Estamos percorrendo a entrada
$args
um dígito de cada vez. Cada dígito, verificamos que o$l
dígito ast é-n
ote
qualificado para o dígito atual$_
, e esse7-$_-$l
é um número diferente de zero (o que é verdade). Esses resultados booleanos são encapsulados em parênteses e alimentados no operando do lado direito do-notin
operador, comparando0
. Em outras palavras, se houver algumFalse
valor em qualquer lugar do loop,-notin
também seráFalse
. Esse booleano é deixado no pipeline e a saída é implícita.Longo devido ao
$
requisito para nomes de variáveis e que os comandos booleanos-ne
-and
são detalhados no PowerShell. Ah bem.fonte
Processando,
939290 bytesAlterado
||
para|
: 1 byte salvo graças a @ClaytonRamseyComeçou a contagem regressiva: 2 bytes salvos graças a @IsmaelMiguel
Recebe entrada como uma matriz de entradas, saída
1
para verdadeiro ou0
falso.Ungolfed
fonte
return 0
está dentro da instrução if enquantoreturn 1
não estiver. Não vejo como isso é possível, a menos que você tenha outra idéiaGolfed it! Yipee! (nobody's going to read these summaries so why not have fun :)
<- Eu li, enquanto comparava o que você tem com o que você tinha.C
4744 bytesusa uma sequência de dígitos (ou uma matriz de bytes terminada em zero)
Explicação
F(char*s){
de acordo com o
int
tipo de retorno padrão está implícito. (economizando 4 bytes)return
retorno incondicional, porque esta é uma função recursivausando avaliação de atalho:
!s[1]||
se o segundo caractere for nul, retorne true((*s^s[1])%7&&
se os dois primeiros caracteres não são falsos legaisF(s+1))
verifique o restante da string da mesma maneiraessa expressão confusa
*s
é o primeiro caracteres[1]
é o segundo*s^s[1]
exclua-os juntos se forem iguais e o resultado for 0 se adicionarem a 7 o resultado for 7 (se forem diferentes e não adicionarem a 7 o resultado será entre 1 e 6, inclusive)então
(*s^s[1])%7
é zero para entrada incorreta e diferente de zero, caso contrário, falso se esses 2 caracteres forem incorretos e verdadeiro caso contráriocomentário: como essa chamada de função usa apenas recursão final (apenas a última instrução é uma chamada recursiva), um otimizador pode converter a recursão em um loop, essa é uma conicidência feliz e obviamente não vale nenhuma pontuação de golfe, mas na palavra real torna possível processar seqüências de caracteres de qualquer tamanho sem ficar sem pilha.
fonte
!((*s^s[1])%7)
eu acho que você não quer o!
. Valores zero para entrada incorreta seriam falsos, portanto, você deseja retornar a falsidade quando estiver incorreta.Python, 71 bytes
Usa uma abordagem recursiva.
Explicação:
fonte
Retina , 28 bytes
Experimente online!
Alternativamente:
Experimente online!
fonte
MATL , 9 bytes
A entrada é uma matriz de números representando os dígitos.
A saída é uma matriz não vazia, que é verdadeira se todas as suas entradas são diferentes de zero e, caso contrário, falsifica (leia mais sobre o critério do MATL para verdade e falsidade aqui ).
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
movsum
, já existeconv2
(o que incluiconv
); vejaY+
eZ+
C # (com Linq)
908173716968 bytesExplicação:
fonte
C, 81 bytes, era 85 bytes
A entrada é uma matriz de números inteiros A com comprimento L. Retorna 1 para verdadeiro e 0 para falso. A entrada é verificada do fim ao início, usando o comprimento de entrada L como o índice da matriz.
fonte
int
é opcional no início, você pode salvar 4 bytes.int s=1;
pode ser declarado fora da função comos=1;
para outro 4.Haskell, 37 bytes
Exemplo de uso:
f [1,5,2]
->False
.Recursão simples. Caso base: lista de elemento único, que retorna
True
. Caso recursivo: deixea
eb
seja o primeiro dos dois elementos da lista de entrada ec
o restante. Todas as seguintes condições devem conter:a+b/=7
,a/=b
e a chamada recursiva coma
descartado.fonte
JavaScript, 40 bytes
Aproveita o recurso JavaScript que
&&
retornará o último valor analisado (o termo falso ou o último termo).0
é repassado se não atender às condições, e o termo anterior é repassado de outra forma. O 9 garante que ele comece com um valor verdadeiro.fonte
Groovy, 61 bytes
fonte
Python 2, 58 bytes
fonte
> <> , 39 bytes
Experimente online!
fonte
Lote, 102 bytes
Ungolfed:
fonte