Shenzhen I/O (PC) (2016)

Overview: You're an electronics engineer working for Shenzhen Longteng Electronics in Shenzhen, China. Your job is to create products using the company's circuits and programming language.

20190106 AM Hours:
I was thinking about playing some games for which I had not yet blogged, but had already tried. Instead, I decided to play a fresh new game: Shenzhen I/O.

In general, levels consist of producing the correct output from the input.

First Impressions:
The game is more difficult than most other programming games* I've played thus far, but it's still fun. Part of the difficulty was having to refer to the manual; to be fair, the game suggests printing out a hard copy. In any case, I enjoy the challenge. Like the other programming games, I derive a lot of fun and entertainment from attempting to optimize the solutions.

With respect to optimizing solutions, I have three Steam friends who have also played the game, and their best scores show up in the game. These values are much more helpful than just looking at histograms, which won't always indicate the best possible score value. I like these individual benchmarks.**

Steam Game Time: 3.0 hours (total game time) | Game idled during two trips to the restroom.

*Roughly from hardest to easiest: TIS-100 (3.1 hours), Shenzhen I/O, SpaceChem (8.7 hours), Human Resource Machine (25.8 hours). Both TIS-100 and SpaceChem share the same developer, Zachtronics, as Shenzhen I/O.
**[20190108: Today I was browsing the discussion threads and found one where various players were sharing "Add Me on Steam" for this purpose. I added some of their profiles and posted my own (Jan 8).]
[20190108 Edit]

20190106 PM Hours/20190107 AM Hours:

Setup: Before playing today, I printed out the manual. To save some paper, I printed consecutive pages in a given section double-sided (loses efficiency when a section has an odd number of pages). Then, instead of dividers, I used sticky notes to separate the stack.

Receive e-mails from other members in the company.

Setup Tip: For the ultimate experience, play one level a day and coordinate with a friend to put the appropriate Supplemental Data sheet on your desk. In this case, you'll want to print out the Supplemental Data section single-sided.

Gameplay Log:
One subtlety I learned is that if an XBUS value is written, it must be read. [The reverse is true as well.]
After several hours into the game, I finish by winning some solitaire games (10, for a total of 11 wins).

Steam Game Time: 14.4 hours (total game time) / 11.4 hours (session game time)

20190107:
Today I hit a point of difficult coinciding with feeling overwhelmed and tired of the game. It's a challenging puzzler. I might be done with it for the time being.

I've read the game has about 30 puzzles in the main game. By the end of today, I had unlocked 18 puzzles and completed 13 of them.

