Random letter

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

So geht es auch:

Code: Alles auswählen

a = Random(51)
Debug Chr(65 + a + a / 26 * 6)
Mfg DerProgger
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Code: Alles auswählen

Debug Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Random(Len("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")-1)+1,1)
Bild
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Kiffi

:lol: cool, das is ja mal tödlich unkonvetionell.
(obwohl du in sofern gemogelt hast, dass man den string
strenggenommen auch als array interpretieren müsste. ;) )

für A-Z,a-z unnötiger aufwand, aber ne prima idee für unregelmäßige reihen.

die idee von DerProgger is auch interessant,
obwohl es ja genaugenommen zwei zuweisungen sind. ;)
mir schwebte auch die lösung vor, wie sie Rayman gepostet hat.

...und da ich vorhin mich der gleichmäßigkeit der verteilung versichern wollte...
ich will euch den code nicht vorenthalten:

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(1024, 768,32,"test")
Dim a(64)
Delay(1000)
Repeat
  ClearScreen(0)
  ExamineKeyboard()
  For n=0 To 9                              ; 10 pro Frame, damit's schneller ist
    cha = 65+Random(25) + 32*Random(1)      ; zufällig aus A-Z, a-z
    a( cha - 64 ) + 1                       ; im Array zählen, wieviele davon
  Next
  StartDrawing(ScreenOutput())
    For n=0 To 64
      DrawingMode(1)
      DrawText(0,12*n,Chr(n+64),$FF8040)    ; zugeordnetes Zeichen anzeigen
      Box(16,12*n,a(n),10,$804020)          ; \
      DrawingMode(4)                        ;  }- gerahmte Box zeichnen
      Box(16,12*n,a(n),10,$FF8040)          ; /
    Next
  StopDrawing()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

Verstößt leider gegen die Regeln -.-

Code: Alles auswählen

If Random(1) = 1 : acci = 65 : Else : acci = 97 : EndIf
Debug Chr(acci + Random(25))
Zufällige Buchstaben klein/groß
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nu, das aber ja schon das richtige prinzip.

der abstand von 65 bis 97 ist 32...

statt

Code: Alles auswählen

If Random(1) = 1 : acci = 65 : Else : acci = 97 : EndIf 
könntest du auch schreiben:

Code: Alles auswählen

acci = 65 + 32*Random(1)
...und wenn du jetzt die lösung oben anschaust, wirst du sehen,
dass es genau darauf hinausläuft.

ERKLÄRUNG:
Random() liefert ein Integer, kein Float.
dass heißt, wenn du Random(3) schreibst,
wird es immer genau 0, 1, 2 oder 3 liefern, niemals 1.5

wenn du das ergebnis von Random mit einem Faktor multiplizierst,
wird der Faktor zum Abstand.

d.h. 100*Random(3) wird 0, 100, 200 oder 300 liefern,
aber niemals 97 oder 251.

deswegen liefert 32*Random(1) immer 0 oder 32,
also die entscheidung ob groß oder klein,
und niemals irgendwelchen mist dazwischen.
;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

danke für den guten tipp :allright:
wieder was gelernt :D
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ich will auch :D

Code: Alles auswählen

Debug Chr((Random(1) + 2) << 5 + 1 + Random(25))
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ich habe auch noch was :

Das hier gibt nur Vokale aus, leider ist es mir noch nicht gelungen daraus eine einzige Zeile zu machen,aber ich denke noch ^^

Code: Alles auswählen

a = Random(4)-2
Debug Chr(73+Int((5+(a-0.1)/Abs(a-0.1)))*a)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> leider ist es mir noch nicht gelungen daraus eine einzige Zeile zu machen
Nö, wie auch? a kommt in der 2. Zeile ja 3x vor, da muss man sich sichergehen, dass man 3x dieselbe Zufallszahl erhält (RandomSeed()).

Ich habe deine Lösung mal auf einen Einzeiler gebracht:

Code: Alles auswählen

Debug Chr(73+Int((5+(Random(4+(RandomSeed(0)*0))-2-0.1)/Abs(Random(4+(RandomSeed(0)*0))-2-0.1)))*Random(4+(RandomSeed(0)*0))-2)
Leider wirst du feststellen, dass der Code —trotz eingebauter Random() Funktion— immer nur denselben Buchstaben erzeugt...

Ohhhhhhhhhhhhhh... :roll:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

lol weil er ja die festen Zufallszaheln aus der Datenbank nimmt

ich habe ja schon versucht die kleine Gleichung die da steht x = a*(5+a/|a|) nach a auszulösen, sodass ich nur ein Random brauche
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten