MiniBCC #19 - SpeakNum - nicht nur für Profis

Übersicht Sonstiges Projekte

Neue Antwort erstellen

SpionAtom

Betreff: MiniBCC #19 - SpeakNum - nicht nur für Profis

BeitragFr, Jan 24, 2014 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted imageuser posted image

H3rzlich Willkommen zum M1n1BCC #19 - SpeakNum



Aufgabe
schreibt ein Programm namens SpeakNum, das in der Lage ist alle natürlichen Zahlen von 1 - 999 999 999 (Neunhundertneunundneunzigmillionen-neunhundertneunundneunzigtausend-neunhundertneunundneunzig) auszusprechen AUF DEUTSCH.
Dazu könnt ihr entweder selbst ins Mikrofon schnattern, oder bequem auf das Paket von Tagirijus zugreifen, der so freundlich war und extra für die Aufgabe ein paar Samples eingesprochen hat.

Paket von Tagirius (Darf verwendet werden, muss es aber nicht. In jedem Fall gebietet der Anstand bei Verwendung mindestens einen Crediteintrag)


Details
Übergeben werden die Zahlen in Zifferschreibweise direkt an das Programm.

Folgende Parameterformen sollen möglich sein:

SpeakNum 1 (Sprach-Ausgabe: !Eins!)
SpeakNum 1, 1 (Sprach-Ausgabe: !Eins Eins!)
Speaknum 2-3 (Sprach-Ausgabe: !Zwei Drei!)
SpeakNum 5, 8-13, 21 (Sprach-Ausgabe: !Fünf Acht Neun Zehn Elf Zwölf Dreizehn Einundzwanzig!)

Das Programm muss also in der Lage sein, eine beliebige Menge an Zahlen und Zahlenfolgen entgegenzunehmen und dann auszugeben.
Um das zu prüfen, muss die mitgelieferte BAT-Datei mit diesem Programm laufen.
Soviel zum Pflichtteil.
Darüber hinaus dürft ihr natürlich weitere Befehle einbauen, die eure Sprachfunktion nutzen. Wie wäre es mit einem Befehl 'time', der einem die aktuelle Uhrzeit vorliest?
Gerade in diesem Zusatzteil könnt ihr versuchen euch einen Vorsprung zur Konkurrenz zu ergattern.
Was ich auch nicht verbiete, ist eine grafische oder textuelle Ausgabe. Am Ende ist wichtig, dass die BAT-Datei läuft.
Die BAT-Datei darf mit euren Befehlen erweitert werden, solange ihr die ursprünglichen Daten nicht überschreibt.

BAT-Datei



(Die Regeln übernehme ich doch glatt von Herrn Xeres)
Regeln

  • Es gelten die Regeln und zwar (wie ihr seht) im Sfx-Extra Modus!
  • Erlaubte Sprachen sind: BlitzBasic3D, BlitzPlus, BlitzMax, Monkey.
  • Ihr benötigt als Abgabe: Den Code, eine ausführbare Exe, die Sprachdateien, die BAT-Datei. Dazu könnt ihr eine Readme packen, oder einen ungecrunchten Quelltext.
  • Das Schreiben von Dateien (z.B. Highscore) ist nicht erlaubt.
  • Das Lesen von Dateien ist nicht nur erlaubt, sondern unumgänglich wegen der Sprachdateien Wink.
  • Ihr dürft auf Umgebungsvariablen lesend zugreifen.
  • Jede Art von Skriptsprache ist nicht erlaubt.
  • Es ist Aufgabe der Teilnehmer, den Veranstalter zu Unklarheiten bei den Regeln zu fragen. „Ich habe mein Programm vorgestellt und Niemand hat sich beschwert!!11!“ ist kein zulässiges Argument.
  • Die Abstimmung wird dann bis zum nächsten Sonntag laufen. Der Teilnehmer, dessen Beitrag die meisten Stimmen auf sich vereint gewinnt, und darf den nächsten MiniBCC Ausrichten.



