Hacker News new | past | comments | ask | show | jobs | submit login

Learning new environments can be painful so it’s good it starts off easy.

I’m trying to solve them with Swift Playgrounds on the iPad, for example. And I can’t figure out how to create a simple text file for the data.




I started last year using Swift Playgrounds. I was lazy and just pasted the input into a multi-line string. I had to switch away from Playgrounds after a couple of days because it would crash due to memory issues. It traces every line of execution and the intermediate values of all variables. I really enjoyed doing the challenges in Swift, but I did have to switch to using my Mac to do it.

This year, I’m learning Python by using a Raspberry Pi 4 directly connected to my iPad via USB. Should be another fun month!


I solved the first part using the examples. Swift is nice.

   func calcFuel(_ mass:Int) -> Int {mass / 3 - 2}

   let z0 = massList.map(calcFuel).reduce(0, +)
or simply ...

   let z1 = massList.map({$0 / 3 - 2}).reduce(0, +)
Any idea how to read the data on the iPad?


I copy my session cookie and send a web request for the inputs. I should write some sort of caching code though..


i just copy/pasted the data into the source instead of dealing with IO.


I had to create the plain text input file in iCloud with my Mac then insert it (Big +, third option) in the iPad’s Swift Playground. Need a text app that will save to Files for a complete iPad solution. Also, a Swift Playground bug reverted my final solution to the code from my first few minutes, losing my code. That was frustrating...

Anyway, a complete Swift Playground on iPad solution:

   import UIKit

   let path = Bundle.main.url(forResource: "input01", withExtension: "txt")
   var text = try String(contentsOf: path!, encoding: .utf8)

   let massList:[Int] = text.components(separatedBy: .whitespacesAndNewlines).compactMap({Int($0)})

   let z1 = massList.map({$0 / 3 - 2}).reduce(0, +)
   print("\(z1)")


You can option+tap a link in Safari to download to Files. Hold down the command key to see available shortcuts.


I couldn't figure it out on a Mac. Then I Googled it, and decided I'm better off solving this in languages I know (whatever I feel like today: JS, Python, Java, perhaps even Erlang) or in a language that has a reasonable standard library (Rust) than in this mess: https://twitter.com/dmitriid/status/1201441652507844608


Last night I gave the complete solution in Swift below. Here are the two lines to read the file:

   let path = Bundle.main.url(forResource: "input01", withExtension: "txt")
   var text = try String(contentsOf: path!, encoding: .utf8)


There's no chance in hell anyone learning Swift can figure these two lines out.

Besides, there are immediate additional questions:

- what's a bundle, and why does a Bundle deal with urls?

- What's the difference between Bundle.main.url and FileManager.main.urls, and why one and not the other?

- where does the resource come from?

- how do I read a file from a path?

- Why is String responsible for reading (and writing!) contents of a file? In which world is this good design?


I use pastebin raw and get stuff from web requests sometimes rather than local files.


I've been creating multiline strings and then just using components(separatedBy:)




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: