জেনারেটাইজড জ্যামেট্রিয়া ক্যালকুলেটর


11

বর্ণমালা হিসাবে ইউনিকোড অক্ষরের যে কোনও অনুক্রমের জন্য একটি দ্বি নির্দেশামূলক জ্যামেট্রিয়া ক্যালকুলেটর তৈরি করুন।

Gematri-কি?

প্রাচীন গ্রীকদের দ্বারা বিকাশিত এবং প্রাচীন ইহুদিদের দ্বারা গৃহীত প্রতীকগুলিতে সংখ্যাসূচক মান নির্ধারণের একটি পদ্ধতি হ'ল গ্যামেট্রিয়া । এটি ASCII বা ইউনিকোডের মতো একটি উপায়ে, এটি কেবল অ-রৈখিক ... নীচের সারণীটি দেখুন (উপরের লিঙ্কে পুরো টেবিলটি উপলভ্য):

Index     Letter   Letter name  Value
--------------------------
  0         א         "Alef"     1
  1         ב         "Bet"      2

           ...

  8         ט         "Tet"      9
  9         י         "Yud"      10
 10         כ         "Kaf"      20

           ...

 17         צ        "Tsady"     90
 18         '        "Kuf"       100
 19         ר        "Resh"      200

           ...

বর্ণগুলির নামগুলি গুরুত্বপূর্ণ নয়, কেবল বর্ণমালার "অ্যারে" এবং সম্পর্কিত সংখ্যাসূচক মানগুলিতে তাদের সূচক। হিব্রু বর্ণমালায় কেবল 22 টি অক্ষর রয়েছে ("চূড়ান্ত" অক্ষরগুলি সহ নয়), তাই সর্বোচ্চ উপলব্ধ মান 400 হয়।

আমরা যদি এই সিস্টেমটি ইংরেজী বর্ণমালার (AZ) এ ধার করি তবে আমরা এ = 1, বি = 2 ... এল = 30 ... ইউ = 300 ... জেড = 800 দিয়ে শেষ করব।

দুটি বিষয় আমাদের জানা দরকার।

  1. এই সিস্টেমে সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হল একটি এর "Gematria মান" গণক হয় শব্দ দ্বারা সাতরে তার চিঠি 'মান। (কেউ কেউ বলেন শব্দের সাথে বা শব্দগুচ্ছগুলির মধ্যে একটি আধ্যাত্মিক সংযোগ রয়েছে (যখন স্থানের মান শূন্য হয় - যা একই জ্যাম্যাট্রিয়া মানকে ভাগ করে দেয়))।

  2. কোনও অ-নেতিবাচক পূর্ণসংখ্যা প্রতীকগুলিতে প্রতিনিধিত্ব করা যেতে পারে। উদাহরণস্বরূপ (এবং চলুন এখনই ইংরেজি বর্ণমালার সাথে থাকুন) 32 এর মান হ'ল এলবি (এল = 30 + বি = 2)। 1024 এর মান হ'ল জেডটিকেডি (800 + 200 + 20 + 4। নোট করুন যে জেডএসএসকেডিও 1024, তবে এটি কোনও আইনি উপস্থাপনা নয়, কারণ এটি সংক্ষেপণ করা যেতে পারে)।

চ্যালেঞ্জ

আপনার পছন্দসই ভাষাতে একটি প্রোগ্রাম / একটি ফাংশন / একটি কোড স্নিপেট লিখুন, যা প্রথমে বর্ণমালা দিয়ে সেট আপ করা হয় (নীচে এপিআই দেখুন) এবং তারপরে একটি যুক্তি স্বীকার করুন। সেই যুক্তিটি একটি পূর্ণসংখ্যা বা কোনও শব্দ / বাক্যাংশ হতে পারে। যদি এটি একটি পূর্ণসংখ্যা হয় - আপনার প্রোগ্রামটির বর্ণমালার প্রতীকগুলিতে আউটপুট / ফিরিয়ে দেওয়া উচিত - সর্বাধিক সংক্ষিপ্ত একটি (উপরে (2) দেখুন)। যদি এটি একটি শব্দ বা বাক্যাংশ হয় তবে আপনার প্রোগ্রামটির জ্যাম্যাট্রিয়া মানটি আউটপুট / ফিরিয়ে দেওয়া উচিত (প্রতীকগুলির মানগুলি সংক্ষিপ্ত করে, শ্বেতক্ষেত্র গণনা করে নয়, উপরে (1) দেখুন)।

