Haskell作业任务代做代编程、代写Haskell作业编程

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) ¨

本团队核心人员组成主要包括硅谷工程师、BAT一线工程师,国内Top5硕士、博士生,精通德英语!我们主要业务范围是代做编程大作业、课程设计等等。

我们的方向领域: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

猜你喜欢

转载自www.cnblogs.com/1111myapple/p/8982305.html
今日推荐