Oversigt over Python opgaver på Exercism.io - STU-IT/raspi17 GitHub Wiki
Den klassiske opstarts øvelse. Bare sig "Hello, World!"
Funktionen hello
i hello_world.py
skal returnere "Hello, World!"
http://exercism.io/exercises/python/hello-world
Ud fra et givet år, afgør om det er skudår.
Det vanskellige ved skudår er det optræder næsten hvert 4. år. Som i:
hver gang et år kan divideres lige med 4
undtagen hvis året også er deleligt med 100
med mindre året også er deleligt med 400
For eksempel er 1997 ikke skudår, men 1996 er. 1900 er ikke skudår, mens 2000 er.
Undgår at bruge lib/moduler til python med kalender som kan beregne skudår for dig. Lav det selv.
Du lærer at arbejde med:
- % (modulus)
- boolske udtryk, med
- True / False
- and / or
http://exercism.io/exercises/python/leap
Afgør om et ord eller en tekst er et isogram. Et isogram (også kendt som et "nonpattern word") er et ord eller en sætning uden at nogen tegn findes mere en én gang. Eksempler på isogrammer:
- lumberjacks
- background
- downstream Ordet isograms , men er ikke et isogram, fordi s gentages.
- loop
- set (mængde)
- upper/lower-case
- if/else http://exercism.io/exercises/python/isogram
Bestem, om en sætning er en pangram. En pangram (græsk: παν γράμμα, pan gramma, "hvert bogstav") er en sætning, der bruger hvert bogstav i alfabetet mindst én gang. Den bedst kendte engelske pangram er:
The quick brown fox jumps over the lazy dog. Det anvendte alfabet består af ASCII tegn a til z inklusive, og er både store og små bogstaver. Input vil ikke indeholde ikke-ASCII-symboler.
- loop
- set (mængde)
- upper/lower-case
- if/else
http://exercism.io/exercises/python/pangram
Given a DNA strand, return its RNA complement (per RNA transcription). Ud fra en DNA-streng, skal funktionen returnere den tilsvarende RNA-streng. Både DNA- og RNA-tråde er en sekvens af nukleotider.
De fire nukleotider, der findes i DNA, er adenin ( A ), cytosin ( C ), guanin ( G ) og thymin ( T ).
De fire nukleotider, der findes i RNA, er adenin ( A ), cytosin ( C ), guanin ( G ) og uracil ( U ).
På grund af en DNA-streng dannes dets transkriberede RNA-streng ved at erstatte hvert nukleotid med dets komplement:
- G -> C
- C -> G
- T -> A
- A -> U
- loop
- if/elif/else
http://exercism.io/exercises/python/rna-transcription
Calculate the Hamming difference between two DNA strands. Beregn Hammingforskellen mellem to DNA-tråde.
En mutation er simpelthen en fejl, der opstår under dannelsen eller kopien af en nukleinsyre, især DNA. Fordi nukleinsyrer er afgørende for cellulære funktioner, har mutationer tendens til at forårsage en krusningsvirkning i hele cellen. Selvom mutationer er tekniske fejl, kan en meget sjælden mutation udstyre cellen med en gavnlig egenskab. Faktisk er de makroeffekter af evolution der kan tilskrives af det akkumulerede resultat af gavnlige mikroskopiske mutationer over mange generationer.
Den enkleste og mest almindelige type nukleinsyremutation er en punktmutation, som erstatter en base med en anden ved et enkelt nukleotid.
Ved at tælle antallet af forskelle mellem to homologe DNA-strenge taget fra forskellige genomer med en fælles forfader, får vi en måling af det minimale antal punktmutationer, der kunne have fundet sted på den evolutionære vej mellem de to tråde.
Dette kaldes 'Hamming afstanden'.
Det findes ved at sammenligne to DNA-tråde og tælle hvor mange af nukleotiderne der er forskellige fra deres ækvivalente i den anden streng.
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
Hammingafstanden mellem disse to DNA-tråde er 7.
Hammings afstanden er kun defineret for sekvenser med ens længde. Det betyder, at hvert sprog på baggrund af definitionen kan håndtere at få sekvenser af samme længde forskelligt.
- loop
- if/else
http://exercism.io/exercises/python/hamming
Given a phrase, count the occurrences of each word in that phrase.
Tæl forekomsten af hvert ord i en sætning.
F.eks. med denne sætning "olly olly in come free"
olly: 2
in: 1
come: 1
free: 1
- loop
- dict (Dictionary, en slag assosiativt-array)
- upper/lower-case
- if/else
http://exercism.io/exercises/python/word-count
Calculate the moment when someone has lived for 10^9 seconds.
Udregn det tidspunkt hver en har levet i 10^9 sekunder.
Et gigasekund er 10^9 (1.000.000.000 en miliard) sekunder.
- datetime objektet
Jeg synes beskrivelsen her er noget kort og upræcis, derfor vil jeg anbefale også at læse testscriptet på (http://exercism.io/exercises/python/gigasecond/test-suite), selvom du måske ikke har fået undervisning i hvordan sådan et virker. Det er linjerne med self.assertEqual(
og efterfølgende kald af add_gigasecond(...)
og derefter de værdier der forventes at funktionen returnerer.
Se mere http://exercism.io/exercises/python/gigasecond
Bob er en mangelfulde teenager. I samtalen er hans svar meget begrænsede.
Bob svarer 'Sure'. hvis du spørger ham et spørgsmål.
Han svarer 'Whoa, chill out!' hvis du råber på ham.
Han siger 'Fine'. Be that way! " hvis du adresserer ham uden faktisk at sige noget.
Han svarer 'Whatever'. til noget andet.
- if/else
- Streng behandling
http://exercism.io/exercises/python/bob
Gennemfør kodning og afkodning af run-length encoding.
Run-length encoding(RLE) er en simpel form for datakomprimering, hvor kørsler (på hinanden følgende dataelementer) erstattes af kun en dataværdi og tælling.
For eksempel kan vi repræsentere de originale 53 tegn med kun 13.
"WWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
RLE gør det muligt at rekonstruere de originale data, eksakt, fra komprimerede data, hvilket gør det til en tabsfri datakomprimering.
"AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
For at gøre opgaven enklere, kan du antage, at den ukrypterede streng kun indeholder bogstaverne A til Z (enten små eller store bogstaver) og mellemrum/linjeskift/tabs (whitespace). Denne tekst-streng, der skal indkodes, vil aldrig indeholde tal. Tal i enkodede data, der skal dekodes, repræsenterer altid antallet af følgende tegn.
- Streng behandling
- loop
http://exercism.io/exercises/python/run-length-encoding
Calculate the date of meetups.
Beregn datoen for møder.
Typisk møder opstår samme dag i ugen. I denne øvelse vil du tage en beskrivelse af en mødedato og returnere den aktuelle mødedato.
Eksempler på generelle beskrivelser er:
- den første mandag i januar 2017
- den tredje tirsdag i januar 2017
- den onsdagste januar 2017
- den sidste torsdag i januar 2017
Note that "Monteenth", "Tuesteenth", etc are all made up words. There was a meetup whose members realized that there are exactly 7 numbered days in a month that end in '-teenth'. Therefore, one is guaranteed that each day of the week (Monday, Tuesday, ...) will have exactly one date that is named with '-teenth' in every month.
Given examples of a meetup dates, each containing a month, day, year, and descriptor (first, second, teenth, etc), calculate the date of the actual meetup. For example, if given "First Monday of January 2017", the correct meetup date is 2017/1/2
__ Bemærk at "Monteenth", "Tuesteenth", osv. Er alle sammensatte ord. Der var et møde, hvis medlemmer indså, at der er nøjagtigt 7 nummererede dage i en måned, der slutter i '-tende'. Derfor er man garanteret, at hver dag i ugen (mandag, tirsdag, ...) vil have nøjagtig en dato, der hedder '-tende' i hver måned.
På grund af eksempler på en mødelokalisering, der hver indeholder en måned, dag, år og deskriptor (første, anden, tiende osv.), Beregnes datoen for den faktiske møde. For eksempel, hvis den er givet "Første mandag i januar 2017", er den korrekte mødedato 2017/1/2 __
Se mere http://exercism.io/exercises/python/meetup
Create an implementation of the rotational cipher, also sometimes called the Caesar cipher.
Opret en implementering af rotations-krypering, også nogle gange kaldet Caesar-krypteringen.
Cæsar-kryptering er et simpelt ciffer-skift, der er baseret på transponering af alle bogstaverne i alfabetet ved hjælp af en heltalsnøgle mellem 0 og 26 . Brug af en nøgle på 0 eller 26 vil altid give samme output på grund af modulær aritmetik. Brevet skiftes for så mange værdier som værdien af nøglen.
Den generelle notation for roterende cifre er ROT + . Den mest almindelige rotationschiffer er ROT13 .
En ROT13 på det latinske alfabet ville være som følger:
klartekst: abcdefghijklmnopqrstuvwxyz
krypttekst: nopqrstuvwxyzabcdefghijklm
Det er stærkere end Atbash-krypteringen, fordi det har 27 mulige nøgler og 25 brugbare nøgler.
Ciphertext udskrives i samme formatering som input inklusive mellemrum og tegnsætning.
ROT5 omg
giver trl
ROT0 c
giver c
ROT26 Cool
giver Cool
ROT13 The quick brown fox jumps over the lazy dog.
giver Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
ROT13 Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
giver The quick brown fox jumps over the lazy dog.
- Algebra
- brug af ord() og char()
- modulus og %
- loop
- strengbehandling
Se mere på http://exercism.io/exercises/python/rotational-cipher
Find the difference between the square of the sum and the sum of the squares of the first N natural numbers.
Given a word and a list of possible anagrams, select the correct sublist.
Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.
Given a string of digits, output all the contiguous substrings of length n
in that string.
Write a robot simulator.
Use the Sieve of Eratosthenes to find all the primes from 2 up to a given number.
Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
Given a number, find the sum of all the multiples of particular numbers up to but not including that number.
Convert a long phrase to its acronym
Given a number from 0 to 999,999,999,999, spell out that number in English.
Given a string of digits, calculate the largest product for a contiguous substring of digits of length n.
Given a diagram, determine which plants each child in the kindergarten class is responsible for.
Given students' names along with the grade that they are in, create a roster for the school
Take a nested list and return a single list with all values except nil/null
Write a function to convert from normal numbers to Roman Numerals.
Given an age in seconds, calculate how old someone is in terms of a given planet's solar years.
Calculate the number of grains of wheat on a chessboard given that the number on each square doubles.
Given a number determine whether or not it is valid per the Luhn formula.
We are going to do the Transform
step of an Extract-Transform-Load.
Compute the prime factors of a given natural number.
Implement a program that translates from English to Pig Latin
Implement a simple shift cipher like Caesar and a more secure substitution cipher
Given a word, compute the scrabble score for that word.
Implement the classic method for composing secret messages called a square code.
Write a function to determine if a list is a sublist of another list.
There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product a * b * c.
A data structure that uses a single, fixed-size buffer as if it were connected end-to-end.
Manage robot factory settings.
Given a string representing a matrix of numbers, return the rows and columns of that matrix.
Implement encoding and decoding for the rail fence cipher.
Given a number n, determine what the nth prime is.
Detect saddle points in a matrix.
Produce the lyrics to that beloved classic, that field-trip favorite: 99 Bottles of Beer on the Wall.
Determine if a number is perfect, abundant, or deficient based on Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
Given a decimal number, convert it to the appropriate sequence of events for a secret handshake.
Output the lyrics to 'The Twelve Days of Christmas'
Detect palindrome products in a given range.
Make sure the brackets and braces all match.
Add the numbers to a minesweeper board
Given the position of two queens on a chess board, indicate whether or not they are positioned so that they can attack each other.
Parse and evaluate simple math word problems returning the answer as an integer.
Clean up user-entered phone numbers so that they can be sent SMS messages.
Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is represented, or whether it is garbled.
Output the nursery rhyme 'This is the House that Jack Built'.
Determine if a triangle is equilateral, isosceles, or scalene.
Take input text and output it transposed.
Pick the best hand(s) from a list of poker hands.
Solve the zebra puzzle.
Count the rectangles in an ASCII diagram.
Implement a binary search algorithm.
Implement basic list operations
To try and encourage more sales of different books from a popular 5 book series, a bookshop has decided to offer discounts of multiple-book purchases.
Implement a doubly linked list
Given a letter, print a diamond starting with 'A' with the supplied letter at the widest point.
Implement variable length quantity encoding and decoding.
Convert a number, represented as a sequence of digits in one base, to any other base.
Implement a clock that handles times without dates.
Search a file for lines matching a regular expression pattern. Return the line number and contents of each matching line.
Create a program to solve a word search puzzle.
Write a function to solve alphametics puzzles.
Tally the results of a small football competition.
Generate musical scales, given a starting note and a set of intervals.
Translate RNA sequences into proteins.
Correctly determine change to be given using the least number of coins
Create a sentence of the form "One for X, one for me."
Calculate the number of steps to reach 1 using the Collatz conjecture