menü

Put your code to the test!

TAKE THE '5, 10,15' CHALLENGE


Think you write clean code? Show us!


We’d like to invite you to take part in our coding challenge - show us how you can translate our problem statement in code that is clean, well thought-out, and clear. This will give us a chance to see if you have the skills to be a ThoughtWorker.


ThoughtWorks strongly advocates for doing the right thing. This means creating strong, simple and clean code that builds quality software. Take our challenge and see if you hit the mark!


This should not take you more than 1 or 2 hours. When you're ready, submit your code!


ถ้าพูดถึง Clean Code แล้วคุณแสดงฝืมือกับเราได้ที่นี่

มาร่วมสนุกเล่นเกมส์ Coding กันได้เลย โดยการสร้างsolutionจากโจทย์กำหนดมาครับ สิ่งที่เรากำลังมองหาคือระบบการคิดที่มองเห็นถึงวิธีการแก้ปัญหา โค้ดที่simple and clean


โจทย์นี้มีระยะเวลาการทำราวๆ 1-2 ชั่วโมงเท่านั้น

THE PROCESS

  1. Carefully read the challenge below
  2. Create the program
  3. Submit your code


Once you’ve submitted your code, our developers will need about a week to review the code. Based on the feedback, we will invite you for a meeting to talk more about your submission and continue the recruitment process.


GOOD LUCK!

ขั้นตอนทั้งหมด

  1. อ่านและทำความเข้าใจโจทย์อย่างถี่ถ้วนก่อนลงมือทำ
  2. สร้างโปรแกรมขึ้นมา
  3. ส่งไฟล์เป็น package กลับมาหาเราได้ที่ ลิงค์ นี้

หลังจากส่งไฟล์มาแล้ว ทางเราจะใช้เวลาประมาณ1อาทิตย์ในการทำ Code Review คุณจะได้รับการเชิญเข้าพบกับเราหลังจากเราได้ผลตอบรับที่ดีจากทางทีม Code Review และดำเนินการ recruitment process ที่เหลือต่อไป


THE CHALLENGE

'5, 10, 15'

(Open-Closed Game)


How to play:

This game is played between two players.

One player will be the predictor.

To play the game, after a count of three, the players will need to simultaneously show their hands with each hand either open or closed, and the predictor need to shout out how many hands they think will be open on total.

If the predictor is correct, they win, otherwise the other player becomes the predictor and they go again. This continues until the game is won.



The Challenge:

You need to create a program to play this game against the computer. This can just be a simple console application.

You will always be the predictor first.

The “AI” player will just do things randomly.


For each round, the computer will expect player input in the following format if you are the predictor:

OC2


Or if you are not:

CO


That is, the first two characters will show how you will play your hands, O for open or C for closed. If you are the predictor, you also need to enter a third character which is your prediction for how many open hands in total.


The program should then reveal the “AI” players input and indicate if the game was won, or move to the next round.


Example:

Welcome to the game!

You are the predictor, what is your input?

OO4

AI: CO

No winner.

AI is the predictor, what is your input?

CC

AI: OO0

No winner.

You are the predictor, what is your input?

CO3

AI: OO

You WIN!!

Do you want to play again?

N

Ok, bye!



Tips:

Remember to validate the input and give the user useful messages if their input is not valid.

Valid input should be either a C or O for the first two characters and a number between 0 and 4 for the prediction.

For example, if the user enters “chicken” on their turn, you could display a message such as:

Bad input: correct input should be of the form CC3, where the first two letters indicate [O]pen or [C]losed state for each hand, followed by the prediction (0-4).

If the user enters “CC8” the error could be:

Bad input: prediction should be in the range of 0-4.

Or, if they are not the predictor:

Bad input: no prediction expected, you are not the predictor.


Try and write unit tests for your code, if you can, use TDD (test driven development) when writing the solution.


Think about the design of your objects and cleanliness of your code. Will it be easy for you to make changes to your code to implement some of the extensions? How about for someone else?



เกมส์ 5, 10, 15

กฎของเกม

เกมส์นี้มีผู้เล่นทั้งหมดสองคน