এপিআই

আপনার প্রোগ্রাম / ফাংশন 3 টি আর্গুমেন্ট গ্রহণ করা উচিত। আপনি এটিকে স্টাডিন থেকে পেতে পারেন বা ফাংশন আর্গুমেন্ট হিসাবে, আপনি এমনকি ধরে নিতে পারেন যে এগুলি ভেরিয়েবল যা আপনার ফাংশন অনুরোধের আগে প্রোগ্রামিকভাবে সূচনা করেছিল।

  • প্রথম যুক্তি - বর্ণমালার প্রথম অক্ষর (ইউনিকোডে)।
  • দ্বিতীয় যুক্তি - বর্ণমালার শেষ অক্ষর (ইউনিকোডে)।
  • তৃতীয় যুক্তি - একটি পূর্ণসংখ্যা, প্রতীকগুলিতে প্রতিনিধিত্ব করা, বা একটি শব্দগুচ্ছ যা প্রদত্ত বর্ণমালা দ্বারা তৈরি করা হয়েছে।

আউটপুট / রিটার্ন মান: উপরে বর্ণিত হিসাবে তৃতীয় যুক্তির উপর নির্ভর করে।

অনুমিতি

  • প্রথম দুটি আর্গুমেন্ট সর্বদা প্রতিটি চরিত্র দীর্ঘ হবে এবং দ্বিতীয়টি সর্বদা প্রথমের চেয়ে গ্রেটার হবে।
  • সিকোয়েন্স (প্রথম অবধি শেষ পর্যন্ত অন্তর্ভুক্ত) কখনই 30-39 এর মান (যেগুলি 0-9 সংখ্যাটি উপস্থাপন করে) এর কোনওটিই অন্তর্ভুক্ত করবে না অন্যথায় এটি তৃতীয় যুক্তিকে দ্ব্যর্থক করে তুলবে। সম্পাদনা: এটিতে স্থানও থাকবে না, কারণ বাক্যাংশগুলিতে স্পেসগুলি শূন্য হিসাবে গণ্য করা হয়।
  • তৃতীয় যুক্তি, যদি এটি একটি বাক্যাংশ হয় তবে কেবলমাত্র বর্ণানুক্রমের ফাঁকা স্থান এবং অক্ষর থাকতে পারে। খালি স্ট্রিং কোনও বৈধ ইনপুট নয় (আপনি ধরে নিতে পারেন এটি খালি নয়)। যদি এটি একটি পূর্ণসংখ্যার হয় তবে আপনি ধরে নিতে পারেন এটি ইতিবাচক পূর্ণসংখ্যা।

উদাহরণ

Input                Output

A Z CODE GOLF        175
a s 512              sssssjb
A B 7                BBBA
≐ ⊐ ≤≫ ≥            1700

স্কোরিং

Score = upvotes - length/100.0

আপনার কোডটি ছোট হওয়া উচিত, তবে আরও গুরুত্বপূর্ণভাবে জনপ্রিয়। নেতিবাচক স্কোরগুলি পাশাপাশি খেলতে পারে। বিজয়ী এখন থেকে 2014-10-29 19:20:00 ইউটিসি থেকে এক সপ্তাহে সর্বোচ্চ স্কোর সহ উত্তর হবে।


আমি আপনার প্রশ্নটি ক্যাচ-অল কোড-চ্যালেঞ্জের কাছে ফিরিয়ে দিয়েছি কারণ আমি মনে করি স্কোরিং কোড গল্ফ বা মানক জনপ্রিয়তার প্রতিযোগিতা থেকে যথেষ্ট আলাদা।
মার্টিন ইন্ডার

ঠিক আছে. এটা অনেক ট্যাগ :) ধন্যবাদ।
যাকোব

প্রথম দুটি অক্ষর দ্বারা নির্মিত অন্তর্ভুক্ত তালিকায় স্থানটি নিজেই কী অন্তর্ভুক্ত?
অপ্টিমাইজার

এছাড়াও, দ্বিতীয় অনুমান দ্বারা আপনি কী বোঝাতে চান? 0-এর ASCII কোড 30 নয়
অপটিমাইজার

1
@ প্রভাডসকিলার এই একটি সাধারণ ভুল যেহেতু আপনি কিন্ডারগার্টেন "পেস সাসাদী কুফ রেশ" শিখেন যা সাদিক কুফের মতো মনে হয় ... হিব্রু ভাষা একাডেমির সাথে এটি নিশ্চিত করার জন্য আপনাকে স্বাগতম!
জ্যাকব

উত্তর:


4

সিজেএম, 80 75 70 বাইট, উপভোটস - 0.7

Arc:Irc\-):N,f#{9,:)f*~}%N<lS-_A,s&{i{1${1$)<},)\,I+o-}h;;}{If-\f=:+}?

এটি এখানে পরীক্ষা করুন।

এটি একটি সম্পূর্ণ প্রোগ্রাম, যা STDIN থেকে ইনপুট নেয় এবং ফলাফলটি STDOUT এ মুদ্রণ করে।

আমি কীভাবে এখানে জনপ্রিয়তার জন্য শুটিং করব বলে আমি সত্যিই নিশ্চিত নই, আমি পরিবর্তে যুক্তিসঙ্গতভাবে চিত্তাকর্ষক কোডের আকার পাওয়ার প্রত্যাশায় এটি কেবল গল্ফ করছি। ;)

আমি বিশ্বাস করি যে ইন-টু-স্ট্রিং রূপান্তরটি এখনও উন্নত করা যেতে পারে, তবে আমি এখনই এটি দেখতে পাচ্ছি না।

সেট ছেদ সম্পর্কে আমাকে স্মরণ করিয়ে দেওয়ার জন্য অপ্টিমাইজারকে ধন্যবাদ এবং খালি অ্যারেগুলি মিথ্যা।

A                                   "Push integer 10.";
 rc:I                               "Read token, convert to character, save in I.";
     rc                             "Read token, convert to character.";
       \-)                          "Swap, subtract, increment.";
          :N                        "Store number of characters in N.";
            ,                       "Turn into range [0 1 2 ... N-1].";
             f#                     "Map 10^i onto that range.";
               {       }%           "Map this block onto the powers of 10.";
                9,                  "Create range [0 1 2 ... 8].";
                  :)                "Increment each element.";
                    f*              "Multiply each by the current power of 10.";
                      ~             "Unwrap/dump the resulting array.";
                                    "Now we've got the values of the first 9N digits.";
                         N<         "That's too much, so truncate to the first N.";
                           l        "Read the rest of the line.";
                            S-      "Remove spaces.";
                              _     "Duplicate string and get first character.";
                               A,   "Create range [0 1 2 ... 9].";
                                 s  "Turn into string '0123456789'.";
                                  & "Intersection of characters.";

{                      }{        }? "If/else depending on whether the result is empty.";
                                    "If it was a digit...";
 i                                  "Convert string to integer.";
  {                }h               "While that integer isn't zero...";
   1$                               "Copy digit values.";
     {    },                        "Filter digit values.";
      1$                            "Copy remaining integer.";
        )<                          "Increment, compare.";
                                    "This discards values greater than the integer.";
            )\                      "Slice off last digit value, and swap with list.";
              ,I+                   "Get length of list and add to I.";
                 o                  "Print character.";
                  -                 "Subtract digit value from integer.";
                     ;;             "Empty stack.";
                                    "If the string was not a number...";
                         I          "Push initial character.";
                          f-        "Subtract it from each character in string.";
                            \       "Swap differences and digit values.";
                             f=     "Use differences to index into the values.";
                               :+   "Sum up all the values.";

