• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 19:37
CET 00:37
KST 08:37
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
ByuL: The Forgotten Master of ZvT29Behind the Blue - Team Liquid History Book19Clem wins HomeStory Cup 289HomeStory Cup 28 - Info & Preview13Rongyi Cup S3 - Preview & Info8
Community News
Blizzard Classic Cup - Tastosis announced as captains6Weekly Cups (March 2-8): ByuN overcomes PvT block4GSL CK - New online series18BSL Season 224Vitality ends partnership with ONSYDE20
StarCraft 2
General
Blizzard Classic Cup - Tastosis announced as captains GSL CK - New online series Weekly Cups (March 2-8): ByuN overcomes PvT block Weekly Cups (Feb 23-Mar 1): herO doubles, 2v2 bonanza Vitality ends partnership with ONSYDE
Tourneys
[GSL CK] Team Maru vs. Team herO WardiTV Team League Season 10 Master Swan Open (Global Bronze-Master 2) RSL Season 4 announced for March-April Sparkling Tuna Cup - Weekly Open Tournament
Strategy
Custom Maps
Publishing has been re-enabled! [Feb 24th 2026] Map Editor closed ?
External Content
The PondCast: SC2 News & Results Mutation # 516 Specter of Death Mutation # 515 Together Forever Mutation # 514 Ulnar New Year
Brood War
General
ASL21 General Discussion Gypsy to Korea BGH Auto Balance -> http://bghmmr.eu/ Recent recommended BW games BSL 22 Map Contest — Submissions OPEN to March 10
Tourneys
[Megathread] Daily Proleagues IPSL Spring 2026 is here! ASL Season 21 Qualifiers March 7-8 BWCL Season 64 Announcement
Strategy
Soma's 9 hatch build from ASL Game 2 Fighting Spirit mining rates Simple Questions, Simple Answers Zealot bombing is no longer popular?
Other Games
General Games
PC Games Sales Thread Nintendo Switch Thread Path of Exile No Man's Sky (PS4 and PC) Stormgate/Frost Giant Megathread
Dota 2
Official 'what is Dota anymore' discussion The Story of Wings Gaming
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug Heroes of StarCraft mini-set
TL Mafia
Five o'clock TL Mafia Mafia Game Mode Feedback/Ideas Vanilla Mini Mafia TL Mafia Community Thread
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread Mexico's Drug War Things Aren’t Peaceful in Palestine YouTube Thread
Fan Clubs
The IdrA Fan Club
Media & Entertainment
[Req][Books] Good Fantasy/SciFi books [Manga] One Piece
Sports
Formula 1 Discussion 2024 - 2026 Football Thread General nutrition recommendations Cricket [SPORT] TL MMA Pick'em Pool 2013
World Cup 2022
Tech Support
Laptop capable of using Photoshop Lightroom?
TL Community
The Automated Ban List
Blogs
Iranian anarchists: organize…
XenOsky
FS++
Kraekkling
Shocked by a laser…
Spydermine0240
Gaming-Related Deaths
TrAiDoS
Unintentional protectionism…
Uldridge
ASL S21 English Commentary…
namkraft
Customize Sidebar...

Website Feedback

Closed Threads



Active: 1988 users

The Big Programming Thread - Page 786

Forum Index > General Forum
Post a Reply
Prev 1 784 785 786 787 788 1032 Next
Thread Rules
1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution.
2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20)
3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible.
4. Use [code] tags to format code blocks.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
October 24 2016 22:59 GMT
#15701
We had a few non-graded java recursion exercises on a handout today

one of them was to: "given a string, compute recursively a new string where identical chars that are adjacent in the original string are separated from each other by a "*"

for example, aabba would be ---> a*ab*ba

Wanted to know how any of you would do that. Here is my code if there are any critiques


private static String temp;
private static String newString = "";

public static String pairStar(String str) {

if(str.length() == 1) {
newString = newString + str;
return newString;
}

if(str.charAt(0) == str.charAt(1)) {
temp = str.charAt(0) + "*";
} else {
temp = Character.toString(str.charAt(0));
}

newString = newString + temp;

if(str.length() > 1) {
pairStar(str.substring(1));
}

return newString;

}
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
Last Edited: 2016-10-24 23:12:48
October 24 2016 23:08 GMT
#15702
Just a note that I'm not sure using static variables totally counts as recursion. The approach looks good though I have styling preferences.

Also would crash on empty string.
Don't need the temp variable, just append directly.
Would recommend StringBuilder.
There is no one like you in the universe.
AKnopf
Profile Blog Joined March 2011
Germany259 Posts
Last Edited: 2016-10-24 23:18:53
October 24 2016 23:18 GMT
#15703
While this is technically recursive, you still use those temp and newString variables outside of your recursion. Usually the solution that is aimed at with these kinds of excercises want you to solve the whole problem in the recursion itself; in a kind of functionally way. This means that your recursive function should have no side effects. I think the desired solution should only use input parameters, local variables and the return parameter.

Here is some pseudo code that might help you:



star(string):
if string.length == 1
return string
else
return star(string.first, string.rest)

star(char, string):
if char == string.frist
return char + "*" + star(string)
else
return char + star(string)


Notice that we have two overloads of the function "char":
- One with one parameter named string
- One with two parameters named char and string
Do not confuse the names with java types. I would strongly recommend you use only the type String in your solution. :-)

I guess this solution leaves something for discussion: Some people might find the indirect recursion (two functions call each other recursively) too difficult to understand and might want to write it all in one function.
The world - its a funny place
Acrofales
Profile Joined August 2010
Spain18232 Posts
Last Edited: 2016-10-24 23:27:40
October 24 2016 23:26 GMT
#15704
I tend to do recursion until 0, [] or "" for that very reason. I also agree with blisse that using a field to store your return value in is cheating.

I would probably do it as follows:


recursivestring(teststring);

