সুজহু সংখ্যায় রূপান্তর করুন


27

সুজহু সংখ্যা (蘇州 碼子; এছাড়াও 花 碼) হ'ল চীনা দশমিক সংখ্যা:

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

এগুলি আরবি সংখ্যার মতো কাজ করে, ব্যতিরেকে সেটে যখন ধারাবাহিক অঙ্ক থাকে তখন দ্বিখণ্ডিততা এড়ানোর জন্য {1, 2, 3}উলম্ব স্ট্রোক স্বরলিপি {〡,〢,〣}এবং অনুভূমিক স্ট্রোক স্বরলিপিগুলির মধ্যে বিকল্পগুলি অঙ্ক করে {一,二,三}। এই জাতীয় একটানা গ্রুপের প্রথম অঙ্কটি সর্বদা উল্লম্ব স্ট্রোক স্বরলিপি সহ লেখা থাকে।

কাজটি হ'ল ধনাত্মক পূর্ণসংখ্যাকে সুজহু সংখ্যায় রূপান্তর করা।

পরীক্ষার মামলা

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

বাইটস মধ্যে সংক্ষিপ্ত কোড।


1
আমি দীর্ঘ সময়ের জন্য সুজহুতে 3 বার ছিলাম (বেশ সুন্দর শহর) তবে সুঝো সংখ্যার সম্পর্কে জানতাম না। আপনার আমার +1 আছে
টমাস ওয়েলারের

2
@ থমাস ওয়েলারের আমার পক্ষে এটি বিপরীত: এই কাজটি লেখার আগে আমি জানতাম যে সংখ্যাগুলি কী, তবে তাদের নামটি "সুজহু সংখ্যা" ছিল না। আসলে আমি কখনও তাদের নামটি (বা কোনও নামই) বলা শুনিনি। আমি এগুলিকে বাজারে এবং হাতে লেখা চীন ওষুধের ব্যবস্থাগুলিতে দেখেছি।
u54112

আপনি কি চরের অ্যারের আকারে ইনপুট নিতে পারবেন?
অজ্ঞতার

নিবন্ধন করুন ঠিক আছে, পর্যাপ্ত লোকেরা যাইহোক স্ট্রিং ইনপুট নিচ্ছেন।
u54112

উত্তর:



9

আর , 138 বাইট

আমি বাজি দেব এটি করার একটি সহজ উপায় আছে। gsubবিকল্প সংখ্যার অবস্থানগুলি পেতে ব্যবহার করুন ।

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

এটি অনলাইন চেষ্টা করুন!



8

রেটিনা , 46 বাইট

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

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

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

দুটি অঙ্কের সাথে 1-3 বা অন্য কোনও অঙ্কের সাথে মেলে।

_T`d`〇〡-〩`^.

প্রতিটি ম্যাচের প্রথম চরিত্রটিকে এর সুঝু দিয়ে প্রতিস্থাপন করুন।

T`123`一二三

অনুভূমিক সুজহোর সাথে বাকী কোনও অঙ্ক প্রতিস্থাপন করুন।

রেটিনা 0.8.2 এ 51 বাইট :

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

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

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

ইনপুটটি পৃথক অঙ্ক বা অঙ্কের জোড়গুলিতে বিভক্ত করুন যদি তারা উভয়ই 1-3 হয়।

mT`d`〇〡-〩`^.

প্রতিটি লাইনের প্রথম অক্ষরটিকে তার সুজহু দিয়ে প্রতিস্থাপন করুন।

T`¶123`_一二三

একসাথে লাইনগুলিতে যোগদান করুন এবং অনুভূমিক সুজহোর সাথে বাকী কোনও অঙ্ক প্রতিস্থাপন করুন।


7

পার্ল 5 -pl -Mutf8 , 53 46 বাইট

-7 বাইট ধন্যবাদ গ্রিমিকে

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

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

# 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

s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/( টিআইও ) সহ -৩ বাইট
গ্রিমি

49: s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/( টিআইও )। 48: s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/( \0\34টিআইও-তে এটি কীভাবে করা যায় তার পরিবর্তে আক্ষরিক নিয়ন্ত্রণের অক্ষর ব্যবহার করা দরকার )
গ্রিমি

46: s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c( টিআইও )
গ্রিমি

6

জাভা (জেডিকে) , 120 বাইট

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;}

এটি অনলাইন চেষ্টা করুন!

ক্রেডিট


