1. 程式人生 > >Haskell作業任務代做代編程、代寫Haskell作業編程

Haskell作業任務代做代編程、代寫Haskell作業編程

internet RR ast ESS QQ AMM form been nth

Haskell作業任務代做代編程、代寫Haskell作業編程
Verwenden Sie im Wesentlichen elem, head, tail, map, reverse, last, filter, concat, sum
und (++), um die folgenden Funktionen zur Listenverarbeitung in Haskell zu programmieren –
die Verwendung von Pattern-Matching ist verboten:
a) Eine Funktion, die einen String1
erh¨alt und zun¨achst folgende Ersetzungen durchfuhren ¨
soll:
– Entspricht ein Zeichen einer Ziffer, so soll es auf die entsprechende Zahl abgebildet
werden.
– Entspricht ein Zeichen dem Buchstaben a, so soll dieses Zeichen auf die Zahl 1 abgebildet
werden.
– Alle anderen Zeichen sollen auf die Zahl 0 abgebildet werden.
Danach soll die Summe dieser Zahlen berechnet werden. Zum Beispiel soll fur ¨ "138aza"
der Wert 14 berechnet werden. (7 Punkte)
b) Einige Leute geben heutzutage einer Aussage nochmal eine besonders freundliche Betonung,
indem sie alles gro? schreiben. Ebenso tippen einige Personen gefuhlt 20.000 Zeichen ¨
pro Sekunde mit dem Smartphone, haben aber absolut keine Zeit, die Gro?- und Kleinschreibung
zu beachten. Geben Sie eine Funktion an, die eine Liste von Strings erh¨alt und
alle Kleinbuchstaben eines Strings, der mit einem Ausrufezeichen endet, in Gro?buchstaben
umwandelt. Falls ein String jedoch nicht mit einem Ausrufezeichen endet, sollen alle
Gro?buchstaben in Kleinbuchstaben umgewandelt werden. Zum Beispiel soll fur ¨
["Du bist so intelligent wie eine Bananeschale und halb so gutaussehend!",
"Ich schreibe jedes Wort klein Nebensaetze und Punkte kenne ich nicht"]
das folgende Ergebnis berechnet werden:
["DU BIST SO INTELLIGENT WIE EINE BANANESCHALE UND HALB SO GUTAUSSEHEND!",
"ich schreibe jedes wort klein nebensaetze und punkte kenne ich nicht"]
(7 Punkte)
c) Eine Funktion, die eine Liste von Listen von Zahlen erh¨alt und zun¨achst alle innersten
Listen entfernt, die weniger als 4 Elemente enthalten. Die ubriggebliebenen inneren Listen ¨
sollen umgedreht werden und au?erdem sollen bei jeder inneren Liste alle Elemente au?er
den ersten Dreien entfernt werden. Danach sollen alle inneren Listen zu einer gro?en verschmolzen
werden. Zum Beispiel soll fur ¨ [[1,2],[1..4],[6..8],[8..12]] das Ergebnis
[4,3,2,12,11,10] berechnet werden. (11 Punkte)
1Strings sind in Haskell nichts anderes als Listen von Zeichen, d.h. "Haskell" ist nur eine andere Darstellung
fur die Liste ¨ [’H’,’a’,’s’,’k’,’e’,’l’,’l’].
1
Hinweis: Die Bibliothek Data.Char beinhaltet nutzliche Funktionen, die Sie in Ihrer L ¨ ¨osung
verwenden durfen. Sie k ¨ ¨onnen die Bibliothek durch import Data.Char am Anfang des Quelltextes
in Ihr Programm einbinden. Die Dokumentation von Bibliotheken finden Sie im Internet
unter http://www.haskell.org/ghc/docs/latest/html/libraries/.
Aufgabe 2 (30 Punkte)
Implementieren Sie in Haskell die folgenden Funktionen auf Listen im Wesentlichen unter Verwendung
von Pattern-Matching und Rekursion – d.h. Sie durfen Hilfsfunktionen definieren und ¨
nutzen, allerdings ist die Verwendung von Listenfunktionen wie z.B. map, concat, replicate
usw. verboten.
a) Eine Funktion, die eine Liste erwartet und je zwei benachbarte Elemente vertauscht.
Enth¨alt die Liste eine ungerade Anzahl an Elementen, so bleibt die Position des
letzten Elements unver¨andert. Zum Beispiel soll fur die Liste ¨ [1..9] das Ergebnis
[2,1,4,3,6,5,8,7,9] berechnet werden. (7 Punkte)
b) Eine Funktion, die eine Liste von Listen von Listen von Zahlen erwartet und die Summe
der jeweils ersten Elemente der innersten Listen berechnet. Zum Beispiel soll 44 fur die ¨
Liste [[[1,2],[4,5],[7,8,9]],[[13,15],[19]]] berechnet werden. (10 Punkte)
c) Eine Funktion, die eine Liste erwartet und eine Liste zuruckgibt, die das ¨ k-te Element
der Eingabeliste k-mal enth¨alt. Dabei soll die Reihenfolge unver¨andert bleiben und der
Listenindex erstreckt sich von 1 bis zur L¨ange der Liste. Zum Beispiel soll fur die Liste ¨
[’a’,’b’,’c’] das Ergebnis "abbccc" berechnet werden. (13 Punkte)
Aufgabe 3 (45 Punkte)
Diese Aufgabe besch¨aftigt sich mit Darts.
Das Dart-Board ist in 20 Zahlensegmente unterteilt. Die Felder z¨ahlen jeweils soviel, wie au?en
am entsprechenden Segment notiert ist. Ausnahmen sind die schmalen Kreise. Im ¨au?eren Kreis
z¨ahlen die Felder das Doppelte (Double-Felder), im mittleren Kreis das Dreifache (Triple-Felder)
der entsprechenden Zahl. Der Mittelpunkt des Boards, das Bullseye, z¨ahlt 50 Punkte (Double 25),
der Ring darum herum (Bull) 25 Punkte. Gespielt wird die Variante 501 mit Double-Out:
Jeder Spieler beginnt bei 501 Punkten. Eine Aufnahme besteht
aus (maximal) drei nacheinander geworfenen Darts.
Die erzielten Punkte werden jedesmal von der verbleibenden
Punktzahl abgezogen, wobei nach jeder Aufnahme der
jeweilige Gegenspieler dran ist. Es durfen nur diejenigen ¨
Darts gez¨ahlt werden, die im Board steckenbleiben. Gewonnen
hat derjenige Spieler, der zuerst genau 0 Punkte
erreicht hat, wobei der letzte Dart ein Doppel-Feld oder
das Bullseye treffen muss. Erzielt der Spieler zu viele Punkte
oder so viele, dass er nicht mehr mit einem Doppel abschlie?en
kann (der Spieler uberwirft sich), so werden alle ¨
Darts dieser Aufnahme nicht gez¨ahlt – der Spieler bleibt
auf dem selben Rest wie vor der Aufnahme. In der letzte
Aufnahme, in der die Punktzahl genau auf 0 reduziert
wird, k¨onnen auch weniger als 3 Darts geworfen werden.
Falls man sich uberwirft kann eine Aufnahme ebenso aus ¨
weniger als 3 Darts bestehen.
20 5 1
12 18
9 4
14 13
11 6
8 10
16 15
7 2
19 17 3
doppelt
dreifach
Bullseye
Bull
einfach
Ein einzelnes Spiel dieser Art nennt man Leg. Wer zuerst eine festgelegte Anzahl an Legs gewonnen
hat, gewinnt das gesamte Spiel. Dabei beginnen die Spieler die Legs jeweils abwechselnd.
2
Ein Leg im obigen Modus sei in Haskell wie folgt dargestellt:
? Ein Liste mit genau zwei Elementen [m, p] stellt die Punktzahl eines einzelnen geworfenen
Darts dar, wobei fur ¨ m eine 1, 2 oder 3 entsprechend Single, Double oder Triple darstellt
und p die Punktzahl des Zahlensegments ist. Das hei?t die Triple 20 entspricht der Darstellung
[3, 20], Double 20 [2, 20] und Single 20 [1, 20]. Da das Bullseye als Doppelfeld gez¨ahlt
wird, wird es als [2, 25] dargestellt. Au?erdem entspricht [0, 0] einem Fehlwurf.
? Eine Aufnahme ist eine Liste solcher zweielementigen Listen, z.B. entspricht
[[3, 20], [3, 19], [2, 25]] einem Treffer in die Triple 20, gefolgt von einem Treffer in die Triple
19, gefolgt von einem Treffer in das Bullseye. Falls ein Spieler seine Aufnahme schon
mit weniger als 3 Darts beendet hat, sich also uberworfen oder das Leg gewonnen hat, so ¨
enth¨alt die Liste entsprechend weniger Elemente.
? Ein Leg wird durch eine Liste von Aufnahmen (also einer Liste von Listen mit zweielementigen
Listen) dargestellt, in der jede Aufnahme mit ungerader Listenposition dem Spieler
zugeordnet ist, der das Leg begonnen hat und alle geraden dem Gegenspieler.
Hier einige Beispiel-Legs:
leg1 = [[[3,20],[3,20],[3,20]], [[3,20],[3,19],[2,25]], [[3,19],[3,19],[3,19]],
[[3,20],[3,19],[2,25]], [[2,25],[2,25],[2,25]]]
leg2 = [[[3,20],[3,20],[3,20]], [[3,20],[3,19],[2,25]], [[3,19],[3,19],[3,19]],
[[3,20],[3,19],[2,25]], [[2,25],[2,25],[1,25]], [[3,20],[3,19],[2,25]]]
leg3 = [[[3,20],[1,20],[1,20]], [[3,20],[1,20],[1,20]], [[3,20],[3,20],[3,20]],
[[3,20],[3,20],[3,20]], [[3,20],[1,1] ,[2,20]], [[3,20],[1,1] ,[2,20]],
[[3,20],[1,20],[2,20]]]
leg4 = [[[3,20],[1,20],[1,20]], [[3,20],[1,20],[1,20]], [[3,20],[3,20],[3,20]],
[[3,20],[3,20],[3,20]], [[3,20],[1,1] ,[2,20]], [[3,20],[1,1] ,[2,20]],
[[3,20],[1,20],[1,20]], [[3,20],[1,20],[2,20]]]
a) Implementieren Sie in Haskell eine Funktion legSieger, die ein Leg in der obigen Darstellung
als Eingabe erwartet und 1 zuruckliefert, falls der Spieler gewinnt, der das Leg be- ¨
gonnen hat, falls der andere Spieler gewinnt soll 2 zuruckgegeben werden. Ber ¨ ucksichtigen ¨
Sie dazu die oben dargestellten Regeln.
Die Funktion soll fur fehlerhafte Legs ¨ 0 zuruckgeben. Zum Beispiel falls kein Spieler genau ¨
0 Punkte erreicht hat, die angegebenen Felder gar nicht existieren (zum Beispiel TripleBull
oder Single-21) oder falls ein Spieler bereits gewonnen hat und der Gegner danach
trotzdem noch wirft.
Fur die Beispiel-Legs soll also ¨ legSieger leg1 als Ergebnis 1 liefern und legSieger leg2
soll 2 berechnen.
Tipp: Verwenden Sie Hilfsfunktionen um die Regeln systematisch abzudecken. Wie kann
das Abwechseln der Spieler einfach implementiert werden? (35 Punkte)
b) Die letzten maximal 3 Wurfe eines Legs, die der Gewinner des Legs zum gewinnen ben ¨ ¨otigt,
nennt man Finish. Implementieren Sie in Haskell eine Funktion highOut, welche eine Liste
von Legs in der obigen Darstellung entgegennimmt und fur den Spieler, welcher das ¨
erste Leg beginnt, uber alle Legs sein h ¨ ¨ochstes Finish ausrechnet. Beachten Sie dass diese
Information w¨ahrend des Spiels berechnet werden k¨onnen soll, gegebenenfalls ist also das
letzte Leg in der Eingabeliste noch nicht zu Ende gespielt. Falls der Spieler (noch) kein
Leg gewonnen hat, soll 0 zuruckgegeben werden. ¨
Zum Beispiel soll highOut [leg3,leg2,leg3,leg4,leg3] das Ergebnis 167 zuruckgeben, ¨
w¨ahrend 0 fur ¨ highOut [leg4,leg3] zuruckgegeben werden soll. (10 Punkte) ¨
http://www.6daixie.com/contents/18/1344.html

我們的方向領域:window編程 數值算法 AI人工智能 金融統計 計量分析 大數據 網絡編程 WEB編程 通訊編程 遊戲編程多媒體linux 外掛編程 程序API圖像處理 嵌入式/單片機 數據庫編程 控制臺 進程與線程 網絡安全 匯編語言 硬件編程 軟件設計 工程標準規等。其中代寫代做編程語言或工具包括但不限於以下範圍:

C/C++/C#代寫

Java代寫

IT代寫

Python代寫

輔導編程作業

Matlab代寫

Haskell代寫

Processing代寫

Linux環境搭建

Rust代寫

Data Structure Assginment 數據結構代寫

MIPS代寫

Machine Learning 作業 代寫

Oracle/SQL/PostgreSQL/Pig 數據庫代寫/代做/輔導

Web開發、網站開發、網站作業

ASP.NET網站開發

Finance Insurace Statistics統計、回歸、叠代

Prolog代寫

Computer Computational method代做

因為專業,所以值得信賴。如有需要,請加QQ:99515681 或郵箱:[email protected]

微信:codinghelp

Haskell作業任務代做代編程、代寫Haskell作業編程