Initial commit as of 2018-10-16
This commit is contained in:
105
application/models/NicknameModel.php
Normal file
105
application/models/NicknameModel.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class NicknameModel extends CI_Model {
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
function generateMarkovTable($names = [])
|
||||
{
|
||||
$table = [];
|
||||
foreach ($names as $name) {
|
||||
$letters = str_split($name);
|
||||
foreach ($letters as $key => $letter) {
|
||||
$letter = strtolower($letter);
|
||||
if (!array_key_exists($key + 1, $letters)) {
|
||||
continue;
|
||||
}
|
||||
$nextLetter = strtolower($letters[$key + 1]);
|
||||
if (!(array_key_exists($letter, $table) && array_key_exists($nextLetter, $table[$letter]))) {
|
||||
$table[$letter][$nextLetter] = 1;
|
||||
continue;
|
||||
}
|
||||
$table[$letter][$nextLetter] = $table[$letter][$nextLetter] + 1;
|
||||
}
|
||||
}
|
||||
return $table;
|
||||
}
|
||||
|
||||
function generateMarkovName($table, $minLength = 3, $maxLength = 10)
|
||||
{
|
||||
$currentLetter = array_rand($table);
|
||||
$text = [$currentLetter];
|
||||
$length = mt_rand($minLength, $maxLength);
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$nextLetter = $this->getRandomWeightedElement($currentLetter, $table);
|
||||
if (count($text) > 1) {
|
||||
$previousLetter = $text[$i - 1];
|
||||
while ($previousLetter == $nextLetter) {
|
||||
$nextLetter = $this->getRandomWeightedElement($currentLetter, $table);
|
||||
}
|
||||
}
|
||||
$text[] = $nextLetter;
|
||||
$currentLetter = $nextLetter;
|
||||
}
|
||||
return ucfirst(implode('', $text));
|
||||
}
|
||||
|
||||
function getRandomWeightedElement($key, array $table)
|
||||
{
|
||||
if (array_key_exists($key, $table)) {
|
||||
$weightedValues = $table[$key];
|
||||
$rand = mt_rand(1, (int) array_sum($weightedValues));
|
||||
foreach ($weightedValues as $key => $value) {
|
||||
$rand -= $value;
|
||||
if ($rand <= 0) {
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_rand($table);
|
||||
}
|
||||
|
||||
public function generateName() {
|
||||
$names = [
|
||||
'Gronkh',
|
||||
'Currywurst',
|
||||
'KingOfDog',
|
||||
'Zeybe',
|
||||
'unge',
|
||||
'Dner',
|
||||
'Arazhul',
|
||||
'Hopson',
|
||||
'Carykh',
|
||||
'Benx',
|
||||
'Demaster',
|
||||
'Manucraft',
|
||||
'Minecraft',
|
||||
'ProPlayer91',
|
||||
'Green',
|
||||
'Blue',
|
||||
'Red',
|
||||
'Ultra',
|
||||
'Pro',
|
||||
'Racing',
|
||||
'Shooter',
|
||||
'King',
|
||||
'Yellow',
|
||||
'Gold',
|
||||
'xXXx',
|
||||
'iTz_',
|
||||
'Running',
|
||||
'YT',
|
||||
'TV',
|
||||
'HD',
|
||||
'Huge',
|
||||
'Best',
|
||||
'imFlying',
|
||||
'Not'
|
||||
];
|
||||
$table = $this->generateMarkovTable($names);
|
||||
echo str_pad($this->generateMarkovName($table, 4, 7), 12);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user