Gameplay Log:
I was using complicated code in this one level and I noticed I was repeatedly using a series of commands. I kept repeating these three sets of lines: `mov 100 R | slp 1 | mov 0 R` (where R is a register). Eventually, I realized I can make use of a recently introduced instruction (in-universe, it was surprisingly not in the manual: gen). With it, the aforementioned three lines becomes one line: `gen R 1 0` (which technically stands for `mov 100 R | slp 1 | mov 0 R | slp 0`.

A mini-game that unlocks after a couple of levels. A solitaire game inspired by FreeCell and Mahjong.

Steam Game Time: 18.2 hours (total game time) / 3.8 hours (session game time)

20190108 Part 1:
I'm back for a little more. Some of these levels are truly difficult and I cannot even complete some of them inefficiently.

In any case, one of the tasks is to create and upload a level. I decided to put some effort into this task and actually create a legitimate level (as opposed to just using the example level or creating a trivial level). In the end, I almost spent four hours creating one! Although I absolutely had fun making it (and I learned a little about a programming language called Lua, it was my first time being exposed to it). Here's the finished level: CHRISTMAS LIGHTS (Steam Workshop).

On a related note, I encountered a compile error while creating the level and I went to the Steam Discussions to look for answers. While there I noticed a thread where people were adding each other on Steam to compare scores. I thought it was a great idea and added a handful of people. I mostly added players that were, one, still active on Steam and, two, said they played other Zachtronics games or represented competence in programming (e.g., engineer, programmer).

Steam Game Time: 21.9 hours (total game time) / 3.7 hours (session game time)

20190108 Part 2:
Adding other players (see 20190108 Part 1) rejuvenated my desire to play some more!

Steam Game Time: 26.6 hours (total game time) / 4.7 hours (session game time)

20190109/20190110 AM Hours:

The first level.

Gameplay Log:
I tried to play around with the PGA33X6, but I didn't quite understand it.
The PGA33X6 is in the manual, but in Chinese. I ran it through Google Translate, but only partially understood it's purpose.
I tried to play around with the PGA33X6 some more, but I didn't make much more progress.
In the end, I went to a Reddit post, read a Wikipedia article about Programmable logic arrays, and watched a YouTube video (possible spoilers starting at 9:30, Simple explanation of PGA33X6).

Steam Game Time: 34.9 hours (total game time) / 8.3 hours (session game time)

20190111 PM/20190112 AM Hours:
Today I spent almost 10 hours playing the game. However, I also spent some time with two of the puzzles offline. I randomly picked two of the specifications which I hadn't done yet and theory crafted their solutions.

Steam Game Time: 44.5 hours (total game time) / 9.6 hours (session game time)

20190112:
I made it my goal to reach the near end of the game. That is, to avoid optimization.

Unfortunately, even my best attempt to avoid optimization required that I make the obvious optimizations (and sometimes while looking for obvious optimizations I essentially began optimizing and thus failed to avoid it. With that being said, the amount of time I spent optimizing was small compared to the amount of time I spent determining a solution.

In hindsight, this was a complicated solution. But oftentimes, it's easier to find a single solution and optimize it than to start off finding an optimal solution.

In any case, it's getting late and given the increasing puzzle difficulty, I decided to stop playing for the night (there are four levels left in the main campaign).

Gameplay Log:
First, I was able to finally solve "Traffic Signal," the level I spent most of my time on yesterday.
"Meat-Based Printer" wasn't nearly as bad.
"Electronic Door Lock" was tricky because of reading and writing. At least initially. Once I got a solution, it was easy to simplify (over four iterations). The fourth iteration was half the cost (10 Yuan) of the second iteration (20 Yuan)!
"Deep Sea Sensor Grid" was similar in difficult to "Electronic Door Lock."

Steam Game Time: 51.7 hours (total game time) / 7.2 hours (session game time)

20190113:
One thing that's interesting about this game is that each puzzle is so different and what makes a particular level difficult is also different. I think about the difficulty in solving the puzzle, but creating the puzzle must have also been difficult.

With that being said, I have to temporarily set this game aside.

Steam Game Time: 54.9 hours (total game time) / 3.2 hours (session game time)

20190117:
"Spoiler Blocking Headphones" has been on my mind lately and so I try to give it another go. The main problem I'm having is trying to use too many components. What am I missing?

Steam Game Time: 55.6 hours (total game time) / 0.7 hours (session game time)

20190127:
Someone commented on my custom level and I went into the game to try and answer their feedback. The user's comment made me realize my solution was not even close to optimal. I was eventually able to match his/her score.

Steam Game Time: 58.1 hours (total game time) / 2.5 hours (session game time)*

*Most of the time spent was idle. Now that I'm a father, this will inevitably happen more frequently.

Thoughts:
Pros:
+ Having a manual to refer to is fun. Makes the game more real. (but see also cons)
+ Compare scores globally (histograms) and with friends (leaderboard) across three separate categories; optimizing can be addicting (Tip: don't get bogged down in optimizing early on, because parts and commands available latter in the game can often make optimization easier or even trivial)
+ Challenging for the niche player (I also list "Challenging" as a con. But if you find yourself unchallenged by the average puzzle game, then check out Shenzhen I/O and feel humbled).
+ Good learning curve for someone familiar with programming

Neutral:
~ Includes a minigame which is like a mix of solitaire and FreeCell. It's simple, but fun. Can be addicting, but I am not. The developer eventually made it available on it's own: SHENZHEN SOLITAIRE (Steam Store).
~ Niche audience.

After completing a level, you can see how your solution compares globally (all Steam players) and locally (Steam friends)

Cons:
- Slow paced
- Challenging (for the average player)
- Steep learning curve (for someone who's unfamiliar with programming and puzzle games; medium for someone who is good with logical thinking, puzzles & instructions; perfect for someone with programming skills)
- A lot of reading (I'm not a reader; I dislike having to read so much just to play a level).

[20190107][20190110]

Comparison of Difficulty:
I felt as if this game was difficult, but how does it compare? I chose three puzzle games to compare to Shenzhen I/O: Eets Munchies, Human Resource Machine, and Hexcells. I used SteamDb and HowLongToBeat.com to gather some statistics.

NameSteamDB Rating (+/- Reviews)Median Time Played (Steam)Median Time to Complete Main (# Polled) | Completionist (# Polled)%age of Players to Complete...
Shenzhen I/O91.65% (1633/57)3.2 hrs28.6 hrs (2) | 78.0 hrs (1)2.4% Solve Main / 0.5% Solved Bonus
Human Resource Machine89.26% (2131/148)2.0 hrs4.4 hrs (32) | 7.0 hrs (33)7.0% Completed All Levels
Eets Munchies75.56% (474/119)1.4 hrs1.0 hrs (24) | 3.0 hrs (41)3.0% Completed All Puzzles
Hexcells92.43% (3419/128)2.1 hrs2.0 hrs (49) | 2.5 hrs (198)46.6% Completed All Levels

Program the lights of a billboard.

So what can we say?
1) Three of the games are closely rated. Among them, Hexcells is clearly an easy game: short completion time and most players completing all the levels.
2) Human Resource Machine (HRM) has nearly three times the completion rate (of the main campaign) of Shenzhen I/O and the completion time is approximately four times faster (7 hours to complete all the levels in HRM compared to a rough 28 hour figure for Shenzhen I/O).
3) Inferring from the median hours played, the player dropoff for Shenzhen I/O is higher. At the 50th percentile, players have only put 3.2 hours into the game (which again is estimated to be 33 hours long game). Compared to HRM for which players at the 50th percentile put in 2 hours (out of an estimated 7 hour long game).
4) The Steam Achievements also reflect observation #3: 60.6% of all players have reached the third milestone in HRM (between a third to half of the game's levels).
5) Despite being a short game, Eets Munchies only has a 3.0% completion rate. This is probably due to the fact that players don't have as much playing it (lower rating).

Overall, Shenzhen I/O is objectively harder than the three other games I chose. However, that's neither good nor bad. It simply means a certain type of player will enjoy the game more. I'm almost certain that although the median time spent with Shenzhen I/O is comparable to the other games, a fanatic will find hours upon hours of fun with the game. Speaking from my own experience, I'm not actually interested in completing the game, but with getting the best scores on each level (and mostly through self-discovery).

Do you know of any fun, difficult games? Share them in the comments!

Summary:
The design of this game is meant to give the player the feeling he/she is actually an electronics engineer who has been hired at a company in Shenzhen, China. There are emails, an emulated desktop, and even a reference manual (which I printed as recommended and adds to the theme of the game).

Your (simulated) desktop.

Unfortunately, work is hard, and most people don't like working. As such, the game immediately narrows its audience: players who either like working or playing games that feel like work. However, not everyone in that subset will enjoy learning the game's assembly language. However, it makes the game difficult to complete (see the above section on difficulty).

In the end, if you're drawn to the idea of the game, I would highly recommend it. But be warned, it can be a challenge, and the challenge can be addicting!

[20190107][20190110]

20220705:
I resumed this game today, but I spent most of the time reviewing the mechanics in the manual and revisiting old puzzles.

Steam Game Time: 66.8 hours (total game time) / 8.7 hours (session game time)
20220706:
Gameplay Log:
Trying to tackle "Spoiler Blocking Headphones"
With some mild frustration, I read a Steam thread looking to understand conversion between XBus and Simple I/O.
Pivoted to tackling the override component of "Spoiler Blocking Headphones". It might end up being helpful from a space perspective.
Oh! I was looking at an old attempt where the destination register is "nop"! I was previously making a solution where I wanted to cycle through the ROM, but I thought I needed a physical destination for the XBUS data. With "nop" I should be good to go! [CORRECTION. It should be "null" not "nop". "nop" is an empty instruction...]
HOORAY! I finally got the solution to "Spoiler Blocking Headphones"! Terrible stats, but it's a start. My stats: 22 yuan, 4.4K power, 39 lines of code. Top among Steam friends: 8 yuan, 274 power, 11 lines. [That's crazy, the four 200P-14 modules I used cost 8 yuan as it is...]
Oh my! It's cause I didn't read the manual carefully. It specifies it's sufficient to start with just one of the categories. ;_; I feel so silly. And I would never have realized if it weren't for the knowledge of cheaper and shorter solutions. So basically I made the problem much harder than it really was.
With that in mind, some quick changes makes for a 15 yuan solution (4.3K power, 27 lines of code). Still not ideal.
Alright. Got a decent cost: 10 yuan, 3.1K power, 23 lines of code.
8 yuan would seem as if it would take more thought than I care to continue to give to the puzzle. In particular, I think it's closely associated to the number of lines.
Completed "Color Coordinating Shoes"
I think one of the parts I'm underusing is the DX300. It can be used to convert three signals into a number...

