Håller inte med. Kanske har det blandats ihop några versioner när du redigerat scripten i google docs, eller så är anropet inte rätt.
Här är en testkörning jag gör på min kod, får samma resultat i google docs-miljö:
Edit, testar lite till ...
__________________
Senast redigerad av Litton 2014-05-01 kl. 13:26.
Håller inte med. Kanske har det blandats ihop några versioner när du redigerat scripten i google docs, eller så är anropet inte rätt.
Här är en testkörning jag gör på min kod, får samma resultat i google docs-miljö:
[PHP]
Running 13 tests:
idx 10: => 47 ~78 -
47 OK
Ran 13 tests, 0 errors.[/PHP]
formatet är: siffra ~limit %excludes
, raden under är resultatet och om det var OK.
Nu är det j*vligt nära. Upptäckte ett fel och det är index 10 bland dina exempel. Speciafallet vi pratat om det senaste gäller enbart när det finns excludes, annars rullar det på som vanligt. Indata 47, till red default med limit 78, d.v.s. red(NN), ska bli 4 + 7 dvs = 11. Reds huvuduppgift är ju att summera alla siffror i ett tal.
Nu är det j*vligt nära. Upptäckte ett fel och det är index 10 bland dina exempel. Speciafallet vi pratat om det senaste gäller enbart när det finns excludes, annars rullar det på som vanligt. Indata 47, till red default med limit 78, d.v.s. red(NN), ska bli 4 + 7 dvs = 11. Reds huvuduppgift är ju att summera alla siffror i ett tal.
Nej, in med 47 och linit 78 kan bara bli 47. Annars är det något mer du inte berättat.
Nu när hösten fallit över oss så blev jag inspirerad att fortsätta med dina script och mina projekt med Google Sheets.
Först kan jag säga att du hade helt rätt igen! Funktionaliteten ska inte ändras. Bra att du stod på dig. Jag hade fått någon idé om att skapa en universell lösning, men tyvärr krockade den med nuvarande funktions uppbyggnad. Nuvarande lösning är praktisk, specialfallen löstes med in IF-sats i Google Sheets. Så här:
Kod:
IF(RED(A2)<10;RED(A2);RED(A2)&"/"&RED(A2;9;{11}))
Med enda skillnaden att i mitt dokument använder jag hjälpkolumner.
Enda kruxet jag upptäckt är att Google Docs skriptredigerare klagar när man debuggar RED() och Flatten().
RED > Exceeded maximum stack depth.
FLATTEN > TypeError: Det går inte att läsa egenskapen "length" från undefined.
Mycket stor hjälp med allt detta. Det går att skriva en formula för detta med befintliga funktioner i Google Sheets (jag hade en rudimentär innan), men de blir extremt långa och svårskötta. Med din hjälp blev det hanterbart.
Nu när hösten fallit över oss så blev jag inspirerad att fortsätta med dina script och mina projekt med Google Sheets.
Först kan jag säga att du hade helt rätt igen! Funktionaliteten ska inte ändras. Bra att du stod på dig. Jag hade fått någon idé om att skapa en universell lösning, men tyvärr krockade den med nuvarande funktions uppbyggnad. Nuvarande lösning är praktisk, specialfallen löstes med in IF-sats i Google Sheets. Så här:
Kod:
IF(RED(A2)<10;RED(A2);RED(A2)&"/"&RED(A2;9;{11}))
Med enda skillnaden att i mitt dokument använder jag hjälpkolumner.
Enda kruxet jag upptäckt är att Google Docs skriptredigerare klagar när man debuggar RED() och Flatten().
RED > Exceeded maximum stack depth.
FLATTEN > TypeError: Det går inte att läsa egenskapen "length" från undefined.
Mycket stor hjälp med allt detta. Det går att skriva en formula för detta med befintliga funktioner i Google Sheets (jag hade en rudimentär innan), men de blir extremt långa och svårskötta. Med din hjälp blev det hanterbart.
Jaha... det kanske beror på indata som inte förutsetts ännu.
Nedan är den senaste koden jag postade och kallade för "aktuell" då (vet inte om jag har kvar något på datorn hemma, eller om du modifierat den senare) - FASTflatten är nu lite skyddad mot input som inte går att loopa över. Kanske löser det stack-depth-saken i red också på kuppen som en följd, ingen aning.
[PHP]function red(n, limit, exceptions, rec) {
var defaultLimit = 78, minLimit = 9;
"number" == typeof limit ||*(limit = defaultLimit);
if (limit<minLimit) {throw new Error("Invalid limit (under "+minLimit+"): "+limit);}
if ("number"== typeof exceptions) {exceptions = [exceptions];}
else if ("[object Array]" != ({}).toString.call(exceptions)) {exceptions = [];}
else if ("[object Array]" == ({}).toString.call(exceptions[0])) {exceptions = flatten(exceptions);}
if (n<=limit || exceptions.indexOf(n)>-1 && (!rec && limit>minLimit)) {return n;}
var s = String(n), result = 0;
for (var idx=0, len=s.length; idx<len; ++idx) {
result += parseInt(s.charAt(idx), 10);
}
return (result <= limit || exceptions.indexOf(result)>-1) ? result : red(result, limit, exceptions, true);
}
function flatten(arr) {
var result = [];
if (arr) {
for (var idx=0, len=arr.length; idx<len; ++idx) {result.push(arr[idx]);}
}
return result;
} [/PHP]
När man väl kunde tro att det inte fanns några problem kvar att räta ut så dök ett nytt snabbt upp. Det uppstod när jag försökte baka in formlerna med ArrayFormula. Med ArrayFormula kan hela kolumner populeras med formler utan att de behöver kopieras från cell till cell. Exempelvis; räcker det att formeln skrivs högst upp i en kolumn så aktiveras den sedan på varje rad. Men när jag gjorde detta med RED så fick jag meddelandet "Fel: Exceeded maximum stack depth (rad 26)."
När man väl kunde tro att det inte fanns några problem kvar att räta ut så dök ett nytt snabbt upp. Det uppstod när jag försökte baka in formlerna med ArrayFormula. Med ArrayFormula kan hela kolumner populeras med formler utan att de behöver kopieras från cell till cell. Exempelvis; räcker det att formeln skrivs högst upp i en kolumn så aktiveras den sedan på varje rad. Men när jag gjorde detta med RED så fick jag meddelandet "Fel: Exceeded maximum stack depth (rad 26)."