জেলিতে গল্ফ করার টিপস


46

জেলি হ'ল আমাদের নিজস্ব ডেনিস কর্তৃক গৃহীত , গল্ফমুখী প্রোগ্রামিং ভাষা । এটি উত্তর এবং আরও প্রায়শই পপ আপ করে চলেছে, পাইথ এবং সিজেমের মতো অন্যান্য গল্ফ-ওয়াই ভাষাগুলিকে হারিয়ে, নিজের কোড পৃষ্ঠা এবং এর শক্তিশালী চেইন সিস্টেমটি সংক্ষেপে প্রোগ্রাম প্রকাশের জন্য ব্যবহার করে।

আসুন জেলিতে গল্ফ করার জন্য কিছু দরকারী টিপস সংগ্রহ করি। (সর্বদা হিসাবে, উত্তর প্রতি একটি পরামর্শ, দয়া করে!)


13
আমাকে অবাক করে দেয় যে জেলি এখনও এমন প্রচুর পরিমাণে সামগ্রী তৈরি করতে প্রবাহের মধ্যে রয়েছে যা দীর্ঘমেয়াদে কার্যকর হবে, তবে উত্তর দেওয়ার সবচেয়ে ভাল ব্যক্তি সম্ভবত এটি ডেনিস।
মার্টিন এন্ডার

2
আমি মনে করি ইতিমধ্যে প্রচুর টিপস রয়েছে যা ভাষার মধ্যে যে পরিবর্তন হয় তা বিবেচনা করেই বোঝা উচিত। পাইথের গল্ফ করার টিপস একই সমস্যা রয়েছে বলে আমি মনে করি, তবে এটি সময়ের পরীক্ষায় যথাযথভাবে উত্তীর্ণ হয়েছে; উত্তরগুলি সাধারণত আপডেট করা হয় যখনই কোনও ভাষা পরিবর্তনের কারণে তারা আর প্রয়োগ না করে, কিছুটা বিলম্বের পরেও।
লিন

3
এখানে একটি দুর্দান্ত টিপ: ডেনিসের শিক্ষানবিশ হয়ে উঠুন। তারপরে, আপনি সত্যিই গল্ফ জেলিতে ভাল থাকবেন।
কনর ও'ব্রায়েন

12
@ লিন আমি পছন্দ করি আপনি কীভাবে আমাদের নিজস্ব ডেনিস বলেছেন। আমরা সকলেই একটি বড় পরিবার এর মতো: ডি।

জেলির গিটহব ইস্যুতে এই থ্রেডটি কীভাবে আসলে জেলি কোড পৃষ্ঠার অক্ষরগুলি টাইপ করতে পারে তা সম্ভবত একটি টিপস বা দু'টির জন্য মূল্যবান: github.com/DennisMitchell/jelly/issues/6 যদিও আমার উইন্ডোজ মেশিনে অ্যাক্সেস নেই তবে আমি ডন করি না এই বিটগুলি লিখে আত্মবিশ্বাস বোধ করবেন না।
জর্ডান

উত্তর:


25

স্ট্রিং সংকোচনের

আপনি একটি আরো অপ্টিমাইজ / স্বয়ংক্রিয় স্ট্রিং সংকোচকারী খুঁজছেন থাকেন, তবে চেষ্টা এই এক

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

একটি সংকুচিত স্ট্রিংয়ের মতো দেখতে “...», যেখানে বিন্দুগুলি বেস -250-এনকোডড ডেটার অংশ। ডিকম্প্রেশন অ্যালগরিদমটি কিছুটা জটিল: divmodএই পূর্ণসংখ্যার বিভিন্ন অংশকে ভেঙে ফেলে এবং সেগুলির একটি স্ট্রিং তৈরি করে অংশটিকে "মিশ্র-বেস" পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা হয় ।

জেলি স্ট্রিংগুলি সংকোচনের জন্য আমি একটি অল্প পাইথন 3 ইন্টারফেস তৈরি করেছি:

import dictionary
code_page = '''¡¢£¤¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻạḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż«»‘’“”'''

class Compress(list):
    def character(self, c):
        if c in '\n\x7f¶':
            o = 95
        elif ' ' <= c <= '~':
            o = ord(c)-32
        else:
            raise ValueError(c + " is neither printable ASCII nor a linefeed.")
        self += [lambda z: 3*z+0, lambda z: 96*z+o]; return self
    def string(self, s):
        for c in s: self.character(c)
        return self
    def dictionary(self, w):
        ts = bool(self)
        if w[:1] == ' ': w = w[1:]; ts = not ts
        dct = dictionary.short if len(w) < 6 else dictionary.long
        W, sc = (w, 0) if w in dct else (w[:1].swapcase() + w[1:], 1)
        if W not in dct: raise ValueError(w + " isn't in the dictionary.")
        f = ts or sc; j = (2 if sc else 1) if ts else 0; i = dct.index(W)
        self += [lambda z: 3*z+2, lambda z: 3*z+j] if f else [lambda z: 3*z+1]
        self += [lambda z: 2*z+int(len(w) < 6), lambda z: len(dct)*z+i]
        return self
    def go(self):
        compressed = []; z = 0
        for f in self[::-1]: z = f(z)
        while z:
            c = z % 250
            if c == 0: c = 250
            z = (z - c) // 250
            compressed.append(code_page[c - 1])
        return '“{0}»'.format(''.join(compressed[::-1]))

নিম্নলিখিত হিসাবে সংক্ষেপক ব্যবহার করুন।

print(Compress()
      .dictionary('public')
      .dictionary(' static')
      .dictionary(' boolean')
      .string(' is')
      .dictionary('Power')
      .string('Of')
      .dictionary('Ten')
      .string('(')
      .dictionary('long')
      .dictionary(' input')
      .string(') {\n ')
      .dictionary(' return')
      .string('\n   ')
      .dictionary(' input')
      .string(' ==')
      .go())

Compress একটি স্ট্রিং নির্মাতা:

  • .string(s) স্ট্রিংয়ের মধ্যে কাঁচা, মুদ্রণযোগ্য ASCII অক্ষর প্রবেশ করানো হবে।

    (প্রতিটি অক্ষরের দাম প্রায় 0.827 কমপ্রেসড বাইট।

  • .dictionary(w)জেলির অন্তর্নির্মিত অভিধানগুলিতে একটি স্ট্রিং সন্ধান করবে। আপনি চাইলে একটি স্ট্রিং দিয়ে স্ট্রিং শুরু করতে পারেন। এটি যদি স্বাভাবিক স্ট্রিং-যুক্ত আচরণ থেকে বিচ্যুত হয় বা অভিধানের শব্দের মূলধনকে ফ্লিপ করতে হয় তবে এটি অনুসারে পতাকা যুক্ত করবে।

    (সংক্ষিপ্ত শব্দের জন্য প্রায় 1.997 বাইট ব্যয়, দীর্ঘ শব্দের জন্য 2.433 বাইট; যদি পতাকা থাকে তবে 0.199 বাইট যোগ করুন))


15
এটি দরকারী! এগুলি হাত দিয়ে সংকুচিত করে আমি কিছুটা ক্লান্ত হয়ে পড়েছি ...
ডেনিস

1
পছন্দ করুন
পূর্কাকুডারী

@ Pietu1998 একটি পরমাণু বা অন্য কিছু হিসাবে?
ডেনিস

@ ডেনিস একটি সংগ্রহস্থল হিসাবে ইউটিলিটি স্ক্রিপ্ট হিসাবে।
পূর্বকুডারী

1
সম্ভবত জেলি কিছু প্রয়োজন।
ক্যালকুলেটরফলাইন

19

এটি জেলি উইকি টিউটোরিয়াল হয়ে ওঠার একটি অংশ ।

চেইনস

(এই একটি ফলো-আপ বাছাই করা হয় মৌন প্রোগ্রামিং ।)

জেলি কীভাবে একটি চেইনকে মূল্যায়ন করে? পূর্বে বর্ণিত হিসাবে, এখানে তিনটি বিষয় বিবেচনা করতে হবে: এই শৃঙ্খলাটি নীলাদাক্রান্তভাবে , একাকীভাবে বা বর্ণবাদী বলা হয়েছিল কিনা ।


1. নীলাডিক চেইন

এগুলি গুচ্ছের মধ্যে সবচেয়ে সহজ। একটি niladic শৃঙ্খল নির্ণয় করা যে শুরু একটি nilad সঙ্গে, মত α f g h, পরমাণুসদৃশ্য শৃঙ্খল মূল্যায়ন f g hযে nilad এ α। (ক্যাভেটস: পুরো শৃঙ্খলটি খালি থাকলে 0 পরিবর্তে ফিরে আসে α is যদি নীলাদ না হয় তবে পরিবর্তে ব্যবহারটি প্রতিস্থাপন করুন α=0))

উদাহরণস্বরূপ, কেবল ½মূল্যায়ন করা হয় 4, যা হয় 2


2. মোনাডিক চেইন

মোনাডিক চেইনগুলি বাম থেকে ডানদিকে ভেঙে গেছে, যতক্ষণ না বিবেচনার জন্য কোনও লিঙ্ক নেই। এছাড়াও, আমরা ωএখানে কিছু যুক্তি পাস করেছি । উত্তর দেওয়ার জন্য দুটি প্রশ্ন রয়েছে:

এই বাম থেকে ডান মূল্যায়নের জন্য আরম্ভের মানটি কী?

  • যদি আমাদের শৃঙ্খলা নীলাদ দিয়ে শুরু হয় α, এবং তার পরে শূন্য বা আরও বেশি ½মনাদ (যেমন +2), ডায়াদ-নিলাদ জোড় (লাইক ), এবং নীলাদ-ডায়াদ জোড় (পছন্দ 4*) থাকে: আমরা মূল্যায়ন করে শুরু করি α, এবং তারপরে বাকী অংশটি বিবেচনা করি ।

  • অন্যথায়, আমরা এই শৃঙ্খলে পাস হওয়া যুক্তি থেকে শুরু করি ω, এবং পুরো শৃঙ্খলা বিবেচনা করি।

আমরা কীভাবে চেইন দিয়ে হাঁটব?

আসুন Vবর্তমান মানটিকে কল করুন - প্রাথমিকভাবে, এটি উপরে বর্ণিত মান, তবে শৃঙ্খলার মধ্য দিয়ে যাওয়ার সময় এটি আপডেট হয় - এবং বোঝায়

  • অঙ্কগুলি ব্যবহার করে নীলাড,
  • ছোট হাতের অক্ষর ব্যবহার করে monads,
  • অপারেটর চিহ্ন ব্যবহার dyads +, ×, ÷

তারপরে নীচের ধরণগুলি উপরে থেকে নীচে পর্যন্ত মিলেছে:

                                 ┌───────────┬─────────┐
                                 │ old chain │ new V   │
                                 ╞═══════════╪═════════╡
                                 │ + × 1 ... │ (V+ω)×1 │ *
                                 │ + f ...   │ V+f(ω)  │
                                 │ + 1 ...   │ V+1     │
                                 │ 1 + ...   │ 1+V     │
                                 │ + ...     │ V+ω     │
                                 │ f ...     │ f(V)    │
                                 └───────────┴─────────┘
      (* Only if `...` consists of monads, dyad-nilad pairs, and nilad-dyad pairs.)

চেইন এ চেষ্টা করুন +²×

  • +নীলাদ নয়, তাই আমরা শুরু করি V = ω
  • তারপরে, আমরা দ্বিতীয় প্যাটার্নটির সাথে মিল রেখে কেটে ফেলি V = ω+ω²
  • তারপরে, আমরা ×পঞ্চম প্যাটার্নটির সাথে মিল রেখে কেটে ফেলি V = (ω+ω²)×ω
  • চেইন এখন খালি, তাই (ω+ω²)×ωআমাদের চূড়ান্ত ফলাফল।

3. ডায়াডিক চেইন

এগুলি মূলত মোনাডিক চেইনের মতো, তবে এবার দুটি যুক্তি রয়েছে λ(বাম) এবং ρ(ডানদিকে)।

শুরুর মান কী?

  • যদি চেইনটি তিনটি ডায়াডের মতো + × %শুরু হয় তবে আমরা শুরু করব λ+ρএবং × % ...পরবর্তী চেইনটি বিবেচনা করব।

  • অন্যথায়, আমরা শুরু করি λএবং পুরো চেইনটি বিবেচনা করি।

আমরা কীভাবে চেইন দিয়ে হাঁটব?

এবার, নিদর্শনগুলি হ'ল

                                 ┌───────────┬─────────┐
                                 │ old chain │ new V   │
                                 ╞═══════════╪═════════╡
                                 │ + × 1 ... │ (V+ρ)×1 │ *
                                 │ + × ...   │ V+(λ×ρ) │
                                 │ + 1 ...   │ V+1     │
                                 │ 1 + ...   │ 1+V     │
                                 │ + ...     │ V+ρ     │
                                 │ f ...     │ f(V)    │
                                 └───────────┴─────────┘
      (* Only if `...` consists of monads, dyad-nilad pairs, and nilad-dyad pairs.)

চেইন এ চেষ্টা করুন +×÷½

  • চেইনটি তিনটি ডায়াড দিয়ে শুরু হয়, তাই আমরা শুরু করি এবং এটিকে V = λ+ρফেলে দেব +
  • তারপরে, আমরা ×÷দ্বিতীয় প্যাটার্নটির সাথে মিল রেখে কেটে ফেলি V = (λ+ρ)×(λ÷ρ)
  • তারপরে, আমরা ½ষষ্ঠ প্যাটার্নটির সাথে মিলে মিশ্রণটি কেটে দেব V = sqrt((λ+ρ)×(λ÷ρ))
  • চেইনটি এখন খালি, সুতরাং আমরা শেষ করেছি।

2
তাহলে এটি কী গল্ফ করার টিপসের চেয়ে জেলি টিউটোরিয়াল হয়ে উঠছে? ;)
মার্টিন এন্ডার

5
আমারও তাই মনে হচ্ছে. যদি ভাষাটি বোঝার জন্য খুব জটিল হয় তবে আমি মনে করি "এইগুলির মধ্যে কীভাবে কোনও কাজ করে ?!" একটি ভাল টিপ ^^ অবশেষে আমি অ-স্পষ্ট কৌশল এবং বাইটগুলি সংরক্ষণ করার উপায়গুলিতে যেতে চাই। যদি এটি এখানে স্থানের বাইরে থাকে তবে আমি এটিকে গিটহাব, বা (ডেনিস পছন্দ করতে পারে) জেলি রেপোতে স্থানান্তর করতে পারতাম।
লিন

16

বিশেষ ক্ষেত্রে সংখ্যাসূচক মান

জেলির সংখ্যাসূচক পার্সারের জন্য এখানে কয়েকটি বিশেষ মামলা দেওয়া হয়েছে:

  • - মূল্যায়ন -1
  • . মূল্যায়ন 0.5
  • ȷমূল্যায়ণ 1000( ȷবৈজ্ঞানিক স্বরলিপি জন্য, যেমন 2ȷ6হয় 2000000)
  • ıথেকে evalulates 1j( ıজটিল সংখ্যার জন্য নয়, যেমন 2ı3নয় 2+3j)

এছাড়া কিছু টুকুনি মত আসলে 4+1jবদলে 4

আপনি এগুলি মেশাতে এবং মিলাতে পারেন, যেমন:

  • -.হয় -0.5এবং হয়-1000
  • হয় -1+1j, ı-হয় -1jএবং -ı-হয়-1-1j
  • হয় 500.0
  • হয় 0.5+1j, ı.হয় 0.5jএবং .ı.হয়0.5+0.5j
  • ȷıহয় 1000+1j, ıȷহয় 1000jএবং ȷıȷহয়1000+1000j

নোটটি ȷ-হ'ল 0.1তবে এটি কোনও বাইটের বেশি সংরক্ষণ করতে পারে না .1। তারপরে নিম্নলিখিতটিও রয়েছে, যা ইতিমধ্যে 10 ( ) এর জন্য বিল্টিন ভেরিয়েবলটি ব্যবহার করে সংশ্লিষ্ট সংখ্যক বাইটের সাথে সম্পন্ন করা যেতে পারে তবে বিল্টিনটি অনুপলব্ধ বা ব্যবহারের প্রয়োজনে সংরক্ষণের জন্য বিরল ক্ষেত্রে কার্যকর হতে পারে ¤:

  • ȷ.হয় sqrt(10) ~ 3.162277, .ȷ.হয় sqrt(10)/2 ~ 1.5811এবং ȷ-.হয়1/sqrt(10) ~ 0.31162

13

অনুকূল স্ট্রিং সংক্ষেপক

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

লিনের পোস্টে সংকোচিত স্ট্রিংগুলি ঠিক কী কী তা সহ একটি সংক্ষেপক স্ট্রিং উত্পাদন করবে এমন একটি সংক্ষেপক রয়েছে details যাইহোক, জেলির একটি প্রোগ্রামের সাথে ঘুরতে যাওয়ার সময়, আমি সংক্ষিপ্ততম স্ট্রিংটি অর্জন করার জন্য, জায়গাটির সঠিক স্থান .dictionaryএবং একত্রিত করতে এবং .stringআরও কিছু ক্লান্তিকর দেখতে পেলাম ।

অতএব আমি লিনের স্ক্রিপ্টে একটি এক্সটেনশন তৈরি করার সিদ্ধান্ত নিয়েছি যা ব্যবহারকারীর ইনপুট গ্রহণ করবে এবং ব্যবহারকারীর কোনও কাজ না করে সংক্ষেপে সংক্ষিপ্ততম উপায়টি এটি খুঁজে পাবে। স্ক্রিপ্টটি বেশ দীর্ঘ, এবং তাই কোডের পরিবর্তে আমি একটি টিআইও লিঙ্কে যুক্ত করেছি।

প্রোগ্রামটি যেভাবে কাজ করে তা হ'ল 3 টি বিভিন্ন পদ্ধতি ব্যবহার করে সংক্ষিপ্ত করে এবং কোনটি সবচেয়ে কম তা নির্ধারণ করে:

  1. পদ্ধতি 1 ইনপুটটির প্রতিটি বাইটকে একসাথে সহজেই এনকোড করে, যা অন্যদের তুলনায় দীর্ঘতম ফলাফল দেয়। এমনকি যখন ইনপুটটি খুব সংক্ষিপ্ত হয়, তবুও এটি বরং দীর্ঘ বিকল্পগুলি তৈরি করতে পরিচালিত করে। উদাহরণস্বরূপ, সংক্ষিপ্ততম উপায়টি testসংকুচিত করা যায় “¡ḌY», যেখানে এই পদ্ধতিটি ফিরে আসে “¡⁷ƑKʂ»(2 বাইট দীর্ঘ)। একটি সাধারণ নিয়ম হিসাবে, স্ট্রিংটি 4 টি অক্ষরের চেয়ে কম দীর্ঘ হলে এটি কাজ করে

  2. দ্বিতীয় পদ্ধতিটি স্ট্রিংকে শব্দ এবং বিরামচিহ্নগুলিতে বিভক্ত করে, কারণ দুটিটি বিভিন্নভাবে সংকোচকে যুক্ত করা হয় added অভিধানের অংশ থাকা শব্দগুলি .dictionaryলিনের কোডের পদ্ধতির সাথে যুক্ত করা হয় , যা কেবল কোড পয়েন্ট দ্বারা যুক্ত করা হলে সেগুলি আরও সংকুচিত করে। বিরামচিহ্নগুলি অবশ্য কোড পয়েন্ট দ্বারা যুক্ত করতে হবে, দুর্ভাগ্যক্রমে, তারা অভিধানের অংশ নয়।

    বিরামচিহ্নগুলিতে স্পেস অন্তর্ভুক্ত রয়েছে, যেখানে পদ্ধতি সংখ্যা 3 খেলাটিতে আসে, তবে প্রথমে 2 পদ্ধতিটির মূল্যায়ন: আসুন স্ট্রিংকে সংক্ষেপিত দুটি এবং দুটি পদ্ধতির তুলনা করুন Hello, World!(শব্দগুলি, বিরামচিহ্ন এবং ফাঁকা স্থানগুলি তাই সঠিক) is চরিত্র অনুসারে অক্ষরকে সংকুচিত করে চূড়ান্ত স্ট্রিংয়ের ফলাফল হয় “ŒCdẉa÷¹ṂȤƓ(Ẋ)»(15 বাইট দীর্ঘ), যা দেখা যাচ্ছে, হ্যালো, ওয়ার্ল্ড! আউটপুট দেওয়ার সহজ উপায়ের চেয়ে দীর্ঘ “Hello, World!। এবার আসুন দুটি পদ্ধতিটি একবার দেখুন। এটি সংকীর্ণ স্ট্রিং উত্পাদন করে “Ọƥ⁷Ƭė3⁶»যা 9 বাইটে ওজন করে, এটি পুরানোটির চেয়ে দুর্দান্ত উন্নতি। তবে, হ্যালো, ওয়ার্ল্ড! জেলিতে প্রোগ্রামটি 8 বাইট , তাই কিছু উন্নত করা যায়

  3. এখানে পদ্ধতি 3 আসে, এটি আরও খাটো করে তোলে। যেমনটি প্রত্যাশিত, হ্যালো, ওয়ার্ল্ডের আউটপুট অবশ্যই, “3ḅaė;œ»যা সবচেয়ে সংক্ষিপ্ততম প্রোগ্রাম। তাহলে পদ্ধতি 3 কী করে, সেই পদ্ধতিটি 2 করে না? পদ্ধতি 3টি একাকী স্থানকে নেতৃস্থানীয় স্পেসগুলির সাথে একত্রিত করে, যার জন্য জেলি ডিকম্প্রেসারের একটি পতাকা রয়েছে। উভয় সংকোচকারী এবং ডিকম্প্রেসারের কোডগুলিতে আপনি কোডগুলি দেখতে পাচ্ছেন if flag_space: word = ' ' + wordযে দেখায় যে শীর্ষস্থানীয় স্পেসগুলি ক) সমর্থিত এবং খ) বাইট-সেভিং। সুতরাং, পদ্ধতি দুটি থেকে স্ট্রিং স্প্লিটটারটি এমনভাবে মানিয়ে নেওয়া হয় যাতে খালি স্থানগুলি সরাসরি স্ট্রিংয়ের সাথে সরাসরি যুক্ত হওয়ার পরে শীর্ষস্থানীয় স্ট্রিংগুলি তৈরি করতে পারে। এর অর্থ এটি Hello, World!পার্স করা হয়েছে ["Hello", ",", " World", "!"], যা সঙ্কুচিত হলে কেবল 6 বাইট হয় (8 টি যখন সীমানার সহ)। আমি যোগ করা "এক্সটেনশান" বাদ দিয়ে এটি প্রায় সর্বদা সংক্ষেপণের সবচেয়ে ছোট পদ্ধতি,

এটি প্রোগ্রামটির বেশিরভাগ অংশ, তবে আরও কয়েকটি বিকল্প রয়েছে যা এটি আরও বেশি সংকোচনে সহায়তা করে।

  • জেলি যে জেনি ব্যবহার করে ডেনিসের এসএসএস ডিকম্প্রেসর ব্যবহার করে প্রোগ্রামটি প্রতিটি সংক্ষেপিত সংস্করণটি ঠিক আছে কিনা তা যাচাই করে (সরাসরি উত্সে যান)
  • আপনি প্রথম কমান্ড লাইনের আর্গুমেন্ট তৈরি করে সমস্ত বিভিন্ন সংকুচিত স্ট্রিং দেখতে পাচ্ছেন --debug, যা কেবল সংক্ষিপ্ততর সংক্ষেপিত স্ট্রিংটি প্রদর্শন না করে "এইটি সবচেয়ে সংক্ষিপ্ততম" অনুলিপি সহ সমস্ত 3 দেখায়
  • প্রোগ্রামটি "অ-শব্দ" পরিচালনা করে

অ শব্দ

আমি এই বার্তাটি দেখার পরে লিনের সংক্ষেপকটিতে কাজ শুরু করেছিলাম , এটির জন্য একটি ক্র্যাক পেয়েছিলাম এবং হতাশ হয়ে পড়েছিলাম যে এটি সংকোচনের সবচেয়ে সংক্ষিপ্ততম উপায় আমি খুঁজে পাইনি (এটি রেকর্ডের জন্য 29 বা 32 বাইট)। তবে, আমার উন্নতিগুলি পরীক্ষা করার সময়, আমি খুঁজে পেয়েছি যে শব্দগুলি knownsজেলি এর অভিধানে নেই। অতএব, আমি খুব সম্ভবত সংক্ষিপ্ত জেলি কোডটিতে এই "অ-শব্দ" সংকুচিত করার একটি উপায় খুঁজে বের করেছিলাম।

আমি একটি ফাংশন তৈরি করেছি ( trim) যা স্ট্রিংকে পয়েন্ট হিসাবে বিভক্ত করে যেখানে স্ট্রিংয়ের অন্তত একটি অংশ শব্দ হয়। উদাহরণস্বরূপ, knownsবিভক্ত হবে ["known", "s"]এবং প্রোগ্রামটি একটি অভিধান যোগ ( .dictionary) এর মাধ্যমে শব্দটির দ্বিতীয় শব্দ এবং একটি .stringকলের মাধ্যমে শব্দের দ্বিতীয় অংশ যুক্ত করবে । তবে এটি এখনও দুটি প্রান্তের মামলা ফেলেছে: তারগুলিতে কোনও শব্দ নেই এমন স্ট্রিংগুলি (যেমন ajdl) এবং নন-শব্দের যার শেষে শব্দ রয়েছে, যেমন abctest, যা trimফাংশন দ্বারা বিভক্ত হয় না ।

যেহেতু কোনও স্ট্রিংয়ে শব্দ নেই তার শব্দের সন্ধানের কোনও উপায় নেই, তাই এগুলি পরিচালনা করার সহজতম ও সংক্ষিপ্ততম উপায় হ'ল একটি .stringকলের মাধ্যমে অক্ষরে অক্ষরে যুক্ত করা । সুতরাং ajdlদ্বারা যোগ হবে .string('ajdl')। অ-শব্দ যেখানে স্বীকৃত শব্দের সাথে শেষ হয়, তারা মূলত ট্রিমারটি প্রয়োগ করে তবে বিপরীতভাবে, এবং প্রয়োগ করা হয় .dictionaryএবং .stringঅন্যভাবে ফরওয়ার্ড ট্রিমারে গোল করে।

দেখা যাচ্ছে যে, স্ট্রিংটি ছাঁটাই করা শুরু বা শেষের দিক থেকে অবশ্যই কমপ্রেসারে প্রতিটি অক্ষর যুক্ত করার চেয়ে কম, এর ইনপুট দ্বারা প্রদর্শিত হয় abctest this string, যা একটি ডিবাগ আউটপুট উত্পাদন করে

Original        : abctest this string

Optimised       : “¡J+v(p⁸ụƘ$,»
Seperate spaces : “Ç⁴ṭḍµḄ7oeṂdḷp»
No trimmer      : “¤ɦ?Ɓ¢#fḲOạ⁾¶ɼȥƬ»
All characters  : “µẓþ"Y7_ḣṗḢ))9Þ⁴⁺Ẉ²)ɱ»
Non-compressed  : “abctest this string
Shortest        : “¡J+v(p⁸ụƘ$,»
=====

সর্বোত্তম আউটপুট (যা ট্রিমার ব্যবহার করে) এবং যা একটি হ'ল (জেলি জন্য) 4 বাইটের মধ্যে পৃথক নয়। অবশেষে, এমন কিছু অনুষ্ঠান রয়েছে যেখানে স্ট্রিংটি কোনও সংকোচিত সংস্করণের চেয়ে স্বল্প হয়, যা এখন ফ্যাক্টর করা হয়েছে।

অবশ্যই, এর জন্য প্রচুর কৃতিত্ব লিনের কাছে মূল সংকোচকারী তৈরির জন্য যায়



@ লিরিটোসিস্ট একই যুক্তি দিয়ে আপনি বলতে পারেন যে এই পোস্টটি মুছে ফেলা উচিত। এটি কোনও ক্ষতি করে না, এবং এটি একটি পুরোপুরি বৈধ উত্তর, এটির উত্তোলনের কোনও কারণ নেই, কেবল কারণ এর চেয়ে আরও ভাল উত্তর রয়েছে।
কেয়ার্ড কইনারিংহিংহ

10

আপনি ³⁴⁵⁶⁷⁸⁹সাধারণত কিছু ব্যবহৃত মানগুলি গল্ফ করতে সুপারস্ট্রিপ্টটি তিন থেকে নয় ( ) ব্যবহার করতে পারেন তবে এটি কমান্ড লাইন আর্গুমেন্টের পরিমাণ এবং লিঙ্কগুলির ক্ষেত্রে, লিঙ্কগুলির আর্গুমেন্টের উপর নির্ভর করে।

  • ³ 100 প্রদান করে, এবং কোনও ইনপুট না থাকলে কেবল কাজ করে।
  • 16 প্রদান করে এবং কেবলমাত্র একটি ইনপুট থাকলে সেখানে কাজ করে।
  • 10 প্রদান করে এবং কেবলমাত্র দুটি ইনপুট থাকলেই কাজ করে।
  • সেখানে তিনটি ইনপুট থাকলে একটি স্থান প্রদান করে।
  • সর্বাধিক চারটি ইনপুট থাকলে একটি নতুন লাইন প্রদান করে।

যদি পাঁচটি ইনপুট থাকে তবে, আপনার ভাগ্যের বাইরে।

সম্প্রতি, ভাষার একটি নতুন সংস্করণ ³100 এর মান কমিয়েছে এবং এমন কিছু নতুন পরমাণু প্রবর্তন করেছে যা মানগুলি (লিঙ্কগুলির জন্য) প্রত্যাবর্তন করে their

  • যে লিঙ্কগুলিতে তাদের বাম আর্গুমেন্টটি দেওয়া হয়েছে তা বাদ দিয়ে সর্বত্র একটি খালি তালিকা প্রদান করে।
  • 256 লিঙ্কগুলি বাদ দিয়ে সর্বত্র ফিরে আসে যার কাছে তাদের কাছে সঠিক যুক্তি রয়েছে।

আপনি যদি কোনও লিঙ্কে থাকেন এবং উভয় পক্ষের পক্ষ থেকে যুক্তিগুলি এতে পৌঁছেছে তবে, আপনার ভাগ্য নেই।


1
আসলে, অব্যবহৃত ইনপুটগুলি ডিফল্ট মানগুলিতে পূর্ণ হয়! এমন সুবিধা!
ক্যালকুলেটরফলাইন

9

আপত্তিজনক স্ট্রিং বাগগুলি

ক্রেডিট যেতে আদনান এই সুবিধার সুযোগ গ্রহণ প্রথম এ জন্য স্ট্রিং elasticize জন্য একটি প্রোগ্রাম লিখুন

জেলি একদিন চরিত্র পাটিগণিত পাওয়ার কথা রয়েছে, তবে যতক্ষণ না ঘটে ততক্ষণ আমরা পাইথন সর্বাধিক পাটিগণিত অপারেটরকে ওভারলোড করে এবং জেলি কোনও প্রকারের চেকিং করে না সে বিষয়টি নিয়ে আমরা সুবিধা নিতে পারি।

উদাহরণ স্বরূপ

“abcd”Ḥ

এই মুহূর্তে দরকারী কিছু করার কথা নয়, তবে যেহেতু (আনহালভ) হিসাবে এটি বাস্তবায়ন করা হয়েছে

lambda z: z * 2

এবং গাণিতিক পরমাণুগুলি গভীরতার 0 তে ভেক্টরাইজ করে (যেমন, তারা সংখ্যায় বা অক্ষরে কাজ করে), উপরের জেলি কোডের ফলন

['aa', 'bb', 'cc', 'dd']

সতর্কতা অবলম্বন করুন যে এটি প্রকৃত পাইথন স্ট্রিংগুলি তৈরি করে (এক ধরণের জেলির কথা নয়), সুতরাং এটি সমস্ত পরিস্থিতিতে ব্যবহারযোগ্য হবে না।

একইভাবে, +/একই সতর্কতা সহ স্ট্রিংগুলিকে সংযুক্ত করতে কার্যকর হতে পারে।


সুতরাং যদি ভবিষ্যতে যখন পাটিগণিত গাণিতিক যুক্ত হয়, আপনি কি সেই অণুগুলিতে স্ট্রিং এবং অন্যান্য অ-সংখ্যাযুক্ত প্রকারের জন্য টাইপ ওভারলোডগুলি যুক্ত করবেন?
মাইল মাইল

1
বেশি অথবা কম. আমি এমন একটি সাংখ্যিক প্রকার তৈরির পরিকল্পনা করছি যা অভ্যন্তরীণভাবে একটি সংখ্যা তবে একটি চরিত্রের পতাকা রয়েছে। এই পতাকাটি কেবল মুদ্রণকেই প্রভাবিত করবে; অক্ষরগুলি সর্বত্র পূর্ণসংখ্যার পরিবর্তে ব্যবহার করা যেতে পারে।
ডেনিস

1
Sস্ট্রিংগুলি যুক্ত করতে কখনই কার্যকর হতে পারে না, এটি 0তাদের যুক্ত করার চেষ্টা করবে ।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার রাইট, পেস্কি বেস কেস +/যদিও কাজ করে।
ডেনিস

@ ডেনিস হ্যাঁ, আমি এখন পর্যন্ত অনেকটা চ্যালেঞ্জ জিতেছি +/
এরিক দি আউটগলফার

8

অনুকূল স্ট্রিং সংক্ষেপক

সম্প্রতি আমি জিজ্ঞাসা এরিক Outgolfer যোগ করার জন্য অপ্টিমাইজ করা স্ট্রিং সংকোচকারী থেকে JHT রেফারেন্স পৃষ্ঠা , কিন্তু তারা বলেন যে

দুঃখিত, তবে সেই সংকোচকারী পুরোপুরি বাস্তবায়িত
হবে বলে মনে হয় না , এটি কাজটি করার সময় “ugtestslug”সবচেয়ে কম সময়ের পক্ষে সম্ভব বলে জানায়ugtestslug“#ṀȮụḄPƇ»

সুতরাং আমি অনুকূল স্ট্রিং সংক্ষেপক বাস্তবায়নের সিদ্ধান্ত নিই।

সহজ পদ্ধতির, তবে সবচেয়ে ছোট সম্ভাব্য মান খুঁজে পাওয়ার গ্যারান্টি (এবং তাই বাইট গণনা)

থেকে ইনপুট নাও stdin, আউটপুট stdout। মূল সংক্ষেপক যেমন বা (আক্ষরিক নিউলাইন চরিত্র) নিউলাইন হিসাবে প্রবেশ করা যেতে পারে।

অনেকগুলি বিরামচিহ্ন (উদাহরণস্বরূপ, ইনপুট ¶-----¶) দিয়ে এটিকে চালিত করার চেষ্টা করলে সঙ্কুচিত স্ট্রিং আউটপুট হবে।

অবশ্যই, এর জন্য প্রচুর কৃতিত্ব লিনের কাছে মূল সংকোচকারী তৈরির জন্য যায় ।


7

এটি জেলি উইকি টিউটোরিয়াল হয়ে ওঠার একটি অংশ ।

ট্যাসিট প্রোগ্রামিং

জেলি একটি স্বচ্ছ প্রোগ্রামিং ভাষা। এর অর্থ হ'ল জড়িত যুক্তিগুলি সম্পর্কে স্পষ্টভাবে কথা না বলেই আপনি বিদ্যমান লিঙ্কগুলি একটি শৃঙ্খলে রচনা করে লিঙ্কগুলি (ফাংশন) সংজ্ঞায়িত করেন । এই রচনাটির মাধ্যমে আর্গুমেন্টগুলি "প্রবাহ" কীভাবে লিঙ্কগুলি সাজানো হয়েছে সেই ধরণের মাধ্যমে সংজ্ঞায়িত করা হয়েছে soon এর উদাহরণ শীঘ্রই দেওয়া হবে, তবে প্রথমে আমাদের কয়েকটি ধারণার প্রবর্তন করতে হবে।

Arity একটি লিঙ্ক খুব গুরুত্বপূর্ণ ধারণা। সকল পরমাণুর - অন্তর্নির্মিত-ইন, মত +এবং ½- arities নির্ধারণ করি। লিঙ্কগুলি তিনটি বিভাগে বাছাই করা হয়, তাদের শালীনতার উপর নির্ভর করে:

  • নীলাদ কোনও আর্গুমেন্ট নেন না ( আধ্যাত্মিক 0); কিছু আই / ও এবং রাষ্ট্রীয় কমান্ড ব্যতীত এগুলি বেশিরভাগ স্থির মানকে উপস্থাপন করে। উদাহরণস্বরূপ, আক্ষরিক 3একটি নিলাদ।

  • মনাদের একটি যুক্তি লাগে (আধ্যাত্মিক 1) 1 (এখানে কার্যকরী প্রোগ্রামিং মনাদগুলির সাথে কোনও সংযোগ নেই )) উদাহরণস্বরূপ, ½(বর্গমূল) একটি মোনাদ।

  • ডায়াডস দুটি আর্গুমেন্ট গ্রহণ করে ( আর্টি 2): একটি বাম এবং ডান যুক্তি argument উদাহরণস্বরূপ, +একটি dyad হয়।

(বিশেষণ ব্যবহার করে, আমরা বলি যে একটি লিঙ্ক niladic , কীটাণুজাতীয় , অথবা dyadic ।)

সুতরাং কোন প্রোগ্রাম লেখার সময় আমরা যে লিঙ্কগুলি সংজ্ঞায়িত করেছি তার আধ্যাত্মিকতা কী? ডিফল্টরূপে, এগুলি বৈচিত্র্যময় - এটি কত আর্গুমেন্ট ব্যবহার করবেন তা নির্দিষ্ট করা কলারের উপর নির্ভর করে এবং মূল লিঙ্কের ক্ষেত্রে এটি প্রোগ্রামটি কতটি আর্গুমেন্ট পাস হয়েছে তার উপর নির্ভর করে।

উদাহরণস্বরূপ, (যোগ) এবং (বর্গমূল) এর একটি শৃঙ্খল । যেহেতু এই শৃঙ্খলের উপাদানগুলির স্ব স্ব বৈশিষ্ট্যগুলি 2 এবং 1, আমরা এটিকে একটি 2,1-চেইন বলি । দোভাষী এর শৃঙ্খলার ভিত্তিতে শৃঙ্খলা ভেঙে ফেলার নির্দিষ্ট নিয়ম রয়েছে: এই বিধিগুলি এই নতুন লিঙ্কের গণনাগুলিকে একটি ইনপুট দিলে নির্দেশ করে । (আপনি "... আরও এর বর্গমূল হিসাবে পড়তে পারেন ।" )+½nn + sqrt(n)

জেলি প্রোগ্রামিং, তারপর, মূলত এই নিয়ম ভাল শিক্ষা, এবং চতুর চেইন যে কাজ পেতে, রচনা শিল্প অঘোষিতভাবে


ট্রায়াডস আছে?
কনর ও'ব্রায়েন

নাঃ! ডানিস কীভাবে প্রয়োগ করবেন, তা দেখার জন্য আমি কৌতূহলী, বলছি স্ট্রিং প্রতিস্থাপন, যা কিছুটা সহজাতভাবে ট্রায়ডিক ( replace(str, old, new))।
লিন

আমি জেলি জানি না, কিন্তু আমি জানি জে একটি বিট হয়তো এটা হতে পারে না, বলে, string (operator) (list)যেখানে (list)একটি বাইনারি তালিকা old, new। জেলির একটি বিল্ট-ইন pairঅপারেটর থাকার অর্থটি হবে । এই স্কিমের অধীনে, যদিও এটি অপারেটরের জন্য দুটি বাইট হবে।
কনর ও'ব্রায়েন

5
অপেক্ষা করুন ... ½বর্গমূল? কেন, না ½... অর্ধেক? বর্গমূলের জন্য কেন নয় ? :(
সাইয়েস

@ কিউস কারণ Hইতিমধ্যে অর্ধেক, স্পষ্টত: পি
ভেন

6

এটি জেলি উইকি টিউটোরিয়াল হয়ে ওঠার একটি অংশ ।

প্রোগ্রাম কাঠামো

জেলি প্রোগ্রামের প্রতিটি লাইনই একটি লিঙ্ক সংজ্ঞা । লিঙ্কগুলি মূলত ফাংশন। নীচের লাইনটি " main" প্রতিনিধিত্ব করে : এটি সেই লিঙ্ক যা কমান্ড লাইনে পাস হওয়া আর্গুমেন্টগুলি ব্যবহার করে মূল্যায়ন হয়।

তারপরে সমস্ত লিঙ্কগুলি তবে শেষটি ফাংশন সংজ্ঞা: আপনি অভিনেতা ব্যবহার করে সেগুলি উল্লেখ করতে পারেন । উদাহরণস্বরূপ, çহয় "এই এক উপরে লিঙ্ক, একটি বাইনারি অপারেটর (যুগল) হিসাবে" । এই উদাহরণস্বরূপ প্রোগ্রামটি বিবেচনা করুন , যা এর তর্কগুলির যোগফলের বর্গাকারকে গণনা করে:

+
ç²

এটি সিউডোকোডের মতো ধরণের:

define f:
    the built-in link +
define main:
    apply the dyad f
    square the result

6

এটি জেলি উইকি টিউটোরিয়াল হয়ে ওঠার একটি অংশ ।

মাল্টি-চেইন লিঙ্কগুলি

মনে আছে আমি কখন লিখলাম যে আপনি অন্য লিঙ্কগুলির একটি শৃঙ্খলা তৈরি করে একটি লিঙ্ক সংজ্ঞায়িত করেছেন? আমি পুরো সত্যটি বলছিলাম না: বাস্তবে, এটি একটি দ্বি-স্তর প্রক্রিয়া। একটি লিঙ্কটি চেইনের একটি শৃঙ্খল , এবং ডিফল্টরূপে বাইরের চেইনটিতে কেবল ইউনিটের দৈর্ঘ্য থাকে।

এই প্রোগ্রামটি বিবেচনা করুন:

C+H

এটি পরিপূর্ণ অর্ধেক । এটি একটি ইনপুট মান নেয় nএবং গণনা করে (1-n)+(n/2)। খুব উত্তেজনাপূর্ণ নয়, আমি জানি। তবে কাঠামোটি আসলে এইরকম:

                                                    কাঠামো 1

আমরা যে লিঙ্কটি লিখেছি তা হ'ল প্রকৃতপক্ষে একটি শৃঙ্খলযুক্ত একটি চেইন।

মনে করুন (1-n)+(1-n)(n/2)পরিবর্তে আমরা গণনা করতে চাই । ডায়াডিক চেইন কাজ করবে: শৃঙ্খলাবদ্ধ নিয়ম অনুসারে , এটি গণনা করে λ+(λ×ρ), যা আমাদের প্রয়োজনের মতো অনেকটা দেখাচ্ছে। যাইহোক, কেবল প্রতিস্থাপন +দ্বারা আমাদের প্রোগ্রাম না হবে: C+×Hএকটি 1,2,2,1-শৃঙ্খল হয় - সম্পূরক, তবে (যুক্তি) সংখ্যাবৃদ্ধি অর্ধেক যোগ তারপর, - কম্পিউটিং ((1-n)+n)×(n/2)

আমরা চিকিত্সার জন্য জেলি চান একটি ইউনিট হিসাবে এবং উপ-চেইন একটি 1,2,1-শৃঙ্খল করা C, এবং Hমাল্টি-চেইন লিঙ্কগুলি আমাদের এটি করতে দিন! এগুলি নির্মাণের জন্য, আমরা চেইন বিভাজকগুলি ব্যবহার করি øµð: উপরের চিত্রটিতে তারা যথাক্রমে 0, 1 এবং 2 এর আরটিটির একটি নতুন নীল আয়তক্ষেত্র প্রবর্তন করবে। আমাদের ক্ষেত্রে, আমরা লেখার মাধ্যমে শৃঙ্খলাগুলি যেভাবে চাই গ্রুপ করতে পারি Cð+×µH:

                            এখানে চিত্র বর্ণনা লিখুন

এই জিনিসগুলির আরও বাসা বাঁধার কোনও উপায় নেই। পরিবর্তে, আপনাকে একাধিক লিঙ্কগুলি সংজ্ঞায়িত করতে হবে।


কীভাবে কৌতূহল ছাড়াই আপনি এই চার্টগুলি তৈরি করলেন?
কনর ও'ব্রায়ান

4
আমি তাদের হাতে পেইন্ট.নেট এ আঁকলাম :)
লিন

4
কি দারুন! চিত্তাকর্ষক! এটি এমন কোনও সরঞ্জামের মতো শক্ত জেলি প্রোগ্রামগুলির জন্য দুর্দান্ত হবে। (আকিন থেকে হেক্সাগোনি কালোরার বা যাই হোক না কেন)
কনর

5

যদি TMTOWTDI, আপনার চেইনের সাথে খাপ খায় এমন একটি চয়ন করুন।

স্বচ্ছ ভাষার একটি সুবিধা হ'ল আপনি সাধারণত পরিবর্তনশীল উল্লেখগুলি ব্যবহার না করেই পালিয়ে যেতে পারেন। তবে এটি কেবল তখনই কাজ করে যদি আপনার চেইনে লিঙ্কগুলির সঠিক বৈশিষ্ট্য থাকে।

উদাহরণস্বরূপ, 2D অ্যারেতে সমস্ত অ্যারের যোগফলের সরলতম উপায়

S€

যা অ্যারের সমস্ত উপাদানগুলির উপরে যোগফলের অঙ্ক করে।

এখন বলুন আপনার কাছে একটি মোনাডিক চেইন রয়েছে যা পরমাণু নিয়ে গঠিত

*

যা মানচিত্র প্রতিটি এক্স করার জন্য একটি 2D অ্যারের এক্স এক্স । উদাহরণস্বরূপ, এ = [[1, 2], [3, 1], [2, 3]] এর জন্য , চেইন কল করলে ফল পাওয়া যাবে [[[1, 4], [27, 1], [4, 27]]]

এখন, আমরা প্রতিটি জুটির যোগফল নিতে চাই। দুর্ভাগ্যবশত,

*S€

যেহেতু কাজ না *একটি মত আচরণ করে না হুক আর (ব্যবহার একটি নিজেই অধিকার আর্গুমেন্ট হিসাবে), কিন্তু হিসেবে কাঁটাচামচ , যার মানে হল S€প্রয়োগ পরার একটি প্রথম, এবং ফলাফলের ডান যুক্তি *

এটি ঠিক করা যথেষ্ট সহজ:

*¹S€
*⁸S€

উভয় উত্পাদন কাঙ্ক্ষিত ফলাফল: একটি হল কাঁটাচামচ যেখানে ¹পরিচয় ফাংশন, এবং *⁸একটি হল উপরে , যেখানে শৃঙ্খল বাঁ যুক্তি (একটি রেফারেন্স একটি )।

তবে, একটি বাইট সংরক্ষণ করার উপায় আছে! উপরে ḅ1(ইউনারী থেকে ধর্মান্তরিত পূর্ণসংখ্যা করার জন্য) এছাড়াও প্রতিটি অ্যারের সমষ্টি নির্ণয় একজন একজন , কিন্তু অসদৃশ S€, একটি হল dyadic লিঙ্ক।

শিকলটি

*ḅ1

প্রত্যাবর্তন [৫, ২৮, ৩১] (পছন্দসই); যেহেতু ডায়াডিক, *কাঁটা বদলে হুকস



শীর্ষস্থানীয় জে পরিভাষা। জেলিতে, এটি একধরণের চেইন যা সরাসরি শেষ রিটার্ন মানের উপর পরিচালিত হয়, সুতরাং এটি শৃঙ্খলার পূর্ববর্তী লিঙ্কের শীর্ষে নির্বাহ করা হয়
ডেনিস

আর কখনও এই ভাষাটি শেখার চেষ্টা না করার আরেকটি কারণ ...: পি
ক্যালকুলেটরফলাইন

1
আমি জে / এপিএল সম্পর্কে একইভাবে অনুভব করেছি তবে কিছুক্ষণ পরে এটি অন্য কোনও ভাষার মতোই স্বাভাবিক অনুভব করে।
ডেনিস

4

পূর্ণসংখ্যা সংকোচনের

ইংরেজিতে পাঠ্য তৈরি করার সময় স্ট্রিং সংক্ষেপণ দরকারী, তবে আপনার যদি অন্য ধরণের ডেটা সংকোচনের প্রয়োজন হয় তবে এটি মোটামুটি অকার্যকর। যেমনটি আপনি বেশিরভাগ সময় আপনার প্রোগ্রামে একটি বৃহত স্থির ধ্রুবক সংরক্ষণ করতে চান, এটি একটি পূর্ণসংখ্যা হিসাবে সংরক্ষণ করা ভাল best

এখন যেহেতু জেলিটির নিজস্ব কোড পৃষ্ঠাটি একটি ধ্রুবক হিসাবে রয়েছে, পূর্ণসংখ্যার জন্য সংক্ষেপণ অ্যালগরিদম খুব সহজেই জেলিতে প্রকাশ করা হয়েছে:

ḃ250ịØJ”“;;”’ṄV

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

(উপরের প্রোগ্রামটিতে পূর্ণসংখ্যার সংকোচনের মানটি দেখানোর জন্য একটি চেকও রয়েছে))

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


4

দরকারী পূর্ণসংখ্যার ম্যাট্রিকগুলি তৈরি করতে বাহ্যিক পণ্য ব্যবহার করুন

এখানে একটি সারকথা আমি সামান্য সুন্দর এইচটিএমএল টেবিল বিন্যাস সহ এই পোস্টের নির্মিত হয়।

বাইরের পণ্যটি দ্রুত þডায়াডের সাথে সংযুক্ত থাকতে পারে এবং ডায়াডকে তার বাম এবং ডান যুক্তিগুলির প্রতিটি জোড় উপাদানগুলিতে কাজ করে। এটা তোলে জন্য সাধারণভাবে সংক্ষেপে হয় €Ð€। উদাহরণস্বরূপ যদি আমাদের কাছে কোড থাকে তবে আমরা [1,2]+€Ð€[0,10]এটি সংক্ষিপ্ত করতে পারতাম [1,2]+þ[0,10] এবং তারা উভয়ই ফলন করত [[1,2],[11,12]]। আমি বাইরের পণ্য ডায়াড þহিসাবে প্রয়োগ (যেমন ) সহ একটি ডায়াড উল্লেখ করব ।

যখন কোনও পূর্ণসংখ্যার বাইরের পণ্য ডায়াডের অন্যতম আর্গুমেন্ট হয়, জেলি প্রথমে এই সংখ্যাটির ব্যাপ্তি নেয় তারপর ফলাফলটিকে যুক্তি হিসাবে ব্যবহার করে uses এটি জানতে পেরে উপরের উদাহরণটি আরও ছোট করা যেতে পারে 2+þ[0,10]। এটি বাইরের পণ্য ডায়াডের বাম এবং ডান উভয় যুক্তির জন্যই সত্য।

কোনও বাহ্যিক পণ্য ডায়াডগুলি যখন পূর্ণসংখ্যার উপর একাত্মভাবে অভিনয় করে নির্দিষ্ট পূর্ণসংখ্যার ম্যাট্রিক্স দেয় যা গল্ফিংয়ে (বিশেষত এএসসিআইআই আর্ট চ্যালেঞ্জ) কার্যকর হতে পারে তবে অন্য নির্মাণে অনেকগুলি বাইট নিতে পারে। উদাহরণস্বরূপ যখন পূর্ণসংখ্যার সাথে প্রয়োগ করা হয় তখন nএকটি n×nপরিচয় ম্যাট্রিক্স পাওয়া যায়। অনলাইন চেষ্টা করুন !

নীচে ডায়াডগুলির একটি টেবিল এবং বাইরের পণ্য ডায়াডগুলিতে পরিণত হওয়ার পরে এবং পূর্ণসংখ্যার উপর একরকমভাবে অভিনয় করার পরে তারা যে ধরণের ম্যাট্রিকের ফল দেয় is একই সারিতে তালিকাভুক্ত ডায়াডস একই ম্যাট্রিক্স দেবে। সেখানে dyads আমি টেবিল মধ্যে অন্তর্ভুক্ত করা আছে &, |, %, w, এবং যে ম্যাট্রিক্স পূর্ণসংখ্যা উত্পাদন কিন্তু তাদের নিদর্শন সহজ হিসাবে নয় এবং সম্ভবত তার চেয়ে কম পরিস্থিতিতে দরকারী হবে। অনলাইন চেষ্টা করুন !

