لعبة الجولف البرمجية
تُعدّ "كود غولف" نوعًا من مسابقات برمجة الحاسوب الترفيهية ، حيث يسعى المشاركون إلى كتابة أقصر كود برمجي ممكن لحل مشكلة معينة. [ 1 ] [ 2 ] وقد تُسمى تحديات وبطولات "كود غولف" أيضًا باسم لغة البرمجة المستخدمة (على سبيل المثال، "بيرل غولف ").
أصل الكلمة
يُشتق مصطلح "غولف البرمجة" من تشابه هدفه مع هدف لعبة الغولف التقليدية ، حيث يسعى المشاركون إلى تحقيق أقل نتيجة ممكنة، بدلاً من أعلى نتيجة كما هو الحال في معظم أنظمة تسجيل النقاط في الرياضات والألعاب. وبينما يحاول لاعبو الغولف التقليديون تقليل عدد ضربات المضرب اللازمة لإكمال الملعب، يسعى لاعبو غولف البرمجة إلى تقليل عدد الأحرف اللازمة (أو ضغطات المفاتيح، بتعبير مجازي) لكتابة البرنامج.
تاريخ
يُعرف طول أقصر برنامج ممكن ينتج مخرجات معينة (في أي لغة برمجة ثابتة) باسم تعقيد كولموغوروف للمخرجات، ويعود تاريخ دراسته الرياضية إلى عمل أندريه كولموغوروف في عام 1963. ومع ذلك، يمكن أن يكون اختصار الكود أكثر عمومية من ذلك، حيث أنه غالبًا ما يحدد تحويلًا عامًا للإدخال والإخراج يجب تنفيذه بدلاً من طلب مخرج واحد بدون مدخلات.
على الرغم من أن مصطلح "كود غولف" استُخدم لأول مرة عام ١٩٩٩ مع لغة بيرل ، [ ٣ ] وانتشر لاحقًا من خلال استخدام بيرل لكتابة برنامج يُنفذ تشفير RSA ، [ ٤ ] إلا أن منافسة غير رسمية مماثلة كانت شائعة بين مبرمجي لغة APL الأوائل . وقد عُرف منذ زمن طويل التحدي المتمثل في السعي الحثيث لتحسين حجم البرنامج؛ فعلى سبيل المثال، يشير دليل برمجة صدر عام ١٩٦٢ لحاسوب GIER التابع لشركة Regnecentralen إلى أن "البرمجة بأقل عدد ممكن من التعليمات تستغرق وقتًا طويلاً" وينصح بتجنبها في البرمجة العملية. [ ٥ ] واليوم، توسع المصطلح ليشمل مجموعة واسعة من اللغات، مما أدى إلى ظهور لغات برمجة مُخصصة للغولف.
لغات مخصصة للجولف
تم ابتكار العديد من لغات البرمجة الجديدة خصيصاً لممارسة اختصار الكود. تُضحي هذه اللغات بسهولة القراءة لصالح الإيجاز الشديد، وغالباً ما توفر دوالاً عالية المستوى بأسماء مكونة من حرف واحد، مما يجعلها غير مناسبة لبيئات الإنتاج حيث تكون سهولة الصيانة أهم من حجم الكود.
تاريخ
أول لغة مخصصة للغولف مسجلة هي GolfScript، [ 6 ] التي صدرت في عام 2007، مع إصدار مشتق يسمى floGScript في العام التالي.
في عام 2014، تم إصدار CJam، المستوحى بشكل كبير من GolfScript. [ 7 ]
في عام 2015، وبدافع من CJam و APL، واستلهامًا من J ، تم إصدار Jelly، وستضع نفسها كمنافس مهيمن على اللغة الأكثر إيجازًا لسنوات عديدة.
منذ عام 2015، تم إصدار العديد من لغات البرمجة المخصصة للغولف. ومن الأمثلة البارزة على ذلك Japt وPyth و05AB1E وCharcoal وVyxal.
تصميم
تُحوّل بعض لغات برمجة تطبيقات الجولف، مثل JavaScript وPython، إلى لغات برمجة تقليدية [ 8 ] ( JavaScript و Python على التوالي). هذا يجعل تعلم هذه اللغات أسهل، ويضمن أساسًا متينًا لتصميمها وأدائها. كما يُسهّل إنشاء مترجمات الويب، مما يسمح للمستخدمين باستخدام اللغة دون الحاجة إلى تنزيل أي شيء.
تعتمد العديد من لغات برمجة الجولف الحديثة، المستوحاة من لغة GolfScript أو المرتبطة بها، على بنية المكدس والتسلسل ، بينما تتبعها لغات أخرى مستوحاة من لغة Jelly، وهي لغة ضمنية ووظيفية . كما تظهر نماذج أخرى، مثل لغات مطابقة الأنماط ، وإن كانت أقل انتشارًا.
معظم لغات البرمجة المخصصة لاختصار التعليمات البرمجية هي لغات عالية المستوى، وتختصر جميعها تقريبًا الرموز إلى حرف واحد. في التطبيقات الحديثة، مثل Vyxal، تستخدم هذه اللغات مجموعات أحرف أحادية البايت لجعل جميع الأوامر قابلة للطباعة، مما يقلل من سهولة القراءة نظرًا لتنوع الرموز، وخاصةً مع عدم توافق التعليقات البرمجية مع هدف اختصار التعليمات البرمجية.
تستخدم لغات البرمجة المخصصة لضغط النصوص عادةً خاصية تحميل المعاملات بشكل مكثف ، وتتضمن معظمها أشكالًا سهلة الوصول لضغط النصوص . في معظم هذه اللغات، يكون إغلاق الأقواس وغيرها من البنى النحوية اختياريًا في نهاية البرنامج. وكقاعدة تصميم عامة، فإن لغات البرمجة المخصصة لضغط النصوص تعتمد بشكل كبير على البنية الضمنية، ومعظمها ضمني .
أمثلة
مثال على كود GolfScript لطباعة 1000 رقم من باي : [ 9 ]
؛ 6666,-2%{2+.2/@*\/10.3??2*+}* `1000<~\; مثال على كود Vyxal 3 لـ Fizz buzz ، مع شرح توضيحي: [ 10 ]
⑤ƛ35f≛kF½•∨, ⑤ƛ ## map over 1..100 35f ## does 3 or 5... ≛ ## قسمة العدد؟ النتيجة هي قناع بت بعرض 2 kF½ ## ["Fizz", "Buzz"] • ## اضرب السابق بقناع البت، ثم قم بالدمج ∨ ## إذا كانت القيمة السابقة خاطئة (سلسلة فارغة)، فقم بإضافة القيمة الضمنية n ، ## print
أنواع لعبة غولف البرمجة
قد لا تتطلب بعض أسئلة "كود غولف"، كتلك المطروحة على مواقع البرمجة العامة، استخدام لغة برمجة محددة . مع ذلك، يُقيّد هذا الأمر نمط المسائل التي يُمكن لمصمميها طرحها (على سبيل المثال، بتقييد استخدام بعض خصائص اللغة). إضافةً إلى ذلك، أدى ابتكار هذه الأسئلة "المفتوحة" إلى تصميم لهجات خاصة بلغات البرمجة المستخدمة في "كود غولف"، مثل REBMU (لهجة من REBOL ). وقد تتضمن المسابقات، سواءً عبر الإنترنت أو مباشرةً، حدودًا زمنية.
التطبيقات العملية
في عام 2019، استخدم باحثو التشفير كزافييه بونتين، وليو بيرين، وشيزو تيان تقنية "كود غولف " ومفهوم تعقيد كولموغوروف المرتبط بها ارتباطًا وثيقًا لإثبات أن صندوق الاستبدال (S-box) المستخدم في خوارزميات التشفير ستريبوج وكوزنيتشيك كان أقل عشوائية بكثير مما ادعى مبتكروه. [ 11 ]
انظر أيضاً
مراجع
- ↑ موقع Code Golf Stack Exchange. حول Code Golf . تم الاطلاع عليه بتاريخ 21-12-2021.
- ↑ "مقدمة إلى كود غولف | شركة أسيست سوفتوير رومانيا" . تم الاطلاع عليه بتاريخ 23-03-2023 .
- ↑ جريج بيكون (28 مايو 1999). "رد: زيادة قيمة في شريحة" . مجموعة الأخبار : comp.lang.perl.misc . يوزنت: 7imnti$mjh$1@info2.uah.edu . تاريخ الاسترجاع : 12 يوليو 2011 .
- ↑ باك، آدم. "RSA في 5 أسطر من لغة بيرل" . تم الاطلاع عليه بتاريخ 10 يناير 2011 .
- ^ أندرسن كريستيان. غرام كريستيان (1962). Lærebog i Kodning لـ GIER (PDF) . المجلد. 1 (3 طبعة). كوبنهاغن: Regnecentralen. ص. 104 . تم الاسترجاع 2020-05-16 .
- ↑ "الجدول الزمني للغات رياضة الغولف - Esolang" . esolangs.org . تم الاطلاع عليه بتاريخ 2026-01-02 .
- ↑ "CJam" . SourceForge . 2016-10-01 . تم الاسترجاع في 2026-01-02 .
- ↑ "japt/README.md at master · ETHproductions/japt" . جيثب . تم الاسترجاع بتاريخ 2026-01-02 .
- ↑ "أمثلة على GolfScript" . تم الاطلاع عليه بتاريخ 23-03-2023 .
- ↑ "1، 2، فيز، 4، باز" . موقع Code Golf Stack Exchange . تم الاطلاع عليه بتاريخ 2026-01-02 .
- ↑ بونتين، كزافييه؛ بيرين، ليو؛ تيان، شيزو (2019)، "الشذوذ والبحث في فضاء المتجهات: أدوات لتحليل صندوق الاستبدال" ، سلسلة محاضرات في علوم الحاسوب ، تشام: دار نشر سبرينغر الدولية، ص 196-223 ، doi : 10.1007/978-3-030-34578-5_8 ، ISBN 978-3-030-34577-8تم الاطلاع عليه بتاريخ 12 مايو 2025
روابط خارجية
- CodeGolf.StackExchange.com: أسئلة وأجوبة حول ألغاز البرمجة و Code Golf
- لعبة الغولف على ويكي لغات البرمجة الباطنية
- قائمة اللغات المخصصة للجولف
- قائمة بجميع اللغات المستخدمة 10 مرات أو أكثر على موقع Code Golf Stack Exchange، مرتبة حسب الإيجاز.
- مسابقات البرمجة