String recursivestring(test) {
if test == null or test.size() = 0 return "";
else {
Char s = test.charAt(0)
String result = recursivestring(test.substring(1, test.size());
if result.size() = 0 return s;
if s.equals(result.charAt(0))
result = s + "*" + result;
else
result = s + result;
return result;
}


But in proper Java, rather than shitty pseudocode that i mashed up on my phone.

Ninja'd
raNazUra
Profile Joined December 2012
United States10 Posts
Last Edited: 2016-10-24 23:31:13
October 24 2016 23:27 GMT
#15705
On October 25 2016 07:59 travis wrote:
We had a few non-graded java recursion exercises on a handout today

one of them was to: "given a string, compute recursively a new string where identical chars that are adjacent in the original string are separated from each other by a "*"

for example, aabba would be ---> a*ab*ba

Wanted to know how any of you would do that. Here is my code if there are any critiques

+ Show Spoiler +

private static String temp;
private static String newString = "";

public static String pairStar(String str) {

if(str.length() == 1) {
newString = newString + str;
return newString;
}

if(str.charAt(0) == str.charAt(1)) {
temp = str.charAt(0) + "*";
} else {
temp = Character.toString(str.charAt(0));
}

newString = newString + temp;

if(str.length() > 1) {
pairStar(str.substring(1));
}

return newString;

}


Yeah, like Blisse, I'm not sure that using static variables would be ok. Technically, you're still using recursion, since you call the function from within itself, but it's not the cleanest solution.


public static String pairStar(String str) {
if (str.length() <= 1) {
return str;
}
if (str.charAt(0) == str.charAt(1)) {
return str.charAt(0) + "*" + pairStar(str.substring(1));
}
else {
return str.charAt(0) + pairStar(str.substring(1));
}
}


That would be the classic recursion way for me. You could make it a bit more concise:


public static String pairStar(String str) {
if (str.length() <= 1) {
return str;
}
String matchChar = str.charAt(0) == str.charAt(1) ? "*" : ""; // Or whatever Java's ternary operator is
return str.charAt(0) + matchChar + pairStar(str.substring(1));
}


and you could do some stuff to make it tail-recursive, but I'm not sure if Java is able to take advantage of that?

EDIT: AKnopf, I'm curious why you would use indirect recursion on a simple problem like this. Is there an inherent advantage to it, or do you just tend towards that kind of solution? Just curious.

Speak the truth, even if your voice shakes
Manit0u
Profile Blog Joined August 2004
Poland17691 Posts
Last Edited: 2016-10-24 23:50:34
October 24 2016 23:48 GMT
#15706

public static String parseStr(String str) {
if (str == null) {
return "";
}

if (str.length() < 2) {
return str;
}

if (str.charAt(0) == str.charAt(1)) {
return str.charAt(0) + "*" + parseStr(str.substring(1));
}

return str.charAt(0) + parseStr(str.substring(1));
}



and you could do some stuff to make it tail-recursive, but I'm not sure if Java is able to take advantage of that?


AFAIK Java doesn't support TRE. But that might've changed.
Time is precious. Waste it wisely.
Hhanh00
Profile Joined May 2016
34 Posts
Last Edited: 2016-10-25 01:24:44
October 25 2016 01:24 GMT
#15707
Java doesn't support TCO and won't anytime soon.

Using a functional language:


let pair() =
let rec pair_r(s: char list)(acc: char list) =
match s with
| a :: b :: xs ->
if a = b then pair_r s.Tail ('*' :: a :: acc) else pair_r s.Tail (a :: acc)
| [a] -> a :: acc
| [] -> acc
pair_r ['A'; 'A'; 'B'; 'C'; 'C'; 'D'] [] |> List.rev


Which is more elegant in my opinion (and tail recursive).

PS: Normally, you would use a foldr though.
Acrofales
Profile Joined August 2010
Spain18232 Posts
October 25 2016 08:27 GMT
#15708
On October 25 2016 10:24 Hhanh00 wrote:
Java doesn't support TCO and won't anytime soon.

Using a functional language:


let pair() =
let rec pair_r(s: char list)(acc: char list) =
match s with
| a :: b :: xs ->
if a = b then pair_r s.Tail ('*' :: a :: acc) else pair_r s.Tail (a :: acc)
| [a] -> a :: acc
| [] -> acc
pair_r ['A'; 'A'; 'B'; 'C'; 'C'; 'D'] [] |> List.rev


Which is more elegant in my opinion (and tail recursive).

PS: Normally, you would use a foldr though.

Yes. None of that exists in Java, though.

In general, I think learning/teaching recursion in Java is pretty shitty and I would never program the simple string replacement thingy like that in Java using recursion. Yes, it's possible, but it is clunky in comparison to a simple loop, and almost certainly far far slower as well. Whereas if you learn recursion in a language that was actually designed for it (I learned in Haskell), you can appreciate the elegance and power of the method. And then you learn about folds and your mind is blown completely (and your code will never ever be legible again to anybody).
Ilikestarcraft
Profile Blog Joined November 2004
Korea (South)17733 Posts
October 25 2016 09:12 GMT
#15709
I did not expect that last line lol
"Nana is a goddess. Or at very least, Nana is my goddess." - KazeHydra
Manit0u
Profile Blog Joined August 2004
Poland17691 Posts
Last Edited: 2016-10-25 13:06:23
October 25 2016 12:52 GMT
#15710
I did a bit of experimentation out of curiosity:


public static String star(String s, String r) {
if (s.length() < 2) {
return r.length() == 0 ? s : r + s;
}

if (s.charAt(0) == s.charAt(1)) {
return star(s.substring(1), r + s.charAt(0) + "*");
}

return star(s.substring(1), r + s.charAt(0));
}


^ This is more elegant but produces 117 calls.


public static String star(String s) {
if (s.length() < 2) {
return s;
}

if (s.charAt(0) == s.charAt(1)) {
return s.charAt(0) + "*" + star(s.substring(1));
}

return s.charAt(0) + star(s.substring(1));
}


The uglier thing does only 87 calls.

Both tested with just "aabba".

I guess the difference is in the ternary operator. Not sure how to get rid of it though...
Time is precious. Waste it wisely.
Deleted User 101379
Profile Blog Joined August 2010
4849 Posts
October 25 2016 13:26 GMT
#15711
I've tried a few variations and compared them to the last posted, i.e. Manit0u's, since I was bored at work (tomorrow is my last day at my current job):

package test;

class Test
{
private static String StarStringBuilder(String input, int index, StringBuilder output)
{
if (index >= input.length()) return output.toString();
if (index > 0 && input.charAt(index) == input.charAt(index - 1))
{
output.append('*');
}
return StarStringBuilder(input, index + 1, output.append(input.charAt(index)));
}

private static String StarString(String input, int index, String output)
{
if (index >= input.length()) return output;
if (index > 0 && input.charAt(index) == input.charAt(index - 1))
{
output += '*';
}
return StarString(input, index + 1, output + input.charAt(index));
}

public static String Manit0uStar2(String s) {
if (s.length() < 2) {
return s;
}

if (s.charAt(0) == s.charAt(1)) {
return s.charAt(0) + "*" + Manit0uStar2(s.substring(1));
}

return s.charAt(0) + Manit0uStar2(s.substring(1));
}

public static String Manit0uStar1(String s, String r) {
if (s.length() < 2) {
return r.length() == 0 ? s : r + s;
}

if (s.charAt(0) == s.charAt(1)) {
return Manit0uStar1(s.substring(1), r + s.charAt(0) + "*");
}

return Manit0uStar1(s.substring(1), r + s.charAt(0));
}

public static void main(String[] args)
{
long startTime = 0;
long endTime = 0;

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
StarStringBuilder("aabba", 0, new StringBuilder());
}
endTime = System.currentTimeMillis();
System.out.printf("StringBuilder: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
StarString("aabba", 0, "");
}
endTime = System.currentTimeMillis();
System.out.printf("String: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
Manit0uStar1("aabba", "");
}
endTime = System.currentTimeMillis();
System.out.printf("Manit0u 1: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
Manit0uStar2("aabba");
}
endTime = System.currentTimeMillis();
System.out.printf("Manit0u 2: ").println(endTime - startTime);
}
}


Result:
StringBuilder: 27
String: 44
Manit0u 1: 67
Manit0u 2: 82


StringBuilders are good.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
October 25 2016 13:32 GMT
#15712
Except that you're doing this in Java with static input. The whole inner block can theoretically be optimized away entirely for all these loops (determine that there are no side effects and the return value is never used). At the very least the JIT and Branch Predictor will mess you up big time. In other words: This performance data is not representative.
If you have a good reason to disagree with the above, please tell me. Thank you.
Deleted User 101379
Profile Blog Joined August 2010
4849 Posts
Last Edited: 2016-10-25 13:43:46
October 25 2016 13:41 GMT
#15713
On October 25 2016 22:32 spinesheath wrote:
Except that you're doing this in Java with static input. The whole inner block can theoretically be optimized away entirely for all these loops (determine that there are no side effects and the return value is never used). At the very least the JIT and Branch Predictor will mess you up big time. In other words: This performance data is not representative.


Ok, static input removed, I'm now using a randomly generated string of 100 characters length.

	public static void main(String[] args)
{
long startTime = 0;
long endTime = 0;

int count = 0;
Random random = new Random();
StringBuilder randomStringBuilder = new StringBuilder();
for (int i = 0; i < 100; ++i)
{
randomStringBuilder.append((char)(random.nextInt(26) + (int)'a'));
}
String randomString = randomStringBuilder.toString();
System.out.println(randomString);

String check = StarStringBuilder(randomString, 0, new StringBuilder());

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
if (StarStringBuilder(randomString, 0, new StringBuilder()).equals(check))
{
++count;
}
}
endTime = System.currentTimeMillis();
System.out.printf("StringBuilder: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
if (StarString(randomString, 0, "").equals(check))
{
++count;
}
}
endTime = System.currentTimeMillis();
System.out.printf("String: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
if (Manit0uStar1(randomString, "").equals(check))
{
++count;
}
}
endTime = System.currentTimeMillis();
System.out.printf("Manit0u 1: ").println(endTime - startTime);

startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; ++i)
{
if (Manit0uStar2(randomString).equals(check))
{
++count;
}
}
endTime = System.currentTimeMillis();
System.out.printf("Manit0u 2: ").println(endTime - startTime);

System.out.println(StarStringBuilder(randomString, 0, new StringBuilder()).equals(StarString(randomString, 0, "")));
System.out.println(StarString(randomString, 0, "").equals(Manit0uStar1(randomString, "")));
System.out.println(Manit0uStar1(randomString, "").equals(Manit0uStar2(randomString)));
System.out.println(StarStringBuilder(randomString, 0, new StringBuilder()));
System.out.println(count);
}


Result:
qqzbgxoksvandahebthhpoxhiuiwfoxijgveoidclxudatdpolqilkjokwvlxdriblhwfdqsczmnjcxchtuefqdcxhkigvglqjin
StringBuilder: 107
String: 1205
Manit0u 1: 1134
Manit0u 2: 867
true
true
true
q*qzbgxoksvandahebth*hpoxhiuiwfoxijgveoidclxudatdpolqilkjokwvlxdriblhwfdqsczmnjcxchtuefqdcxhkigvglqjin
400000
slmw
Profile Blog Joined October 2010
Finland233 Posts
October 25 2016 13:57 GMT
#15714
That's still a static input in the context of the loops.
Manit0u
Profile Blog Joined August 2004
Poland17691 Posts
October 25 2016 13:59 GMT
#15715
Heh, just for fun:


<?php

function star($str)
{
return preg_replace_callback('/(.)\1+/', function($matches) {
return implode('*', str_split($matches[0], 1));
},
$str
);
}

