Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by LightVelox · May 13, 2019 at 04:41 PM · c#script.randomrandom.range

Generate a big digit with only 1 2 3 and 4,How to generate a big number that only countains 0 to 3

I'm creating a Genetics system to my game based in Space Station 13, but genetics in the game have like 100 variables per player so i was working on a optimized version that could put everything in just a few, my idea is to make number composed only of 1s to 4s, like: 1423(the numbers are gonna be 16digits but i'm using small ones here so it's easier to understand), the reason it's numbers from 1 to 4 is because:

  • 1 means Cromossome TA

  • 2 means Cromossome AT

  • 3 means Cromossome CG

  • 4 means Cromossome GC

The variables are gonna be translated to a string when being read by the user but i want to keep them as this numbers since it's way faster and simpler to have a 16 digit number(Ulong) compared to having 16 different arrays for every single disease, the problem is that if I use the random functions like Mathf.Random it generates just a random number, which could be like 5948 and I can't have any number other than 1 2 3 and 4, So basically: I want to have a function that can generate big numbers composed only of number between 1 and 4, for example: 1423142324132232, it's a big number because it's a Ulong type In the end they are going to be translated back to string to be understand by the player, like 1432 = TAGCCGAT, also if possible a way to get only a certain digit of a number

,I'm trying to make a "Genetics" system for a game of mine, every DNA would have a 16-digit number(a Ulong variable), the problem is that I can only have numbers from 1 to 4, because in my system:

  • 1 = TA cromossome

  • 2 = AT cromossome

  • 3 = CG cromossome

  • 4 = GC cromossome

So if i simply use Mathf.Random it could generate something like 19382... and I can't have number like 9 or 8 in the variables, in this case i want something like: 1243432313212312, as you can see, a 16-digit number which contains only number from 1 to 4, not related to the question but if possible also a way to read and change a specific digit, like see only the fifth digit in the number to translate it to a string, instead of reading the entire number

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
2

Answer by Legend_Bacon · May 13, 2019 at 04:47 PM

Hello there,


This may not be the best way to do this, but it works:


     public static int GenerateRandXDigitCode(int nbOfDigits, int min, int max)
     {
         string toReturn = "";
         for (int i = 0; i < nbOfDigits; ++i)
         {
             int rand = UnityEngine.Random.Range(min, max);
             toReturn += rand.ToString();
         }
 
         return int.Parse(toReturn);
     }


nbOfDigits is the length of your number, min is the inclusive minimum (1 in your case), and max is the exclusive maximum (5 in your case).


Hope that helps!

Cheers,

~LegendBacon

Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Legend_Bacon · May 13, 2019 at 04:48 PM 0
Share

Oh and in your case, you probably want to use longs ins$$anonymous$$d of ints :)

avatar image LightVelox · May 13, 2019 at 07:36 PM 0
Share

Thanks, that's exactly what i wanted

avatar image cdnDave · May 13, 2019 at 07:59 PM 0
Share

Couple of notes about this solution

  • UnityEngine.Random.Range(int $$anonymous$$, int max) is exclusive when it comes to the max value, the largest value it will return is (max - 1) Edit:Whoops just noticed you mentioned this!

  • Due to the immutable nature of strings this will create quite a bit of garbage which might be an issue depending on where/how often this function is used. This could be mitigated by using the StringBuilder class.

avatar image
0

Answer by cdnDave · May 13, 2019 at 07:54 PM

This function will generate the number

     //Generate a number numDigits long where each digit is a random number between 0 and 4 inclusive 
     ulong GenerateNumber(int numDigits)
     {
         ulong retval = 0;
         for (int i = 0; i < numDigits; i++)
         {
             ulong digit = (ulong)Random.Range(0, 5); //This will return an int between 0-4 inclusive
 
             //This loop is the equivalent of doing: digit * (10 ^ i)
             for(int j = 0; j < i; j++) //Add i number of trailing zeros
             {
                 digit *= 10;
             }
             retval += digit;//Add to the existing number
         }
         return retval;
     }


And this function can be used to determine the digit at particular place in a larger number

      //Get the digit occupying a particular place in a number 
     //Note: This is zero indexed and right to left
     //i.e. place 0 is the ones column, place 1 is the tens column, etc.  
     int GetDigit(ulong fullNumber, int place)
     {
         ulong retval = fullNumber;
         //Loop through removing all digits to the right of the one we want
         for(int i = 0; i < place; i++)
         {
             retval /= 10;
         }
         //Remove all digits to the left of the one we want
         retval %= 10; 
         return (int)retval;
     }
 
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Hellium · May 13, 2019 at 08:12 PM 1
Share

Ins$$anonymous$$d of the inner for loop, adding the digit to the left, why don't you multiply retval by 10, and then, add digit, "concatenating" it to the right of the number?

avatar image cdnDave Hellium · May 13, 2019 at 08:18 PM 0
Share

Good point, I didn't think of that!

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

621 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Display random element from dictionary 1 Answer

Semi-Random Or Engine 1 Answer

Is Random.Range() Really Maximally Inclusive? 4 Answers

My Script Wont work? 2 Answers

How to randomize answers? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges