[go: up one dir, main page]

0% found this document useful (0 votes)
33 views9 pages

Codechef Report

The document discusses CodeChef, an online platform for competitive programming. It provides an introduction to CodeChef, describing its history and goals of promoting learning and competitions in computer programming. The document also defines computer programming and programming languages at a high level.

Uploaded by

NITIN HEMA RAJ
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views9 pages

Codechef Report

The document discusses CodeChef, an online platform for competitive programming. It provides an introduction to CodeChef, describing its history and goals of promoting learning and competitions in computer programming. The document also defines computer programming and programming languages at a high level.

Uploaded by

NITIN HEMA RAJ
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

VISVESVARAYA TECHNOLOGICAL UNIVERSITY

BELAGAVI

ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING


ACADEMIC REPORT ON

CODECHEF INTEGRATED TRAINING

NITIN HEMA RAJ


4AL20AI027

UNDER THE GUIDANCE OF

Prof. Harish Kunder


HEAD OF THE DEPARTMENT

DEPARTMENT OF ARTIFICIAL INTELLIGENCE AND


MACHINE LEARNING

ALVA’S INSTITUTE OF ENGINEERING AND TECHNOLOGY


MOODBIDRI - 574225, KARNATAKA.

2021 – 2022
ACKNOWLEDGEMENT

The satisfaction and euphoria that accompany a successful completion of any


task would be incomplete without the mention of people who made it possible,
success is the epitome of hard work and perseverance, but steadfast of all is
encouraging guidance.
So, with gratitude I acknowledge all those whose guidance and encouragement
served as beacon of light and crowned the effort with success.
I thank our subject faculty Mr. Kiran Raj, Assistant Professor in
Department of Artificial Intelligence and Machine Learning, who has been our
source of inspiration. He has been especially enthusiastic in giving his valuable
guidance and critical reviews.
I sincerely thank, Prof. Harish Kunder Professor and Head, Department
of Artificial Intelligence and Machine Learning who has been the constant
driving force behind the completion of the task.
I thank our beloved Principal Dr. Peter Fernandes, for his constant help
and support throughout.

I am indebted to Management of Alva’s Institute of Engineering and


Technology, Mijar, Moodbidri for providing an environment which helped me
in completing my task in Artificial Intelligence and Machine Learning domain.

Also, I thank all the teaching and non-teaching staff of Department Artificial
Intelligence and Machine Learning for the help rendered.
I. INTRODUCTION

CodeChef was started in 2009 as an educational initiative for the


programming community by Directi, an Indian software products company.
Today, CodeChef is one of the world’s largest and popular global competitive
programming platforms preferred by student & professional programmers. In
2020, CodeChef was added under the aegis of the Unacademy brand.

CodeChef promotes constant learning and friendly programming competitions


for its users, along with the support of its large community of problem curators.

CodeChef was created as a platform to help programmers make it big in the


world of algorithms, computer programming, and programming contests. It
hosts three featured contests every month (Long Challenge, CookOff,
LunchTime & Starters) and gives away prizes and goodies to the winners as
encouragement. Apart from these, the platform is also open to the entire
programming community, especially academic institutes, and student bodies, to
host their own contests. Major institutions & corporates across the globe use
CodeChef’s platform to host their contests, internal & external coding
assessments. On average, 30+ external contests are hosted on CodeChef’s
platform every month.

CodeChef also partners with schools, colleges, and student groups to create
local CodeChef Chapters, meet-ups, orientation sessions & programming
workshops. In addition, CodeChef sponsors coding contests and teams of Indian
programmers as part of its Go for Gold Initiative for ICPC & IOI.

SnackDown by CodeChef is a world-renowned annual programming


competition that attracts participation from programmers from 140+ countries.

Very recently, CodeChef launched its new program - Learn Competitive


Programming with CodeChef - on Unacademy’s robust learning platform. Read
more about this launch here.

CodeChef’s YouTube Channels are also a source of free learning and


knowledge for the community with video editorials and recorded problem-
solving sessions from top-rated programmers.
COMPUTER PROGRAMMING:

Computer programming is the process of performing a particular


computation (or more generally, accomplishing a specific computing result),
usually by designing/building an executable computer program. Programming
involves tasks such as analysis, generating algorithms, profiling algorithms'
accuracy and resource consumption, and the implementation of algorithms
(usually in a chosen programming language, commonly referred to as coding).
The source code of a program is written in one or more languages that are
intelligible to programmers, rather than machine code, which is directly
executed by the central processing unit. The purpose of programming is to find
a sequence of instructions that will automate the performance of a task (which
can be as complex as an operating system) on a computer, often for solving a
given problem. Proficient programming thus usually requires expertise in
several different subjects, including knowledge of the application domain,
specialized algorithms, and formal logic.

