• [^] # Re: Survivor

    Posté par . En réponse au journal C, un âge remarquable. Évalué à 5.

    yep, leur code est cassé:

    $ printf "\u00e9" > grep-simple.txt
    $ printf "\u0065\u0301" > grep-double.txt
    $ cat grep-simple.txt 
    é% $ cat grep-double.txt 
    é% 
    $ grep é grep-simple.txt 
    é
    $ grep é grep-double.txt
    $ grep --version
    grep (BSD grep, GNU compatible) 2.6.0-FreeBSD

    En l'occurence, c'est le grep de macOS, je suppose qu'il vient d'un des BSD avec peu de changements.

    Rien de tout ca dans un langage a runtime bloaté, évidemment:

    import Foundation
    guard CommandLine.arguments.count > 1 else {
     exit(0)
    }
    let input = CommandLine.arguments[1]
    let single = "\u{00e9}"
    let double = "\u{0065}\u{0301}"
    print("They are equal: \(input == single)\(input == double)")
    print("Or are they? \(input.utf8CString == single.utf8CString)\(input.utf8CString == double.utf8CString)")
    print("The string sizes: \(single.count), \(single.count), \(input.count)")
    print("The byte sizes: \(Data(single.utf8).count), \(Data(double.utf8).count), \(Data(input.utf8).count)")

    Me sort:

    They are equal: true true
    Or are they? true false
    The string sizes: 1, 1, 1
    The byte sizes: 2, 3, 2 (ou 2, 3, 3 en fonction de l'input)