چالش گوگل foobar

یکروز داشتم سرچ می کردم یکدفعه صفحه سرچ flip شد و با صفحه آرایی جالبی و گفت شما به چالش گوگل فوبار دعوت شدید و تمایل دارید شرکت کنید یا خیر؟!این صحنه آرایی اینقدر جالب بود که بزنم ببینم چیه بعد برگردم سراغ بقیه جستجوم.سرچ کردم بصورت خلاصه می گویند ؛گوگل براساس سابقه سرچ و فعالیت شما ، شما را به چالش فوبار دعوت می کند که شامل مجموعاً 5 مرحله و 9 مسئله برنامه نویسی است.اگر مرحله 3 را به اتمام برسانید ، فرمی برای گرفتن مشخصات شما باز می شود و پرونده شما برای کارشناس گوگل ارسال می شود تا برای همکاری بیشتر بررسی شوید!در اینجا مثلاً چنین چیزی درباره google foobar نوشته :What is Google Foobar Challenge?Google Foobar is Google’s secret hiring challenge. The interesting thing about foobar is that not everyone can unlock the challenge, only a few people get the invitation.Google analyses your search history and reading patterns and if they satisfy certain conditions, they send you the invite. No one knows what these patterns are or how is the challenge unlocked. But what we know is that many developers have been hired through this challenge.So I clicked the “I want to play button” and it redirected me to a new page with UNIX Shell-like interface. I had to sign to save my progress.The Foobar challenge consists of 5 levels. Each level consists of some problems for which you have to write a solution in either python or java. The difficulty increases as you level up. After level 3 it asks you to fill your contact details and if they like your submission, they may contact you for an interview. Let’s go through each level.در اینجا چنین نوشته :So. you got Google’s Foobar Invitation. First of all, very very congratulations on that, you should have known that this is not an ordinary invitation but the special one that Google sends to only some special type of developers.Now we know Foobar is some weird invitation from Google, but I want to talk about a little in detail. So, let’s explore all the questions you have in mind.Google Foobar is Google’s secret hiring challenge. Google uses this to hire some of the best developers around the globe which they think can be a good match for their organization. Many developers in Google have been hired through this hiring challenge.آدرس google.com/foobar و foobar.withgoogle.com به یکجا اشاره می کنند.در صورت زدن I want to play وارد محیطی شبیه ترمینال لینوکس می شوید که دستورات محدودی دارد. مهم ترین این دستورات شامل موارد ذیل هستند :دستور request : تقاضای چالش جدید درصورت حل کردن چالش جاریدستور cat و ls : همان معادل خودشون بدون سوییچ ها دستور edit: برای حل مسئله شما باید فایل solution.py یا solution.java را با دستور edit باز و ویرایش و ذخیره کنیددستور verify : تست کارکرد حل شما برای شرایط و داده های وروردی مختلف مسئلهدستور submit : ثبت حل مسئله شما ، باید قبلاً verify کرده باشید و همه تست کیس ها را پاس کرده باشدسناریو و مراحل پیشرفتشما یک مینیون هستید که به مقر فرمانده لامبدا نفوذ کرده اید که می خواهد با LAMBCHOP doomsday device سیاره Bunny را نابود کند!? و قراره اونجا خرابکاری کنید!با پنج مرحله مواجه هستید که اگر کمی پایتون یا جاوا و حل مسئله و الگوریتم در حد دوره کارشناسی بدانید احتمالاً مشکلی برای حل کردن آن ها نداشته باشید :مرحله 1: یک مسئله و 24 ساعت وقت دارد.حتماً باید مرحله یک را با موفقیت تمام کنید تا فرآیند در اکانت شما ذخیره شود و در روزهای بعدی ادامه دهید.مرحله 2: دو چالش و 48 ساعت وقت برای هر کدام داردمرحله 3: سه چالش و 72ساعت وقت برای هر کدام دارداین مرحله را که رد کنید فرم ثبت مشخصات برای شما باز می شود و مشخصات و راه حل های شما برای برسسی به کارشناس گوگل ارسال می گردد.مرحله 4: دو چالش و 360 ساعت وقت برای هر کدام داردمرحله 5: یک چالش و 528 ساعت وقت داردبه ترتیب که جلوتر می روید چالش ها پیچیده تر و نکته دار تر می شوند و پیش میاد که مطمئن هستید الگوریتم و کدی که زده اید و تست کرده اید درست است اما مثلاً 2 تا از test case ها را پاس نمی کند. (باید همه را در verify پاس کند که بتوانید submit کنید)چگونه به گوگل فوبار دعوت شویم؟گوگل حتماً میدونه من برنامه نویس پایتون یا جاوا نیستم! نه اینکه نتونم یا ننوشته باشم اما تخصص و سرچم معمولاً در این حوزه نیست.سرچ من در 2سال گذشته بیشتر در حوزه devops و زیرساخت بوده و دنبال موضوعات اعتبارسنجی ssh بودم که گوگل فوبار را باز کرد.راه دیگری هم برای شرکت در چالش foobar هست :بعد از حل مرحله 2 و 4 شما یک کد invite می گیرید که میتوانید بوسیله آن سایر دوستان خود را به این چالش دعوت کنید.بعد از مرحله 5 هم request چالش جدید باز هست اما هنوز امتحان نکردم با حل چالش های جدید کد دعوت جدید هم می دهد یا نه.چگونه در گوگل فوبار موفق شویم؟نمونه و پاسخ تقریباً همه سئوالات روی اینترنت هست.کد جاوا یا پایتون را بگیرید ، در محیط خودتون paste و test کنید. اگر درست بود بررسی کنید الگوریتم و راه حلش را ببینید.کدهای دیگر همان مسئله را هم بگیرید همان کار را بکنید.با توجه به اینکه وقت هست بهترین الگوریتم و راه حل را انتخاب کنید ، یا از خودتون ارائه دهید ، و با زبان خودتون کد را پیاده سازی کنید.“If you’re not cheating, you’re not trying hard enough”من سرچ کردم می گن تا یکماه بعد از اتمام مرحله 3 وپرکردن فرم مشخصات گوگل تماس می گیرد ، با اینکه Iran در کشورهاش بود نمی دونم برای ملیت ما چقدر چنین شرایطی صادق هست.به هر حال اگر شما یک استعداد شاخصی باشید می صرفه حتی ته جهنم هم دنبال شما بیان.من البته فکر نکنم بقیه اش را بتونم براتون تعریف کنم زیرا در این خصوص اینقدر اطلاع دارم که من از این استعدادها نیستم و نسبت به جمع کثیری از کسانی که می شناسم (بجر جمع کثیرتری که نمی شناسم)، یارو احتمالاً اشتباه گرفته!چالش اصلیتمام که می شه به شما یک encrypted message نمایش داده می شود که با این کد بنقل از اینجا می توانید باز کنید و شامل یک دیکشنری با 5 خانه است که هر کلید کلمه ای است حاوی مقداری که کلمه دیگری است.#!/usr/bin/env python # -*- coding: utf-8 -*- import base64 MESSAGE = ''' [YOUR MESSAGE] ''' KEY = 'YOUR KEY' result = [] for i, c in enumerate(base64.b64decode(MESSAGE)): result.append(chr(ord(c) ^ ord(KEY[i % len(KEY)]))) print ''.join(result)واقعیت اینه فکر کنم چالش اصلی این باشه که الان با این 10 کلمه چه کار باید کرد؟معنی خود لغت foobar بنقل از ویکیپدیا (برای نام گذاری متغییرها در حین آموزش یا ارائه مثلاً میگن foo و bar) :The terms foobar (/ˈfuːbɑːr/), or foo and others are used as meta-syntactic variables and placeholder names in computer programming or computer-related documentation.They have been used to name entities such as variables, functions, and commands whose exact identity is unimportant and serve only to demonstrate a concept.