ในแต่ละรอบจะมีผู้เล่นคนหนึ่งเป็นผู้ทาย

ในการเล่นเกมหลังจากนับถึงสามผู้เล่นจะต้องแสดงมือทั้งสองข้างของพวกเขาพร้อมๆกัน โดยมือทั้งสองข้างจะแบหรือกำมือและในขณะเดียวกันผู้ทายต้องทายว่ามีมือที่แบกี่มือ

ถ้าผู้ทายทายถูกต้อง ผู้ทายจะเป็นผู้ชนะ มิฉะนั้นผู้เล่นอีกคนจะสลับมาเป็นผู้ทายแทนในรอบถัดไป เกมส์นี้จะดำเนินต่อไปจนกว่าจะมีคนชนะ



ความท้าทาย

คุณจำเป็นต้องสร้างโปรแกรมเพื่อเล่นเกมนี้กับคอมพิวเตอร์

เมื่อเริ่มเกมส์คุณจะเป็นผู้ทายก่อนเสมอ

คอมพิวเตอร์จะมีผู้เล่นคือ “AI” ซึ่งจะทำสิ่งต่างๆแบบสุ่ม

ในแต่ละรอบโปรแกรมจะคาดหวังให้ผู้เล่นป้อนข้อมูลในรูปแบบต่อไปนี้หากคุณเป็นผู้ทาย:

OC2

หรือถ้าเป็นอีกฝ่าย:

CO

อักษรสองตัวแรกจะแสดงมือที่คุณจะเล่น O แปลว่า แบมือ(open) หรือ C แปลว่า กำมือ(closed)

หากคุณเป็นผู้ทายคุณต้องป้อนอักขระที่สามซึ่งเป็นการทายจำนวนมือที่แบทั้งหมด

 

โปรแกรมควรเปิดเผยข้อมูลผู้เล่น "AI" และระบุว่าเกมได้มีคนชนะหรือเปลี่ยนผู้ทาย

 

ตัวอย่างเกมส์นี้


Welcome to the game!

You are the predictor, what is your input?

OO4

AI: CO

No winner.

AI is the predictor, what is your input?

CC

AI: OO0

No winner.

You are the predictor, what is your input?

CO3

AI: OO

You WIN!!

Do you want to play again?

N

Ok, bye!


Tips:

อย่าลืมตรวจสอบการป้อนข้อมูลและแสดงผลข้อความแก่ผู้เล่นหากเขาใส่ข้อมูลไม่ถูกต้อง

การป้อนข้อมูลที่ถูกต้องควรเป็น C หรือ O สำหรับอักษรสองตัวแรกและตัวเลขระหว่าง 0 ถึง 4 สำหรับการทายมือที่แบทั้งหมด ตัวอย่างเช่น


  • ถ้าผู้ใช้ป้อน "ไก่" โปรแกรมควรจะสามารถแสดงข้อความเช่น:

ข้อมูลไม่ถูกต้อง: ที่ถูกต้องควรเป็นรูปแบบ CC3 โดยที่ตัวอักษรสองตัวแรกระบุถึงมือที่แบ [O] หรือมือที่กำ[C] สำหรับแต่ละมือตามด้วยการทายจำนวนมือที่แบ (0-4)


  • ถ้าผู้ใช้ป้อน "CC8" ข้อผิดพลาดอาจเป็น

การป้อนข้อมูลไม่ถูกต้อง: การคาดคะเนควรอยู่ในช่วง 0-4


  • ถ้าผู้เล่นขณะนั้นไม่ใช่คนทาย:

การป้อนข้อมูลที่ไม่ถูกต้อง: ไม่ใช่ตาของคุณ คุณไม่ใช่คนทาย


ลองเขียนUnit Tests สำหรับโค้ดของคุณ ถ้าสามารถทำได้ให้ใช้ TDD (test driven development) เมื่อเขียนโปรแกรมควรคำนึงถึงหลักการ Design Objects และ Cleancode โค้ดของคุณควรจะสามารถแก้ไขเพิ่มเติมเพื่อทำExtensions ได้ง่ายสำหรับคุณและสำหรับคนอื่นด้วย