দ্বিতীয় ক্ষেত্রে, ফলাফলটি স্ট্যাকের উপরে রেখে যায়, যা প্রোগ্রামের শেষে স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।


5

জাভা 7, স্কোর = উর্ধ্বে - 3.97

হ্যাঁ!!! জাভা !!! বিশ্বের বিশ্বের গল্ফিং ভাষা favorite কি, আপনি আসলে জাভা গল্ফ করতে পারেন ??? ঠিক আছে, এটি এক ধরণের বুলডোজার লাগানোর মতো।

aপ্রথম চরিত্রটি থাকবে বলে আশা করা হচ্ছে। bশেষ চরিত্রটি থাকবে বলে আশা করা হচ্ছে। cইনপুট স্ট্রিং থাকবে বলে আশা করা হচ্ছে।

এখানে গল্ফড ফাংশনটি রয়েছে:

int d=0;try{d=Integer.parseInt(c);}catch(Exception e){}int l=b-a+1;char[]f=new char[l];int[]g=new int[l];int h=1;int i=1;g[0]=1;f[0]=a;int j;for(j=1;j<b-a+1;){g[j]=(h+=i);f[j]=(char)(f[j++-1]+1);i*=h==10*i?10:1;}if(d==0){h=0;for(char k:c.toCharArray()){for(j=0;j<l;j++){if(f[j]==k){h+=g[j];}}}System.out.println(h);}else{c="";for(j=l;j>0;){if(g[--j]<=d){c+=f[j];d-=g[j++];}}System.out.println(c);}

এখানে এটি স্ট্রাকচার কোডের সাথে যুক্ত রয়েছে:

public class G{

    public static void main(String[] args){
        new G(args);
    }

    public G(String[] args){
        a = args[0].charAt(0);
        b = args[1].charAt(0);
        for (int i = 2; i < args.length; i++){
            c += args[i];
        }
        function();
    }

    char a;

    char b;

    String c = "";

    void function(){
        int d=0;
        try{
            d=Integer.parseInt(c);
        }catch(Exception e){}
        int l=b-a+1;
        char[]f=new char[l];
        int[]g=new int[l];
        int h=1;
        int i=1;
        g[0]=1;
        f[0]=a;
        int j;
        for(j=1;j<b-a+1;){
            g[j]=(h+=i);
            f[j]=(char)(f[j++-1]+1);
            i*=h==10*i?10:1;
        }
        if(d==0){
            h=0;
            for(char k:c.toCharArray()){
                for(j=0;j<l;j++){
                    if(f[j]==k){
                        h+=g[j];
                    }
                }
            }
            System.out.println(h);
        }else{
            c="";
            for(j=l;j>0;){
                if(g[--j]<=d){
                    c+=f[j];
                    d-=g[j++];
                }
            }
            System.out.println(c);
        }
    }
}

এখানে এটি সম্পূর্ণ প্রসারিত:

public class Generator{

    public static void main(String[] args){
        beginning = args[0].charAt(0);
        end = args[1].charAt(0);
        for (int i = 2; i < args.length; i++){
            phrase += args[i];
        }
        function();
    }

    static char beginning;

    static char end;

    static String phrase = "";

    static void function(){
        int convertTo = 0;
        try{
             convertTo = Integer.parseInt(phrase);
        } catch (Exception e){}
        char[] alphabet = new char[end - beginning + 1];
        int[] values = new int[alphabet.length];
        int value = 1;
        int base = 1;
        values[0] = 1;
        alphabet[0] = beginning;
        int i;
        for (i = 1; i < values.length;){
            values[i] = (value += base);
            alphabet[i] = (char)(alphabet[i++-1]+1);
            base*=value==10*base?10:1;
        }
        if(convertTo==0){
            value = 0;
            for (char character : phrase.toCharArray()){
                for (i = 0; i < alphabet.length;i++){
                    if (alphabet[i] == character){
                        value += values[i];
                    }
                }
            }
            System.out.println(value);


        } else {
            phrase = "";
            for (i = values.length;i > 0;){
                if (values[--i] <= convertTo){
                    phrase += alphabet[i];
                    convertTo -= values[i++];
                }
            }
            System.out.println(phrase);

        }
    }
}