Zeit & Abgabe
Ihr habt ~72 bis Sonntag, den 2. Feb.2o14, 23:59 Uhr Zeit, mir das Programm in Form eines Zip-Ordners zukommen zu lassen (hier im Thread oder als PM).
Wichtig ist, dass das Paket den Regeln entsprechend vollständig ist.
  • Zuletzt bearbeitet von SpionAtom am Fr, Jan 31, 2014 21:23, insgesamt 2-mal bearbeitet

Tagirijus

ehemals "Tag"

BeitragFr, Jan 24, 2014 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man, ich bin so aufgeregt !
Tagirijus.de

SpionAtom

Betreff: Die Spiele sind eröffnet

BeitragDo, Jan 30, 2014 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Happy coding, es geht los!
Abgabe ist bis spätestens Sonntag, 23 Uhr 59.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Spark Fountain

BeitragFr, Jan 31, 2014 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Interessante Aufgabenstellung! Ich habe schon angefangen ein kleines "Lottospiel" zu programmieren, mal sehen ob ich es noch optimieren kann... Die Ausgabe der Zahlen klappt schon, und das Einlesen der Parameter ebenso (sprich, die Aufgabe an sich ist erfüllt). Jetzt geht es nur noch um das "Bessersein als die Konkurrenz" Razz
Gewinner der MiniBCC's #11, #13 und #28

SpionAtom

BeitragFr, Jan 31, 2014 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das höre ich doch gerne.
Lottospiel ist eine schöne Erweiterung.
Was auch nett wäre, wäre noch größere Zahlwörter einzubauen (Milliarden,...)
Oder ein Taschenrechner...
Seid kreativ!
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Tobchen

BeitragFr, Jan 31, 2014 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh nein, ich habe die Aufgabe nicht richtig gelesen und dachte wegen des englischen Titels, man solle auch englische Sprachausgabe machen -.-
Naja, meine Sounddateien sind eh einige Kilobyte über dem Limit...
SpeakNum (Fremdschäm Edition)
Oh ja, für diesen dummen Stöhn-Spaß habe ich zwei Stunden meines Freitags verschwendet!
Ich bin übrigens voll als Sprecher zu haben, nur meine Stimme ist nun erstmal einige Tage lang unbrauchbar...

SpionAtom

Betreff: nur auf deutsch

BeitragFr, Jan 31, 2014 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Richtig erkannt, aufgrund der Fairness werde ich nur deutsche Zahlen-Sprachausgabe zulassen.
- Schade, war ne lustige Idee.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Lobby

BeitragSa, Feb 01, 2014 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab da mal was probiert: Download

Special Feature: Es können auch Kommazahlen wie 5352.42 wiedergegeben werden
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux

Spark Fountain

BeitragSo, Feb 02, 2014 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nach zahlreichem Gecrunche hab ich es geschafft, den Code auf 6KiB zu bringen. Es handelt sich bei dem Beitrag um ein Lottospiel, welches dem Nutzer bei Bedarf schon vorher die gelosten Zahlen verrät Wink

Download: https://www.blitzforum.de/upload/file.php?id=12695

Viel Spaß!
Gewinner der MiniBCC's #11, #13 und #28

Thunder

BeitragMo, Feb 03, 2014 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Coole Aufgabe, noch cooler, dass die Sounddateien dabei waren. Danke an Tagirijus Very Happy Habe sowas schon Mal probiert (ist schon länger her), aber am Ende die Lust verloren, weil meine eigenen Aufnahmen nicht gut genug waren...

MeinBlitzMax: [AUSKLAPPEN]
Strict
Framework brl.blitz
Import brl.audio
Import brl.oggloader
Import brl.directsoundaudio
Import brl.filesystem

Local s$, c, li, la, args$, i

Global one:TSound[], ten:TSound[], dig:TSound[], ext:TSound[], list:TSound[]

one = [ls("elf.ogg"), ls("zwoelf.ogg"), ls("drei.ogg"), ls("vier.ogg"), ls("fuenf.ogg"), ..
ls("sech.ogg"), ls("sieb.ogg"), ls("acht.ogg"), ls("neun.ogg")]
ten = one[..]
ten[0] = ls("zehn.ogg")
ten[1] = ls("zwanzig.ogg")