1
c=s[i]-48;if(p>0&p<4&c>0&c<4)হতে পারে if(p>0&p<4&(c=s[i]-48)>0&c<4)এবং তারপরে আপনি লুপের চারপাশে বন্ধনীও ফেলে দিতে পারেন। এছাড়াও, else{p=c;s[i]+=c<1?12247:12272;}হতে পারেelse s[i]+=(p=c)<1?12247:12272;
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আপনাকে ধন্যবাদ! আমি এখনও এই উত্তরটি গল্ফ করছিলাম, তবে এটি আমাকে তবুও সহায়তা করেছিল ^^ এখন আমি মনে করি আমি এটি গল্ফ করে নিয়েছি।
অলিভিয়ার গ্রাগোয়ার

5

জাভাস্ক্রিপ্ট (ES6),  95 89  88 বাইট

@ শিরুআসাকোটো ধন্যবাদ 6 বাইট সংরক্ষণ করা

স্ট্রিং হিসাবে ইনপুট নেয়।

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

এটি অনলাইন চেষ্টা করুন!



@ শিরুআসাকোটো এটি আরও ভাল! অনেক ধন্যবাদ!
আর্নল্ড


3

পরিষ্কার , 181 165 বাইট

সমস্ত অষ্টাল পালিয়ে যাওয়া সমান একক-বাইট অক্ষর দ্বারা প্রতিস্থাপিত হতে পারে (এবং প্রতিটি বাইট হিসাবে গণনা করা হয়), তবে পঠনযোগ্যতার জন্য ব্যবহৃত হয় এবং অন্যথায় এটি টিআইও এবং এসইটিকে অবৈধ ইউটিএফ -8 দিয়ে বিচ্ছেদ করে।

import StdEnv
u=map\c={'\343','\200',c}
?s=((!!)["〇":s++u['\244\245\246\247\250']])o digitToInt
$[]=[]
$[h:t]=[?(u['\241\242\243'])h:if(h-'1'<'\003')f$t]
f[]=[]
f[h:t]=[?["一","二","三"]h: $t]

এটি অনলাইন চেষ্টা করুন!

একটি এনকোডিং-অজানা সংকলক উভয়ই আশীর্বাদ এবং অভিশাপ।





2

সি, 131 বাইট

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]);}

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা: সবার আগে - আমি এটিকে সংক্ষিপ্ত করতে সমস্ত ভেরিয়েবলের জন্য চর ব্যবহার করছি।

অ্যারে sসমস্ত প্রয়োজনীয় সুজহু অক্ষর ধারণ করে।

বাকিগুলি সরবরাহকৃত সংখ্যার চেয়ে অনেক বেশি পুনরাবৃত্তি হয় যা স্ট্রিং হিসাবে প্রকাশিত হয়।

টার্মিনালে লেখার সময়, আমি ইনপুট নম্বর মানটি ব্যবহার করছি (সুতরাং অক্ষর - এএসসিআইআই তে 48) 3 দ্বারা গুণিত হয়েছে, কারণ এই সমস্ত অক্ষরটি ইউটিএফ -8 এ 3 বাইট দীর্ঘ long মুদ্রিত হওয়া 'স্ট্রিং' সর্বদা 3 বাইট দীর্ঘ - তাই একটি আসল অক্ষর।

চলক cএবং dবর্তমান এবং পরবর্তী ইনপুট অক্ষর (সংখ্যা) এর কেবল 'শর্টকাট'।

চলকটি f0 বা 27 টি ধারণ করে - এটি বলছে যদি পরবর্তী 1/2/3 অক্ষরটি বিকল্প বিকল্পে স্থানান্তরিত করা উচিত - 27 অ্যারের নিয়মিত এবং বিকল্প চরিত্রের মধ্যে অফসেট।

f=c*d&&(c|d)<4&&!f?27:0 - সি * ডি! = 0 তে 27 লিখুন এবং সেগুলি উভয় <4 এবং যদি f 0 হয় না, অন্যথায় 0 লিখুন।

এটি আবার লিখতে পারে:

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

শেভ করার জন্য কিছু বাইট থাকতে পারে তবে আমি আর স্পষ্ট কিছু খুঁজে পাচ্ছি না।




1

কে (এনএনজি / কে) , 67 বাইট

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

এটি অনলাইন চেষ্টা করুন!

10\ দশমিক সংখ্যাগুলির তালিকা পান

{ }@ নিম্নলিখিত ফাংশন প্রয়োগ করুন

x&x<4 আর্গুমেন্ট 4 এর চেয়ে কম এবং শূন্য নয় যেখানে বুলিয়ান (0/1) এর তালিকা

<\কম-দিয়ে স্ক্যান করুন। এটি পরপর 1 এর রান 1 টি এবং 0 এর বিকল্পকে রূপান্তরিত করে

