Convert to Suzhou numerals












27












$begingroup$


Suzhou numerals (蘇州碼子; also 花碼) are Chinese decimal numerals:



0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩


They pretty much work like Arabic numerals, except that when there are consecutive digits belonging to the set {1, 2, 3}, the digits alternate between vertical stroke notation {〡,〢,〣} and horizontal stroke notation {一,二,三} to avoid ambiguity. The first digit of such a consecutive group is always written with vertical stroke notation.



The task is to convert a positive integer into Suzhou numerals.



Test cases



1          〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇


Shortest code in bytes wins.










share|improve this question











$endgroup$








  • 1




    $begingroup$
    I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
    $endgroup$
    – Thomas Weller
    Dec 13 '18 at 12:19








  • 2




    $begingroup$
    @ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
    $endgroup$
    – lastresort
    Dec 13 '18 at 13:51










  • $begingroup$
    Can you take input in the form of a char array?
    $endgroup$
    – Embodiment of Ignorance
    Dec 13 '18 at 16:46










  • $begingroup$
    @EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
    $endgroup$
    – lastresort
    Dec 15 '18 at 7:26
















27












$begingroup$


Suzhou numerals (蘇州碼子; also 花碼) are Chinese decimal numerals:



0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩


They pretty much work like Arabic numerals, except that when there are consecutive digits belonging to the set {1, 2, 3}, the digits alternate between vertical stroke notation {〡,〢,〣} and horizontal stroke notation {一,二,三} to avoid ambiguity. The first digit of such a consecutive group is always written with vertical stroke notation.



The task is to convert a positive integer into Suzhou numerals.



Test cases



1          〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇


Shortest code in bytes wins.










share|improve this question











$endgroup$








  • 1




    $begingroup$
    I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
    $endgroup$
    – Thomas Weller
    Dec 13 '18 at 12:19








  • 2




    $begingroup$
    @ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
    $endgroup$
    – lastresort
    Dec 13 '18 at 13:51










  • $begingroup$
    Can you take input in the form of a char array?
    $endgroup$
    – Embodiment of Ignorance
    Dec 13 '18 at 16:46










  • $begingroup$
    @EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
    $endgroup$
    – lastresort
    Dec 15 '18 at 7:26














27












27








27


3



$begingroup$


Suzhou numerals (蘇州碼子; also 花碼) are Chinese decimal numerals:



0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩


They pretty much work like Arabic numerals, except that when there are consecutive digits belonging to the set {1, 2, 3}, the digits alternate between vertical stroke notation {〡,〢,〣} and horizontal stroke notation {一,二,三} to avoid ambiguity. The first digit of such a consecutive group is always written with vertical stroke notation.



The task is to convert a positive integer into Suzhou numerals.



Test cases



1          〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇


Shortest code in bytes wins.










share|improve this question











$endgroup$




Suzhou numerals (蘇州碼子; also 花碼) are Chinese decimal numerals:



0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩


They pretty much work like Arabic numerals, except that when there are consecutive digits belonging to the set {1, 2, 3}, the digits alternate between vertical stroke notation {〡,〢,〣} and horizontal stroke notation {一,二,三} to avoid ambiguity. The first digit of such a consecutive group is always written with vertical stroke notation.



The task is to convert a positive integer into Suzhou numerals.



Test cases



1          〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇


Shortest code in bytes wins.







code-golf number unicode






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 13 '18 at 4:39









qwr

5,63452556




5,63452556










asked Dec 13 '18 at 0:35









lastresortlastresort

912413




912413








  • 1




    $begingroup$
    I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
    $endgroup$
    – Thomas Weller
    Dec 13 '18 at 12:19








  • 2




    $begingroup$
    @ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
    $endgroup$
    – lastresort
    Dec 13 '18 at 13:51










  • $begingroup$
    Can you take input in the form of a char array?
    $endgroup$
    – Embodiment of Ignorance
    Dec 13 '18 at 16:46










  • $begingroup$
    @EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
    $endgroup$
    – lastresort
    Dec 15 '18 at 7:26














  • 1




    $begingroup$
    I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
    $endgroup$
    – Thomas Weller
    Dec 13 '18 at 12:19








  • 2




    $begingroup$
    @ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
    $endgroup$
    – lastresort
    Dec 13 '18 at 13:51










  • $begingroup$
    Can you take input in the form of a char array?
    $endgroup$
    – Embodiment of Ignorance
    Dec 13 '18 at 16:46










  • $begingroup$
    @EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
    $endgroup$
    – lastresort
    Dec 15 '18 at 7:26








1




1




$begingroup$
I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
$endgroup$
– Thomas Weller
Dec 13 '18 at 12:19






$begingroup$
I've been in Suzhou 3 times for longer period of time (quite a nice city) but didn't know about Suzhou numerals. You have my +1
$endgroup$
– Thomas Weller
Dec 13 '18 at 12:19






2




2




$begingroup$
@ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
$endgroup$
– lastresort
Dec 13 '18 at 13:51




$begingroup$
@ThomasWeller For me it's the opposite: before writing this task I knew what the numerals were, but not that they were named "Suzhou numerals". In fact I've never heard them called this name (or any name at all). I've seen them in markets and on handwritten Chinese medicine prescriptions.
$endgroup$
– lastresort
Dec 13 '18 at 13:51












$begingroup$
Can you take input in the form of a char array?
$endgroup$
– Embodiment of Ignorance
Dec 13 '18 at 16:46




$begingroup$
Can you take input in the form of a char array?
$endgroup$
– Embodiment of Ignorance
Dec 13 '18 at 16:46












$begingroup$
@EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
$endgroup$
– lastresort
Dec 15 '18 at 7:26




$begingroup$
@EmbodimentofIgnorance Yes. Well, enough people are taking string input anyway.
$endgroup$
– lastresort
Dec 15 '18 at 7:26










20 Answers
20






active

oldest

votes


















2












$begingroup$


Jelly, 35 bytes



9Ḷ;-26ż“/Ẉ8‘+⁽ȷc¤ṃ@ɓD_2ỊŒgÄFị"+⁽-FỌ


Try it online!






share|improve this answer









