Hace casi seis años, el miembro miembro de PPCG steenslag publicó el siguiente desafío:
En un dado estándar (dado) los números están ordenados de modo que las caras opuestas sumen siete. Escriba el programa más corto posible en su idioma preferido que genere un lanzamiento aleatorio seguido de 9 propinas aleatorias. Una propina es un cuarto de vuelta del dado, por ejemplo, si el dado está orientado hacia 5, todas las posibles propinas son 1,3,4 y 6.
Ejemplo de salida deseada:
1532131356
Entonces, ahora que todos lo han olvidado por completo y la respuesta ganadora ha sido aceptada desde hace mucho tiempo, escribiremos un programa para validar las secuencias de troquelado generadas por las soluciones enviadas. (Esto tiene sentido. Solo finja que sí).
Reto
Su programa o función recibe una secuencia como 1532131356
. Valide que cada dígito consecutivo sea:
- No es igual al dígito anterior
- No es igual a 7 menos el dígito anterior
(No tiene que validar el primer dígito).
Reglas
- Su programa debe devolver un valor verdadero si la entrada es válida y un valor falso de lo contrario.
- Puede suponer que la entrada consta solo de los dígitos 1-6 y tiene al menos 1 carácter de longitud. Las secuencias no tendrán una longitud fija como en el desafío de steenslag.
- Puede tomar la entrada como una cadena (
"324324"
), una matriz o una estructura de datos tipo matriz ([1,3,5]
) o como múltiples argumentos (yourFunction(1,2,4)
).
Se aplican las reglas estándar de E / S y lagunas .
Casos de prueba
Verdad
1353531414
3132124215
4142124136
46
4264626313135414154
6
2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323
5414142
Falsey
Dígito repetido
11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411
Lado opuesto del dado
16 42123523545426464236231321 61362462636351 62362462636361
fuente
3132124225
vuelve5
.n and p*(7-p!=n!=p)
.Python, 44 bytes
¡Magia bit a bit! Esta es una función anónima que toma una lista de enteros y verifica que el XOR de cada dos elementos consecutivos esté entre 1 y 6 inclusive.
Por que funciona
Primero, el XOR siempre está entre 0 y 7 inclusive, ya que 7 está
111
en la base 2, y nuestros números tienen como máximo 3 dígitos binarios. Por la igualdad,a^b == 0
si y solo sia == b
. Además, tenemos7-a == 7^a
cuándo0 ≤ a ≤ 7
y, por lo tanto,a^b == 7
si y solo sia == 7^b == 7-b
.fuente
05AB1E ,
119 bytes-2 bytes para la idea inteligente de Osable de usar un producto.
Pruébalo en línea!
Tercer enfoque usando 05AB1E, que no usa el comando pairwise:
0
si viola las propiedades achispadas.Not 0
si no había nada que le impidiera estar borracho.fuente
Á
. ¡Agradable!¥¹D7-Á+«P
. Produce 0 cuando hay un 0 en la matriz o cualquier otro valor.R,
39373231 bytesPruébalo en línea!
Toma información de stdin. Utiliza
diff
para ver si dos dígitos consecutivos son iguales; luego compara cada dígito con 7 menos el dígito anterior. DevolucionesTRUE
oFALSE
.Ahorré 5 bytes gracias a Jarko Dubbeldam, y otro gracias a JayCe.
fuente
q
y luego probar en2*x+q-7
lugar de guardarc(0,x)!=c(7-x,0)
algunos bytes. Six1 + x2 = 7
entonces2*x1 + diff(x1,x2) = 7
. Comprobación y2*x+q - 7
luego pruebas explícitas!=0
.05AB1E , 10 bytes
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Ê
: P Nice!1*[] = []
pero peroproduct(1, []) = 1
. Es bueno saberlo.[]
debería ser 1.)1*
,)1s*
y)1P
son todo[]
mientras)1sP
es 1.[]
da un error y se descarta. Es por eso que da 1. Intentaré arreglarlo cuando llegue a casa.R,
4944 bytesLee entradas de stdin (separadas por espacio) y salidas
TRUE/FALSE
. Dará una advertencia si la entrada es de longitud uno pero aún funciona.Editar: guardado un par de bytes gracias a @rturnbull
fuente
all(x)&all(y)
enall(x,y)
salvar algunos bytes. También puede cambiarrle(x)$l==1
arle(x)$l-1
, que luego devolverá un conjunto de todosFALSE
six
es válido; luego cambie el posterior!=
a an==
y elall
a!any
. Esto produce!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))
, ahorrando 5 bytes en total. (PD, he escrito una solución alternativa que te puede interesar)05AB1E , 15 bytes
Pruébalo en línea! o como un conjunto de pruebas
fuente
JavaScript (ES6),
4340 bytesDevoluciones
0
/true
.Casos de prueba
Mostrar fragmento de código
fuente
test()
Perl 6 , 22 bytes
Usando una expresión regular:
Toma la entrada como una cadena. Inspirado por la respuesta de GB Ruby .
Cómo funciona:
/ /
: Una expresión regular.(.)
: Unir cualquier personaje y capturarlo como$0
.<{ }>
: Generar dinámicamente una sub-expresión regular para que coincida en esa posición."$0|" ~ (7 - $0)
: El sub-regex que generamos es uno que coincide solo con el dígito anterior, o 7 menos el dígito anterior (por ejemplo5|2
).Por lo tanto, la expresión regular general coincidirá si encuentra un par de dígitos consecutivos no válidos en cualquier lugar.
{! }
: Coaccionar a un booleano (haciendo que la expresión regular coincida$_
), negarlo y convertir todo en una lambda (con parámetro implícito$_
).Perl 6 , 38 bytes
Usando el procesamiento de la lista:
Toma la entrada como una matriz de enteros.
Cómo funciona:
.[1..*] Z $_
: Comprime la lista de entrada con una versión de sí mismo compensada para generar una lista de 2 tuplas de dígitos consecutivos.[!=] 7 - .[1], |$_
: Para cada uno de ellos, verifique si(7 - b) != a != b
.all ( )
: Devuelve un valor verdadero o falso dependiendo de si todas las iteraciones de bucle devuelven Verdadero.fuente
Python, 38 bytes
Una función recursiva que toma argumentos como
f(1,2,3)
.Esto utiliza el desempaquetado de argumentos para extraer el primer número
h
y el resto en la tuplat
. Sit
está vacío, salida Verdadero. De lo contrario, use el truco de Zgarb para comprobar que las dos primeras tiradas no son incompatibles. Luego, verifique que el resultado también se mantenga en la llamada recursiva en la cola.fuente
Ruby, 34 bytes
fuente
#[]
método de cadena en su lugar:->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
JavaScript
6143 bytesLos comentarios han mencionado que no puedo usar las funciones C # linq sin incluir la declaración de uso, así que aquí está exactamente lo mismo en menos bytes usando JS estándar ...
C #,
996765 bytesToma entrada como una matriz int
a
Explicación:
fuente
0
o en1
lugar defalse
otrue
> <> (Pescado) 47 bytes
Bastante simple;
Línea 1: verifique si ingresó un número, si no hay un número (EOF), entonces tenemos una verdad para imprimir otros cheques.
Línea 2: resultado impreso.
Línea 3: convierta la entrada en número (ASCII 0 - de la entrada), luego verifique si es igual a la entrada anterior.
Línea 4: verifique si la entrada está en el lado opuesto del dado.
fuente
Brain-Flak 128 Bytes
Salidas 0 para falsey, o -7 para verdadero.
Pruébalo en línea! (Verdad) ¡
Pruébelo en línea! (Flasey)
Explicación (t representa la parte superior y s representa la segunda desde la parte superior):
fuente
MATLAB, 30 bytes
fuente
PHP, 63 bytes
toma entrada como lista de argumentos de comando; sale con
1
(error) si la entrada no es válida,0
(ok) si es válida.Corre con
-nr
.entrada como argumento de cadena, 65 bytes
fuente
PowerShell ,
574441 bytes( Tachado 44 sigue siendo regular 44 )
Pruébalo en línea!
(OP ha aclarado que tomar entradas como argumentos separados está bien: guardó 13 bytes ... guardó otros 3 bytes eliminando
$b
)Estamos recorriendo la entrada
$args
un dígito a la vez. Cada dígito, que verifique que el$l
dígito ast es-n
ote
qual al dígito actual$_
, y que7-$_-$l
es un número distinto de cero (que es Truthy). Esos resultados booleanos se encapsulan en parens y se introducen en el operando de la derecha del-notin
operador, comprobando en contra0
. En otras palabras, si hay algunaFalse
valor en parte del bucle, el-notin
también lo seráFalse
. Ese booleano se deja en la tubería, y la salida es implícita.Largo debido al
$
requisito de nombres de variables, y que los comandos booleanos-ne
-and
son detallados en PowerShell. Oh bien.fuente
Procesamiento,
939290 bytesCambiado
||
a|
: 1 byte guardado gracias a @ClaytonRamseyComenzó a contar hacia atrás: 2 bytes guardados gracias a @IsmaelMiguel
Toma la entrada como una matriz de entradas, salida
1
para verdadero o0
falso.Sin golf
fuente
return 0
está dentro de la instrucción if mientrasreturn 1
que no lo está. No veo cómo eso es posible a menos que tengas alguna otra ideaGolfed it! Yipee! (nobody's going to read these summaries so why not have fun :)
<- Lo leí, mientras comparaba lo que tienes con lo que tenías.do
4744 bytestoma una cadena de dígitos (o una matriz de bytes terminada en cero)
Explicación
F(char*s){
de acuerdo con el
int
tipo de devolución estándar está implícito. (ahorro de 4 bytes)return
retorno incondicional porque esta es una función recursivautilizando la evaluación de acceso directo:
!s[1]||
si el segundo caracter es nul devuelve verdadero((*s^s[1])%7&&
si los dos primeros personajes no son legales falsosF(s+1))
verifique el resto de la cadena de la misma maneraesa expresión confusa
*s
es el primer personajes[1]
es el segundo*s^s[1]
excluirlos juntos si son iguales, el resultado es 0 si suman 7, el resultado es 7 (si difieren y no suman 7, el resultado es entre 1 y 6 inclusive)por
(*s^s[1])%7
lo tanto, es cero para una entrada incorrecta y, de lo contrario, no es cero, por lo tanto, es falso si estos 2 caracteres son incorrectos, y verdadero de lo contrariocomentario: como esta llamada a la función usa solo la recursión final (solo la última declaración es una llamada recursiva) un optimizador podría traducir la recursión en un bucle, esta es una feliz concordancia y obviamente no vale ningún puntaje de golf, pero en la palabra real permite procesar cadenas de cualquier longitud sin quedarse sin pila.
fuente
!((*s^s[1])%7)
creo que no quieres el!
. Los valores cero para una entrada incorrecta serían falsos, por lo que desea devolverlos cuando sean incorrectos.Python, 71 bytes
Utiliza un enfoque recursivo.
Explicación:
fuente
Retina , 28 bytes
Pruébalo en línea!
Alternativamente:
Pruébalo en línea!
fuente
MATL , 9 bytes
La entrada es una matriz de números que representan los dígitos.
La salida es una matriz no vacía, que es verdadera si todas sus entradas son distintas de cero, y falsa de lo contrario (lea más sobre el criterio de MATL para la verdad y la falsedad aquí ).
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
movsum
, ya hayconv2
(que incluyeconv
); verY+
yZ+
C # (con Linq)
908173716968 BytesExplicación:
fuente
C, 81 bytes, era 85 bytes
La entrada es una matriz de enteros A con longitud L. Devuelve 1 para verdadero y 0 para falso. La entrada se verifica desde el final hasta el inicio utilizando la longitud de entrada L como índice de matriz.
fuente
int
es opcional al inicio, puede guardar 4 bytes.int s=1;
se puede declarar fuera de la función comos=1;
para otros 4.Haskell, 37 bytes
Ejemplo de uso:
f [1,5,2]
->False
.Recurrencia simple Caso base: lista de un solo elemento, que devuelve
True
. Caso recursivo: dejara
yb
ser los dos primeros elementos de la lista de entrada yc
el resto. Todas las siguientes condiciones deben contener:a+b/=7
,a/=b
y la llamada recursiva con una
caído.fuente
JavaScript, 40 bytes
Aprovecha la función de JavaScript que
&&
devolverá el último valor analizado (ya sea el término falso o el último término).0
se pasa si no cumple con las condiciones, y el término anterior se pasa de lo contrario. El 9 se asegura de que comience con un valor verdadero.fuente
Groovy, 61 bytes
fuente
Python 2, 58 bytes
fuente
> <> , 39 bytes
Pruébalo en línea!
fuente
Lote, 102 bytes
Sin golf:
fuente