APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Produzione 1 se Keith, 0altrimenti
GolfScript colpisce ancora !!
modificare
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Utilizzando la riduzione destra ( ⊢/) anziché Take meno 1 ( ¯1↑), salvando direttamente 1 carattere e indirettamente 1 da Disclose (⊃ )
Spiegazione
⍎¨⍕x←⎕prende l'input valutato (trattato come un numero) e lo assegna a x. Lo converte in un array di caratteri (noto anche come "stringa" in altre lingue) e passa in rassegna ciascun carattere (cifra), convertendolo in un numero. Quindi questo si traduce in una matrice numerica delle cifre.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}è la funzione "loop" principale:
+/⍵↑⍨-⍴⍕xprende gli ultimi ⍴⍕x(numero di cifre x) dall'array e li somma.
⍵,lo concatena alla fine dell'array.
(x>⊢/⍵)controlla se l'ultimo numero sull'array (che non ha +/⍵↑⍨-⍴⍕xancora concatenato) è più piccolo di xe restituisce 1o 0
∇⍣esegue questa funzione sul nuovo array più volte. Quindi, se l'ultimo numero è inferiore a x, questa funzione ricorre. Altrimenti restituisci semplicemente il nuovo array
Dopo aver eseguito la funzione, l'array contiene le somme fino al punto in cui 2 dei numeri sono maggiori o uguali a x(ad esempio 14genererà 1 4 5 9 14 23, 13genererà 1 3 4 7 11 18 29)
Infine controlla se ogni numero è uguale xe genera la somma del binario risultante Vettore.
modificare
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Aggiunti 2 caratteri :-( per creare output 0se l'input è di una cifra
Ancora un'altra modifica
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
Spiegazione
La funzione ora rilascia il primo numero ( 1↓) dall'array invece di prendere l'ultimo ⍴⍕x( ↑⍨-⍴⍕x).
Tuttavia, questo approccio 1=non è adeguato per gestire numeri a una cifra. Quindi ora rilascia l'ultimo numero dall'array prima di verificare l'uguaglianza in x, aggiungendo 1 carattere
Hai indovinato: EDIT
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Confronta xcon l'elemento appena aggiunto invece del vecchio ultimo elemento, quindi xè sufficiente far cadere il primo (anziché l'ultimo) elemento prima di verificare l'uguaglianza , salvando un segno meno. Salva altri 3 utilizzando un'altra forma di Power operator ( ⍣)
E appare una risposta di 25 caratteri gs (Orz)
Ultima modifica
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Non riesco a credere che mi sia perso.
Non posso più giocare a golf.