# Java Aufgabe Hilfe



## Johganan (1. Mai 2020)

Hallo ich brauche hilfe bei meinen Java Hausaufgaben ich verstehe diese Aufgabe nicht.

Ein Stapel Münzen besteht aus folgenden Münzsorzen: 20, 15,3 Cent, 1- und 2 Euro Münzen.


Erzeugen sie einen Stapel mit 20 verschiedenen Münzen.
Sortieren sie das Geld nach Münzen und geben sie an, wie viel jeder Stapel wert ist und wie viele Münzen auf jedem Stapel liegen.
Ich weiß einfach nicht wie ich das programmieren soll.

Danke im voraus.


----------



## Technipion (1. Mai 2020)

Hallo Johganan,


Johganan hat gesagt.:


> Ich weiß einfach nicht wie ich das programmieren soll.


es ist problemlos möglich einen wunderschönen, großen Kristall aus nur einem einzigen Salzkorn zu züchten. Allerdings braucht man halt irgendeinen Anfang. Was hast du dir denn bis jetzt konkret überlegt? Gerne auch Code posten falls du schon irgendwas hast!

Gruß Technipion


----------



## ComFreek (2. Mai 2020)

Vielleicht sollten wir auf sowas einfach mit Codegolfing antworten?


----------



## basti1012 (2. Mai 2020)

> Ein Stapel Münzen besteht aus folgenden Münzsorzen: 20, 15,3 Cent, 1- und 2 Euro Münzen.


das sind 5 verschiedene Münzen.
Wie soll den das dann gehen?


> 1. Erzeugen sie einen Stapel mit 20 verschiedenen Münzen.


verstehe das gerade nicht


----------



## tklustig (2. Mai 2020)

Die Programmierung ist weniger wichtig. Wichtig, ist das Verständnis der Mathematik. Nur die Mathematik erlaubt dir, diese Aufgabe zu lösen., sprich, du musst geeignete Algorithmen bilden können. Frage: In welchem Semester wurde diese Aufgabe gestellt? Hast Du das Grundstudium bereits bestanden, sprich, alle Mathescheine bekommen?
Ich werde versuchen, ein Lösung in C# zu entwickeln, habe aber spontan auch keine Idee. Du kannst mich gerne auch über meine Website kontaktieren. Sollte die Fragestellung algorithmisch nicht lösbar sein, werde ich Dir das mathematisch beweisen!
LG
Kipp, Thomas (Dipl.-Math. && beruflicher Softwareentwickler)
PS.:  Mich irritiert folgendes

Erzeugen sie *einen Stapel* mit 20 verschiedenen Münzen*(Singular)*
Sortieren sie das Geld nach Münzen und geben sie an, wie viel *jeder Stapel *wert ist und wie viele Münzen auf* jedem Stapel *liegen.*(Plural)*
Wäre 2. im Singular geschrieben, Die Aufgabe wäre lösbar, so aber ist sie konfus gestellt! Außerdem müsste "sie" groß geschrieben sein, => Fake Job??


----------



## Technipion (2. Mai 2020)

ComFreek hat gesagt.:


> Vielleicht sollten wir auf sowas einfach mit Codegolfing antworten?


Na dann leg ich doch mal vor:

```
from random import randint as ri
l=[[20,15,3,1,100,200][ri(0, 5)] for i in range(20)];lc=l.count
[print(f'{lc(c)} * {c/100:.2f}€ = {c/100*lc(c):.2f}€') for c in sorted(set(l))]
```

Absichtlich in Python, man will ja niemanden in Versuchung bringen abzuschreiben.

@Johganan : Fangen wir Schritt für Schritt an.


Johganan hat gesagt.:


> Erzeugen sie einen Stapel mit 20 verschiedenen Münzen.


Hast du dazu schon was?


----------



## tklustig (2. Mai 2020)

Dein Code funktioniert nicht, ist aber nachvollziehbar.(siehe Anhang). Python ist eine der dämlichsten Interpreter Sprachen, die ich kenne. Warum formulierst du Deine Lösung nicht in C oder meinetwegen in JavaScript oder PHP??
Anbei noch dein Code, ausgeführt von *Python 2.7*! Nicht von Python 3.X. Da liegt wohl der Hund begraben

```
import platform
import time
print"Python Version %s:" % platform.python_version()
time.sleep(3)
from random import randint as ri
l=[[20,15,3,1,100,200][ri(0, 5)] for i in range(20)];lc=l.count
[print(f'{lc(c)} * {c/100:.2f}€ = {c/100*lc(c):.2f}€') for c in sorted(set(l))]
```

Ich würde in C# ähnlich vorgehen wie du, nämlich über einen Zufallsgenerator 20 Münzen erzeugen lassen und diese in eine generische Liste packen und sortieren, Wäre ihm aber mit Pseudocode oder Struktogrammen nicht eher geholfen? Ich meine, solange sich "Johagan" nicht mehr meldet, sollte dieser Thread geschlossen werden. Informatiker, die nix auf'm Kasten haben und sich nicht mehr melden, nun ja, nein Danke!!


----------



## ComFreek (3. Mai 2020)

tklustig hat gesagt.:


> Frage: In welchem Semester wurde diese Aufgabe gestellt? Hast Du das Grundstudium bereits bestanden, sprich, alle Mathescheine bekommen?


