Dado un número entero positivo, genera un valor verdadero / falso en cuanto a si el número puede comerse solo.
Reglas
El extremo izquierdo es la cabeza, el extremo derecho es la cola.
Si la cabeza es mayor o igual que la cola, la cabeza se come la cola y la nueva cabeza se convierte en su suma.
Si , la cabeza se reemplaza por .
no se puede ignorar, sin embargo, el número de entrada nunca tendrá ceros a la izquierda.
Ejemplo:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Si en algún momento la cabeza no puede comer la cola, la respuesta será falsa.
number=6724
072
False (0<2)
Casos de prueba:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
Este es el código de golf, por lo que gana el código más corto.
                    
                        code-golf
                                decision-problem
                                
                    
                    
                        Vedant Kandoi
fuente
                
                fuente

Respuestas:
JavaScript (ES6),
52 5150 bytesGuardado 1 byte gracias a @tsh
Toma la entrada como una cadena. Devuelve un valor booleano.
Pruébalo en línea!
Comentado
fuente
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]Jalea , 11 bytes
Pruébalo en línea!
Cómo funciona
fuente
Perl 6 ,
6362 bytesPruébalo en línea!
Explicación:
fuente
Java (JDK) , 83 bytes
Pruébalo en línea!
Créditos
fuente
/10y%10en un bucle. Tan bien hecho superando las respuestas de Python; +1 de mi parte :)r+=ar=y?1:0hacia?1:r.r=1r&=h<n%10?0:r;return r;Mathematica, 62 bytes
Primero llama
IntegerDigitsa la entrada para obtener una lista de sus dígitos, luego aplica repetidamente la siguiente regla:La regla se aplica hasta que el patrón ya no coincida, en cuyo caso solo queda un dígito (verdadero) o la cabeza es menor que la cola (falso).
En lugar de llamar
Length[__]==1, podemos guardar algunos bytes con0(__)=={0}, multiplicando todos los elementos en la lista0y luego comparándolos con la lista{0}.fuente
Python 3 , 50 bytes
Primera línea robada de la respuesta de Black Owl Kai .
Pruébalo en línea!
La salida es a través del código de salida. Falla (1) para entradas falsas y termina (0) para entradas verdaderas.
fuente
p%10<k>qno arroja un NameError sip%10 >= k?p%10<k>qhace lo mismo quep%10<k and k>q.Python 2 ,
1058281 bytesPruébalo en línea!
Muchas gracias por un masivo -23 de @ ØrjanJohansen
Gracias a @VedantKandoi (y @ ØrjanJohansen) por otro -1
fuente
forcon un corte inverso y también hacer lo%10único cuando realice la prueba: ¡ Pruébelo en línea!if i[0]<i[-1]:x=0y luegoelse:..... @ ØrjanJohansen, en tu respuesta también.Truecasos pero no para todosFalse.Brachylog , 23 bytes
Pruébalo en línea!
Este es un ahorro de 1 byte sobre la solución de Fatalize . Esto utiliza un enfoque recursivo en lugar de un iterativo
Explicación
fuente
APL (Dyalog Unicode) , 33 bytes SBCS
Función de prefijo tácito anónimo que toma una cadena como argumento.
Pruébalo en línea!
⍎¨evaluar cada caracter (esto nos da una lista de dígitos){...}aplique el siguiente "dfn" a eso;⍵es el argumento (lista de dígitos):⌽⍵invertir el argumento⊃elige el primer elemento (esta es la cola)t←asignar at(para t ail)⍵<para cada uno de los dígitos originales, vea si es menor que eso⊃elige el primer verdadero / falso:si es así:0falso retorno⋄luego:3::si a partir de ahora, ocurre un error de índice (fuera de los límites):1volver verdadero¯1↓⍵soltar el último dígito⊢producir eso (se separa1y¯1no formarán una sola matriz)t+@1agregue la cola al primer dígito (la cabeza)10|mod-10∇recurseUna vez que lleguemos a un solo dígito,
¯1↓haremos que sea una lista vacía y@1provocará un error de índice ya que no hay un primer dígito, haciendo que la función regrese verdadero.fuente
Python 3 , 77 bytes
Pruébalo en línea!
Y mi vieja solución con un enfoque recursivo
Python 3 , 90 bytes
Pruébalo en línea!
Toma la entrada como una cadena.
fuente
Brachylog , 24 bytes
Pruébalo en línea!
Debería cambiar
ⁱel comportamiento predeterminado para que repita un número desconocido de veces (actualmente, itera 1 vez por defecto, lo que es completamente inútil). Entonces no necesitaría el[…];I[…]⁾, ahorrando 3 bytesExplicación
Este programa contiene un tenedor feo dentro de un tenedor. También se necesita un poco de fontanería para trabajar en listas de dígitos en lugar de números (porque si eliminamos la cabeza y la cola
76nos queda0, lo que no funciona al contrario de[7,6]donde terminamos[]).fuente
,en su lugar, podría eliminar 1 byte ¡ Pruébelo en línea!Haskell,
706460 bytesLa entrada se toma como una cadena.
Pruébalo en línea!
Editar: -6 bytes usando el truco de @ Laikoni de usar en
||lugar de guardias separados. Otros -4 bytes gracias a @Laikoni.fuente
read[l b]puede ser soloread bporque solo miras el último dígito de todos modos. Ahorra 4 bytes más también en línealast: ¡ Pruébelo en línea!Perl 5 , 64 bytes
Pruébalo en línea!
fuente
Python 2 ,
7567 bytesPruébalo en línea!
Enfoque lambda recursivo. Toma la entrada como una cadena. ¡Muchas gracias a Dennis por guardar 8 bytes!
fuente
Haskell ,
6964 bytesPruébalo en línea! Ejemplo de uso:
f 2632rendimientosTrue.Editar: -5 bytes porque
mod (h + mod n 10) 10 = mod (h + n) 10fuente
||, que también me ayudó a acortar mi respuesta. ¡Gracias!Rubí, 139 bytes
Pruébalo en línea! (tiene un código extra para procesar la entrada, ya que es una función)
Código sin golf:
fuente
Retina 0.8.2 , 42 bytes
Pruébalo en línea! Enlace incluye casos de prueba. Explicación:
Convierta los dígitos en unarios e inserte separadores.
Si el último dígito no es mayor que el primero, agréguelos juntos.
Reduzca el módulo 10 si corresponde.
Repita hasta que el último dígito sea mayor que el primero o solo quede un dígito.
Comprueba si solo queda un dígito.
fuente
05AB1E ,
262524 bytesProbablemente se pueda jugar un poco más de golf. Parece demasiado largo, pero tal vez el desafío es en términos de código más complejo de lo que pensaba de antemano.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
C ++ (gcc) , 144 bytes
Pruébalo en línea!
La primera vez que intento algo como esto, así que si formateé algo incorrecto, avíseme. No estoy 100% seguro de las reglas para cosas como usar el espacio de nombres para eliminar los 5 bytes "std ::", así que lo dejé.
Sin golf:
fuente
#includedeclaraciones. Sin embargo, propondría programar en el subdialecto de instalaciones std lib de C ++ con#include "std_lib_facilities.h"prepended, que también hace ausing namespace std;. Ese encabezado fue escrito por el autor del lenguaje desde hace mucho tiempo (la última versión es 2010) para estudiantes nuevos en C ++.#import<string>. Pruébalo en línea!#!/usr/bin/shnewlinegcc -include "std_lib_facilities.h" $@: si encuentro un curso de C ++ que proporciona ese script de shell, ¿eso contaría?-include iostream, esto es de hecho 144 bytes.C #, 114 bytes
Pruébalo en línea
fuente
C (gcc) (con string.h) ,
110108 bytesPruébalo en línea!
Todavía es relativamente nuevo en PPCG, por lo que la sintaxis correcta para vincular bibliotecas como un nuevo idioma es extraña para mí. También tenga en cuenta que la función devuelve 0 o 1 para falso / verdadero, y la impresión de ese resultado en stdout requiere stdio. Si estamos siendo pedantes y el ejercicio requiere resultados, el lenguaje también requiere stdio .
Conceptualmente similar a la respuesta de @ BenH, pero en C, así que felicitaciones donde se deben (Bienvenido a PPCG, por cierto), pero usando la recursividad. También utiliza aritmética de puntero de matriz, porque el código sucio es más corto que el código limpio.
La función es recursiva de cola, con condiciones de salida si el primer número no puede comer el último o la longitud es 1, devolviendo falso o verdadero, respectivamente. Estos valores se encuentran desreferenciando un puntero a la cadena C (que da un carácter) al principio y al final de la cadena, y haciendo las comparaciones en ellos. La aritmética del puntero se realiza para encontrar el final de la cadena. finalmente, el último carácter se "borra" reemplazándolo con un terminador nulo (0).
Es posible que la aritmética del módulo se acorte en un byte o dos, pero ya necesito una ducha después de la manipulación del puntero.
Versión sin golf aquí
Actualización: se guardaron dos bytes reemplazando c == 1 con! C. Esto es esencialmente c == 0. Se ejecutará un tiempo adicional y se duplicará innecesariamente antes de eliminarse, pero ahorra dos bytes. Un efecto secundario es nulo o las cadenas de longitud cero no causarán una recursión infinita (aunque no deberíamos obtener cadenas nulas, ya que el ejercicio dice enteros positivos).
fuente
gcc, aunque se generarán advertencias,gcccompilarán su código sin#includes. Además, puede guardar 4 bytes con-DR=return. Finalmente, en su código de prueba, los\0s son innecesarios, ya que la cadena literalmente ya los incluye implícitamente.b=case1?res1:case2?res2:res_else;es lo mismo queif(case1)return res1;if(case2)return res2;return res_else;c: puede determinar si la cadena es de longitud cerohead-tail.Powershell, 89 bytes
¡Importante! El guión se llama a sí mismo de forma recursiva. Así que guarde el script como
g.ps1archivo en el directorio actual. También puede llamar a una variable de bloque de script en lugar de un archivo de script (consulte el script de prueba a continuación). Eso llama tiene la misma longitud.Nota 1: El script usa una evaluación perezosa de operadores lógicos
-ory-and. Si"$args"-notmatch'(.)(.*)(.)'es,Trueentonces-orno se evalúa la subexpresión correcta de . Además, si($m=$Matches).1-ge$m.3esFalseasí, la subexpresión correcta de-andno se evalúa también. Entonces evitamos la recursión infinita.Nota 2: La expresión regular
'(.)(.*)(.)'no contiene anclajes de inicio y fin porque la expresión(.*)es codiciosa por defecto.Script de prueba
Salida:
Powershell, 90 bytes
Sin recursión Sin dependencia de nombre de archivo y sin dependencia de nombre de bloque de script.
Un Powershell convierte implícitamente un operando derecho en un tipo de operando izquierdo. Por lo tanto,
$s-ge$s%10calcula el operando derecho$s%10comointegery compárelo comostringporque el tipo del operando izquierdo esstring. Y2+$s[0]+$sconvierte un carácter$s[0]y una cadena$senintegerporque el operando izquierdo2es entero.$s|% S*g 1($s.Length-2)es un atajo para$s.Substring(1,($s.Length-2))fuente
C # (compilador interactivo de Visual C #) , 69 bytes
Pruébalo en línea!
El éxito o el fracaso están determinados por la presencia o ausencia de una excepción . La entrada tiene la forma de una cadena.
Menos golf ...
Hay un par de bytes adicionales para tratar la conversión entre caracteres y dígitos, pero en general eso no afectó demasiado el tamaño.
fuente
Perl 5
-pF, 53 bytesPruébalo en línea!
fuente
Brachylog , 18 bytes
Pruébalo en línea!
Toma tres bytes fuera de la solución de Fatalize por el solo hecho de superscriptless no determinista
ⁱexistente ahora, pero pierde otros tres por hacer las cosas vagamente inspirados Jelly-conz₁evitar el uso dec,go inclusoh. (También se inspiró al intentar y no utilizar una nueva característica diferente: elʰmetapredicado).fuente
PowerShell ,
9491 bytesPruébalo en línea!
Script de prueba
Código sin golf:
fuente
$n[0]suforestado de cuenta; solo verificar$ndebería ser suficiente.-6lugar, podría usarlo-96porque es suficiente parareturny guardar 7 bytesparam($n)ofunction f($n).["1","2","3"]una entrada no válida pero lo"123"es. si @VedantKandoi tiene un problema, definitivamente puedo cambiarlo.