2

এপিএল (upvotes - 1.05)

{U←⎕UCS⋄A←V↑∊(10*0,⍳⌊9÷⍨V←1+|-/U⍺)∘.×⍳9⋄⍬≢0↑⍵:+/A[1+(U⍵~' ')-U⊃⍺]⋄U(U⊃⍺)+{⍵≤0:⍬⋄(¯1+A⍳T),∇⍵-T←⊃⌽A/⍨⍵≥A}⍵}

এটি এমন একটি ফাংশন যা দুটি অক্ষরকে বামে নিয়ে যায় এবং আর্গুমেন্টটি ডানদিকে রূপান্তরিত হয়:

      'A' 'Z'{U←⎕UCS⋄A←V↑∊(10*0,⍳⌊9÷⍨V←1+|-/U⍺)∘.×⍳9⋄⍬≢0↑⍵:+/A[1+(U⍵~' ')-U⊃⍺]⋄U(U⊃⍺)+{⍵≤0:⍬⋄(¯1+A⍳T),∇⍵-T←⊃⌽A/⍨⍵≥A}⍵}'CODE GOLF'
175
      gematria←{U←⎕UCS⋄A←V↑∊(10*0,⍳⌊9÷⍨V←1+|-/U⍺)∘.×⍳9⋄⍬≢0↑⍵:+/A[1+(U⍵~' ')-U⊃⍺]⋄U(U⊃⍺)+{⍵≤0:⍬⋄(¯1+A⍳T),∇⍵-T←⊃⌽A/⍨⍵≥A}⍵}
      'A' 'Z' gematria 'CODE GOLF'
175
      'a' 's' gematria 512
sssssjb
      'A' 'B' gematria 7
BBBA
      '≐' '⊐' gematria '≤≫ ≥'
1700

অবরুদ্ধ সংস্করণ:

gematria←{
   ⍝ get Unicode values for characters
   first last←⎕UCS¨⍺
   amount←1+last-first
   ⍝ find the value for each character in the alphabet
   alphabet←amount↑∊(10*0,⍳⌊amount÷9)∘.×⍳9

   ⍝ right arg is string: calculate number
   ⍬≢0↑⍵: +/ alphabet[1+(⎕UCS ⍵~' ')-first]

   ⍝ otherwise, right arg is number: find string
   ⎕UCS first+{
      ⍝ number ≤ 0? empty string
      ⍵≤0:⍬

      ⍝ find highest value we can subtract
      val←⊃⌽(⍵≥alphabet)/alphabet

      ⍝ return it, followed by the conversion of the rest of the number
      (¯1+alphabet⍳val), ∇⍵-val
   }⍵
}

2

হাস্কেল, 188 বাইট; উক্তি - 1.88

এটি একটি পূর্ণ-বর্ধিত STDIN-to-STDOUT প্রোগ্রাম, প্রচন্ড গল্ফ করা। সম্পাদনা: এখন ২০০ বাইটের নিচে! সম্পাদনা 2: @ গর্বিতসেকলারের পরামর্শে একটি বাইট সংরক্ষণ করা হয়েছে।

x=[1..9]++map(*10)x
f(a:_:b:_:z@(u:_))|u>'/'&&u<':'=w$read z|1<2=show.sum$map v z where v ' '=0;v c=x!!(length[a..c]-1);w 0="";w n=(\c->c:w(n-v c))$last[d|d<-[a..b],v d<=n]
main=interact$f

এটি x = [1,2,3,4,5,6,7,8,9,10,20,30,..]প্রথম লাইনে মূল্যগুলির অসীম তালিকা তৈরি করে এবং তৃতীয় লাইনে I / O করে। একটি চিঠি মান c, পরিসর দেওয়া [a..b], তারপর অবস্থানে মান length [a..c] - 1এর x। দ্বিতীয় লাইনে, আমরা uতৃতীয় আর্গুমেন্টের প্রথম অক্ষরে শাখা করি , এবং হয় এর জ্যাম্যাট্রিয়া মানগুলি সংযুক্ত করি (যদি uএকটি অঙ্ক না হয়), অথবা লোভের সাথে প্রদত্ত মান (যদি uএকটি অঙ্ক হয়) দিয়ে একটি শব্দ তৈরি করি ।