Diesen Gedankengang kann ich nicht ganz nachvollziehen. Diese Aufgabe bedarf keiner höheren Mathematik. Mit genügend Erklärungen könnte man die Aufgabe auch mit 4. Klässlern spielen.

@Technipion Ich unterbiete hiermit mit 127 Bytes in JavaScript 

```
c={1:0,3:0,15:0,20:0,100:0,200:0};for(o=Object,i=20;i--;)c[o.keys(c)[~~(Math.random()*6)]]++;o.entries(c).map(t=>[t,t[0]*t[1]])
```
Die Ausgabe ist beispielsweise

```
[[["1",0],0],[["3",3],9],[["15",4],60],[["20",3],60],[["100",7],700],[["200",3],600]]
```
Das bedeutet, dass die Münze mit Wert 1€ 0 Mal gezogen wurde, die Münze mit 3€ genau 3 Mal (und damit 9€ Wert), die Münze mit Wert 15€ genau 4 Mal (damit 60€ Wert) usw.[/code]

Falls jemand Ideen hat, wie ich die Null-Initialisierungen wegbekomme, immer her damit!



Spoiler: Frühere Versionen



*Update:* Runter auf 112 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)j=~~(Math.random()*6),d[j]=d[j]?d[j]+1:1;d.map((x,i,_,e=c[i])=>[e,e*x])
```

*Update 2:* Runter auf 110 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)d[j=~~(Math.random()*6)]=d[j]?d[j]+1:1;d.map((x,i,_,e=c[i])=>[e,e*x])
```

*Update 3:* Runter auf 105 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)d[j=~~(Math.random()*6)]=~~d[j]+1;d.map((x,i,_,e=c[i])=>[e,e*x])
```

*Update 4:* Runter auf 103 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)d[j=Math.random()*6|0]=~~d[j]+1;d.map((x,i,_,e=c[i])=>[e,e*x])
```

*Update 5:* Runter auf 100 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)d[j=Math.random()*6|0]=~~d[j]+1;d.map((x,i)=>[c[i],c[i]*x])
```




*Update 6:* Runter auf 98 Bytes: 
	
	
	



```
c=[1,3,15,20,100,200];d=[];for(i=20;i--;)d[j=Math.random()*6|0]=-~d[j];d.map((x,i)=>[c[i],c[i]*x])
```

Jemand anderes hat es sogar auf 93 Bytes geschafft, aber ehrlich gesagt verstehe ich die Lösung nicht ganz  93 Byte Variante im 'The Nineteenth Byte' Chat auf CodeGolf.StackExchange.com

Hilfreich waren:

Tips for golfing in JavaScript
Tips for Golfing in ECMAScript 6 and above
The Nineteenth Byte | chat.stackexchange.com


----------



## tklustig (3. Mai 2020)

Ich bin der Ansicht, wir verrennen uns hier in Absurditäten. Ob der Code 98 Bytes umfasst, oder 127 Bytes ist doch völlig irrelevant.

 Die Bedingung war doch:


Erzeugen sie einen Stapel mit 20 verschiedenen Münzen.
Das umzusetzen ist fürwahr trivial

aber:


_Sortieren sie das Geld nach Münzen und geben sie an, wie viel jeder Stapel wert ist und wie viele Münzen auf jedem Stapel liegen._
 

Ist damit der Stapel innerhalb des ersten Stapels gemeint, und wie soll sortiert werden. Aufsteigend oder absteigend. Nach welchen Münzen soll sortiert werden? Meiner Ansicht nach ist diese Aufgabe Unsinn, und da sich „Johagann“ nicht mehr meldet, für mich auch nicht mehr relevant!

Happy Coding

Kipp, Thomas


----------



## Technipion (3. Mai 2020)

Hallo tklustig,


tklustig hat gesagt.:


> Ich bin der Ansicht, wir verrennen uns hier in Absurditäten. Ob der Code 98 Bytes umfasst, oder 127 Bytes ist doch völlig irrelevant.


@ComFreek hat sich hier nur an CodeGolf versucht. Einfach ausgedrückt: Im Golf versucht man, mit so wenigen Schlägen wie möglich ans Ziel zu kommen. Genau darum geht es beim CodeGolf: So wenig Programmcode wie möglich, der das Problem löst.

An der Stelle übrigens:


ComFreek hat gesagt.:


> *Update 6:* Runter auf 98 Bytes:


Respekt alter! Ich beuge mich dem Meister 



tklustig hat gesagt.:


> Meiner Ansicht nach ist diese Aufgabe Unsinn, und da sich „Johagann“ nicht mehr meldet, für mich auch nicht mehr relevant!


Ja der Thread ist ein bisschen entglitten, allerdings meldet sich @Johganan ja auch nicht mehr. Auch in seinem Cross-Post ist seither Funkstille. Ich nehme an der feiert jetzt das Wochenende durch, und erwartet sich morgen fertige Lösungen von uns. Von daher bitte ich einfach mal, hier nichts fertiges (in Java) zu posten.

Gruß Technipion


----------



## tklustig (3. Mai 2020)

Hallo *Technipion*
hattest du meine Bitte um Hilfe während der Portierung von Python 2.7 auf Python 3.x auf  meinem Pi nicht bekommen? Ich habe sie Dir persönlich zugestellt, mitsamt all meiner Kontaktdaten!!
Folgender Thread ist nach wie vor ungelöst .....
LG
Kipp, Thomas


----------