$endgroup$





















    9












    $begingroup$


    R, 138 bytes



    I'll bet there's an easier way to do this. Use gsub to get the alternating numeric positions.





    function(x,r=-48+~x)Reduce(paste0,ifelse(58<~gsub("[123]{2}","0a",x),"123"["一二三",r],'0-9'["〇〡-〩",r]))
    "~"=utf8ToInt
    "["=chartr


    Try it online!






    share|improve this answer











    $endgroup$





















      9












      $begingroup$

      JavaScript, 81 bytes





      s=>s.replace(/./g,c=>(p=14>>c&!p)|c>3?eval(`"\u302${c}"`):'〇一二三'[c],p=0)


      Try it online!



      Using 14>>c saves 3 bytes. Thanks to Arnauld.






      share|improve this answer











      $endgroup$





















        8












        $begingroup$


        Retina, 46 bytes



        /[1-3]{2}|./_T`d`〇〡-〩`^.
        T`123`一二三


        Try it online! Link includes test cases. Explanation:



        /[1-3]{2}|./


        Match either two digits 1-3 or any other digit.



        _T`d`〇〡-〩`^.


        Replace the first character of each match with its Suzhou.



        T`123`一二三


        Replace any remaining digits with horizontal Suzhou.



        51 bytes in Retina 0.8.2:



        M!`[1-3]{2}|.
        mT`d`〇〡-〩`^.
        T`¶123`_一二三


        Try it online! Link includes test cases. Explanation:



        M!`[1-3]{2}|.


        Split the input into individual digits or pairs of digits if they are both 1-3.



        mT`d`〇〡-〩`^.


        Replace the first character of each line with its Suzhou.



        T`¶123`_一二三


        Join the lines back together and replace any remaining digits with horizontal Suzhou.






        share|improve this answer









        $endgroup$





















          7












          $begingroup$


          Perl 5 -pl -Mutf8, 53 46 bytes



          -7 bytes thanks to Grimy



          s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c


          Try it online!



          Explanation



          # Binary AND two consecutive digits 1-3 (ASCII 0x31-0x33)
          # or any other single digit (ASCII 0x30-0x39) with string "OS"
          # (ASCII 0x4F 0x53). This converts the first digit to 0x00-0x09
          # and the second digit, if present, to 0x11-0x13.
          s/[123]{2}|./OS&$&/ge;
          # Translate empty complemented searchlist (0x00-0x13) to
          # respective Unicode characters.
          y//〇〡-〰一二三/c





          share|improve this answer











          $endgroup$













          • $begingroup$
            -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
            $endgroup$
            – Grimy
            Dec 13 '18 at 14:17












          • $begingroup$
            49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
            $endgroup$
            – Grimy
            Dec 13 '18 at 14:28












          • $begingroup$
            46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
            $endgroup$
            – Grimy
            Dec 13 '18 at 15:01



















          6












          $begingroup$


          Java (JDK), 120 bytes





          s->{for(int i=0,p=0,c;i<s.length;)s[i]+=(p>0&p<4&(c=s[i++]-48)>0&c<4)?"A䷏乚䷖".charAt(c+(p=0)):(p=c)<1?12247:12272;}


          Try it online!



          Credits




          • -3 bytes thanks to Kevin Cruijssen






          share|improve this answer











          $endgroup$









          • 1




            $begingroup$
            c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
            $endgroup$
            – Kevin Cruijssen
            Dec 13 '18 at 10:27






          • 1




            $begingroup$
            @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
            $endgroup$
            – Olivier Grégoire
            Dec 13 '18 at 10:50





















          5












          $begingroup$

          JavaScript (ES6),  95 89  88 bytes



          Saved 6 bytes thanks to @ShieruAsakoto



          Takes input as a string.





          s=>s.replace(i=/./g,c=>'三二一〇〡〢〣〤〥〦〧〨〩'[i=112>>i&c<4?3-c:+c+3])


          Try it online!






          share|improve this answer











          $endgroup$













          • $begingroup$
            89 bytes
            $endgroup$
            – Shieru Asakoto
            Dec 13 '18 at 2:34












          • $begingroup$
            @ShieruAsakoto That's much better! Thanks a lot!
            $endgroup$
            – Arnauld
            Dec 13 '18 at 2:56



















          5












          $begingroup$


          Python 3, 102 bytes





          f=0
          for i in input():f=i in'123'and 9-f;print(end='〇一二三〤〥〦〧〨〩〡〢〣'[int(i)+f])


          Try it online!



          mypetlion reminded me of a trivial golf. -4 bytes.






          share|improve this answer











          $endgroup$





















            3












            $begingroup$


            Clean, 181 165 bytes



            All octal escapes can be replaced by the equivalent single-byte characters (and are counted as one byte each), but used for readability and because otherwise it breaks TIO and SE with invalid UTF-8.



            import StdEnv
            u=mapc={'343','200',c}
            ?s=((!!)["〇":s++u['244245246247250']])o digitToInt
            $=
            $[h:t]=[?(u['241242243'])h:if(h-'1'<'03')f$t]
            f=
            f[h:t]=[?["一","二","三"]h: $t]


            Try it online!



            An encoding-unaware compiler is both a blessing and a curse.






            share|improve this answer











            $endgroup$





















              2












              $begingroup$


              Perl 6 -p, 85 61 bytes



              -13 bytes thanks to Jo King





              s:g[(1|2|3)<((1|2|3)]=chr $/+57;tr/0..</〇〡..〩一二三/


              Try it online!






              share|improve this answer











              $endgroup$





















                2












                $begingroup$


                Red, 198 171 bytes



                func[n][s: charset"〡〢〣"forall n[n/1: either n/1 >#"0"[to-char 12272 + n/1][#"〇"]]parse
                n[any[[s change copy t s(pick"一二三"do(to-char t)- 12320)fail]| skip]]n]


                Try it online!






                share|improve this answer











                $endgroup$





















                  2












                  $begingroup$


                  Jelly, 38 bytes



                  9Rż“øƓ“œ%“øƈ’;-25+⁽-EỌœị@DżD<4«Ɗ‘×¥ƊƊ


                  Try it online!






                  share|improve this answer









                  $endgroup$





















                    2












                    $begingroup$

                    C, 131 bytes



                    f(char*n){char*s="〇〡〢〣〤〥〦〧〨〩一二三",i=0,f=0,c,d;do{c=n[i++]-48;d=n[i]-48;printf("%.3s",s+c*3+f);f=c*d&&(c|d)<4&&!f?27:0;}while(n[i]);}


                    Try it online!



                    Explanation:
                    First of all - I'm using char for all variables to make it short.



                    Array s holds all needed Suzhou characters.



                    The rest is pretty much iterating over the provided number, which is expressed as a string.



                    When writing to the terminal, I'm using the input number value (so the character - 48 in ASCII), multiplied by 3, because all these characters are 3 bytes long in UTF-8.
                    The 'string' being printed is always 3 bytes long - so one real character.



                    Variables c and d are just 'shortcuts' to current and next input character(number).



                    Variable f holds 0 or 27 - it says if the next 1/2/3 character should be shifted to alternative one - 27 is the offset between regular and alternative character in the array.



                    f=c*d&&(c|d)<4&&!f?27:0 - write 27 to f if c*d != 0 and if they are both < 4 and if f isn't 0, otherwise write 0.



                    Could be rewritten as:



                    if( c && d && c < 4 && d < 4 && f == 0)
                    f = 27
                    else
                    f = 0


                    Maybe there are some bytes to shave off, but I'm no longer able to find anything obvious.






                    share|improve this answer









                    $endgroup$













                    • $begingroup$
                      120 bytes.
                      $endgroup$
                      – Jonathan Frech
                      Dec 14 '18 at 17:58



















                    1












                    $begingroup$


                    Ruby -p, 71 bytes





                    $_=gsub(/[1-3]K[1-3]/){|x|(x.ord+9).chr}.tr"0-<","〇〡-〩一二三"


                    Try it online!






                    share|improve this answer









                    $endgroup$





















                      1












                      $begingroup$


                      K (ngn/k), 67 bytes



                      {,/(0N 3#"〇一二三〤〥〦〧〨〩〡〢〣")x+9*<x&x<4}@10


                      Try it online!



                      10 get list of decimal digits



                      { }@ apply the following function



                      x&x<4 boolean (0/1) list of where the argument is less than 4 and non-zero



                      < scan with less-than. this turns runs of consecutive 1s into alternating 1s and 0s



                      x+9* multiply by 9 and add x



                      juxtaposition is indexing, so use this as indices in...



                      0N 3#"〇一二三〤〥〦〧〨〩〡〢〣" the given string, split into a list of 3-byte strings. k is not unicode aware, so it sees only bytes



                      ,/ concatenate






                      share|improve this answer











                      $endgroup$





















                        1












                        $begingroup$


                        Wolfram Language (Mathematica), 117 bytes



                        FromCharacterCode[12320+(IntegerDigits@#/. 0->-25//.MapIndexed[{a___,c=#2[[1]],c,b___}->{a,c,#,b}&,{0,140,9}+7648])]&


                        Try it online!



                        Note that on TIO this outputs the result in escaped form. In the normal Wolfram front end, it will look like this:picture of notebook interface






                        share|improve this answer









                        $endgroup$













                        • $begingroup$
                          Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                          $endgroup$
                          – lastresort
                          Dec 15 '18 at 7:35



















                        1












                        $begingroup$


                        Japt, 55 bytes



                        s"〇〡〢〣〤〥〦〧〨〩"
                        ð"[〡〢〣]" óÈ¥YÉîë2,1Ãc
                        £VøY ?Xd"〡一〢二〣三":X


                        Try it online!



                        It's worth noting that TIO gives a different byte count than my preferred interpreter, but I see no reason not to trust the one that gives me a lower score.



                        Explanation:



                            Step 1:
                        s"〇〡〢〣〤〥〦〧〨〩" Convert the input number to a string using these characters for digits

                        Step 2:
                        ð Find all indexes which match this regex:
                        "[〡〢〣]" A 1, 2, or 3 character
                        ó Ã Split the list between:
                        È¥YÉ Non-consecutive numbers
                        ® Ã For each group of consecutive [1,2,3] characters:
                        ë2,1 Get every-other one starting with the second
                        c Flatten

                        Step 3:
                        £ For each character from step 1:
                        VøY Check if its index is in the list from step 2
                        ? If it is:
                        Xd"〡一〢二〣三" Replace it with the horizontal version
                        :X Otherwise leave it as-is





                        share|improve this answer









                        $endgroup$





















                          1












                          $begingroup$


                          C# (.NET Core), 107 bytes, 81 chars





                          n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0;return n.Select(k=>t[k+(b+=k>0&k<4?1:b)%2*9]);}


                          Try it online!



                          Saved 17 bytes thanks to @Jo King



                          Old Answer



                          C# (.NET Core), 124 bytes, 98 chars





                          n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0<1;return n.Select(k=>{b=k>0&k<4?!b:0<1;return b?t[k]:t[k+9];});}


                          Try it online!



                          Takes input in the form of a List, and returns an IEnumerable. I don't know if this input/output is ok, so just let me know if it isn't.



                          Explanation



                          How this works is that it transforms all the integers to their respective Suzhou numeral form, but only if variable b is true. b is inverted whenever we meet an integer that is one, two, or three, and set to true otherwise. If b is false, we turn the integer to one of the vertical numerals.






                          share|improve this answer











                          $endgroup$













                          • $begingroup$
                            Wow, I would have never thought of that. Nice!
                            $endgroup$
                            – Embodiment of Ignorance
                            Dec 15 '18 at 5:26



















                          0












                          $begingroup$


                          R, 104 bytes





                          function(x,`[`=chartr)"a-jBCD"["〇〡-〩一二三",gsub("[bcd]\K([bcd])","\U\1","0-9"["a-j",x],,T)]


                          Try it online!



                          An alternative approach in R. Makes use of some Perl-style Regex features (the last T param in substitution function stands for perl=TRUE).



                          First, we translate numerals to alphabetic characters a-j, then use Regex substitution to convert duplicate occurrences of bcd (formerly 123) to uppercase, and finally translate characters to Suzhou numerals with different handling of lowercase and uppercase letters.



                          Credit to J.Doe for the preparation of test cases, as these were taken from his answer.






                          share|improve this answer











                          $endgroup$





















                            0












                            $begingroup$

                            C#, 153 bytes



                            n=>Regex.Replace(n+"",@"[4-90]|[1-3]{1,2}",x=>"〇〡〢〣〤〥〦〧〨〩"[x.Value[0]-'0']+""+(x.Value.Length>1?"一二三"[x.Value[1]-'0'-1]+"":""))


                            Try it online!






                            share|improve this answer











                            $endgroup$













                            • $begingroup$
                              This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                              $endgroup$
                              – Embodiment of Ignorance
                              Dec 15 '18 at 4:21










                            • $begingroup$
                              Oh well, I edited my answer. Thanks for the information :)
                              $endgroup$
                              – zruF
                              Dec 17 '18 at 8:02











                            Your Answer





                            StackExchange.ifUsing("editor", function () {
                            return StackExchange.using("mathjaxEditing", function () {
                            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
                            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
                            });
                            });
                            }, "mathjax-editing");

                            StackExchange.ifUsing("editor", function () {
                            StackExchange.using("externalEditor", function () {
                            StackExchange.using("snippets", function () {
                            StackExchange.snippets.init();
                            });
                            });
                            }, "code-snippets");

                            StackExchange.ready(function() {
                            var channelOptions = {
                            tags: "".split(" "),
                            id: "200"
                            };
                            initTagRenderer("".split(" "), "".split(" "), channelOptions);

                            StackExchange.using("externalEditor", function() {
                            // Have to fire editor after snippets, if snippets enabled
                            if (StackExchange.settings.snippets.snippetsEnabled) {
                            StackExchange.using("snippets", function() {
                            createEditor();
                            });
                            }
                            else {
                            createEditor();
                            }
                            });

                            function createEditor() {
                            StackExchange.prepareEditor({
                            heartbeatType: 'answer',
                            autoActivateHeartbeat: false,
                            convertImagesToLinks: false,
                            noModals: true,
                            showLowRepImageUploadWarning: true,
                            reputationToPostImages: null,
                            bindNavPrevention: true,
                            postfix: "",
                            imageUploader: {
                            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                            allowUrls: true
                            },
                            onDemand: true,
                            discardSelector: ".discard-answer"
                            ,immediatelyShowMarkdownHelp:true
                            });


                            }
                            });














                            draft saved

                            draft discarded


















                            StackExchange.ready(
                            function () {
                            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f177517%2fconvert-to-suzhou-numerals%23new-answer', 'question_page');
                            }
                            );

                            Post as a guest















                            Required, but never shown

























                            20 Answers
                            20






                            active

                            oldest

                            votes








                            20 Answers
                            20






                            active

                            oldest

                            votes









                            active

                            oldest

                            votes






                            active

                            oldest

                            votes









                            2












                            $begingroup$


                            Jelly, 35 bytes



                            9Ḷ;-26ż“/Ẉ8‘+⁽ȷc¤ṃ@ɓD_2ỊŒgÄFị"+⁽-FỌ


                            Try it online!






                            share|improve this answer









                            $endgroup$


















                              2












                              $begingroup$


                              Jelly, 35 bytes



                              9Ḷ;-26ż“/Ẉ8‘+⁽ȷc¤ṃ@ɓD_2ỊŒgÄFị"+⁽-FỌ


                              Try it online!






                              share|improve this answer









                              $endgroup$
















                                2












                                2








                                2





                                $begingroup$


                                Jelly, 35 bytes



                                9Ḷ;-26ż“/Ẉ8‘+⁽ȷc¤ṃ@ɓD_2ỊŒgÄFị"+⁽-FỌ


                                Try it online!






                                share|improve this answer









                                $endgroup$




                                Jelly, 35 bytes



                                9Ḷ;-26ż“/Ẉ8‘+⁽ȷc¤ṃ@ɓD_2ỊŒgÄFị"+⁽-FỌ


                                Try it online!







                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered Dec 13 '18 at 21:07









                                DennisDennis

                                188k32299738




                                188k32299738























                                    9












                                    $begingroup$


                                    R, 138 bytes



                                    I'll bet there's an easier way to do this. Use gsub to get the alternating numeric positions.





                                    function(x,r=-48+~x)Reduce(paste0,ifelse(58<~gsub("[123]{2}","0a",x),"123"["一二三",r],'0-9'["〇〡-〩",r]))
                                    "~"=utf8ToInt
                                    "["=chartr


                                    Try it online!






                                    share|improve this answer











                                    $endgroup$


















                                      9












                                      $begingroup$


                                      R, 138 bytes



                                      I'll bet there's an easier way to do this. Use gsub to get the alternating numeric positions.





                                      function(x,r=-48+~x)Reduce(paste0,ifelse(58<~gsub("[123]{2}","0a",x),"123"["一二三",r],'0-9'["〇〡-〩",r]))
                                      "~"=utf8ToInt
                                      "["=chartr


                                      Try it online!






                                      share|improve this answer











                                      $endgroup$
















                                        9












                                        9








                                        9





                                        $begingroup$


                                        R, 138 bytes



                                        I'll bet there's an easier way to do this. Use gsub to get the alternating numeric positions.





                                        function(x,r=-48+~x)Reduce(paste0,ifelse(58<~gsub("[123]{2}","0a",x),"123"["一二三",r],'0-9'["〇〡-〩",r]))
                                        "~"=utf8ToInt
                                        "["=chartr


                                        Try it online!






                                        share|improve this answer











                                        $endgroup$




                                        R, 138 bytes



                                        I'll bet there's an easier way to do this. Use gsub to get the alternating numeric positions.





                                        function(x,r=-48+~x)Reduce(paste0,ifelse(58<~gsub("[123]{2}","0a",x),"123"["一二三",r],'0-9'["〇〡-〩",r]))
                                        "~"=utf8ToInt
                                        "["=chartr


                                        Try it online!







                                        share|improve this answer














                                        share|improve this answer



                                        share|improve this answer








                                        edited Dec 13 '18 at 15:32

























                                        answered Dec 13 '18 at 14:50









                                        J.DoeJ.Doe

                                        2,299212




                                        2,299212























                                            9












                                            $begingroup$

                                            JavaScript, 81 bytes





                                            s=>s.replace(/./g,c=>(p=14>>c&!p)|c>3?eval(`"\u302${c}"`):'〇一二三'[c],p=0)


                                            Try it online!



                                            Using 14>>c saves 3 bytes. Thanks to Arnauld.






                                            share|improve this answer











                                            $endgroup$


















                                              9












                                              $begingroup$

                                              JavaScript, 81 bytes





                                              s=>s.replace(/./g,c=>(p=14>>c&!p)|c>3?eval(`"\u302${c}"`):'〇一二三'[c],p=0)


                                              Try it online!



                                              Using 14>>c saves 3 bytes. Thanks to Arnauld.






                                              share|improve this answer











                                              $endgroup$
















                                                9












                                                9








                                                9





                                                $begingroup$

                                                JavaScript, 81 bytes





                                                s=>s.replace(/./g,c=>(p=14>>c&!p)|c>3?eval(`"\u302${c}"`):'〇一二三'[c],p=0)


                                                Try it online!



                                                Using 14>>c saves 3 bytes. Thanks to Arnauld.






                                                share|improve this answer











                                                $endgroup$



                                                JavaScript, 81 bytes





                                                s=>s.replace(/./g,c=>(p=14>>c&!p)|c>3?eval(`"\u302${c}"`):'〇一二三'[c],p=0)


                                                Try it online!



                                                Using 14>>c saves 3 bytes. Thanks to Arnauld.







                                                share|improve this answer














                                                share|improve this answer



                                                share|improve this answer








                                                edited Dec 14 '18 at 1:26

























                                                answered Dec 13 '18 at 9:28









                                                tshtsh

                                                8,93511650




                                                8,93511650























                                                    8












                                                    $begingroup$


                                                    Retina, 46 bytes



                                                    /[1-3]{2}|./_T`d`〇〡-〩`^.
                                                    T`123`一二三


                                                    Try it online! Link includes test cases. Explanation:



                                                    /[1-3]{2}|./


                                                    Match either two digits 1-3 or any other digit.



                                                    _T`d`〇〡-〩`^.


                                                    Replace the first character of each match with its Suzhou.



                                                    T`123`一二三


                                                    Replace any remaining digits with horizontal Suzhou.



                                                    51 bytes in Retina 0.8.2:



                                                    M!`[1-3]{2}|.
                                                    mT`d`〇〡-〩`^.
                                                    T`¶123`_一二三


                                                    Try it online! Link includes test cases. Explanation:



                                                    M!`[1-3]{2}|.


                                                    Split the input into individual digits or pairs of digits if they are both 1-3.



                                                    mT`d`〇〡-〩`^.


                                                    Replace the first character of each line with its Suzhou.



                                                    T`¶123`_一二三


                                                    Join the lines back together and replace any remaining digits with horizontal Suzhou.






                                                    share|improve this answer









                                                    $endgroup$


















                                                      8












                                                      $begingroup$


                                                      Retina, 46 bytes



                                                      /[1-3]{2}|./_T`d`〇〡-〩`^.
                                                      T`123`一二三


                                                      Try it online! Link includes test cases. Explanation:



                                                      /[1-3]{2}|./


                                                      Match either two digits 1-3 or any other digit.



                                                      _T`d`〇〡-〩`^.


                                                      Replace the first character of each match with its Suzhou.



                                                      T`123`一二三


                                                      Replace any remaining digits with horizontal Suzhou.



                                                      51 bytes in Retina 0.8.2:



                                                      M!`[1-3]{2}|.
                                                      mT`d`〇〡-〩`^.
                                                      T`¶123`_一二三


                                                      Try it online! Link includes test cases. Explanation:



                                                      M!`[1-3]{2}|.


                                                      Split the input into individual digits or pairs of digits if they are both 1-3.



                                                      mT`d`〇〡-〩`^.


                                                      Replace the first character of each line with its Suzhou.



                                                      T`¶123`_一二三


                                                      Join the lines back together and replace any remaining digits with horizontal Suzhou.






                                                      share|improve this answer









                                                      $endgroup$
















                                                        8












                                                        8








                                                        8





                                                        $begingroup$


                                                        Retina, 46 bytes



                                                        /[1-3]{2}|./_T`d`〇〡-〩`^.
                                                        T`123`一二三


                                                        Try it online! Link includes test cases. Explanation:



                                                        /[1-3]{2}|./


                                                        Match either two digits 1-3 or any other digit.



                                                        _T`d`〇〡-〩`^.


                                                        Replace the first character of each match with its Suzhou.



                                                        T`123`一二三


                                                        Replace any remaining digits with horizontal Suzhou.



                                                        51 bytes in Retina 0.8.2:



                                                        M!`[1-3]{2}|.
                                                        mT`d`〇〡-〩`^.
                                                        T`¶123`_一二三


                                                        Try it online! Link includes test cases. Explanation:



                                                        M!`[1-3]{2}|.


                                                        Split the input into individual digits or pairs of digits if they are both 1-3.



                                                        mT`d`〇〡-〩`^.


                                                        Replace the first character of each line with its Suzhou.



                                                        T`¶123`_一二三


                                                        Join the lines back together and replace any remaining digits with horizontal Suzhou.






                                                        share|improve this answer









                                                        $endgroup$




                                                        Retina, 46 bytes



                                                        /[1-3]{2}|./_T`d`〇〡-〩`^.
                                                        T`123`一二三


                                                        Try it online! Link includes test cases. Explanation:



                                                        /[1-3]{2}|./


                                                        Match either two digits 1-3 or any other digit.



                                                        _T`d`〇〡-〩`^.


                                                        Replace the first character of each match with its Suzhou.



                                                        T`123`一二三


                                                        Replace any remaining digits with horizontal Suzhou.



                                                        51 bytes in Retina 0.8.2:



                                                        M!`[1-3]{2}|.
                                                        mT`d`〇〡-〩`^.
                                                        T`¶123`_一二三


                                                        Try it online! Link includes test cases. Explanation:



                                                        M!`[1-3]{2}|.


                                                        Split the input into individual digits or pairs of digits if they are both 1-3.



                                                        mT`d`〇〡-〩`^.


                                                        Replace the first character of each line with its Suzhou.



                                                        T`¶123`_一二三


                                                        Join the lines back together and replace any remaining digits with horizontal Suzhou.







                                                        share|improve this answer












                                                        share|improve this answer



                                                        share|improve this answer










                                                        answered Dec 13 '18 at 1:13









                                                        NeilNeil

                                                        80.4k744178




                                                        80.4k744178























                                                            7












                                                            $begingroup$


                                                            Perl 5 -pl -Mutf8, 53 46 bytes



                                                            -7 bytes thanks to Grimy



                                                            s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c


                                                            Try it online!



                                                            Explanation



                                                            # Binary AND two consecutive digits 1-3 (ASCII 0x31-0x33)
                                                            # or any other single digit (ASCII 0x30-0x39) with string "OS"
                                                            # (ASCII 0x4F 0x53). This converts the first digit to 0x00-0x09
                                                            # and the second digit, if present, to 0x11-0x13.
                                                            s/[123]{2}|./OS&$&/ge;
                                                            # Translate empty complemented searchlist (0x00-0x13) to
                                                            # respective Unicode characters.
                                                            y//〇〡-〰一二三/c





                                                            share|improve this answer











                                                            $endgroup$













                                                            • $begingroup$
                                                              -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:17












                                                            • $begingroup$
                                                              49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:28












                                                            • $begingroup$
                                                              46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 15:01
















                                                            7












                                                            $begingroup$


                                                            Perl 5 -pl -Mutf8, 53 46 bytes



                                                            -7 bytes thanks to Grimy



                                                            s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c


                                                            Try it online!



                                                            Explanation



                                                            # Binary AND two consecutive digits 1-3 (ASCII 0x31-0x33)
                                                            # or any other single digit (ASCII 0x30-0x39) with string "OS"
                                                            # (ASCII 0x4F 0x53). This converts the first digit to 0x00-0x09
                                                            # and the second digit, if present, to 0x11-0x13.
                                                            s/[123]{2}|./OS&$&/ge;
                                                            # Translate empty complemented searchlist (0x00-0x13) to
                                                            # respective Unicode characters.
                                                            y//〇〡-〰一二三/c





                                                            share|improve this answer











                                                            $endgroup$













                                                            • $begingroup$
                                                              -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:17












                                                            • $begingroup$
                                                              49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:28












                                                            • $begingroup$
                                                              46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 15:01














                                                            7












                                                            7








                                                            7





                                                            $begingroup$


                                                            Perl 5 -pl -Mutf8, 53 46 bytes



                                                            -7 bytes thanks to Grimy



                                                            s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c


                                                            Try it online!



                                                            Explanation



                                                            # Binary AND two consecutive digits 1-3 (ASCII 0x31-0x33)
                                                            # or any other single digit (ASCII 0x30-0x39) with string "OS"
                                                            # (ASCII 0x4F 0x53). This converts the first digit to 0x00-0x09
                                                            # and the second digit, if present, to 0x11-0x13.
                                                            s/[123]{2}|./OS&$&/ge;
                                                            # Translate empty complemented searchlist (0x00-0x13) to
                                                            # respective Unicode characters.
                                                            y//〇〡-〰一二三/c





                                                            share|improve this answer











                                                            $endgroup$




                                                            Perl 5 -pl -Mutf8, 53 46 bytes



                                                            -7 bytes thanks to Grimy



                                                            s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c


                                                            Try it online!



                                                            Explanation



                                                            # Binary AND two consecutive digits 1-3 (ASCII 0x31-0x33)
                                                            # or any other single digit (ASCII 0x30-0x39) with string "OS"
                                                            # (ASCII 0x4F 0x53). This converts the first digit to 0x00-0x09
                                                            # and the second digit, if present, to 0x11-0x13.
                                                            s/[123]{2}|./OS&$&/ge;
                                                            # Translate empty complemented searchlist (0x00-0x13) to
                                                            # respective Unicode characters.
                                                            y//〇〡-〰一二三/c






                                                            share|improve this answer














                                                            share|improve this answer



                                                            share|improve this answer








                                                            edited Dec 13 '18 at 15:28

























                                                            answered Dec 13 '18 at 1:31









                                                            nwellnhofnwellnhof

                                                            6,72511126




                                                            6,72511126












                                                            • $begingroup$
                                                              -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:17












                                                            • $begingroup$
                                                              49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:28












                                                            • $begingroup$
                                                              46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 15:01


















                                                            • $begingroup$
                                                              -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:17












                                                            • $begingroup$
                                                              49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 14:28












                                                            • $begingroup$
                                                              46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                              $endgroup$
                                                              – Grimy
                                                              Dec 13 '18 at 15:01
















                                                            $begingroup$
                                                            -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 14:17






                                                            $begingroup$
                                                            -3 bytes with s/[123]K[123]/$&^$;/ge;y/--</一二三〇〡-〩/ (TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 14:17














                                                            $begingroup$
                                                            49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 14:28






                                                            $begingroup$
                                                            49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/ (TIO). 48: s/[123]{2}/$&^"34"/ge;y/--</一二三〇〡-〩/ (requires using literal control characters instead of 34, idk how to do this on TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 14:28














                                                            $begingroup$
                                                            46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 15:01




                                                            $begingroup$
                                                            46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c (TIO)
                                                            $endgroup$
                                                            – Grimy
                                                            Dec 13 '18 at 15:01











                                                            6












                                                            $begingroup$


                                                            Java (JDK), 120 bytes





                                                            s->{for(int i=0,p=0,c;i<s.length;)s[i]+=(p>0&p<4&(c=s[i++]-48)>0&c<4)?"A䷏乚䷖".charAt(c+(p=0)):(p=c)<1?12247:12272;}


                                                            Try it online!



                                                            Credits




                                                            • -3 bytes thanks to Kevin Cruijssen






                                                            share|improve this answer











                                                            $endgroup$









                                                            • 1




                                                              $begingroup$
                                                              c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                              $endgroup$
                                                              – Kevin Cruijssen
                                                              Dec 13 '18 at 10:27






                                                            • 1




                                                              $begingroup$
                                                              @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                              $endgroup$
                                                              – Olivier Grégoire
                                                              Dec 13 '18 at 10:50


















                                                            6












                                                            $begingroup$


                                                            Java (JDK), 120 bytes





                                                            s->{for(int i=0,p=0,c;i<s.length;)s[i]+=(p>0&p<4&(c=s[i++]-48)>0&c<4)?"A䷏乚䷖".charAt(c+(p=0)):(p=c)<1?12247:12272;}


                                                            Try it online!



                                                            Credits




                                                            • -3 bytes thanks to Kevin Cruijssen






                                                            share|improve this answer











                                                            $endgroup$









                                                            • 1




                                                              $begingroup$
                                                              c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                              $endgroup$
                                                              – Kevin Cruijssen
                                                              Dec 13 '18 at 10:27






                                                            • 1




                                                              $begingroup$
                                                              @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                              $endgroup$
                                                              – Olivier Grégoire
                                                              Dec 13 '18 at 10:50
















                                                            6












                                                            6








                                                            6





                                                            $begingroup$


                                                            Java (JDK), 120 bytes





                                                            s->{for(int i=0,p=0,c;i<s.length;)s[i]+=(p>0&p<4&(c=s[i++]-48)>0&c<4)?"A䷏乚䷖".charAt(c+(p=0)):(p=c)<1?12247:12272;}


                                                            Try it online!



                                                            Credits




                                                            • -3 bytes thanks to Kevin Cruijssen






                                                            share|improve this answer











                                                            $endgroup$




                                                            Java (JDK), 120 bytes





                                                            s->{for(int i=0,p=0,c;i<s.length;)s[i]+=(p>0&p<4&(c=s[i++]-48)>0&c<4)?"A䷏乚䷖".charAt(c+(p=0)):(p=c)<1?12247:12272;}


                                                            Try it online!



                                                            Credits




                                                            • -3 bytes thanks to Kevin Cruijssen







                                                            share|improve this answer














                                                            share|improve this answer



                                                            share|improve this answer








                                                            edited Dec 13 '18 at 10:44

























                                                            answered Dec 13 '18 at 10:19









                                                            Olivier GrégoireOlivier Grégoire

                                                            8,96511843




                                                            8,96511843








                                                            • 1




                                                              $begingroup$
                                                              c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                              $endgroup$
                                                              – Kevin Cruijssen
                                                              Dec 13 '18 at 10:27






                                                            • 1




                                                              $begingroup$
                                                              @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                              $endgroup$
                                                              – Olivier Grégoire
                                                              Dec 13 '18 at 10:50
















                                                            • 1




                                                              $begingroup$
                                                              c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                              $endgroup$
                                                              – Kevin Cruijssen
                                                              Dec 13 '18 at 10:27






                                                            • 1




                                                              $begingroup$
                                                              @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                              $endgroup$
                                                              – Olivier Grégoire
                                                              Dec 13 '18 at 10:50










                                                            1




                                                            1




                                                            $begingroup$
                                                            c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                            $endgroup$
                                                            – Kevin Cruijssen
                                                            Dec 13 '18 at 10:27




                                                            $begingroup$
                                                            c=s[i]-48;if(p>0&p<4&c>0&c<4) can be if(p>0&p<4&(c=s[i]-48)>0&c<4), and then you can also drop the brackets around the loop. Also, else{p=c;s[i]+=c<1?12247:12272;} can be else s[i]+=(p=c)<1?12247:12272;
                                                            $endgroup$
                                                            – Kevin Cruijssen
                                                            Dec 13 '18 at 10:27




                                                            1




                                                            1




                                                            $begingroup$
                                                            @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                            $endgroup$
                                                            – Olivier Grégoire
                                                            Dec 13 '18 at 10:50






                                                            $begingroup$
                                                            @KevinCruijssen Thank you! I was still golfing this answer, but it helped me nonetheless ^^ Now I think I'm done golfing it.
                                                            $endgroup$
                                                            – Olivier Grégoire
                                                            Dec 13 '18 at 10:50













                                                            5












                                                            $begingroup$

                                                            JavaScript (ES6),  95 89  88 bytes



                                                            Saved 6 bytes thanks to @ShieruAsakoto



                                                            Takes input as a string.





                                                            s=>s.replace(i=/./g,c=>'三二一〇〡〢〣〤〥〦〧〨〩'[i=112>>i&c<4?3-c:+c+3])


                                                            Try it online!






                                                            share|improve this answer











                                                            $endgroup$













                                                            • $begingroup$
                                                              89 bytes
                                                              $endgroup$
                                                              – Shieru Asakoto
                                                              Dec 13 '18 at 2:34












                                                            • $begingroup$
                                                              @ShieruAsakoto That's much better! Thanks a lot!
                                                              $endgroup$
                                                              – Arnauld
                                                              Dec 13 '18 at 2:56
















                                                            5












                                                            $begingroup$

                                                            JavaScript (ES6),  95 89  88 bytes



                                                            Saved 6 bytes thanks to @ShieruAsakoto



                                                            Takes input as a string.





                                                            s=>s.replace(i=/./g,c=>'三二一〇〡〢〣〤〥〦〧〨〩'[i=112>>i&c<4?3-c:+c+3])


                                                            Try it online!






                                                            share|improve this answer











                                                            $endgroup$













                                                            • $begingroup$
                                                              89 bytes
                                                              $endgroup$
                                                              – Shieru Asakoto
                                                              Dec 13 '18 at 2:34












                                                            • $begingroup$
                                                              @ShieruAsakoto That's much better! Thanks a lot!
                                                              $endgroup$
                                                              – Arnauld
                                                              Dec 13 '18 at 2:56














                                                            5












                                                            5








                                                            5





                                                            $begingroup$

                                                            JavaScript (ES6),  95 89  88 bytes



                                                            Saved 6 bytes thanks to @ShieruAsakoto



                                                            Takes input as a string.





                                                            s=>s.replace(i=/./g,c=>'三二一〇〡〢〣〤〥〦〧〨〩'[i=112>>i&c<4?3-c:+c+3])


                                                            Try it online!






                                                            share|improve this answer











                                                            $endgroup$



                                                            JavaScript (ES6),  95 89  88 bytes



                                                            Saved 6 bytes thanks to @ShieruAsakoto



                                                            Takes input as a string.





                                                            s=>s.replace(i=/./g,c=>'三二一〇〡〢〣〤〥〦〧〨〩'[i=112>>i&c<4?3-c:+c+3])


                                                            Try it online!







                                                            share|improve this answer














                                                            share|improve this answer



                                                            share|improve this answer








                                                            edited Dec 13 '18 at 14:25

























                                                            answered Dec 13 '18 at 1:18









                                                            ArnauldArnauld

                                                            75.6k692317




                                                            75.6k692317












                                                            • $begingroup$
                                                              89 bytes
                                                              $endgroup$
                                                              – Shieru Asakoto
                                                              Dec 13 '18 at 2:34












                                                            • $begingroup$
                                                              @ShieruAsakoto That's much better! Thanks a lot!
                                                              $endgroup$
                                                              – Arnauld
                                                              Dec 13 '18 at 2:56


















                                                            • $begingroup$
                                                              89 bytes
                                                              $endgroup$
                                                              – Shieru Asakoto
                                                              Dec 13 '18 at 2:34












                                                            • $begingroup$
                                                              @ShieruAsakoto That's much better! Thanks a lot!
                                                              $endgroup$
                                                              – Arnauld
                                                              Dec 13 '18 at 2:56
















                                                            $begingroup$
                                                            89 bytes
                                                            $endgroup$
                                                            – Shieru Asakoto
                                                            Dec 13 '18 at 2:34






                                                            $begingroup$
                                                            89 bytes
                                                            $endgroup$
                                                            – Shieru Asakoto
                                                            Dec 13 '18 at 2:34














                                                            $begingroup$
                                                            @ShieruAsakoto That's much better! Thanks a lot!
                                                            $endgroup$
                                                            – Arnauld
                                                            Dec 13 '18 at 2:56




                                                            $begingroup$
                                                            @ShieruAsakoto That's much better! Thanks a lot!
                                                            $endgroup$
                                                            – Arnauld
                                                            Dec 13 '18 at 2:56











                                                            5












                                                            $begingroup$


                                                            Python 3, 102 bytes





                                                            f=0
                                                            for i in input():f=i in'123'and 9-f;print(end='〇一二三〤〥〦〧〨〩〡〢〣'[int(i)+f])


                                                            Try it online!



                                                            mypetlion reminded me of a trivial golf. -4 bytes.






                                                            share|improve this answer











                                                            $endgroup$


















                                                              5












                                                              $begingroup$


                                                              Python 3, 102 bytes





                                                              f=0
                                                              for i in input():f=i in'123'and 9-f;print(end='〇一二三〤〥〦〧〨〩〡〢〣'[int(i)+f])


                                                              Try it online!



                                                              mypetlion reminded me of a trivial golf. -4 bytes.






                                                              share|improve this answer











                                                              $endgroup$
















                                                                5












                                                                5








                                                                5





                                                                $begingroup$


                                                                Python 3, 102 bytes





                                                                f=0
                                                                for i in input():f=i in'123'and 9-f;print(end='〇一二三〤〥〦〧〨〩〡〢〣'[int(i)+f])


                                                                Try it online!



                                                                mypetlion reminded me of a trivial golf. -4 bytes.






                                                                share|improve this answer











                                                                $endgroup$




                                                                Python 3, 102 bytes





                                                                f=0
                                                                for i in input():f=i in'123'and 9-f;print(end='〇一二三〤〥〦〧〨〩〡〢〣'[int(i)+f])


                                                                Try it online!



                                                                mypetlion reminded me of a trivial golf. -4 bytes.







                                                                share|improve this answer














                                                                share|improve this answer



                                                                share|improve this answer








                                                                edited Dec 13 '18 at 19:46

























                                                                answered Dec 13 '18 at 18:17









                                                                Erik the OutgolferErik the Outgolfer

                                                                31.8k429103




                                                                31.8k429103























                                                                    3












                                                                    $begingroup$


                                                                    Clean, 181 165 bytes



                                                                    All octal escapes can be replaced by the equivalent single-byte characters (and are counted as one byte each), but used for readability and because otherwise it breaks TIO and SE with invalid UTF-8.



                                                                    import StdEnv
                                                                    u=mapc={'343','200',c}
                                                                    ?s=((!!)["〇":s++u['244245246247250']])o digitToInt
                                                                    $=
                                                                    $[h:t]=[?(u['241242243'])h:if(h-'1'<'03')f$t]
                                                                    f=
                                                                    f[h:t]=[?["一","二","三"]h: $t]


                                                                    Try it online!



                                                                    An encoding-unaware compiler is both a blessing and a curse.






                                                                    share|improve this answer











                                                                    $endgroup$


















                                                                      3












                                                                      $begingroup$


                                                                      Clean, 181 165 bytes



                                                                      All octal escapes can be replaced by the equivalent single-byte characters (and are counted as one byte each), but used for readability and because otherwise it breaks TIO and SE with invalid UTF-8.



                                                                      import StdEnv
                                                                      u=mapc={'343','200',c}
                                                                      ?s=((!!)["〇":s++u['244245246247250']])o digitToInt
                                                                      $=
                                                                      $[h:t]=[?(u['241242243'])h:if(h-'1'<'03')f$t]
                                                                      f=
                                                                      f[h:t]=[?["一","二","三"]h: $t]


                                                                      Try it online!



                                                                      An encoding-unaware compiler is both a blessing and a curse.






                                                                      share|improve this answer











                                                                      $endgroup$
















                                                                        3












                                                                        3








                                                                        3





                                                                        $begingroup$


                                                                        Clean, 181 165 bytes



                                                                        All octal escapes can be replaced by the equivalent single-byte characters (and are counted as one byte each), but used for readability and because otherwise it breaks TIO and SE with invalid UTF-8.



                                                                        import StdEnv
                                                                        u=mapc={'343','200',c}
                                                                        ?s=((!!)["〇":s++u['244245246247250']])o digitToInt
                                                                        $=
                                                                        $[h:t]=[?(u['241242243'])h:if(h-'1'<'03')f$t]
                                                                        f=
                                                                        f[h:t]=[?["一","二","三"]h: $t]


                                                                        Try it online!



                                                                        An encoding-unaware compiler is both a blessing and a curse.






                                                                        share|improve this answer











                                                                        $endgroup$




                                                                        Clean, 181 165 bytes



                                                                        All octal escapes can be replaced by the equivalent single-byte characters (and are counted as one byte each), but used for readability and because otherwise it breaks TIO and SE with invalid UTF-8.



                                                                        import StdEnv
                                                                        u=mapc={'343','200',c}
                                                                        ?s=((!!)["〇":s++u['244245246247250']])o digitToInt
                                                                        $=
                                                                        $[h:t]=[?(u['241242243'])h:if(h-'1'<'03')f$t]
                                                                        f=
                                                                        f[h:t]=[?["一","二","三"]h: $t]


                                                                        Try it online!



                                                                        An encoding-unaware compiler is both a blessing and a curse.







                                                                        share|improve this answer














                                                                        share|improve this answer



                                                                        share|improve this answer








                                                                        edited Dec 13 '18 at 3:21

























                                                                        answered Dec 13 '18 at 3:07









                                                                        ΟurousΟurous

                                                                        6,74211034




                                                                        6,74211034























                                                                            2












                                                                            $begingroup$


                                                                            Perl 6 -p, 85 61 bytes



                                                                            -13 bytes thanks to Jo King





                                                                            s:g[(1|2|3)<((1|2|3)]=chr $/+57;tr/0..</〇〡..〩一二三/


                                                                            Try it online!






                                                                            share|improve this answer











                                                                            $endgroup$


















                                                                              2












                                                                              $begingroup$


                                                                              Perl 6 -p, 85 61 bytes



                                                                              -13 bytes thanks to Jo King





                                                                              s:g[(1|2|3)<((1|2|3)]=chr $/+57;tr/0..</〇〡..〩一二三/


                                                                              Try it online!






                                                                              share|improve this answer











                                                                              $endgroup$
















                                                                                2












                                                                                2








                                                                                2





                                                                                $begingroup$


                                                                                Perl 6 -p, 85 61 bytes



                                                                                -13 bytes thanks to Jo King





                                                                                s:g[(1|2|3)<((1|2|3)]=chr $/+57;tr/0..</〇〡..〩一二三/


                                                                                Try it online!






                                                                                share|improve this answer











                                                                                $endgroup$




                                                                                Perl 6 -p, 85 61 bytes



                                                                                -13 bytes thanks to Jo King





                                                                                s:g[(1|2|3)<((1|2|3)]=chr $/+57;tr/0..</〇〡..〩一二三/


                                                                                Try it online!







                                                                                share|improve this answer














                                                                                share|improve this answer



                                                                                share|improve this answer








                                                                                edited Dec 13 '18 at 1:42

























                                                                                answered Dec 13 '18 at 0:47









                                                                                nwellnhofnwellnhof

                                                                                6,72511126




                                                                                6,72511126























                                                                                    2












                                                                                    $begingroup$


                                                                                    Red, 198 171 bytes



                                                                                    func[n][s: charset"〡〢〣"forall n[n/1: either n/1 >#"0"[to-char 12272 + n/1][#"〇"]]parse
                                                                                    n[any[[s change copy t s(pick"一二三"do(to-char t)- 12320)fail]| skip]]n]


                                                                                    Try it online!






                                                                                    share|improve this answer











                                                                                    $endgroup$


















                                                                                      2












                                                                                      $begingroup$


                                                                                      Red, 198 171 bytes



                                                                                      func[n][s: charset"〡〢〣"forall n[n/1: either n/1 >#"0"[to-char 12272 + n/1][#"〇"]]parse
                                                                                      n[any[[s change copy t s(pick"一二三"do(to-char t)- 12320)fail]| skip]]n]


                                                                                      Try it online!






                                                                                      share|improve this answer











                                                                                      $endgroup$
















                                                                                        2












                                                                                        2








                                                                                        2





                                                                                        $begingroup$


                                                                                        Red, 198 171 bytes



                                                                                        func[n][s: charset"〡〢〣"forall n[n/1: either n/1 >#"0"[to-char 12272 + n/1][#"〇"]]parse
                                                                                        n[any[[s change copy t s(pick"一二三"do(to-char t)- 12320)fail]| skip]]n]


                                                                                        Try it online!






                                                                                        share|improve this answer











                                                                                        $endgroup$




                                                                                        Red, 198 171 bytes



                                                                                        func[n][s: charset"〡〢〣"forall n[n/1: either n/1 >#"0"[to-char 12272 + n/1][#"〇"]]parse
                                                                                        n[any[[s change copy t s(pick"一二三"do(to-char t)- 12320)fail]| skip]]n]


                                                                                        Try it online!







                                                                                        share|improve this answer














                                                                                        share|improve this answer



                                                                                        share|improve this answer








                                                                                        edited Dec 13 '18 at 11:20

























                                                                                        answered Dec 13 '18 at 10:01









                                                                                        Galen IvanovGalen Ivanov

                                                                                        6,75711033




                                                                                        6,75711033























                                                                                            2












                                                                                            $begingroup$


                                                                                            Jelly, 38 bytes



                                                                                            9Rż“øƓ“œ%“øƈ’;-25+⁽-EỌœị@DżD<4«Ɗ‘×¥ƊƊ


                                                                                            Try it online!






                                                                                            share|improve this answer









                                                                                            $endgroup$


















                                                                                              2












                                                                                              $begingroup$


                                                                                              Jelly, 38 bytes



                                                                                              9Rż“øƓ“œ%“øƈ’;-25+⁽-EỌœị@DżD<4«Ɗ‘×¥ƊƊ


                                                                                              Try it online!






                                                                                              share|improve this answer









                                                                                              $endgroup$
















                                                                                                2












                                                                                                2








                                                                                                2





                                                                                                $begingroup$


                                                                                                Jelly, 38 bytes



                                                                                                9Rż“øƓ“œ%“øƈ’;-25+⁽-EỌœị@DżD<4«Ɗ‘×¥ƊƊ


                                                                                                Try it online!






                                                                                                share|improve this answer









                                                                                                $endgroup$




                                                                                                Jelly, 38 bytes



                                                                                                9Rż“øƓ“œ%“øƈ’;-25+⁽-EỌœị@DżD<4«Ɗ‘×¥ƊƊ


                                                                                                Try it online!







                                                                                                share|improve this answer












                                                                                                share|improve this answer



                                                                                                share|improve this answer










                                                                                                answered Dec 13 '18 at 17:59









                                                                                                Erik the OutgolferErik the Outgolfer

                                                                                                31.8k429103




                                                                                                31.8k429103























                                                                                                    2












                                                                                                    $begingroup$

                                                                                                    C, 131 bytes



                                                                                                    f(char*n){char*s="〇〡〢〣〤〥〦〧〨〩一二三",i=0,f=0,c,d;do{c=n[i++]-48;d=n[i]-48;printf("%.3s",s+c*3+f);f=c*d&&(c|d)<4&&!f?27:0;}while(n[i]);}


                                                                                                    Try it online!



                                                                                                    Explanation:
                                                                                                    First of all - I'm using char for all variables to make it short.



                                                                                                    Array s holds all needed Suzhou characters.



                                                                                                    The rest is pretty much iterating over the provided number, which is expressed as a string.



                                                                                                    When writing to the terminal, I'm using the input number value (so the character - 48 in ASCII), multiplied by 3, because all these characters are 3 bytes long in UTF-8.
                                                                                                    The 'string' being printed is always 3 bytes long - so one real character.



                                                                                                    Variables c and d are just 'shortcuts' to current and next input character(number).



                                                                                                    Variable f holds 0 or 27 - it says if the next 1/2/3 character should be shifted to alternative one - 27 is the offset between regular and alternative character in the array.



                                                                                                    f=c*d&&(c|d)<4&&!f?27:0 - write 27 to f if c*d != 0 and if they are both < 4 and if f isn't 0, otherwise write 0.



                                                                                                    Could be rewritten as:



                                                                                                    if( c && d && c < 4 && d < 4 && f == 0)
                                                                                                    f = 27
                                                                                                    else
                                                                                                    f = 0


                                                                                                    Maybe there are some bytes to shave off, but I'm no longer able to find anything obvious.






                                                                                                    share|improve this answer









                                                                                                    $endgroup$













                                                                                                    • $begingroup$
                                                                                                      120 bytes.
                                                                                                      $endgroup$
                                                                                                      – Jonathan Frech
                                                                                                      Dec 14 '18 at 17:58
















                                                                                                    2












                                                                                                    $begingroup$

                                                                                                    C, 131 bytes



                                                                                                    f(char*n){char*s="〇〡〢〣〤〥〦〧〨〩一二三",i=0,f=0,c,d;do{c=n[i++]-48;d=n[i]-48;printf("%.3s",s+c*3+f);f=c*d&&(c|d)<4&&!f?27:0;}while(n[i]);}


                                                                                                    Try it online!



                                                                                                    Explanation:
                                                                                                    First of all - I'm using char for all variables to make it short.



                                                                                                    Array s holds all needed Suzhou characters.



                                                                                                    The rest is pretty much iterating over the provided number, which is expressed as a string.



                                                                                                    When writing to the terminal, I'm using the input number value (so the character - 48 in ASCII), multiplied by 3, because all these characters are 3 bytes long in UTF-8.
                                                                                                    The 'string' being printed is always 3 bytes long - so one real character.



                                                                                                    Variables c and d are just 'shortcuts' to current and next input character(number).



                                                                                                    Variable f holds 0 or 27 - it says if the next 1/2/3 character should be shifted to alternative one - 27 is the offset between regular and alternative character in the array.



                                                                                                    f=c*d&&(c|d)<4&&!f?27:0 - write 27 to f if c*d != 0 and if they are both < 4 and if f isn't 0, otherwise write 0.



                                                                                                    Could be rewritten as:



                                                                                                    if( c && d && c < 4 && d < 4 && f == 0)
                                                                                                    f = 27
                                                                                                    else
                                                                                                    f = 0


                                                                                                    Maybe there are some bytes to shave off, but I'm no longer able to find anything obvious.






                                                                                                    share|improve this answer









                                                                                                    $endgroup$













                                                                                                    • $begingroup$
                                                                                                      120 bytes.
                                                                                                      $endgroup$
                                                                                                      – Jonathan Frech
                                                                                                      Dec 14 '18 at 17:58














                                                                                                    2












                                                                                                    2








                                                                                                    2





                                                                                                    $begingroup$

                                                                                                    C, 131 bytes



                                                                                                    f(char*n){char*s="〇〡〢〣〤〥〦〧〨〩一二三",i=0,f=0,c,d;do{c=n[i++]-48;d=n[i]-48;printf("%.3s",s+c*3+f);f=c*d&&(c|d)<4&&!f?27:0;}while(n[i]);}


                                                                                                    Try it online!



                                                                                                    Explanation:
                                                                                                    First of all - I'm using char for all variables to make it short.



                                                                                                    Array s holds all needed Suzhou characters.



                                                                                                    The rest is pretty much iterating over the provided number, which is expressed as a string.



                                                                                                    When writing to the terminal, I'm using the input number value (so the character - 48 in ASCII), multiplied by 3, because all these characters are 3 bytes long in UTF-8.
                                                                                                    The 'string' being printed is always 3 bytes long - so one real character.



                                                                                                    Variables c and d are just 'shortcuts' to current and next input character(number).



                                                                                                    Variable f holds 0 or 27 - it says if the next 1/2/3 character should be shifted to alternative one - 27 is the offset between regular and alternative character in the array.



                                                                                                    f=c*d&&(c|d)<4&&!f?27:0 - write 27 to f if c*d != 0 and if they are both < 4 and if f isn't 0, otherwise write 0.



                                                                                                    Could be rewritten as:



                                                                                                    if( c && d && c < 4 && d < 4 && f == 0)
                                                                                                    f = 27
                                                                                                    else
                                                                                                    f = 0


                                                                                                    Maybe there are some bytes to shave off, but I'm no longer able to find anything obvious.






                                                                                                    share|improve this answer









                                                                                                    $endgroup$



                                                                                                    C, 131 bytes



                                                                                                    f(char*n){char*s="〇〡〢〣〤〥〦〧〨〩一二三",i=0,f=0,c,d;do{c=n[i++]-48;d=n[i]-48;printf("%.3s",s+c*3+f);f=c*d&&(c|d)<4&&!f?27:0;}while(n[i]);}


                                                                                                    Try it online!



                                                                                                    Explanation:
                                                                                                    First of all - I'm using char for all variables to make it short.



                                                                                                    Array s holds all needed Suzhou characters.



                                                                                                    The rest is pretty much iterating over the provided number, which is expressed as a string.



                                                                                                    When writing to the terminal, I'm using the input number value (so the character - 48 in ASCII), multiplied by 3, because all these characters are 3 bytes long in UTF-8.
                                                                                                    The 'string' being printed is always 3 bytes long - so one real character.



                                                                                                    Variables c and d are just 'shortcuts' to current and next input character(number).



                                                                                                    Variable f holds 0 or 27 - it says if the next 1/2/3 character should be shifted to alternative one - 27 is the offset between regular and alternative character in the array.



                                                                                                    f=c*d&&(c|d)<4&&!f?27:0 - write 27 to f if c*d != 0 and if they are both < 4 and if f isn't 0, otherwise write 0.



                                                                                                    Could be rewritten as:



                                                                                                    if( c && d && c < 4 && d < 4 && f == 0)
                                                                                                    f = 27
                                                                                                    else
                                                                                                    f = 0


                                                                                                    Maybe there are some bytes to shave off, but I'm no longer able to find anything obvious.







                                                                                                    share|improve this answer












                                                                                                    share|improve this answer



                                                                                                    share|improve this answer










                                                                                                    answered Dec 14 '18 at 17:34









                                                                                                    Michał StońMichał Stoń

                                                                                                    211




                                                                                                    211












                                                                                                    • $begingroup$
                                                                                                      120 bytes.
                                                                                                      $endgroup$
                                                                                                      – Jonathan Frech
                                                                                                      Dec 14 '18 at 17:58


















                                                                                                    • $begingroup$
                                                                                                      120 bytes.
                                                                                                      $endgroup$
                                                                                                      – Jonathan Frech
                                                                                                      Dec 14 '18 at 17:58
















                                                                                                    $begingroup$
                                                                                                    120 bytes.
                                                                                                    $endgroup$
                                                                                                    – Jonathan Frech
                                                                                                    Dec 14 '18 at 17:58




                                                                                                    $begingroup$
                                                                                                    120 bytes.
                                                                                                    $endgroup$
                                                                                                    – Jonathan Frech
                                                                                                    Dec 14 '18 at 17:58











                                                                                                    1












                                                                                                    $begingroup$


                                                                                                    Ruby -p, 71 bytes





                                                                                                    $_=gsub(/[1-3]K[1-3]/){|x|(x.ord+9).chr}.tr"0-<","〇〡-〩一二三"


                                                                                                    Try it online!






                                                                                                    share|improve this answer









                                                                                                    $endgroup$


















                                                                                                      1












                                                                                                      $begingroup$


                                                                                                      Ruby -p, 71 bytes





                                                                                                      $_=gsub(/[1-3]K[1-3]/){|x|(x.ord+9).chr}.tr"0-<","〇〡-〩一二三"


                                                                                                      Try it online!






                                                                                                      share|improve this answer









                                                                                                      $endgroup$
















                                                                                                        1












                                                                                                        1








                                                                                                        1





                                                                                                        $begingroup$


                                                                                                        Ruby -p, 71 bytes





                                                                                                        $_=gsub(/[1-3]K[1-3]/){|x|(x.ord+9).chr}.tr"0-<","〇〡-〩一二三"


                                                                                                        Try it online!






                                                                                                        share|improve this answer









                                                                                                        $endgroup$




                                                                                                        Ruby -p, 71 bytes





                                                                                                        $_=gsub(/[1-3]K[1-3]/){|x|(x.ord+9).chr}.tr"0-<","〇〡-〩一二三"


                                                                                                        Try it online!







                                                                                                        share|improve this answer












                                                                                                        share|improve this answer



                                                                                                        share|improve this answer










                                                                                                        answered Dec 13 '18 at 10:13









                                                                                                        Kirill L.Kirill L.

                                                                                                        4,2151422




                                                                                                        4,2151422























                                                                                                            1












                                                                                                            $begingroup$


                                                                                                            K (ngn/k), 67 bytes



                                                                                                            {,/(0N 3#"〇一二三〤〥〦〧〨〩〡〢〣")x+9*<x&x<4}@10


                                                                                                            Try it online!



                                                                                                            10 get list of decimal digits



                                                                                                            { }@ apply the following function



                                                                                                            x&x<4 boolean (0/1) list of where the argument is less than 4 and non-zero



                                                                                                            < scan with less-than. this turns runs of consecutive 1s into alternating 1s and 0s



                                                                                                            x+9* multiply by 9 and add x



                                                                                                            juxtaposition is indexing, so use this as indices in...



                                                                                                            0N 3#"〇一二三〤〥〦〧〨〩〡〢〣" the given string, split into a list of 3-byte strings. k is not unicode aware, so it sees only bytes



                                                                                                            ,/ concatenate






                                                                                                            share|improve this answer











                                                                                                            $endgroup$


















                                                                                                              1












                                                                                                              $begingroup$


                                                                                                              K (ngn/k), 67 bytes



                                                                                                              {,/(0N 3#"〇一二三〤〥〦〧〨〩〡〢〣")x+9*<x&x<4}@10


                                                                                                              Try it online!



                                                                                                              10 get list of decimal digits



                                                                                                              { }@ apply the following function



                                                                                                              x&x<4 boolean (0/1) list of where the argument is less than 4 and non-zero



                                                                                                              < scan with less-than. this turns runs of consecutive 1s into alternating 1s and 0s



                                                                                                              x+9* multiply by 9 and add x



                                                                                                              juxtaposition is indexing, so use this as indices in...



                                                                                                              0N 3#"〇一二三〤〥〦〧〨〩〡〢〣" the given string, split into a list of 3-byte strings. k is not unicode aware, so it sees only bytes



                                                                                                              ,/ concatenate






                                                                                                              share|improve this answer











                                                                                                              $endgroup$
















                                                                                                                1












                                                                                                                1








                                                                                                                1





                                                                                                                $begingroup$


                                                                                                                K (ngn/k), 67 bytes



                                                                                                                {,/(0N 3#"〇一二三〤〥〦〧〨〩〡〢〣")x+9*<x&x<4}@10


                                                                                                                Try it online!



                                                                                                                10 get list of decimal digits



                                                                                                                { }@ apply the following function



                                                                                                                x&x<4 boolean (0/1) list of where the argument is less than 4 and non-zero



                                                                                                                < scan with less-than. this turns runs of consecutive 1s into alternating 1s and 0s



                                                                                                                x+9* multiply by 9 and add x



                                                                                                                juxtaposition is indexing, so use this as indices in...



                                                                                                                0N 3#"〇一二三〤〥〦〧〨〩〡〢〣" the given string, split into a list of 3-byte strings. k is not unicode aware, so it sees only bytes



                                                                                                                ,/ concatenate






                                                                                                                share|improve this answer











                                                                                                                $endgroup$




                                                                                                                K (ngn/k), 67 bytes



                                                                                                                {,/(0N 3#"〇一二三〤〥〦〧〨〩〡〢〣")x+9*<x&x<4}@10


                                                                                                                Try it online!



                                                                                                                10 get list of decimal digits



                                                                                                                { }@ apply the following function



                                                                                                                x&x<4 boolean (0/1) list of where the argument is less than 4 and non-zero



                                                                                                                < scan with less-than. this turns runs of consecutive 1s into alternating 1s and 0s



                                                                                                                x+9* multiply by 9 and add x



                                                                                                                juxtaposition is indexing, so use this as indices in...



                                                                                                                0N 3#"〇一二三〤〥〦〧〨〩〡〢〣" the given string, split into a list of 3-byte strings. k is not unicode aware, so it sees only bytes



                                                                                                                ,/ concatenate







                                                                                                                share|improve this answer














                                                                                                                share|improve this answer



                                                                                                                share|improve this answer








                                                                                                                edited Dec 13 '18 at 10:35

























                                                                                                                answered Dec 13 '18 at 10:21









                                                                                                                ngnngn

                                                                                                                7,11112559




                                                                                                                7,11112559























                                                                                                                    1












                                                                                                                    $begingroup$


                                                                                                                    Wolfram Language (Mathematica), 117 bytes



                                                                                                                    FromCharacterCode[12320+(IntegerDigits@#/. 0->-25//.MapIndexed[{a___,c=#2[[1]],c,b___}->{a,c,#,b}&,{0,140,9}+7648])]&


                                                                                                                    Try it online!



                                                                                                                    Note that on TIO this outputs the result in escaped form. In the normal Wolfram front end, it will look like this:picture of notebook interface






                                                                                                                    share|improve this answer









                                                                                                                    $endgroup$













                                                                                                                    • $begingroup$
                                                                                                                      Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                      $endgroup$
                                                                                                                      – lastresort
                                                                                                                      Dec 15 '18 at 7:35
















                                                                                                                    1












                                                                                                                    $begingroup$


                                                                                                                    Wolfram Language (Mathematica), 117 bytes



                                                                                                                    FromCharacterCode[12320+(IntegerDigits@#/. 0->-25//.MapIndexed[{a___,c=#2[[1]],c,b___}->{a,c,#,b}&,{0,140,9}+7648])]&


                                                                                                                    Try it online!



                                                                                                                    Note that on TIO this outputs the result in escaped form. In the normal Wolfram front end, it will look like this:picture of notebook interface






                                                                                                                    share|improve this answer









                                                                                                                    $endgroup$













                                                                                                                    • $begingroup$
                                                                                                                      Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                      $endgroup$
                                                                                                                      – lastresort
                                                                                                                      Dec 15 '18 at 7:35














                                                                                                                    1












                                                                                                                    1








                                                                                                                    1





                                                                                                                    $begingroup$


                                                                                                                    Wolfram Language (Mathematica), 117 bytes



                                                                                                                    FromCharacterCode[12320+(IntegerDigits@#/. 0->-25//.MapIndexed[{a___,c=#2[[1]],c,b___}->{a,c,#,b}&,{0,140,9}+7648])]&


                                                                                                                    Try it online!



                                                                                                                    Note that on TIO this outputs the result in escaped form. In the normal Wolfram front end, it will look like this:picture of notebook interface






                                                                                                                    share|improve this answer









                                                                                                                    $endgroup$




                                                                                                                    Wolfram Language (Mathematica), 117 bytes



                                                                                                                    FromCharacterCode[12320+(IntegerDigits@#/. 0->-25//.MapIndexed[{a___,c=#2[[1]],c,b___}->{a,c,#,b}&,{0,140,9}+7648])]&


                                                                                                                    Try it online!



                                                                                                                    Note that on TIO this outputs the result in escaped form. In the normal Wolfram front end, it will look like this:picture of notebook interface







                                                                                                                    share|improve this answer












                                                                                                                    share|improve this answer



                                                                                                                    share|improve this answer










                                                                                                                    answered Dec 14 '18 at 2:11









                                                                                                                    Kelly LowderKelly Lowder

                                                                                                                    3,008416




                                                                                                                    3,008416












                                                                                                                    • $begingroup$
                                                                                                                      Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                      $endgroup$
                                                                                                                      – lastresort
                                                                                                                      Dec 15 '18 at 7:35


















                                                                                                                    • $begingroup$
                                                                                                                      Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                      $endgroup$
                                                                                                                      – lastresort
                                                                                                                      Dec 15 '18 at 7:35
















                                                                                                                    $begingroup$
                                                                                                                    Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                    $endgroup$
                                                                                                                    – lastresort
                                                                                                                    Dec 15 '18 at 7:35




                                                                                                                    $begingroup$
                                                                                                                    Can you implement horizontal stroke notation for twos and threes? E.g. f[123] should return 〡二〣.
                                                                                                                    $endgroup$
                                                                                                                    – lastresort
                                                                                                                    Dec 15 '18 at 7:35











                                                                                                                    1












                                                                                                                    $begingroup$


                                                                                                                    Japt, 55 bytes



                                                                                                                    s"〇〡〢〣〤〥〦〧〨〩"
                                                                                                                    ð"[〡〢〣]" óÈ¥YÉîë2,1Ãc
                                                                                                                    £VøY ?Xd"〡一〢二〣三":X


                                                                                                                    Try it online!



                                                                                                                    It's worth noting that TIO gives a different byte count than my preferred interpreter, but I see no reason not to trust the one that gives me a lower score.



                                                                                                                    Explanation:



                                                                                                                        Step 1:
                                                                                                                    s"〇〡〢〣〤〥〦〧〨〩" Convert the input number to a string using these characters for digits

                                                                                                                    Step 2:
                                                                                                                    ð Find all indexes which match this regex:
                                                                                                                    "[〡〢〣]" A 1, 2, or 3 character
                                                                                                                    ó Ã Split the list between:
                                                                                                                    È¥YÉ Non-consecutive numbers
                                                                                                                    ® Ã For each group of consecutive [1,2,3] characters:
                                                                                                                    ë2,1 Get every-other one starting with the second
                                                                                                                    c Flatten

                                                                                                                    Step 3:
                                                                                                                    £ For each character from step 1:
                                                                                                                    VøY Check if its index is in the list from step 2
                                                                                                                    ? If it is:
                                                                                                                    Xd"〡一〢二〣三" Replace it with the horizontal version
                                                                                                                    :X Otherwise leave it as-is





                                                                                                                    share|improve this answer









                                                                                                                    $endgroup$


















                                                                                                                      1












                                                                                                                      $begingroup$


                                                                                                                      Japt, 55 bytes



                                                                                                                      s"〇〡〢〣〤〥〦〧〨〩"
                                                                                                                      ð"[〡〢〣]" óÈ¥YÉîë2,1Ãc
                                                                                                                      £VøY ?Xd"〡一〢二〣三":X


                                                                                                                      Try it online!



                                                                                                                      It's worth noting that TIO gives a different byte count than my preferred interpreter, but I see no reason not to trust the one that gives me a lower score.



                                                                                                                      Explanation:



                                                                                                                          Step 1:
                                                                                                                      s"〇〡〢〣〤〥〦〧〨〩" Convert the input number to a string using these characters for digits

                                                                                                                      Step 2:
                                                                                                                      ð Find all indexes which match this regex:
                                                                                                                      "[〡〢〣]" A 1, 2, or 3 character
                                                                                                                      ó Ã Split the list between:
                                                                                                                      È¥YÉ Non-consecutive numbers
                                                                                                                      ® Ã For each group of consecutive [1,2,3] characters:
                                                                                                                      ë2,1 Get every-other one starting with the second
                                                                                                                      c Flatten

                                                                                                                      Step 3:
                                                                                                                      £ For each character from step 1:
                                                                                                                      VøY Check if its index is in the list from step 2
                                                                                                                      ? If it is:
                                                                                                                      Xd"〡一〢二〣三" Replace it with the horizontal version
                                                                                                                      :X Otherwise leave it as-is





                                                                                                                      share|improve this answer









                                                                                                                      $endgroup$
















                                                                                                                        1












                                                                                                                        1








                                                                                                                        1





                                                                                                                        $begingroup$


                                                                                                                        Japt, 55 bytes



                                                                                                                        s"〇〡〢〣〤〥〦〧〨〩"
                                                                                                                        ð"[〡〢〣]" óÈ¥YÉîë2,1Ãc
                                                                                                                        £VøY ?Xd"〡一〢二〣三":X


                                                                                                                        Try it online!



                                                                                                                        It's worth noting that TIO gives a different byte count than my preferred interpreter, but I see no reason not to trust the one that gives me a lower score.



                                                                                                                        Explanation:



                                                                                                                            Step 1:
                                                                                                                        s"〇〡〢〣〤〥〦〧〨〩" Convert the input number to a string using these characters for digits

                                                                                                                        Step 2:
                                                                                                                        ð Find all indexes which match this regex:
                                                                                                                        "[〡〢〣]" A 1, 2, or 3 character
                                                                                                                        ó Ã Split the list between:
                                                                                                                        È¥YÉ Non-consecutive numbers
                                                                                                                        ® Ã For each group of consecutive [1,2,3] characters:
                                                                                                                        ë2,1 Get every-other one starting with the second
                                                                                                                        c Flatten

                                                                                                                        Step 3:
                                                                                                                        £ For each character from step 1:
                                                                                                                        VøY Check if its index is in the list from step 2
                                                                                                                        ? If it is:
                                                                                                                        Xd"〡一〢二〣三" Replace it with the horizontal version
                                                                                                                        :X Otherwise leave it as-is





                                                                                                                        share|improve this answer









                                                                                                                        $endgroup$




                                                                                                                        Japt, 55 bytes



                                                                                                                        s"〇〡〢〣〤〥〦〧〨〩"
                                                                                                                        ð"[〡〢〣]" óÈ¥YÉîë2,1Ãc
                                                                                                                        £VøY ?Xd"〡一〢二〣三":X


                                                                                                                        Try it online!



                                                                                                                        It's worth noting that TIO gives a different byte count than my preferred interpreter, but I see no reason not to trust the one that gives me a lower score.



                                                                                                                        Explanation:



                                                                                                                            Step 1:
                                                                                                                        s"〇〡〢〣〤〥〦〧〨〩" Convert the input number to a string using these characters for digits

                                                                                                                        Step 2:
                                                                                                                        ð Find all indexes which match this regex:
                                                                                                                        "[〡〢〣]" A 1, 2, or 3 character
                                                                                                                        ó Ã Split the list between:
                                                                                                                        È¥YÉ Non-consecutive numbers
                                                                                                                        ® Ã For each group of consecutive [1,2,3] characters:
                                                                                                                        ë2,1 Get every-other one starting with the second
                                                                                                                        c Flatten

                                                                                                                        Step 3:
                                                                                                                        £ For each character from step 1:
                                                                                                                        VøY Check if its index is in the list from step 2
                                                                                                                        ? If it is:
                                                                                                                        Xd"〡一〢二〣三" Replace it with the horizontal version
                                                                                                                        :X Otherwise leave it as-is






                                                                                                                        share|improve this answer












                                                                                                                        share|improve this answer



                                                                                                                        share|improve this answer










                                                                                                                        answered Dec 14 '18 at 14:51









                                                                                                                        Kamil DrakariKamil Drakari

                                                                                                                        3,241416




                                                                                                                        3,241416























                                                                                                                            1












                                                                                                                            $begingroup$


                                                                                                                            C# (.NET Core), 107 bytes, 81 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0;return n.Select(k=>t[k+(b+=k>0&k<4?1:b)%2*9]);}


                                                                                                                            Try it online!



                                                                                                                            Saved 17 bytes thanks to @Jo King



                                                                                                                            Old Answer



                                                                                                                            C# (.NET Core), 124 bytes, 98 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0<1;return n.Select(k=>{b=k>0&k<4?!b:0<1;return b?t[k]:t[k+9];});}


                                                                                                                            Try it online!



                                                                                                                            Takes input in the form of a List, and returns an IEnumerable. I don't know if this input/output is ok, so just let me know if it isn't.



                                                                                                                            Explanation



                                                                                                                            How this works is that it transforms all the integers to their respective Suzhou numeral form, but only if variable b is true. b is inverted whenever we meet an integer that is one, two, or three, and set to true otherwise. If b is false, we turn the integer to one of the vertical numerals.






                                                                                                                            share|improve this answer











                                                                                                                            $endgroup$













                                                                                                                            • $begingroup$
                                                                                                                              Wow, I would have never thought of that. Nice!
                                                                                                                              $endgroup$
                                                                                                                              – Embodiment of Ignorance
                                                                                                                              Dec 15 '18 at 5:26
















                                                                                                                            1












                                                                                                                            $begingroup$


                                                                                                                            C# (.NET Core), 107 bytes, 81 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0;return n.Select(k=>t[k+(b+=k>0&k<4?1:b)%2*9]);}


                                                                                                                            Try it online!



                                                                                                                            Saved 17 bytes thanks to @Jo King



                                                                                                                            Old Answer



                                                                                                                            C# (.NET Core), 124 bytes, 98 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0<1;return n.Select(k=>{b=k>0&k<4?!b:0<1;return b?t[k]:t[k+9];});}


                                                                                                                            Try it online!



                                                                                                                            Takes input in the form of a List, and returns an IEnumerable. I don't know if this input/output is ok, so just let me know if it isn't.



                                                                                                                            Explanation



                                                                                                                            How this works is that it transforms all the integers to their respective Suzhou numeral form, but only if variable b is true. b is inverted whenever we meet an integer that is one, two, or three, and set to true otherwise. If b is false, we turn the integer to one of the vertical numerals.






                                                                                                                            share|improve this answer











                                                                                                                            $endgroup$













                                                                                                                            • $begingroup$
                                                                                                                              Wow, I would have never thought of that. Nice!
                                                                                                                              $endgroup$
                                                                                                                              – Embodiment of Ignorance
                                                                                                                              Dec 15 '18 at 5:26














                                                                                                                            1












                                                                                                                            1








                                                                                                                            1





                                                                                                                            $begingroup$


                                                                                                                            C# (.NET Core), 107 bytes, 81 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0;return n.Select(k=>t[k+(b+=k>0&k<4?1:b)%2*9]);}


                                                                                                                            Try it online!



                                                                                                                            Saved 17 bytes thanks to @Jo King



                                                                                                                            Old Answer



                                                                                                                            C# (.NET Core), 124 bytes, 98 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0<1;return n.Select(k=>{b=k>0&k<4?!b:0<1;return b?t[k]:t[k+9];});}


                                                                                                                            Try it online!



                                                                                                                            Takes input in the form of a List, and returns an IEnumerable. I don't know if this input/output is ok, so just let me know if it isn't.



                                                                                                                            Explanation



                                                                                                                            How this works is that it transforms all the integers to their respective Suzhou numeral form, but only if variable b is true. b is inverted whenever we meet an integer that is one, two, or three, and set to true otherwise. If b is false, we turn the integer to one of the vertical numerals.






                                                                                                                            share|improve this answer











                                                                                                                            $endgroup$




                                                                                                                            C# (.NET Core), 107 bytes, 81 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0;return n.Select(k=>t[k+(b+=k>0&k<4?1:b)%2*9]);}


                                                                                                                            Try it online!



                                                                                                                            Saved 17 bytes thanks to @Jo King



                                                                                                                            Old Answer



                                                                                                                            C# (.NET Core), 124 bytes, 98 chars





                                                                                                                            n=>{var t="〇一二三〤〥〦〧〨〩〡〢〣";var b=0<1;return n.Select(k=>{b=k>0&k<4?!b:0<1;return b?t[k]:t[k+9];});}


                                                                                                                            Try it online!



                                                                                                                            Takes input in the form of a List, and returns an IEnumerable. I don't know if this input/output is ok, so just let me know if it isn't.



                                                                                                                            Explanation



                                                                                                                            How this works is that it transforms all the integers to their respective Suzhou numeral form, but only if variable b is true. b is inverted whenever we meet an integer that is one, two, or three, and set to true otherwise. If b is false, we turn the integer to one of the vertical numerals.







                                                                                                                            share|improve this answer














                                                                                                                            share|improve this answer



                                                                                                                            share|improve this answer








                                                                                                                            edited Dec 15 '18 at 5:25

























                                                                                                                            answered Dec 15 '18 at 4:20









                                                                                                                            Embodiment of IgnoranceEmbodiment of Ignorance

                                                                                                                            846118




                                                                                                                            846118












                                                                                                                            • $begingroup$
                                                                                                                              Wow, I would have never thought of that. Nice!
                                                                                                                              $endgroup$
                                                                                                                              – Embodiment of Ignorance
                                                                                                                              Dec 15 '18 at 5:26


















                                                                                                                            • $begingroup$
                                                                                                                              Wow, I would have never thought of that. Nice!
                                                                                                                              $endgroup$
                                                                                                                              – Embodiment of Ignorance
                                                                                                                              Dec 15 '18 at 5:26
















                                                                                                                            $begingroup$
                                                                                                                            Wow, I would have never thought of that. Nice!
                                                                                                                            $endgroup$
                                                                                                                            – Embodiment of Ignorance
                                                                                                                            Dec 15 '18 at 5:26




                                                                                                                            $begingroup$
                                                                                                                            Wow, I would have never thought of that. Nice!
                                                                                                                            $endgroup$
                                                                                                                            – Embodiment of Ignorance
                                                                                                                            Dec 15 '18 at 5:26











                                                                                                                            0












                                                                                                                            $begingroup$


                                                                                                                            R, 104 bytes





                                                                                                                            function(x,`[`=chartr)"a-jBCD"["〇〡-〩一二三",gsub("[bcd]\K([bcd])","\U\1","0-9"["a-j",x],,T)]


                                                                                                                            Try it online!



                                                                                                                            An alternative approach in R. Makes use of some Perl-style Regex features (the last T param in substitution function stands for perl=TRUE).



                                                                                                                            First, we translate numerals to alphabetic characters a-j, then use Regex substitution to convert duplicate occurrences of bcd (formerly 123) to uppercase, and finally translate characters to Suzhou numerals with different handling of lowercase and uppercase letters.



                                                                                                                            Credit to J.Doe for the preparation of test cases, as these were taken from his answer.






                                                                                                                            share|improve this answer











                                                                                                                            $endgroup$


















                                                                                                                              0












                                                                                                                              $begingroup$


                                                                                                                              R, 104 bytes





                                                                                                                              function(x,`[`=chartr)"a-jBCD"["〇〡-〩一二三",gsub("[bcd]\K([bcd])","\U\1","0-9"["a-j",x],,T)]


                                                                                                                              Try it online!



                                                                                                                              An alternative approach in R. Makes use of some Perl-style Regex features (the last T param in substitution function stands for perl=TRUE).



                                                                                                                              First, we translate numerals to alphabetic characters a-j, then use Regex substitution to convert duplicate occurrences of bcd (formerly 123) to uppercase, and finally translate characters to Suzhou numerals with different handling of lowercase and uppercase letters.



                                                                                                                              Credit to J.Doe for the preparation of test cases, as these were taken from his answer.






                                                                                                                              share|improve this answer











                                                                                                                              $endgroup$
















                                                                                                                                0












                                                                                                                                0








                                                                                                                                0





                                                                                                                                $begingroup$


                                                                                                                                R, 104 bytes





                                                                                                                                function(x,`[`=chartr)"a-jBCD"["〇〡-〩一二三",gsub("[bcd]\K([bcd])","\U\1","0-9"["a-j",x],,T)]


                                                                                                                                Try it online!



                                                                                                                                An alternative approach in R. Makes use of some Perl-style Regex features (the last T param in substitution function stands for perl=TRUE).



                                                                                                                                First, we translate numerals to alphabetic characters a-j, then use Regex substitution to convert duplicate occurrences of bcd (formerly 123) to uppercase, and finally translate characters to Suzhou numerals with different handling of lowercase and uppercase letters.



                                                                                                                                Credit to J.Doe for the preparation of test cases, as these were taken from his answer.






                                                                                                                                share|improve this answer











                                                                                                                                $endgroup$




                                                                                                                                R, 104 bytes





                                                                                                                                function(x,`[`=chartr)"a-jBCD"["〇〡-〩一二三",gsub("[bcd]\K([bcd])","\U\1","0-9"["a-j",x],,T)]


                                                                                                                                Try it online!



                                                                                                                                An alternative approach in R. Makes use of some Perl-style Regex features (the last T param in substitution function stands for perl=TRUE).



                                                                                                                                First, we translate numerals to alphabetic characters a-j, then use Regex substitution to convert duplicate occurrences of bcd (formerly 123) to uppercase, and finally translate characters to Suzhou numerals with different handling of lowercase and uppercase letters.



                                                                                                                                Credit to J.Doe for the preparation of test cases, as these were taken from his answer.







                                                                                                                                share|improve this answer














                                                                                                                                share|improve this answer



                                                                                                                                share|improve this answer








                                                                                                                                edited Dec 15 '18 at 17:58

























                                                                                                                                answered Dec 15 '18 at 17:36









                                                                                                                                Kirill L.Kirill L.

                                                                                                                                4,2151422




                                                                                                                                4,2151422























                                                                                                                                    0












                                                                                                                                    $begingroup$

                                                                                                                                    C#, 153 bytes



                                                                                                                                    n=>Regex.Replace(n+"",@"[4-90]|[1-3]{1,2}",x=>"〇〡〢〣〤〥〦〧〨〩"[x.Value[0]-'0']+""+(x.Value.Length>1?"一二三"[x.Value[1]-'0'-1]+"":""))


                                                                                                                                    Try it online!






                                                                                                                                    share|improve this answer











                                                                                                                                    $endgroup$













                                                                                                                                    • $begingroup$
                                                                                                                                      This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                      $endgroup$
                                                                                                                                      – Embodiment of Ignorance
                                                                                                                                      Dec 15 '18 at 4:21










                                                                                                                                    • $begingroup$
                                                                                                                                      Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                      $endgroup$
                                                                                                                                      – zruF
                                                                                                                                      Dec 17 '18 at 8:02
















                                                                                                                                    0












                                                                                                                                    $begingroup$

                                                                                                                                    C#, 153 bytes



                                                                                                                                    n=>Regex.Replace(n+"",@"[4-90]|[1-3]{1,2}",x=>"〇〡〢〣〤〥〦〧〨〩"[x.Value[0]-'0']+""+(x.Value.Length>1?"一二三"[x.Value[1]-'0'-1]+"":""))


                                                                                                                                    Try it online!






                                                                                                                                    share|improve this answer











                                                                                                                                    $endgroup$













                                                                                                                                    • $begingroup$
                                                                                                                                      This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                      $endgroup$
                                                                                                                                      – Embodiment of Ignorance
                                                                                                                                      Dec 15 '18 at 4:21










                                                                                                                                    • $begingroup$
                                                                                                                                      Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                      $endgroup$
                                                                                                                                      – zruF
                                                                                                                                      Dec 17 '18 at 8:02














                                                                                                                                    0












                                                                                                                                    0








                                                                                                                                    0





                                                                                                                                    $begingroup$

                                                                                                                                    C#, 153 bytes



                                                                                                                                    n=>Regex.Replace(n+"",@"[4-90]|[1-3]{1,2}",x=>"〇〡〢〣〤〥〦〧〨〩"[x.Value[0]-'0']+""+(x.Value.Length>1?"一二三"[x.Value[1]-'0'-1]+"":""))


                                                                                                                                    Try it online!






                                                                                                                                    share|improve this answer











                                                                                                                                    $endgroup$



                                                                                                                                    C#, 153 bytes



                                                                                                                                    n=>Regex.Replace(n+"",@"[4-90]|[1-3]{1,2}",x=>"〇〡〢〣〤〥〦〧〨〩"[x.Value[0]-'0']+""+(x.Value.Length>1?"一二三"[x.Value[1]-'0'-1]+"":""))


                                                                                                                                    Try it online!







                                                                                                                                    share|improve this answer














                                                                                                                                    share|improve this answer



                                                                                                                                    share|improve this answer








                                                                                                                                    edited Dec 17 '18 at 8:01

























                                                                                                                                    answered Dec 13 '18 at 16:01









                                                                                                                                    zruFzruF

                                                                                                                                    595




                                                                                                                                    595












                                                                                                                                    • $begingroup$
                                                                                                                                      This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                      $endgroup$
                                                                                                                                      – Embodiment of Ignorance
                                                                                                                                      Dec 15 '18 at 4:21










                                                                                                                                    • $begingroup$
                                                                                                                                      Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                      $endgroup$
                                                                                                                                      – zruF
                                                                                                                                      Dec 17 '18 at 8:02


















                                                                                                                                    • $begingroup$
                                                                                                                                      This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                      $endgroup$
                                                                                                                                      – Embodiment of Ignorance
                                                                                                                                      Dec 15 '18 at 4:21










                                                                                                                                    • $begingroup$
                                                                                                                                      Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                      $endgroup$
                                                                                                                                      – zruF
                                                                                                                                      Dec 17 '18 at 8:02
















                                                                                                                                    $begingroup$
                                                                                                                                    This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                    $endgroup$
                                                                                                                                    – Embodiment of Ignorance
                                                                                                                                    Dec 15 '18 at 4:21




                                                                                                                                    $begingroup$
                                                                                                                                    This is 153 bytes, by the way, characters don't always mean bytes. Some characters are worth multiple bytes.
                                                                                                                                    $endgroup$
                                                                                                                                    – Embodiment of Ignorance
                                                                                                                                    Dec 15 '18 at 4:21












                                                                                                                                    $begingroup$
                                                                                                                                    Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                    $endgroup$
                                                                                                                                    – zruF
                                                                                                                                    Dec 17 '18 at 8:02




                                                                                                                                    $begingroup$
                                                                                                                                    Oh well, I edited my answer. Thanks for the information :)
                                                                                                                                    $endgroup$
                                                                                                                                    – zruF
                                                                                                                                    Dec 17 '18 at 8:02


















                                                                                                                                    draft saved

                                                                                                                                    draft discarded




















































                                                                                                                                    If this is an answer to a challenge…




                                                                                                                                    • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.


                                                                                                                                    • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
                                                                                                                                      Explanations of your answer make it more interesting to read and are very much encouraged.


                                                                                                                                    • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.



                                                                                                                                    More generally…




                                                                                                                                    • …Please make sure to answer the question and provide sufficient detail.


                                                                                                                                    • …Avoid asking for help, clarification or responding to other answers (use comments instead).





                                                                                                                                    draft saved


                                                                                                                                    draft discarded














                                                                                                                                    StackExchange.ready(
                                                                                                                                    function () {
                                                                                                                                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f177517%2fconvert-to-suzhou-numerals%23new-answer', 'question_page');
                                                                                                                                    }
                                                                                                                                    );

                                                                                                                                    Post as a guest















                                                                                                                                    Required, but never shown





















































                                                                                                                                    Required, but never shown














                                                                                                                                    Required, but never shown












                                                                                                                                    Required, but never shown







                                                                                                                                    Required, but never shown

































                                                                                                                                    Required, but never shown














                                                                                                                                    Required, but never shown












                                                                                                                                    Required, but never shown







                                                                                                                                    Required, but never shown







                                                                                                                                    Popular posts from this blog

                                                                                                                                    Wiesbaden

                                                                                                                                    Marschland

                                                                                                                                    Dieringhausen