+ + ------------------------------------------------- ---- + +
| ডায়াড | ফলাফল ম্যাট্রিক্স | উদাহরণ |
+ + ------------------------------------------------- ---- + +
| = ⁼ | | 1 0 0 |
| ċ | পরিচয় ম্যাট্রিক্স | 0 1 0 |
| | | 0 0 1 |
+ + ------------------------------------------------- ---- + +
| | তির্যকের উপরে উপাদানগুলি 1, | 0 1 1 |
| <| অন্যান্য সমস্ত উপাদান 0 | 0 0 1 |
| | | 0 0 0 |
+ + ------------------------------------------------- ---- + +
| | তির্যকের নীচে উপাদানগুলি 1, | 0 0 0 |
| > | অন্যান্য সমস্ত উপাদান 0 | 1 0 0 |
| | | 1 1 0 |
+ + ------------------------------------------------- ---- + +
| | তির্যক উপাদান 0, | 0 1 1 |
| n ⁻ | বন্ধ তির্যক উপাদান 1 | 1 0 1 |
| | | 1 1 0 |
+ + ------------------------------------------------- ---- + +
| a ȧ | | 1 1 1 |
| । ị | প্রতিটি উপাদানের সারি সূচক | 2 2 2 |
| | | 3 3 3 |
+ + ------------------------------------------------- ---- + +
| ও ḷ | | 1 2 3 |
| ȯ | প্রতিটি উপাদানের কলাম সূচক | 1 2 3 |
| | | 1 2 3 |
+ + ------------------------------------------------- ---- + +
| | প্রধান তির্যকটি 0, আপার | 0 1 2 |
| _ | ত্রিভুজগুলি 1, 2 ..., কম | -1 0 1 |
| | ত্রিভুজগুলি -1, -2 ... | -2 -1 0 |
+ + ------------------------------------------------- ---- + +
| | প্রধান তির্যকটি 0, নিম্ন | 0 -1 -2 |
| _ @ | ত্রিভুজগুলি 1, 2 ..., উপরের | 1 0 -1 |
| | ত্রিভুজগুলি -1, -2 ... | 2 1 0 |
+ + ------------------------------------------------- ---- + +
| | প্রধান তির্যকটি 0, আপার | 0 1 2 |
| ạ | এবং নিম্ন তির্যকগুলি 1, | 1 0 1 |
| | 2, 3 ... | 2 1 0 |
+ + ------------------------------------------------- ---- + +
| | | 2 3 4 |
| + | সারি সূচক প্লাস কলাম সূচক | 3 4 5 |
| | | 4 5 6 |
+ + ------------------------------------------------- ---- + +
| | সর্বনিম্ন সারি | 1 1 1 |
| «| এবং কলাম সূচক | 1 2 2 |
| | | 1 2 3 |
+ + ------------------------------------------------- ---- + +
| | সারি সর্বাধিক | 1 2 3 |
| »| এবং কলাম সূচক | 2 2 3 |
| | | 3 3 3 |
+ + ------------------------------------------------- ---- + +

2

কমান্ড এবং আক্ষরিক তালিকা

আপনি অনেক ব্যবহার করার প্রচেষ্টা যদি অ vectorizing তালিকা কমান্ড একটি উপর আক্ষরিক n বা লিটারেল তালিকা z , তালিকা কমান্ড প্রথম কিছু বাছাই একটি তালিকা রূপান্তর হবে এবং তারপর যে তালিকায় কমান্ড চালায়।

এই কমান্ড প্রদর্শিত ব্যবহারের কল iterableফাংশন jelly.py

def iterable(argument, make_copy = False, make_digits = False, make_range = False):
    the_type = type(argument)
    if the_type == list:
        return copy.deepcopy(argument) if make_copy else argument
    if the_type != str and make_digits:
        return to_base(argument, 10)
    if the_type != str and make_range:
        return list(range(1, int(argument) + 1))
    return [argument]

এই তালিকা আদেশগুলি কী করবে তার কিছু অসম্পূর্ণ তালিকা রয়েছে।

একটি তালিকা মোড়ানো

iterableএকটি তালিকায় যুক্তি মোড়ানো থেকে সহজ ফিরুন, এবং এটি ফাংশন দ্বারা প্রক্রিয়াভুক্ত করা হবে। যুক্তিটি ইতিমধ্যে একটি তালিকা না থাকলে, একটি স্ট্রিং, এবং iterableযুক্তিগুলি অন্য পদ্ধতির জন্য কল না করলে এটি ঘটে ।

-------------------------------------------------------------------------------
| Command | Description     | Process                       | Effect          |
-------------------------------------------------------------------------------
| F       | Flattens a list | 4953F -> [4953]F -> [4953]    | Same as W       |
-------------------------------------------------------------------------------
| G       | Format a list   | 4953G -> [4953]G -> [4953]    | Same as W       |
|         | as a grid       |                               |                 |
-------------------------------------------------------------------------------
| I       | Increments      | 4953I -> [4953]I -> <nothing> | Empty list      |
-------------------------------------------------------------------------------
| S       | Sums a list     | 4953S -> [4953]S -> 4953      | Same as ¹       |
-------------------------------------------------------------------------------
| Ṭ       | Boolean array,  | 4Ṭ -> [4]Ṭ -> [0, 0, 0, 1]    | n-1 zeroes,     |
|         | 1s at indices   |                               | 1 at end        |
-------------------------------------------------------------------------------
| Ụ       | Sort indices by | 4Ụ -> [4]Ụ -> [1]             | Yields [1]      |
|         | by their values |                               |                 |
-------------------------------------------------------------------------------
| Ė       | Enumerate list  | 4Ė -> [4]Ė -> [[1, 4]]        | Yields [[1, n]] |
-------------------------------------------------------------------------------
| Ġ       | Group indices   | 4Ġ -> [4]Ġ -> [[1]]           | Yields [[1]]    |
|         | by values       |                               |                 |
-------------------------------------------------------------------------------
| Œr      | Run-length      | 4Œr -> [4]Œr -> [[4, 1]]      | Yields [[n, 1]] |
|         | encode a list   |                               |                 |
-------------------------------------------------------------------------------

বেস 10 এ রূপান্তর করুন

এখানে ফাংশনগুলি iterableতার সংখ্যার তালিকায় একটি সংখ্যায় রূপান্তর করার জন্য কল করে Dএবং তারপরে সেই অঙ্কগুলিতে চালিত হয়।

-------------------------------------------------------------------------
| Command | Description     | Process                      | Effect     |
-------------------------------------------------------------------------
| Q       | Unique elements | 299Q -> [2, 9, 9]Q -> [2, 9] | Unique     |
|         | ordered by      |                              | digits     |
|         | appearance      |                              | of n       |
-------------------------------------------------------------------------
| Ṛ       | Non-vectorized  | 4953Ṣ -> [4, 9, 5, 3]Ṛ       | Reverses D |
|         | reverse         | -> [3, 5, 4, 9]              |            |
-------------------------------------------------------------------------
| Ṣ       | Sort a list     | 4953Ṣ -> [4, 9, 5, 3]Ṣ       | Sorts D    |
|         |                 | -> [3, 4, 5, 9]              |            |
-------------------------------------------------------------------------

সীমার সাথে তালিকায় রূপান্তর করুন

এখানে ফাংশনগুলি একটি সংখ্যাকে ব্যাপ্তিতে রূপান্তর করে R = [1 ... n]এবং তারপরে সেই ব্যাপ্তিতে চলে।