Steam Game Time: 80.2 hours (total game time) / 13.4 hours (session game time)
20220707:
Gameplay Log:
Woke up in the morning with a great idea for "Airline Cocktail Mixer." I miss waking up with solutions to math problems
Been trying to improve my solution to "Airline Cocktail Mixer"
My curiosity asked about PGA33X6 and I landed on a thread with a picture for which I didn't really learn about PGA33X6 but was inspired with two very interesting mechanics: reuse of XBUS and passing wires through the center of a circuit (underneath). Both are gamechanging for making use of space.
This page was a much more useful read regarding how the PGA33X6 works.
In "Safetynet Tracking Badge" I was using a RAM to store the audio input but apparently (from looking at a blog post) that this isn't necessary and the input will wait to be consumed... Testing how this works. The input stacks on a cache. For example, let's say I read input on every odd time unit. If [1, 2, 3] is sent on time 1, and [4, 5, 6] is sent on time 4, then I will consume the values 1, 2, 3, 4, 5, and 6 on time units 1, 3, 5, 7, 9, and 11, respectively.
Hooray! I completed "Safetynet Tracking Badge." I separately completed the "speaker" then the "radio-tx," and then worked out the kinks in order to combine them. In any case, that completes the main campaign.
Revisited "Control Signal Amplifier" and wanted to use the ROM. At first I was thinking inside the box, until I just randomly had it run and observed the pointer moving. It then clicked for me. I recalled that a value passed to the accessor will take the modulus (14).