আরও পঠনযোগ্য ভেরিয়েবলের নাম সহ অরোগল্ফড সংস্করণ:

values = [1..9] ++ map (*10) values
f (low:_:high:_:rest@(first:_))
  | first > '/' && first < ':' = construct $ read rest
  | otherwise                  = show . sum $ map value rest
  where value ' '   = 0
        value c     = values !! (length [low..c] - 1)
        construct 0 = ""
        construct n = (\c -> c : construct (n - value c)) $
                      last [d | d <- [low..high], value d <= n]
main = interact $ f

আপনি {}যেখানে একটি বাইট লাভের জন্য সেই ধারাটি সরিয়ে ফেলতে পারেন
গর্বিত হাসেলেলার

1

সিজেএম, 70 বাইট, # আপভোটস - 0.7

{{_9%)A@9/#*}%}:M;rcrc),\i>:QlS-_@&{Qf#M:+}{i{Q,,M{1$)<},)Q@,=@@-}h;}?

এটি ধরে নিয়েছে যে একটি বৈধ ইনপুট পাস হবে। এসপিডিআইএন থেকে ইনপুট নেয় যেমন এপিআই স্পেক বলেছে এবং ফলাফলটি STDOUT- এ মুদ্রণ করে।

উদাহরণ:

Input                Output

A Z CODE GOLF        175
a s 512              sssssjb
A B 7                BBBA
≐ ⊐ ≤≫ ≥            1700

এটি এখানে অনলাইনে চেষ্টা করুন

ব্লক অনুসারে ব্যাখ্যা :

{{_9%)A@9/#*}%}:M;
{             }:M;              "Define a function M which takes an input array of"
                                "indeces and calculates the Gematri number for them";
 {          }%                  "Run this code block for each element of the array";
  _9%)                          "Copy the number, take modulus by 9 and increment it";
      A@                        "Put 10 on stack, and rotate to get the number on top";
        9/                      "Integer divide the number by 9";
          #                     "Calculate 10 to the power the above quotient";
           *                    "Multiply the above result by modulus 9";

rcrc),\i>:QlS-_@&
rcrc                            "Read the first two characters, representing the lower"
                                "and upper end of the character list";
    ),                          "Increment the upper end and get a list of U to ASCII 0"
                                "characters where U is the upper limit";
      \i                        "Swap and convert the lower limit to its ASCII number";
        >:Q                     "Slice the character list to get our desired character"
                                "list range and store it in Q";
           lS-                  "Read the rest of the line as string and remove spaces";
              _@&               "Take a copy, get Q on top of stack and take"
                                "intersection with the input string. If the resulting"
                                "string is empty, then the third input was a number";
                 {...}{...}?    "First code block is for string input and second for"
                                "number input based on the above intersected string";

{Qf#M:+}
 Qf#                            "For each character of input string, calculate its"
                                "position in Q";
    M                           "Get the Gematri numbers for these inceces";
     :+                         "Sum them all to get the final Gematri number for the"
                                "input string"

{i{Q,,M{1$)<},)Q@,=@@-}h;}
 i                              "Convert the input number string to integer";
  {                   }h        "Run the code block till we get 0 on top of stack";
   Q,,M                         "Get the first length(Q) Gematri numbers";
       {1$)<},                  "Filter and take only which are less than input number";
              )                 "Pop the last number from the filtered array. This is"
                                "The maximum Gematri number that can be deducted";
               Q@               "Put Q on stack and rotate the remaining filtered array"
                                "to top of stack";
                 ,              "Calculate the length of that array, which is also the"
                                "index of the Gematri number used.";
                  =             "Get the corresponding character to that Gematri number";
                   @@-          "Put the number and Gematri number on top and subtract."
                                "The next loop runs on the above result now";
                        ;       "Pop the resedual 0 from stack. The remaining stack now"
                                "contains just the Gematri characters."
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.