-----------------------------------------------------------------------------------------
| Command | Description       | Process                             | Effect            |
-----------------------------------------------------------------------------------------
| X       | Random element    | 4R -> [1 ... 4]X -> 2               | Random element    |
|         |                   |                                     |  of R             |
|         |                   |                                     |                   |
-----------------------------------------------------------------------------------------
| Ḋ       | Dequeue from list | 4R -> [1 ... 4]Ḋ -> [2, 3, 4]       | Range [2 ... n]   |
-----------------------------------------------------------------------------------------
| Ṗ       | Pop from list     | 4Ṗ -> [1 ... 4]Ṗ -> [1, 2, 3]       | Range [1 ... n-1] |
-----------------------------------------------------------------------------------------
| Ẇ       | Sublists of list  | 4Ẇ -> [1 ... 4]Ẇ                    | All sublists of R |
|         |                   | -> [[1], [2], [3], [4], [1, 2],     |                   |
|         |                   |     [2, 3], [3, 4], [1, 2, 3],      |                   |
|         |                   |     [2, 3, 4], [1, 2, 3, 4]]        |                   |
-----------------------------------------------------------------------------------------
| Ẋ       | Shuffle list      | 4Ẋ -> [1 ... 4]Ẋ -> [2, 1, 3, 4]    | Shuffles R        |
-----------------------------------------------------------------------------------------
| Œ!      | All permutations  | 3Œ! -> [1, 2, 3]Œ!                  | All permutations  |
|         | of a list         | -> [[1, 2, 3], [1, 3, 2],           | of R              |
|         |                   |     [2, 1, 3], [2, 3, 1],           |                   |
|         |                   |     [3, 1, 2], [3, 2, 1]]           |                   |
-----------------------------------------------------------------------------------------
| ŒḄ      | Non-vectorized    | 4ŒḄ -> [1 ... 4]ŒḄ                  | Bounces R         |
|         | bounce,           | -> [1, 2, 3, 4, 3, 2, 1]            |                   |
|         | z[:-1] + z[::-1]  |                                     |                   |
-----------------------------------------------------------------------------------------
| Œc      | Unordered pairs   | 4Œc -> [1 ... 4]Œc                  | Unordered pairs   |
|         | of a list         | -> [[1, 2], [1, 3], [1, 4], [2, 3], | of R              |
|         |                   |     [2, 4], [3, 4]]                 |                   |
-----------------------------------------------------------------------------------------
| Œċ      | Unordered pairs   | 4Œċ -> [1 ... 4]Œċ                  | Unordered pairs   |
|         | with replacement  | -> [[1, 1], [1, 2], [1, 3], [1, 4], | with replacement  |
|         | of a list         |     [2, 2], [2, 3], [2, 4], [3, 3], | of R              |
|         |                   |     [3, 4], [4, 4]]                 |                   |
-----------------------------------------------------------------------------------------
| ŒP      | Powerset of       | 3ŒP -> [1 ... 3]                    | Powerset of R     |
|         | a list            | -> ['', [1], [2], [3], [1, 2],      |                   |
|         |                   |     [1, 3], [2, 3], [1, 2, 3]]      |                   |
-----------------------------------------------------------------------------------------
| Œp      | Cartesian         | 4,2Œp -> [[1 ... 4], [1 ... 2]]Œp   | Cartesian product |
|         | product of z's    | -> [[1, 1], [1, 2], [2, 1], [2, 2], | of [1 ... z[i]]   |
|         | items             |     [3, 1], [3, 2], [4, 1], [4, 2]] | for i in z        |
-----------------------------------------------------------------------------------------

এটি সম্পূর্ণ সঠিক নয়। হ্যাঁ, শুরু dequeue এবং কার্টিজিয়ান পণ্য এটি করেন, কিন্তু সমষ্টি পরিবর্তে একটি সীমার তৈরি, এর গোপন সাজানোর এবং বিপরীত রূপান্তর বেস 10 প্রথম।
ডেনিস

2

যখন ঠিক দুটি ইনপুট থাকে তখন কখনও কখনও স্ট্যান্ডার্ড ইনপুট থেকে পড়া সার্থক

জেলি কমান্ড-লাইন আর্গুমেন্ট থেকে ইনপুট নেওয়ার জন্য অনুকূলিত হয়েছে। তবে এটি ডায়াডের চেয়ে মনড লেখার জন্যও অনুকূলিত হয়েছে; ডায়াডসের সাহায্যে প্রতিটি বিল্টিনের পক্ষে অনেকগুলি সম্ভাব্য অর্থ রয়েছে যেগুলি প্রায়শই আপনাকে ছত্রভঙ্গ করতে অক্ষরগুলি ব্যয় করতে হয়, যেখানে ম্যানডের সাথে সাধারণত একই কথা বলার অনেকগুলি উপায় রয়েছে।

যেমন, আপনি যদি দুটি ইনপুট এক শুধুমাত্র একবার ব্যবহার করুন, এবং সমস্যা যেমন যে এটা সহজে পরোক্ষভাবে থেকে পড়া যাবে না (করতে পারেন প্রয়োজন অর্থাত আপনি স্পষ্ট, বা অন্য একটি চরিত্র ব্যয় }, @অথবা মত) , Ɠএটি কমান্ড লাইনে না রেখে স্ট্যান্ডার্ড ইনপুট থেকে পড়ার বিষয়টি বিবেচনা করুন ; এটি আপনাকে যথাযথভাবে আপনার প্লেসমেন্টের মাধ্যমে যেখানে আপনার প্রয়োজন হবে ঠিক সেখানে ইনপুটটি স্থাপন করতে দেয় Ɠ, তবে এটি নিশ্চিত করে যে প্রতিটি অন্যান্য অন্তর্নির্মিত ইনপুট আপনার অন্যান্য ইনপুট থেকে নেওয়া হবে। এটি একটি বাইট ব্যয় করে এবং একটি বাইট সংরক্ষণ করে এবং সমস্যার উপর নির্ভর করে কোডটি পুনরায় অর্ডার করার জন্য আরও সুযোগ দিয়ে একটি দ্বিতীয় বাইট ভালভাবে সঞ্চয় করতে পারে।


2

ব্যবহার করে একটি আর্গুমেন্টের বৈশিষ্ট্য যাচাই করার জন্য বেশ কিছু অবিশ্বাস্য উপায় রয়েছে Ƒ। নীচে কয়েকটি। আমি এই দ্রুত ব্যবহার প্রচুর বাদ (যেমন , ŒuƑ, ) কারণ তারা ইতিমধ্যেই আছে তাদের আচরণ অর্জনের অধিকাংশ সহজবোধ্য পদ্ধতি।

OƑ  Is number?
ỌƑ  Is character? (errors on negative numeric input)
ḂƑ  Between 0 and 2? 0<=x<2 (python). <2aAƑƊ or of course ⁼Ḃ$ in Jelly.
ḞƑ  Is integer?
UƑ  Like `ŒḂ`, but checks if all sublists of depth 1 are palindromes.
ṠƑ  Is one of -1, 0, 1? (e-r1¤$)

আরও আকর্ষণীয় কেস যোগ করতে নির্দ্বিধায় এটিকে সম্পাদনা করুন।


2

আপনি সহজেই জেলি ভাষাতে কোড তৈরি করতে ডিজাইন করা কোনও অনলাইন সম্পাদক জেলি বলগুলি চেষ্টা করতে পারেন ।

বৈশিষ্ট্যগুলির মধ্যে রয়েছে:

  • টাইপ অনুসারে সংগঠিত সমস্ত পরমাণু এবং সিনট্যাক্স অক্ষরের সাথে প্যালেট কমান্ড করুন
  • কোডে আক্ষরিক এবং 2-বাইট পরমাণুগুলি স্বীকৃত অনলাইন পার্সার
  • জাভাস্ক্রিপ্টে ওয়েবপৃষ্ঠায় আপনার জেলি কোডটি চালানোর জন্য ব্রাউজারের জেলি দোভাষী l
  • টিআইও বা অন্য জেলি বলস সেশনে কোড স্থানান্তর করার জন্য সরাসরি লিঙ্কগুলি
  • স্বয়ংক্রিয় ইঙ্গিত
  • মোবাইল ডিভাইসের জন্য অনুকূলিত

এটি ব্যবহার করে দেখুন: https://jellyballs.github.io

জেলি বল

  • প্রতিটি কার্যকর করা পদক্ষেপের যুক্তি এবং ফলাফল দেখিয়ে বিশদ ট্রেস রিপোর্ট

জেলি বল

  • কোড প্রতিবেদন প্রতিটি পদক্ষেপের বর্ণনা দেখায়

জেলি বল

  • জেলি উদাহরণ সহ রেসিপি পাতা

জেলি বল

  • 256 জেলি অক্ষরের ইন্টারেক্টিভ কোড পৃষ্ঠা

জেলি বল



3
আমি মনে করি কোনও আইডিইয়ের একটি লিঙ্ক যা আপনাকে কাস্টম কীবোর্ড বিন্যাস ছাড়াই জেলি লিখতে দেয় এটি একটি দরকারী টিপ। অনেক জেলি শুরুর দিকে এটি লড়াই করেছেন।
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.