Proposal: 1) Number (integer or decimal) to Array 2) Array to Number (integer or decimal)

guest271314 guest271314 at gmail.com
Thu Mar 7 23:42:25 UTC 2019


FWIW the original requirement included a self-imposed restriction of
converting the input to a String at any point during the procedure, in part
to illustrate the ("broken") JavaScript Number/Math implementations.

If you have a "simpler" implementation to the requirement, then post your
answer at SO. Am banned for 5 years - a few days, though will still be able
to view your answer. Or, post a gist.

Yes, to settle the matter of a lot of users having a need for such an
implementation, can only speak for self. Have tried to solve the linked OEIS
A217626 oeis.org/A217626 for several years now - directly. That is,
specifically, using only a multiple of the number 9 to get *any* nth
permutation. That is how arrived at making this proposal here.

On Thu, Mar 7, 2019 at 11:31 PM J Decker <d3ck0r at gmail.com> wrote:

>
>
> On Thu, Mar 7, 2019 at 2:55 PM guest271314 <guest271314 at gmail.com> wrote:
>
>> Cannot get into "a large number of users" heads. Again, am not interested
>> in overcoming conjecture. If the proposal does not meet you folks'
>> criteria, so be it.
>>
>> On Thu, Mar 7, 2019 at 10:46 PM Steve Fink <sphink at gmail.com> wrote:
>>
>>> Any addition to the JavaScript language needs to (1) be motivated by a
>>> use case encountered by a large number of users, (2) cannot be implemented
>>> in a straightforward and reliable way by a library, (4) is implementable by
>>> a JS implementation without undue trouble, and (4) does not conflict with
>>> other parts of the language.
>>>
>>> For your proposal:
>>>
>>> (1) - absolute fail
>>> (2) - arguable
>>> (3) - uncertain, depends on exact semantics
>>> (4) - pass
>>>
>>> Unless you can somehow prove that a large numbers of users give a rat's
>>> hindquarters about things that this would enable, this is a nonstarter.
>>>
>>> It would be useful to have a FAQ somewhere with a version of the above 4
>>> rules that is better worked out and justified, so we could point to that.
>>> (From whatever public-facing forum is selected for the future; this one is
>>> dead.)
>>>
>>> On 3/7/19 2:22 PM, guest271314 wrote:
>>>
>>> Have you read the proposal, and the first response to your inquiry? It
>>> is simpler to have the ability to add, subtract, divide, or otherwise
>>> manipulate individual nth indexes of an integer or decimal represented as
>>> an array of integers potentially containing one decimal than trying to
>>> perform the same mathematical operations on a number in JavaScript
>>> (essentially broken in JavaScript due to the floating-point number issues).
>>>
>>> Will re-post a use case, again
>>> ~~(128.625*9*1.074)//1243
>>> ~~(128.625*9*1.144)//1324 where if the requirement is to increment the
>>> decimal portion of 1.074 or 1.144 if the decimal is first converted to an
>>> array, we can use array methods to tests the matches we are looking for.
>>> For example, [1.0, 7, 4]
>>> representation of 1.074 allows each of the portions of the number to be
>>> adjusted independently. Since we have previously defined a .toNumber()
>>> Array method we know we can get the value of the array as a JavaScript
>>> number.
>>>
>>> On Thu, Mar 7, 2019 at 10:12 PM Jeremy Martin <jmar777 at gmail.com> wrote:
>>>
>>>> By "real world" we mean somewhere outside of a code challenge or
>>>> similarly low utility program context.
>>>>
>>>> You mentioned statistics, for example. Can you reference a specific
>>>> example from that domain where these methods would offer an advantage?
>>>>
>>>> On Thu, Mar 7, 2019, 5:05 PM guest271314 <guest271314 at gmail.com> wrote:
>>>>
>>>>> Not sure what you mean by "real world" use case. Described at least
>>>>> one use case at the proposal. Statistics; graphs; number and integer
>>>>> manipulation using indexes of arrays with ability to convert manipulated
>>>>> array back to number.
>>>>>
>>>>> On Thu, Mar 7, 2019 at 9:56 PM Naveen Chawla <naveen.chwl at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> What is the real world use case, presuming it's not just an academic
>>>>>> exercise
>>>>>>
>>>>>> On Thu, 7 Mar 2019, 9:08 pm guest271314, <guest271314 at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Ability to adjust *nth* digit of an integer or decimal by adjusting
>>>>>>> decimal or integer at *nth* index of array, to try to solve OEIS
>>>>>>> A217626 oeis.org/A217626 directly, for example
>>>>>>>     ~~(128.625*9*1.074)//1243
>>>>>>>     ~~(128.625*9*1.144)//1324
>>>>>>> where the decimal portion can be manipulated by referencing the
>>>>>>> index of an array, then converting the array back to a number.
>>>>>>>
>>>>>>> On Thu, Mar 7, 2019 at 8:55 PM Jeremy Martin <jmar777 at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Can you explain the motivation for this proposal?
>>>>>>>>
>>>>>>>> At first blush, this seems like an incredibly arbitrary pair of
>>>>>>>> value conversion utilities. Are there real world applications for this?
>>>>>>>>
>>>>>>>> On Thu, Mar 7, 2019 at 3:43 PM guest271314 <guest271314 at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------- Forwarded message ---------
>>>>>>>>> From: guest271314 <guest271314 at gmail.com>
>>>>>>>>> Date: Thu, Mar 7, 2019 at 8:35 PM
>>>>>>>>> Subject: Proposal: 1) Number (integer or decimal) to Array 2)
>>>>>>>>> Array to Number (integer or decimal)
>>>>>>>>> To: <es-discuss at mozilla.org>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Original concept: Integer or decimal to array and array to decimal
>>>>>>>>> or integer https://codegolf.meta.stackexchange.com/a/17223
>>>>>>>>>
>>>>>>>>> Proof of concept (with bugs)
>>>>>>>>>
>>>>>>>>> function numberToArray(n) {
>>>>>>>>>
>>>>>>>>>   if (Math.abs(n) == 0 || Math.abs(n) == -0) {
>>>>>>>>>     return [n]
>>>>>>>>>   }
>>>>>>>>>
>>>>>>>>>   const r = [];
>>>>>>>>>
>>>>>>>>>   let [
>>>>>>>>>     a, int = Number.isInteger(a), d = g = [], e = i = 0
>>>>>>>>>   ] = [ n || this.valueOf()];
>>>>>>>>>
>>>>>>>>>   if (!int) {
>>>>>>>>>     let e = ~~a;
>>>>>>>>>     d = a - e;
>>>>>>>>>     do {
>>>>>>>>>       if (d < 1) ++i;
>>>>>>>>>       d *= 10;
>>>>>>>>>     } while (!Number.isInteger(d));
>>>>>>>>>   }
>>>>>>>>>
>>>>>>>>>   for (; ~~a; r.unshift(~~(a % 10)), a /= 10);
>>>>>>>>>
>>>>>>>>>   if (!int) {
>>>>>>>>>     for (; ~~d; g.unshift(~~(d % 10)), d /= 10);
>>>>>>>>>     g[0] = g[0] * (1 * (10 ** -i))
>>>>>>>>>     r.push(...g);
>>>>>>>>>   }
>>>>>>>>>
>>>>>>>>>   return r;
>>>>>>>>> }
>>>>>>>>> function arrayToNumber(a) {
>>>>>>>>>   if ((Math.abs<span class="gmail-m_2662878951066317968m_7497912379499730396gmail-m_-49591865513921258gmail-m_191674293613409874m_-1290191079188355796gmail-pun" style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;font-stretch:inherit;line-height:inherit;font-family:inherit;
>>>>>>>>>
>>>>>>>>>
>>>
> Really though that the above would be simpler to implement.  The example
> code doesn't even function correctly but...
>
> like 'numberTOArray(n)' would just be something like
>     [... n.toString()].slice(1).map(
> (c,i)=>-1*(c.codePointAt(0)>=0x30?(c.codePointAt(0)-0x30): ((d=i),0)) )
>
> ; but then going to read the original message I see it's actually quite
> convoluted.
>
> (it has an error of getting a trailing ... 0000000000000001 which causes
> the reverse to fail *shrug* )
>
> function numberTOArray(n) {
> var d = -1; // decimal location
> var r;
> if( n < 0 )
> r = [... n.toString()].slice(1).map(
> (c,i)=>-1*(c.codePointAt(0)>=0x30?(c.codePointAt(0)-0x30): ((d=i),0)) )
> else
> r = [... n.toString()].map(
> (c,i)=>c.codePointAt(0)>=0x30?(c.codePointAt(0)-0x30):((d=i),0) )
> var de = 0; // end of decimal leading 0's
> for( de = d; de < r.length; de++ )
> if( r[de] != 0 ) break;
> r[d] = r[de] * Math.pow(10, (d-de));
> r.splice( d+1, (de-d) );
> return r;
> }
>
> function arrayTONumber(n) {
> var str;
> var d = -1;
> if( n[0]< 0 ) {
> str = n.map( (n,i)=>(n==0|| (n>=1 || n<=-1))?String.fromCodePoint( 0x30 +
> -n ):((d=i),'.') ).reduce( (acc,val)=>acc+val,'' );
> if( d>=0 ) {
> str = str.substring(0,d+1) + n[d].toString().substring(2) +
> str.substring(d+1);
> }
> return -Number(str);
> } else {
> str =n.map( (n,i)=>(n==0|| (n>=1 || n<=-1))?String.fromCodePoint( 0x30 + n
> ):((d=i),'.') ).reduce( (acc,val)=>acc+val,'' );
> if( d>=0 ) {
> str = str.substring(0,d+1) + n[d].toString().substring(2) +
> str.substring(d+1);
> }
> return Number(str);
> }
> }
>
> But ya; don't see a very general purpose in such a thing...
>
>
>
>
>> _______________________________________________
>>> es-discuss mailing listes-discuss at mozilla.orghttps://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190307/8c966ead/attachment-0001.html>


More information about the es-discuss mailing list