Steam Game Time: 89.4 hours (total game time) / 7.2 hours (session game time)
20220708:
Gameplay Log:
As I'm trying to improve on earlier puzzles, I try out "nop" and notice that nothing happens but power is consumed. Why would that be desirable? Apparently the answer is that it can be used to keep two chips in sync. I recall a place where I could have potentially made use for that. Since otherwise synchronization has to occur with XBUS signals and there's not always inputs available for that. Note that since "slp 0" is equivalent to "nop" then it takes up power and hence a fully run "gen P R/I R/I" will take 4 power.
Putting a rule into place. The time that I get to spend on trying to improve a score should be equal to `(MY_SCORE/TOP_SCORE)*50 - 50` (that is, half the percentage increase).
Holy moly. While working on "Signal Amplifier", I discovered that a simple I/O output can read from (and in my use case compared with). Unfortunately I didn't get huge gains, but the knowledge is incredible.
After successfully using PGA33X6 in a puzzle, I went to read a guide on flip-flop switches (since it's been said the job of a PGA33X6 can be done with logic gates.

Steam Game Time: 96.5 hours (total game time) / 7.1 hours (session game time)
20220709:
Gameplay Log:
Spent more time processing that thread and working out both what a flip-flop switch does and how to implement one in the game that starts with the desired state. This is what I've learned:
- At the time of the guide, Shenzhen didn't have "NOR" gates, so the guide implements them with "OR" + "NOT" gates. Now the game has an "OR/NOR" gate.
- But there are times when one runs into needing to set the state, so a user offers a solution which is hard to read. This is how I would write his/her solution:
-- There are five parts: reset output, set output, "AND/NAND" gate, "OR/NOR" gate, and "NOT" gate. We use the "AND" and "OR" output of the "AND/NAND" and "OR/NOR" gates, respectively.
-- 1) Connect the reset output to the "NOT" gate input.
-- 2) Connect the "NOT" gate output to one of the "AND/NAND" gate inputs.
-- 3) Connect the "AND" output to one of the "OR/NOR" gate inputs.
-- 4) Connect the set output to the other "OR/NOR" gate inputs.
-- 5) Finally, connect the "OR" gate output the other "AND/NAND" gate input.
-- Note that there are 2 pairs of signals available. (1) The set signal (which starts off) which is coming out the "OR" output and the "AND" output and (2) the reset signal (which starts on) which is coming out the "NOR" output and the "NAND" output.
-- Technically the reset signal is just the inverse of the set signal. So with "NOT" gates, one has up to four copies of the same signal. This is useful to know when it comes to positioning signals to components...