$start = getrusage();

echo star('aabba') . PHP_EOL;

$end = getrusage();

function getRuntime($start, $end, $measurement)
{
return ($end["ru_{$measurement}.tv_sec"] * 1000 + intval($end["ru_{$measurement}.tv_usec"] / 1000))
- ($start["ru_{$measurement}.tv_sec"] * 1000 + intval($start["ru_{$measurement}.tv_usec"] / 1000));
}

echo "Process took ".getRuntime($start, $end, 'utime')."ms for computations".PHP_EOL;
echo "Process spent ".getRuntime($start, $end, 'stime')."ms in system calls".PHP_EOL;

// ---- OUTPUT ----
a*ab*ba
Process took 0ms for computations
Process spent 0ms in system calls


Does Java have equivalent of preg_replace_callback() from PHP?
Time is precious. Waste it wisely.
Acrofales
Profile Joined August 2010
Spain18232 Posts
October 25 2016 13:59 GMT
#15716
Lol. Travis, were you expecting this? :D
Manit0u
Profile Blog Joined August 2004
Poland17691 Posts
October 25 2016 14:26 GMT
#15717
On October 25 2016 22:59 Acrofales wrote:
Lol. Travis, were you expecting this? :D


Hehe. I guess that no one could've predicted that

Also, I've learned today that JVM has full support for dynamic typing, TCO and other funky shit - just not for Java
Time is precious. Waste it wisely.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
October 25 2016 14:27 GMT
#15718
lol no this is great, love the participation.

I'll post the "hard" exercise that was included since you guys seem to enjoy this. I haven't tried it yet, I might this weekend but now I have to study for my calc 2 exam until friday.


Hard exercise:

Your method parameter is an array of ints. The method is a boolean. The goal is to look at the ints and see if you could possibly return 2 arrays from it, both having the same "total" within it.

For example if you were passed {2, 2} it would be true. {2, 3, 2, 3} would be true. {2, 3} would be false. {5, 2, 3} would be true. {5, 2, 4} would be false. {2, 6, 2, 2} would be true. Etc. Have fun!