Tasks accompanying and related to programming include testing,


debugging, source code maintenance, implementation of build systems, and
management of derived artifacts, such as the machine code of computer
programs. These might be considered part of the programming process, but
often the term software development is used for this larger process with the
term programming, implementation, or coding reserved for the actual writing of
code. Software engineering combines engineering techniques with software
development practices. Reverse engineering is a related process used by
designers, analysts, and programmers to understand and re-create/re-implement.

COMPUTER LANGUAGES:

High-level languages made the process of developing a program simpler


and more understandable, and less bound to the underlying hardware. The first
compiler related tool, the A-0 System, was developed in 1952 by Grace Hopper,
who also coined the term 'compiler'. FORTRAN, the first widely used high-
level language to have a functional implementation, came out in 1957, and
many other languages were soon developed—in particular, COBOL aimed at
commercial data processing, and Lisp for computer research. These compiled
languages allow the programmer to write programs in terms that are
syntactically richer, and more capable of abstracting the code, making it easy to
target for varying machine instruction sets via compilation declarations and
heuristics. Compilers harnessed the power of computers to make programming
easier by allowing programmers to specify calculations by entering a formula
using infix notation.
MODERN PROGRAMMING:

Whatever the approach to development may be, the final program must
satisfy some fundamental properties. The following properties are among the
most important:

 Reliability: how often the results of a program are correct. This depends
on conceptual correctness of algorithms and minimization of
programming mistakes, such as mistakes in resource management (e.g.,
buffer overflows and race conditions) and logic errors (such as division
by zero or off-by-one errors).

 Robustness: how well a program anticipates problems due to errors (not


bugs). This includes situations such as incorrect, inappropriate or corrupt
data, unavailability of needed resources such as memory, operating
system services, and network connections, user error, and unexpected
power outages.

 Usability: the ergonomics of a program: the ease with which a person can
use the program for its intended purpose or in some cases even
unanticipated purposes. Such issues can make or break its success even
regardless of other issues. This involves a wide range of textual,
graphical, and sometimes hardware elements that improve the clarity,
intuitiveness, cohesiveness and completeness of a program's user
interface.

 Portability: the range of computer hardware and operating system


platforms on which the source code of a program can be
compiled/interpreted and run. This depends on differences in the
programming facilities provided by the different platforms, including
hardware and operating system resources, expected behavior of the
hardware and operating system, and availability of platform-specific
compilers (and sometimes libraries) for the language of the source code.

 Maintainability: the ease with which a program can be modified by its


present or future developers in order to make improvements or to
customize, fix bugs and security holes, or adapt it to new environments.
Good practices during initial development make the difference in this
regard. This quality may not be directly apparent to the end user but it can
significantly affect the fate of a program over the long term.
 Efficiency/performance: Measure of system resources a program
consumes (processor time, memory space, slow devices such as disks,
network bandwidth and to some extent even user interaction): the less, the
better. This also includes careful management of resources, for example
cleaning up temporary files and eliminating memory leaks. This is often
discussed under the shadow of a chosen programming language.
Although the language certainly affects performance, even slower
languages, such as Python, can execute programs instantly from a human
perspective. Speed, resource usage, and performance are important for
programs that bottleneck the system, but efficient use of programmer
time is also important and is related to cost: more hardware may be
cheaper.

PROGRAMMING LANGUAGES:

Different programming languages support different styles of


programming (called programming paradigms). The choice of language used is
subject to many considerations, such as company policy, suitability to task,
availability of third-party packages, or individual preference. Ideally, the
programming language best suited for the task at hand will be selected. Trade-
offs from this ideal involve finding enough programmers who know the
language to build a team, the availability of compilers for that language, and the
efficiency with which programs written in a given language execute. Languages
form an approximate spectrum from "low-level" to "high-level"; "low-level"
languages are typically more machine-oriented and faster to execute, whereas
"high-level" languages are more abstract and easier to use but execute less
quickly. It is usually easier to code in "high-level" languages than in "low-level"
ones.

The details look different in different languages, but a few basic instructions
appear in just about every language:
 Input: Gather data from the keyboard, a file, or some other device.
 Output: Display data on the screen or send data to a file or other device.
 Arithmetic: Perform basic arithmetical operations like addition and
multiplication.
 Conditional Execution: Check for certain conditions and execute the
appropriate sequence of statements.
 Repetition: Perform some action repeatedly, usually with some variation.
Many computer languages provide a mechanism to call functions provided by
shared libraries. Provided the functions in a library follow the appropriate run-
time conventions (e.g., method of passing arguments), then these functions may
be written in any other language.
II. COMPETITIVE PROGRAMMING