x+9* 9 দ্বারা গুণিত এবং যোগ করুন x

জুটস্টেপজেশন সূচীকরণ করছে, সুতরাং এটি সূচক হিসাবে ব্যবহার করুন ...

0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"প্রদত্ত স্ট্রিং, 3-বাইট স্ট্রিংয়ের তালিকায় বিভক্ত। কে ইউনিকোড সচেতন নয়, সুতরাং এটি কেবল বাইটগুলি দেখে

,/ CONCATENATE


1

ওল্ফ্রাম ভাষা (গণিত) , 117 বাইট a

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

এটি অনলাইন চেষ্টা করুন!

নোট করুন যে টিআইও-তে এই ফলাফলটি পলায়নের আকারে আউটপুট দেয়। স্বাভাবিক ওল্ফ্রামের সামনের প্রান্তে, এটি দেখতে এরকম দেখাবে:নোটবুক ইন্টারফেসের ছবি


1
আপনি কি দ্বিগুণ এবং ত্রিশের জন্য অনুভূমিক স্ট্রোক স্বরলিপি প্রয়োগ করতে পারেন? যেমন f[123]ফিরে আসা উচিত 〡二〣
u54112

1

জাপট , 55 বাইট

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

এটি অনলাইন চেষ্টা করুন!

এটি লক্ষণীয় যে টিআইও আমার পছন্দের দোভাষীর চেয়ে আলাদা বাইট গণনা দেয় তবে আমি যে কম স্কোর দেয় তাতে বিশ্বাস না করার কোনও কারণ আমি দেখতে পাচ্ছি না।

ব্যাখ্যা:

    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

1

সি # (.নেট কোর) , 107 বাইট, 81 টি অক্ষর

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

এটি অনলাইন চেষ্টা করুন!

@ জো কিংকে 17 বাইট সংরক্ষণ করা হয়েছে

পুরানো উত্তর

সি # (.নেট কোর) , 124 বাইট, 98 টি চর

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];});}

এটি অনলাইন চেষ্টা করুন!

একটি তালিকা আকারে ইনপুট নেয়, এবং একটি অনুমিত হয়। এই ইনপুট / আউটপুটটি ঠিক আছে কিনা আমি জানি না, সুতরাং এটি না হলে কেবল আমাকে জানান।

ব্যাখ্যা

এটি কীভাবে কাজ করে তা এটি সমস্ত পূর্ণসংখ্যাকে তাদের নিজ নিজ সুজু সংখ্যা আকারে রূপান্তর করে তবে কেবল পরিবর্তনশীল bসত্য হলেই । bযখনই আমরা একটি পূর্ণসংখ্যা পূরণ করি তখনই বিপরীত হয় যা এক, দুই, বা তিনটি হয় এবং অন্যথায় সত্য হয়ে যায়। যদি bমিথ্যা হয় তবে আমরা পূর্ণসংখ্যাকে উল্লম্ব সংখ্যার একটিতে পরিণত করি।


0

আর , 104 বাইট

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

এটি অনলাইন চেষ্টা করুন!

আর। এর একটি বিকল্প পদ্ধতি পার্ল-স্টাইলের কিছু রেগেক্স বৈশিষ্ট্য ব্যবহার করে ( Tপ্রতিস্থাপনের ফাংশনের সর্বশেষ প্যারামটি বোঝায় perl=TRUE)।

প্রথমে, আমরা বর্ণগুলি বর্ণমালার অক্ষরে অনুবাদ করি a-j, তারপরে রেজিেক্স প্রতিস্থাপন ব্যবহার করে bcd(পূর্বে 123) বড় হাতের বর্ণের সদৃশ রূপান্তর করতে এবং অবশেষে ছোট হাতের অক্ষর এবং বড় হাতের অক্ষরের বিভিন্ন হ্যান্ডলিং সহ সুজহু অঙ্কগুলিতে অক্ষর অনুবাদ করি।

জে.ডোকে পরীক্ষার কেস প্রস্তুতির জন্য ক্রেডিট, কারণ এগুলি তার উত্তর থেকে নেওয়া হয়েছিল ।


0

সি #, 153 বাইট

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

এটি অনলাইন চেষ্টা করুন!


এটি 153 বাইট, যাইহোক, অক্ষরগুলি সর্বদা বাইট বোঝায় না। কিছু অক্ষর একাধিক বাইট মূল্য।
অজ্ঞতার

ওহ ভাল, আমি আমার উত্তর সম্পাদনা করেছি। তথ্যের জন্য ধন্যবাদ :)
zruF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.