Oh and it's supposed to use recursion, so no loops. You can make a recursive helper method, though.
Hhanh00
Profile Joined May 2016
34 Posts
October 25 2016 14:40 GMT
#15719
On October 25 2016 23:26 Manit0u wrote:
Show nested quote +
On October 25 2016 22:59 Acrofales wrote:
Lol. Travis, were you expecting this? :D


Hehe. I guess that no one could've predicted that

Also, I've learned today that JVM has full support for dynamic typing, TCO and other funky shit - just not for Java


JVM has no support for TCO. In Scala, TRE is done by the compiler but does not cover mutual recursion. That's why there are trampolines in scalaz.
Manit0u
Profile Blog Joined August 2004
Poland17691 Posts
October 25 2016 14:44 GMT
#15720
On October 25 2016 23:40 Hhanh00 wrote:
Show nested quote +
On October 25 2016 23:26 Manit0u wrote:
On October 25 2016 22:59 Acrofales wrote:
Lol. Travis, were you expecting this? :D


Hehe. I guess that no one could've predicted that

Also, I've learned today that JVM has full support for dynamic typing, TCO and other funky shit - just not for Java


JVM has no support for TCO. In Scala, TRE is done by the compiler but does not cover mutual recursion. That's why there are trampolines in scalaz.


But from what I've read most of the recursion in scala is translated into loops anyway.
Time is precious. Waste it wisely.
Prev 1 784 785 786 787 788 1032 Next
Please log in or register to reply.
Live Events Refresh
Next event in 23m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
PiGStarcraft498
SpeCial 112
ROOTCatZ 74
ProTech38
CosmosSc2 21
StarCraft: Brood War
Artosis 604
GuemChi 234
Aegong 41
NaDa 28
LancerX 14
IntoTheRainbow 12
Dota 2
monkeys_forever262
Counter-Strike
fl0m819
taco 326
Super Smash Bros
AZ_Axe130
Other Games
summit1g12435
Grubby2866
FrodaN908
shahzam720
C9.Mang0173
Mew2King85
ViBE69
Organizations
Other Games
gamesdonequick1960
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 14 non-featured ]
StarCraft 2
• EnkiAlexander 8
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• masondota21627
League of Legends
• Doublelift6459
Other Games
• imaqtpie1324
Upcoming Events
Replay Cast
23m
The PondCast
10h 23m
WardiTV Team League
12h 23m
Replay Cast
1d
Replay Cast
2 days
CranKy Ducklings
2 days
RSL Revival
2 days
WardiTV Team League
2 days
uThermal 2v2 Circuit
2 days
BSL
2 days
[ Show More ]
Sparkling Tuna Cup
3 days
RSL Revival
3 days
WardiTV Team League
3 days
BSL
3 days
Replay Cast
4 days
Replay Cast
4 days
Wardi Open
4 days
Monday Night Weeklies
4 days
WardiTV Team League
5 days
GSL
6 days
Liquipedia Results

Completed

Proleague 2026-03-10
WardiTV Winter 2026
Underdog Cup #3

Ongoing

KCM Race Survival 2026 Season 1
Jeongseon Sooper Cup
BSL Season 22
Proleague 2026-03-11
RSL Revival: Season 4
Nations Cup 2026
ESL Pro League S23 Stage 1&2
PGL Cluj-Napoca 2026
IEM Kraków 2026
BLAST Bounty Winter 2026
BLAST Bounty Winter Qual

Upcoming

CSL Elite League 2026
ASL Season 21
Acropolis #4 - TS6
2026 Changsha Offline CUP
Acropolis #4
IPSL Spring 2026
CSLAN 4
HSC XXIX
uThermal 2v2 2026 Main Event
Bellum Gens Elite Stara Zagora 2026
NationLESS Cup
CS Asia Championships 2026
Asian Champions League 2026
IEM Atlanta 2026
PGL Astana 2026
BLAST Rivals Spring 2026
CCT Season 3 Global Finals
IEM Rio 2026
PGL Bucharest 2026
Stake Ranked Episode 1
BLAST Open Spring 2026
ESL Pro League S23 Finals
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.