Welche Programmiersprachen haben noch eine große Zukunft vor sich, welche gelten als veraltet?
-
lolor schrieb:
Mal ein einfaches Beispiel: Lies eine Textdatei ein, erstelle eine map für Buchstaben/Häufigkeit im Text und gib diese sortiert aus. Ich würde gerne ein schönes Python 3 Script dafür sehen.
wie gefällt dir die smalltalk-Implementierung?
($a to: $z), ($A to: $Z) do: [ :c | Transcript show: c asString, ' -> ', ((FileStream oldFileNamed: 'blabla.txt') contents occurrencesOf: c) asString; cr ].
läßt sich in 1 oder 2 Minuten programmieren.
- Kenner erkennen sofort, daß es sich hier wohl um ein Programm in einer funktionalen Programmiersprache handeln dürfte, denn es kommt ja ohne eine einzige explizite Variablenzuweisung aus :xmas1:
-
ipsec schrieb:
knivil schrieb:
Zeig mir, was Python grundsaetzlich anders macht als Scheme.
Python ist grundlegend objektorientiert, Scheme funktional. Wie unterschiedlich muss es dann noch sein?
Python ist sicher kein versteckter Scheme-Dialekt. Aber deine Argumentation passt trotzdem nicht:
Wo ist Python bitte "grundlegend objektorientiert"? Python bietet Unterstützung für objektorientiertes programmieren. Aber es bietet genauso die Möglichkeit funktional zu programmieren. Scheme bietet zwar von Haus aus keine nette Unterstützung von OOP an. Aber mit einigen Libraries/Dialekten ist OOP dennoch möglich.
-
µ schrieb:
Kann kein Python. Aber solche Beispiele haben doch null Aussagekraft.
Es sagt nicht viel aus, aber mich interessiert das weil ich es selbst nicht schön hinbekommen habe. Und damit mein schlechtes Bild von Python sich nicht immer weiter bestätigt, bitte ich jetzt mal unsere Fanboys was Schönes zu basteln, vielleicht werde ich dann ja wieder umgestimmt.
-
Was denn, keine Python Fans hier?
-
Ich habe nichts zu tun und poste mal eine C++ Version. :xmas1:
int main() { std::ifstream stream("test2.txt"); std::string s((std::istreambuf_iterator<char>(stream)), std::istreambuf_iterator<char>()); std::map<char, unsigned> char_map; std::for_each(s.begin(), s.end(), [&] (char c) { char_map[c]++; }); // Da range based for loops ja noch nicht implementiert sind for (auto i = char_map.begin(); i != char_map.end(); ++i) // gibt's von allem etwas. std::cout << i->first << ": " << i->second << '\n'; }
-
In dem Thread hier wird echt jedes Thema durchgekaut.
Zum letzten angesprochenen Thema könnte ich ein Scala und Haskell Programm beisteuern, die zumindest mit Blick auf die Kürze der Programme schwer zu schlagen sind (je 1 Zeile Code).
-
Dieser Thread hatte ein Thema?
-
Antoras schrieb:
Zum letzten angesprochenen Thema könnte ich ein Scala und Haskell Programm beisteuern, die zumindest mit Blick auf die Kürze der Programme schwer zu schlagen sind (je 1 Zeile Code).
Codegolfen?
puts IO.read("test.txt").bytes.inject(Hash.new(0)){|h,i| h[i]+=1;h}.map{|k,v| "'#{k.chr}' -> #{v}"}.sort
Ruby
-
In APL macht man das so (ohne Dateihandling)
{ (∪⍵),¨(+⌿⍵∘.=∪⍵) }input
Leider ist Dateihandling nicht so schön. Daher schaut das ganze dann so aus
{ (∪⍵),¨(+⌿⍵∘.=∪⍵) }{⎕NREAD ⍵ 82(⎕NSIZE ⍵)0}('foo.txt'⎕NTIE 0 32)
edit:
ohdas Forum ist nicht sehr APL freundlich. Dann eben als paste: http://codepad.org/RVfOhXMR
edit^2:
oh, hab übersehen, dass die Ausgabe alphabetisch sortiert sein soll. Also dann so http://codepad.org/Qu4JW3Hu
-
rüdiger schrieb:
In APL macht man das so (ohne Dateihandling)
{ (∪⍵),¨(+⌿⍵∘.=∪⍵) }input
Leider ist Dateihandling nicht so schön. Daher schaut das ganze dann so aus
{ (∪⍵),¨(+⌿⍵∘.=∪⍵) }{⎕NREAD ⍵ 82(⎕NSIZE ⍵)0}('foo.txt'⎕NTIE 0 32)
edit:
ohdas Forum ist nicht sehr APL freundlich. Dann eben als paste: http://codepad.org/RVfOhXMR
edit^2:
oh, hab übersehen, dass die Ausgabe alphabetisch sortiert sein soll. Also dann so http://codepad.org/Qu4JW3HuBraucht man da eine klingonische Tastatur zum Programmieren?
-
Michael E. schrieb:
puts IO.read("test.txt").bytes.inject(Hash.new(0)){|h,i| h[i]+=1;h}.map{|k,v| "'#{k.chr}' -> #{v}"}.sort
Ruby
Codegolfen?warum nicht ... hier die optimierte smalltalk-Version in 56 Zeichen + Filename:
(FileStream fileNamed: 'foo.txt') contents asBag sortedElements
und mit Ausgabe auf Transcript, 20 Zeichen mehr:
(FileStream fileNamed: 'foo.txt') contents asBag sortedElements printOn: Transcript
-
wftftw schrieb:
Braucht man da eine klingonische Tastatur zum Programmieren?
-
lolor schrieb:
Ja? Ich brauche in Python immer mehr Zeilen, aber wahrscheinlich bin ich zu schlecht. Mal ein einfaches Beispiel: Lies eine Textdatei ein, erstelle eine map für Buchstaben/Häufigkeit im Text und gib diese sortiert aus. Ich würde gerne ein schönes Python 3 Script dafür sehen. (Sollte ja kein Aufwand sein.)
Da du es ja mit wenig Zeilen haben wolltest:
file = open('c:/Dem_lolor_sein_Post.txt', 'r').read() print(''.join( (k+' '+str(v)+'\n') for k, v in sorted(dict((c, file.count(c)) for c in file).items(), reverse=True, key=lambda x: x[1])))
48 e 40 i 26 n 20 h 16 s 14 a 13 r 13 t 13 c 12 l 9 u 7 d 6 b 5 f 5 m 5 . 4 o 4 g 3 p 3 w 3 ü 3 , 2 B 2 I 2 P 2 S 2 T 2 k 2 y 2 x 2 ) 1 ( 1 / 1 3 1 : 1 ? 1 A 1 H 1 J 1 M 1 L 1 Z 1 ä 1 j 1 ö 1 z 1
-
ich würde sagen, diese Runde code golfen ging an smalltalk, oder schafft es jmd in < 56 Zeichen (+ Filename) ?
(FileStream fileNamed: 'foo.txt') contents asBag sortedElements
-
oder schafft es jmd in < 56 Zeichen (+ Filename) ?
Wie sieht die Ausgabe aus? So wie die von Dobi?
Ansonsten zwei Haskellversionen, die allerdings beispielsweise folgende Ausgabe erzeugen (wenn mittels
print
ausgegeben):
fromList [('a',10),('b',13)]
(WobeifromList
nur in der ersten Version vorkommt)Version 1:
Benötigt noch einimport Data.Map
undimport Control.Applicative
fromListWith(+).flip zip(repeat 1)<$>readFile "foo.txt"
Version 2:
Benötigt nochimport Data.List
und wiederimport Control.Applicative
map(\s->(head s,length s)).group.sort<$>readFile "foo.txt"
Ist natürlich wegen der ganzen weggelassenen Leerzeichen ziemlich hässlich, ist aber etwas kürzer als die Smalltalkversion.
Edit: Sehe gerade, dass du die Leerzeichen gar nicht mitgezählt hast...
-
deine haskell Version 1 kommt auf 89 Z plus Filename, wenn ich mich nicht verzählt habe.
die Leerzeichen habe ich bei mir mitgezählt, den Filenamen natürlich nicht (die Anführungszeichen aber schon), denn dessen Länge hat ja mit der Progsprache nichts zu tun.
-
!rr!rr_. schrieb:
deine haskell Version 1 kommt auf 89 Z plus Filename, wenn ich mich nicht verzählt habe.
Wie zählst du?
fromListWith(+).flip zip(repeat 1)<$>readFile "" map(\s->(head s,length s)).group.sort<$>readFile "" (FileStream fileNamed: '') contents asBag sortedElements
Ich zähle 48, 51, 56.
Edit: ah, vermutlich hast du die Imports mitgezählt. Würde ich nicht machen, die kann man abhängig von der Umgebung auch anders einbinden.
-
!rr!rr_. schrieb:
ich würde sagen, diese Runde code golfen ging an smalltalk, oder schafft es jmd in < 56 Zeichen (+ Filename) ?
(FileStream fileNamed: 'foo.txt') contents asBag sortedElements
Na das kann ich ja nicht auf mir sitzen lassen
h={};IO.read("foo.txt").chars{|i|h[i]||=0;h[i]+=1};h.sort # bzw. h=Hash.new(0);IO.read("foo.txt").chars{|i|h[i]+=1};h.sort
-
ich würde sagen, diese Runde code golfen ging an smalltalk
... oder eine von smalltalk inspirierte Sprache, natürlich
-
Michael E. schrieb:
h={};IO.read("foo.txt").chars{|i|h[i]||=0;h[i]+=1};h.sort # bzw. h=Hash.new(0);IO.read("foo.txt").chars{|i|h[i]+=1};h.sort
PS. wo ist'n da die Ausgabe? puts(h.to_s) oder sowas liefert bei mir nur wirre Zeichen