Steam Game Time: 98.2 hours (total game time) / 1.7 hours (session game time)

[20220710]
20220710:
As I mentioned previously, it's interesting how knowledge of a record makes the record more achievable. Otherwise, there is a lack of motivation to spend so much time seeking a solution that might not be possible. In application to the game, I worked on optimizations for production cost and lines of code for "Laser Tag Equipment" because I can see better records than my own. Technically, the records themselves are a hint to the components that I should consider using to form the solution.

Gameplay Log:
Filled out some notes on flip-flip switches for 20220709.
Completed the 6 Yuan production cost for "Laser Tag Equipment"
Completed the 5 lines of code for "Laser Tag Equipment"
Completed "Laser Tag Equipment" with 190 power usage, with the top among my Steam friends having only 128 power usage... Well, my previous best was 218, so it's still an improvement
Completed the 6 Yuan production cost for "Color-Changing Vape Pen"

Steam Game Time: 105.9 hours (total game time) / 7.7 hours (session game time)

20220711:
Steam Game Time: 106.9 hours (total game time) / 1.0 hours (session game time)

20220712 AM Hours:
Gameplay Log:
A rare occasion where I go for low Power Usage and get it: "Unknown Optimization Device". My score is 601 and the top score among my Steam friends is 600. Not too shabby! I'll take it!

Steam Game Time: 108.5 hours (total game time) / 1.6 hours (session game time)

20220713:
Steam Game Time: 114.7 hours (total game time) / 6.2 hours (session game time)

20220713:
Steam Game Time: 115.4 hours (total game time) / 0.7 hours (session game time)

20220715:
Gameplay Log:
This is the first time, at least that I'm aware, that I got a unique top score among my Steam friends: 10 lines of code for "Remote Kill Switch"; with that being said, I noticed the other day there's a community leaderboard on the Shenzhen I/O reddit. After playing through all the levels generally, I'm going to go through all the levels for each individual category, and then finally compare with the Reddit leaderboards.

Steam Game Time: 122.9 hours (total game time) / 6.5 hours (session game time)

20220716:
Alright, I'm reaching a point where I both enjoy and no longer enjoy optimizing these puzzles. There's kind of a general formula thus far with just different variations (for cost and lines). And I'm mostly avoiding power which is kind of a different beast.

Steam Game Time: 126.0 hours (total game time) / 4.0 hours (session game time)

20231103 Snapshot:
Steam Game Time: 127.0 hours (cumulative game time)
Last Played: 20220716
20231103:
I loaded up the game today and was surprised to find I had completed the first part of the game. Barely spending time with the game ("Diagnostic Pulse Generator" level), I turned it off and once again read about the PGA33X6.

Steam Game Time: 127.2 hours (cumulative game time)

20231104 (Part 1):
Today I reminded myself about flip-flop switches (still thinking about the "Diagnostic Pulse Generator" level). However, I think I've lost interest in the game.

Steam Game Time: 127.8 hours (cumulative game time) / 0.6 hours (session game time)

20231104 (Part 2):
I can't help but continue to think about the "Diagnostic Pulse Generator" level. I see persons on the leaderboard with 1 line of code (I'm at a best of 3). So I watch the video again about how to use the PGA as a rising edge detector, because I feel the key is in detecting when the signal rises but timing that with the pulse.

Eventually I caved and looked for a solution. Found one on Reddit. While my brain did think of a part of this solution, I definitely would never have gotten it. The part I thought of is the following: when the button is pressed, a 100 - 0 signal needs to be sent out. There are two core concepts that I see in the solution (the parts that I never would have come up with): 1) the pulse generation using a variable input (as opposed to a constant such as `gen p1 1 1`) and 2) somewhat intertwined with the first is the need to convert the signal from simple I/O to XBus.
Tried to take this newly learned solution and apply it to "Animated Esports Sign." Nothing is clicking.

Steam Game Time: 129.2 hours (cumulative game time) / 1.4 hours (session game time)

20240104:
Today I loaded up the game to help a friend who was stuck on a puzzle.

Steam Game Time: 129.7 hours (cumulative game time) / 0.5 hours (session game time)

Shenzhen I/O (PC) (202016)

Relevant Links:
SHENZHEN I/O Webpage (Zachtronics Website)
Shenzhen I/O (Wikipedia.org)
Shenzhen I/O (PC) (MetaCritic.com)
Shenzhen I/O (Steam Store Page)

No comments :