Programming is a challenging role and once you enter this field you will
encounter new challenges and you may have to solve some problems which no
one has solved before or their solution doesn’t exist anywhere. At that time, you
are expected to come up with a solution in the least possible time using your
problem-solving and logical ability. So, the one and clear goal behind these
competitive programming is “To prepare a programmer such that his/her logical
ability increases and he/she is able to write code for the challenging situation.”
Another reason is that a lot of big companies like Google, Facebook.
Microsoft, Amazon hires through competitive programming so if you want to
get into these companies then you really need to get your hands dirty in
competitive programming. It doesn’t matter you are a newbie programmer or
you have written some code before, we will tell you some steps, approaches,
and tips to prepare yourself for competitive programming. Let’s discuss that in
detail.

Competitive Programming is a mental sport which enables you to code a


given problem under provided constraints. The purpose of this article is to guide
every individual possessing a desire to excel in this sport. This article provides a
detailed syllabus for Competitive Programming designed by industry experts to
boost the preparation of the readers.

PREPARATION FOR COMPETITIVE PROGRAMMING:

1. Choose a Programming Language: Firstly, you need to choose a


programming language that you are most comfortable with and learn its syntax.
It can be anything C, C++, Java, Python, or any programming language.
Programming languages are a tool through which you can communicate to the
computer and instruct what to do. C++, C or Java is a faster programming
language in comparison to any other language also it is allowed to use in any
coding challenge or interviews. So, it’s good if you choose one out of these
three still there is no restriction if you are comfortable with another language. If
you are a beginner you can go with python because it’s easy to learn and syntax
are user-friendly. If you have at least an intermediate hold on the anyone
programming language you won’t face difficulty in writing the code using the
syntax of it.

2. Understand the Concept of Time and Space Complexity: In most of the


cases there is more than one solution that exists to a problem so you need to
come up with the best solution i.e., optimal one and that’s decided by how much
time and space an algorithm takes to solve a problem. So, it’s really important
to learn about these two concepts to write an optimal solution for the problem.

3. Learn the Fundamentals of Data Structures and Algorithms: DSA is the


heart of programming and you cannot ignore it while solving coding problems
in competitive programming. Array, Linked List, Stack, Queue, Tree, Trie,
Graph, Sorting, Recursion, Dynamic Programming all these basic building
blocks of DSA will help you to become a good programmer. The most
important thing you need to know what, when and where to apply them. It
means which data structure is suitable for what type of problem to get the
optimal solution. You should know how to apply a perfect combination of both
in the coding problem.

4. Take the Challenge and Solve Coding Problems: You have learned a
programming language, you have learned time and space complexity and you
have also covered the fundamentals of DSA, now it’s time to take the knife in
your hand and kill the lion in the jungle. Yes…you need to take part in coding
challenges on different coding platforms. Before participating in contest, it
would be great if you practice for some challenges on your own and then
participate there. If you are looking for the resources of these coding platforms
so a lot of sites are there like Geeksforgeeks, Codeforces, Codechef, Topcoder,
SPOJ.

5. Practice and Do it Regularly: Your patience, dedication, and consistency


are very important to become a good competitive programmer. Keep practicing
the coding questions every single day on these platforms or you can also take
the help of whiteboard to solve coding questions but the important thing is to do
it regularly. Do not make a mistake to take a break from it once you start. Stick
on it, no matter how difficult the problem is or how much time you take to solve
a single coding problem. Participate in different coding competitions and learn
from other programmers. Your daily practice makes you a perfect coder, good
problem solver and you will be able to find a suitable data structure for a
specific problem and that matters a lot in software development.
III. CONCLUSION

The 10 week long integrated code learning program started as just a


learning program but later developed into an intensive and interesting program
of complete coding. This program is a beautifully designed way for every
student to learn coding. Even a beginner could have started with normal practice
and evolve into a pro in any specific programming language. The main intention
of this program was to make every student fluent in any language of their
choice. There were 5 practice problems every week for everyone to get
familiar with a particular topic and also 2 assignment problems alongside to
test themselves with the learning.

The purpose of me taking this learning program very seriously is that


I had my basics strong in 4 different programming languages and I wanted to
improve my coding skills. Therefore, I started coding in different languages for
each problem statement. Each code made my coding roadmap more effective
and efficient. We struggled, discussed, worked it out and made sure we
succeeded. In the end, that is all that matters. Too much knowledge was grasped
and applied in academics as well. It was a blend of logical thinking, competitive
programming and right coding knowledge.

Any program or a workshop has to have few outcomes in general to show


how it had an impact on a student’s life. The main outcome to me from this
learning program is that I was able to make my basics strong in all the 4
programming languages (C, C++, Java, Python) and also, I was able to start
thinking logically and think in all the possible ways, The error debugging
improved my reasoning and tracing skills for which most of the students are still
working hard. Also, there was a drastic improvement in me dedicating time for
coding. Overall, it was an excellent program indeed.

You might also like