dig = one[..]
dig[0] = ls("ein.ogg")
dig[1] = ls("zwei.ogg")
dig[5] = ls("sechs.ogg")
dig[6] = ls("sieben.ogg")

ext = [ls("eins.ogg"), ls("eine.ogg"), ls("und.ogg"), ls("million.ogg"), ..
ls("tausend.ogg"), ls("hundert.ogg"), ls("zig.ogg"), ls("ssig.ogg")]

WriteStdout "Code by Thunder~nSound by Tagirijus~n~n"

For s = EachIn AppArgs[1..]
args :+ s
Next
If FileType(args) = 1 Then file(args);End
args = args+"."

s=""
For i = 0 Until args.length

c = args[i]
If c >= Asc"0" And c <= Asc"9" Then
s :+ Chr c
ElseIf s Then
If li Then
For Local i:Long = Long(la+1) To Long(s)
WriteStdout "* "+String i+"~n"
speak String i
Next
li = 0
Else
WriteStdout "* "+s+"~n"
speak String Long s
la = Int s
If c = Asc"-" Then li = 1
EndIf
s = ""
EndIf

Next
End

Function file(s$)
Local f:TStream = ReadFile(s), w:Short
While Not Eof(f)
w = ReadShort(f)
WriteStdout w+", "
speak String w
Wend
CloseFile f
EndFunction

Function speak(s$)
Local a:TSound, ch:TChannel

Delay 500

If s.length<=3 Then
speak_ s, 1
ElseIf s.length <= 6 Then
speak_ s[..s.length-3], 0
list :+ [ext[4]]
speak_ s[s.length-3..], 1
ElseIf s.length <= 9 Then
speak_ s[..s.length-6], 2
list :+ [ext[3]]
speak_ s[s.length-6..s.length-3], 0
If s[s.length-6..s.length-3]<>"000" Then list :+ [ext[4]]
speak_ s[s.length-3..], 1
EndIf

For a = EachIn list
If a Then ch = a.Play()
While ch.playing(); Delay 5; Wend
Next
list = Null
EndFunction

Function ls:TSound(s:String)
Return LoadSound(s)
EndFunction

Function n(x)
Return x-Asc"1"
EndFunction

Function speak_(s$, e)

If s.length = 3 Then
If s[0] = Asc"0" Then
If s[1] = Asc"0" Then s = s[2..] Else s = s[1..]
Else
list:+[dig[n(s[0])]]
list:+[ext[5]]
s = s[1..]
e = 0
EndIf
EndIf

If s.length = 2 Then

Select s[0]
Case Asc"0"

If s[1] = Asc"1" Then list:+[ext[0]] ..
ElseIf s[1] > Asc"1" Then list:+[dig[n(s[1])]]

Case Asc"1"
If s[1] > Asc"0" Then list :+ [one[n(s[1])]]
If s[1] = Asc"0" Or s[1] > Asc"2" Then list :+ [ten[0]]

Default

If s[1] > Asc"0" Then list :+ [dig[n(s[1])], ext[2]]
list :+ [ten[n(s[0])]]

If s[0] = Asc"3" Then list :+ [ext[7]] ..
ElseIf s[0] > Asc"3" Then list :+ [ext[6]]

EndSelect

Else

Select e
Case 1
If s[0] = Asc"1" Then list:+[ext[0]] ..
ElseIf s[0] > Asc"1" Then list:+[dig[n(s[0])]]
Case 2
If s[0] = Asc"1" Then list:+[ext[1]] ..
ElseIf s[0] > Asc"1" Then list:+[dig[n(s[0])]]
Default
If s[0]<>Asc"0" Then list :+ [dig[n(s[0])]]
EndSelect

EndIf

EndFunction



Mein Paket: https://www.blitzforum.de/upload/file.php?id=12696

Mein Wahnsinns-Special-Feature: Man kann sich Dateien wortweise ausgeben lassen. Wortweise soll heißen, es werden zwei Byte Little-Endian-mäßig zusammengefasst und ausgesprochen und dann die nächsten zwei Byte. Nichts besonderes.

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group