Phát âm số


14

Ý tưởng

Ghi nhớ số có thể khó khăn. Ghi nhớ một từ có thể dễ dàng hơn. Để ghi nhớ những con số lớn, tôi đã tạo ra một cách phát âm chúng theo cách giống như leetspeak.

Quy tắc

Mỗi chữ số được thay thế đầu tiên bằng chữ cái tương ứng của nó:

0 => O
1 => I
2 => R
3 => E
4 => A
5 => S
6 => G
7 => T
8 => B
9 => P

Sau khi thay thế, hai điều bổ sung được thực hiện để cải thiện phát âm:

  • Giữa hai phụ âm, a Uđược thêm vào.

  • Giữa hai nguyên âm, a Nđược thêm vào.

Ví dụ / trường hợp kiểm tra

512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT

Điều không thể

  • Chữ cái và số trộn lẫn trong cùng một từ
  • Hai phụ âm liên tiếp hoặc hai nguyên âm liên tiếp
  • Các chữ cái không có trong danh sách trên
  • Nhân vật khác

Quy tắc

Mục tiêu của môn này là tạo ra một dịch giả 2 chiều cho khái niệm này.

  • Trước tiên, chương trình của bạn phải tự hiểu nếu đó là bản dịch từng chữ số hoặc chữ số.
  • Nó phải kiểm tra các mục để được hình thành đúng.
  • Nếu mọi thứ đều chính xác, hiển thị bản dịch.
  • Khác, hiển thị một thông báo lỗi, không có gì, trả về giá trị falsey hoặc làm hỏng chương trình.

Chi tiết

  • Số / chuỗi đầu vào có thể được nhập theo bất kỳ định dạng nào bạn muốn (stdin, argument, ...)
  • Đây là , vì vậy câu trả lời ngắn nhất sẽ thắng.
  • Sơ hở tiêu chuẩn bị cấm.

11
Không nên GIGATESTERGIGATESUTER?
kamoroso94

5
Thông thường, chúng tôi không yêu cầu mục nhập được 'hình thành đúng cách', vì đó chỉ là mã bổ sung mà không có lý do chính đáng (xem câu hỏi meta để biết các đề xuất thử thách tốt). Ngoài ra, "hình thành đúng" nghĩa là gì?
Okx

9
Nếu cần xác thực đầu vào, bạn nên bao gồm một loạt các trường hợp kiểm tra đầu vào không hợp lệ (đặc biệt là các đầu vào chỉ có chữ gần như hợp lệ). Tôi hy vọng rằng đây thực sự sẽ là phần chính của thử thách trong nhiều ngôn ngữ.
Martin Ender

2
Tôi đồng ý với @MartinEnder rằng bạn nên thêm một số trường hợp thử nghiệm cho các trường hợp không hợp lệ, như AB23; AEI; BB; Z; ACE; giga; !@#$; -123; vv Ngoài ra, dựa trên các quy tắc xác thực, chúng tôi có thể chuyển đổi 6164735732 => GIGATESTER, nhưng GIGATESTERsẽ dẫn đến một giá trị sai, vì ST(hai quy tắc phụ âm liên tiếp). Cách thức thử thách của bạn hiện đang được thiết lập, phần chính của thử thách là xác thực, thay vì chuyển đổi. Tôi ổn với điều đó, nhưng xác nhận nên được xác định tốt hơn một chút trong trường hợp đó.
Kevin Cruijssen

2
Trước tiên, chương trình của bạn phải tự gạch lại nếu đó là bản dịch từng chữ số hoặc chữ số. Vậy bản dịch có phải là hai chiều? Văn bản trước và các trường hợp thử nghiệm chỉ đề xuất số cho thư
Luis Mendo

Câu trả lời:


5

JavaScript (ES6), 130 byte

Lấy đầu vào là một chuỗi theo cả hai cách dịch. Trả về bản dịch dưới dạng chuỗi hoặc falsetrong trường hợp đầu vào không hợp lệ.

f=(n,k)=>(t=n.replace(/./g,(c,i)=>1/n?(!i|p^(p=27>>c&1)?'':'UN'[p])+s[c]:~(x=s.search(c))?x:'',p=s='OIREASGTBP'),k)?t==k&&n:f(t,n)

Bản giới thiệu


Nếu nó không hoạt động hoàn hảo, không đăng nó.
Okx

Hy vọng bây giờ làm việc như mong đợi.
Arnauld

... Hoặc gặp sự cố khi có các ký tự regrec dành riêng trong đầu vào. Vẫn còn hiệu lực
edc65

2

Japt , 61 59 92 85 84 byte

Tôi ngoại tuyến trong hầu hết các ngày cuối tuần (dài), nếu có thêm vấn đề nào được phát hiện với điều này, vui lòng yêu cầu một mod xóa nó cho tôi cho đến khi tôi có thể khắc phục nó.

Đưa đầu vào như là một chuỗi cho cả hoạt động và trả về một chuỗi cho cả cũng hay falsecho input.Assumes không hợp lệ đầu vào số sẽ luôn luôn chứa nhiều chữ số, thêm 1 byte thay thế với Un<space>nếu đó là không hợp lệ. Trả về falsecho trường hợp thử nghiệm GIGATESTER, nhưng theo quy tắc, đó phải là đầu vào không hợp lệ.


V="OIREASGTBP"UÉ?¡VgXÃe"%v"²_i1'NÃe"%V"²_i1'UÃ:!Uè"%v%v|%V%V|[^{V}NU]" ©Ur"N|U" £VaX

Hãy thử: Số -> Chữ hoặc Chữ -> Số


  • 2 4 byte được lưu cảm ơn obarakon , người cũng đã thuyết phục tôi tiếp tục điều này sau khi tôi từ bỏ nó trước đó. Ước gì anh không có!
  • 33 26 25 (!) Byte đã hy sinh khi thực hiện một bản sửa lỗi nhanh (nghĩa là chưa được đánh gôn hoàn toàn) để kiểm tra tính hợp lệ của đầu vào.

Giải trình

(Chưa được cập nhật lên phiên bản mới nhất)

                          :Implicit input of string U.
V="..."                   :Assign the string of letters to variable V, in order.
UÉ                        :Subtract 1 from U, which will give a number (truthy) if the input is a number or NaN (falsey) if the input is a string.
?                         :If it's a number then
¡                         :    Map over the input string, replacing each character (digit) with ...
VgX                       :      the character in string V at index X, the current digit.
à                        :    End mapping.
e                         :    Recursively replace ...
"%v"²                     :      every occurrence of 2 vowels (RegEx) ...
_i1'N                     :      with the current match with an "N" inserted at index 1.
à                        :    End replacement.
e                         :    Another recursive replacement of ...
"%V"²                     :      every occurrence of 2 non-vowel characters (i.e., consonants) ...
_i1'U                     :      with the current match with a "U" inserted at index 1.
à                        :    End replacement.
:                         :Else, if it's a string then
Uè"%v%v|%V%V|[^{V}NU]"    :    Count the number of matches of 2 successive vowels OR 2 successive non-vowels OR any character not in contained in string V plus N & U.
                          :    (The longest part of this code is the fecking input validation!)
?                         :    If that count is greater than 0 then
T                         :       Return 0.
:                              Else
Ur"N|U"                   :        Replace every occurrence of "N" OR "U" in string U with nothing.
£                         :        Map over the string, replacing each character (letter) with ...
VaX                       :         the index of the current character X in string V.
                          :Implicit output of resulting string

Dường như không xử lý đầu vào không hợp lệ, chẳng hạn nhưAEI
Emigna

@Emigna: Ah, chết tiệt! Bạn có thể tưởng tượng, sau khi bị đốt cháy bởi "Quy tắc" đầu tiên ban đầu, chúng ta sẽ nghĩ sẽ đọc phần còn lại của các quy tắc! : \ Tôi lấy phần "Không thể" để ám chỉ rằng chúng tôi sẽ không phải xử lý bất kỳ điểm nào trong số đó. Sắp tới.
Shaggy


1

Java (OpenJDK 8) , 416 410 399 382 376 370 byte

-2 byte nhờ @Cyoce

-17 nhiều byte hơn nhờ một ý tưởng của @Cyoce

-6 byte nhờ @KevinCruijssen

s->{String c="[RSGTBP]",v="[OIEA]",o="([256789])",e="([0134])";boolean b=s.matches("(c$|v$|(c|vN)(?=v)|(cU|v)(?=c))+".replace("c",c).replace("v",v));int i=-1;for(s=b?s.replaceAll("[UN]",""):s.matches("[0-9]+")?s.replaceAll(e+"(?="+e+")","$1N").replaceAll(o+"(?="+o+")","$1U"):i/0+"";i<9;s=b?s.replace(v,c):s.replace(c,v)){c=++i+"";v="OIREASGTBP".charAt(i)+"";}return s;}

Hãy thử trực tuyến!

Ugh, java thay thế rất dài dòng.

Hàm lấy một chuỗi và trả về chuỗi được dịch từ số -> chữ cái hoặc ngược lại. Sự cố về đầu vào không hợp lệ (bạn có thể thấy điều này trong ví dụ tio nơi nó đưa ra các giá trị chính xác cho 10 trường hợp thử nghiệm đầu tiên và sau đó gặp sự cố với một lỗi chia cho số 0 hiển thị trong chế độ xem gỡ lỗi)

Ungolfed (thuật ngữ đầu tiên và cuối cùng của vòng lặp for được rút ra để dễ đọc)

s-> {
    String c="[RSGTBP]", v="[OIEA]", o="([256789])", e="([0134])"; 
    boolean b=s.matches("(c$|v$|(c|vN)(?=v)|(cU|v)(?=c))+".replace("c",c).replace("v",v)); // lovely regex, explained below
    int i=-1;
    s= b? 
        s.replaceAll("[UN]",""); // remove N's and U's
        :s.matches("[0-9]+")?
        s.replaceAll(e+"(?="+e+")","$1N").replaceAll(o+"(?="+o+")","$1U"); // add N's and U's for separating vowels and consonants
        :i/0+""; // throw an error, looks like a sting for the ternary
    for(;i<9;) { 
        c=++i+"";
        v="OIREASGTBP".charAt(i)+"";
        s=b?s.replace(v,c):s.replace(c,v); // if it started with numbers, go to letters, or vice versa
    }
    return s;
}

Regex để khớp các số rất đơn giản, nhưng đây là regex để khớp các chữ cái với trường hợp số

(c$|v$|(c|vN)(?=v)|(cU|v)(?=c))+
(                             )+   every part of the word is
 c$                                a consonant at the end of the word
   |v$                             or a vowel at the end of the word
      |(c|vN)(?=v)                 or a consonant or a vowel + N followed by a vowel
                  |(cU|v)(?=c)     or a consonant + U or a vowel followed by a consonant


with c = [RSGTBP] and v = [OIEA]

Không phải là nó cải thiện đáng kể số lượng byte khổng lồ của bạn, nhưng bạn có thể xóa các dấu ngoặc đơn xung quanh(s)->
Cyoce

@Cyoce mỗi byte giúp
PunPun1000

vì tất cả các nhánh của ifcâu lệnh của bạn là các phép gán (trả về một giá trị), hãy thử thay thế if... else if... elsebằng toán tử có điều kiện ?:, đặt trước nó Object _=để biến nó thành một câu lệnh hợp lệ. Không chắc chắn nếu điều này thực sự sẽ giúp đếm byte, nhưng tôi nghĩ nó sẽ.
Cyoce

Hai điều nhỏ bạn có thể chơi golf. Bạn có thể xóa Chuỗi t, vì bạn chỉ sử dụng nó một lần. Vì vậy, t.charAt(i)+""trở thành "OIREASGTBP".charAt(i)+""( -4 byte ). Và bạn có thể đặt dòng cuối cùng bên trong vòng lặp for sau khi i<9;khai báo bên trong vòng lặp for. Vì vậy, nó trở thành for(;i<9;s=b?s.replace(v,c):s.replace(c,v)){( -1 byte ). Ồ, và bạn cũng có thể đặt cái s=b?...đó đến ngay sau int i=-1;vòng lặp for: for(s=b?...;i<9;...( -1 byte ).
Kevin Cruijssen

1

PHP; 129 127 267 259 228 byte

$l=IOREASGTBP;$n=1023456789;ctype_digit($s=$argn)?:$s=preg_replace("#U|N#","",strtr($o=$s,$l,$n));for($r=$c=($t=strtr($s,$n,$l))[$i++];$d=$t[$i++];)$r.=((trim($c,AEIO)xor$x=trim($d,AEIO))?X:UN[!$x]).$c=$d;echo$o?$o==$r?$s:"":$r;

Chạy như ống với -nRhoặc thử trực tuyến .

phá vỡ

$l=IOREASGTBP;$n=1023456789;
# if not digits, translate letters to digits and remember original
ctype_digit($s=$argn)?:$s=preg_replace("#U|N#","",strtr($o=$s,$l,$n));
# translate digits to letters:
for($r=$c=($t=strtr($s,$n,$l))                      # result = first letter
    [$i++];$d=$t[$i++];)                            # loop through letters
    $r.=((trim($c,AEIO)xor$x=trim($d,AEIO))?"":UN[!$x]) # append delimiter if needed
        .$c=$d;                                         # append next letter
# 
echo
    $o              # if original was remembered,
        ?$o==$r         # compare original to final result
            ?$s         # if equal, print digits
            :X          # else print X (as error message)
        :$r;        # else print letters

1

Java 8, 312 308 304 301 294 290 byte

s->{String r="",x="([AEIOU])",y="([BGNPRST])",z="0O1I2R3E4A5S6G7T8B9P";for(int c:s.getBytes())r+=c!=78&c!=85?z.charAt((c=z.indexOf(c)+(c<58?1:-1))<0?0:c):"";return s.matches("(("+x+y+")*"+x+"?)|(("+y+x+")*"+y+"?)|\\d*")?r.replaceAll(x+"(?="+x+")","$1N").replaceAll(y+"(?="+y+")","$1U"):"";}

-4 byte (308 → 304) cho sửa lỗi (không xảy ra thường xuyên khi số lượng byte giảm khi tôi sửa một lỗi trong mã của mình ..: D)

EDIT: Sử dụng một cách tiếp cận khác với câu trả lời Java của @ PunPun1000 bằng cách trước tiên tạo Chuỗi trả về trong một vòng lặp for qua các ký tự và sau đó sử dụng một biểu thức chính xác trừu tượng hơn để xác thực nó trong câu trả lời (đầu vào là tất cả các chữ số, hoặc là các nguyên âm và phụ âm nhất định xen kẽ (vì vậy không có bất kỳ nguyên âm liền kề cũng như phụ âm).

Giải trình:

Hãy thử nó ở đây.

s->{                                   // Method with String parameter and String return-type
  String r="",                         //  Result-String
    x="([AEIOU])",y="([BGNPRST])",     //  Two temp Strings for the validation-regex
    z="0O1I2R3E4A5S6G7T8B9P";          //  And a temp-String for the mapping
  for(int c:s.getBytes())              //  Loop over the characters of the input-String
    r+=                                //   Append to the result-String:
       c!=78&c!=85?                    //    If the character is not 'N' nor 'U':
        z.charAt(                      //     Get the character from the temp-String `z`
         (c=z.indexOf(c)+              //      by getting the character before or after the current character
            +(c<58?1:-1))              //      based on whether it's a digit or not
             <0?0:c)                   //      and a 0-check to prevent errors on incorrect input like '!@#'
       :                               //    Else:
        "";                            //     Append nothing
                                       //  End of loop (implicit / single-line body)
  return s.matches("(("+x+y+")*"+x+"?)|(("+y+x+")*"+y+"?)|\\d*")?
                                       //  If the input is valid
                                       //  (Only containing the vowels and consonants of `x` and `y`, without any adjacent ones. Or only containing digits)
    r                                  //   Return the result
     .replaceAll(x+"(?="+x+")","$1N")  //    after we've added 'N's if necessary
     .replaceAll(y+"(?="+y+")","$1U")  //    and 'U's if necessary
   :"";                                //  Or return an Empty String if invalid
}                                      // End of method

Chế độ xác nhận:

(([AEIOU][BGNPRST])*[AEIOU]?)|(([BGNPRST][AEIOU])*[BGNPRST]?)|\\d*


0

Bash ,241 238 235 byte

q=OIREASGTBP;[[ $1 == +([0-9]) ]]&&(x=`tr 0-9 $q<<<$1`;m={B,G,P,R,S,T};n={A,E,I,O};for i in `eval echo $m$m$n$n`;{ a=${i::1};b=${i:1:1};x=${x//$a$b/$a'U'$b};a=${i:2:1};b=${i:3:1};x=${x//$a$b/$a'N'$b};};echo $x)||tr $q 0-9<<<$1|tr -d UN

Hãy thử trực tuyến!

Ít chơi gôn hơn:

q=OIREASGTBP;                          save string in q
[[ $1 == +([0-9]) ]]&&(                if argument 1 is only digits
x=`tr 0-9 $q<<<$1`;                    save in x each digit translated to corresponding letter
m={B,G,P,R,S,T};
n={A,E,I,O};
for i in `eval echo $m$m$n$n`;{        generates all combinations of vowels and consonants
                                       BBAA BBAE ... TTOI TTOO
   a=${i::1};                          saves first consonant in a
   b=${i:1:1};                         saves second consonant in b
   x=${x//$a$b/$a'U'$b};               insets U between consonants
   a=${i:2:1};                         saves first vowel in a
   b=${i:3:1};                         saves second vowel in b
   x=${x//$a$b/$a'N'$b};               inserts N between vowels
};
echo $x                               echoes result
)||                                   if argument contains letters
  tr $q 0-9<<<$1|tr -d UN             translates letter to corresponding number and deletes U and N

0

PHP, 268 byte

$v=OIEA;$l=RSGTBP;$d="0134256789";$c=ctype_digit;$p=preg_replace;echo!$c($a=$argn)?$c($e=strtr($p(["#\d|[$v]{2,}|[$l]{2,}#","#[$v]\KN(?=[$v])#","#[$l]\KU(?=[$l])#"],[_,"",""],$a),$v.$l,$d))?$e:_:$p(["#[$v](?=[$v])#","#[$l](?=[$l])#"],["$0N","$0U"],strtr($a,$d,$v.$l));

Hãy thử trực tuyến!


0

Perl, 127 byte

Dòng lệnh 126 byte + 1 byte

$i="AEIOU]";$;=OIREASGTBP;1/!/[^$;NU\d]|[$i{2}|[^\d$i{2}/;eval"y/0-9$;NU/$;0-9/d";s/[$i\K(?=[$i)/N/g;s/[^N\d$i\K(?=[^\d$i)/U/g

Sử dụng:

 echo -n "512431" | perl -p entry.pl

Phải tuân theo tất cả các quy tắc thách thức - có thể chấp nhận chữ cái hoặc số và sẽ lỗi (chia cho số 0) nếu xác thực không thành công


Xác nhận có dương tính giả trên đầu vào NOUS.
Mực giá trị

0

Ruby , 205 + 1 = 206 byte

Sử dụng -pcờ cho byte 1. Bây giờ với một hệ thống xác nhận đầu vào đầy đủ.

d,w=%w"0-9 OIREASGTBP"
~/^\d+$/?($_.tr!d,w
gsub /([#{a='AEIO])(?=\g<1>)'}/,'\0N'
gsub /([^#{a}/,'\0U'):(+~/^(([AEIO])(N(?=[AEIO])|(?=\g<4>)|$)|([RSGTBP])(U(?=\g<4>)|(?=\g<2>|$)))+$/;$_.tr!("NU","").tr!w,d)

Hãy thử trực tuyến!


Điều này dường như không chuyển đổi chữ cái thành số, cũng không thực hiện bất kỳ xác nhận nào!
Jarmex

@Jarmex oops, thêm xác nhận! Đó là một kiểm tra xác thực lớn nhưng tôi không có nhiều sự lựa chọn trong vấn đề này
Value Ink

0

Python 3, 741 byte

from functools import reduce;c=0;e="";n="NU";v="AEIOU";l="OIREASGTBPNU";x=('0','O'),('1','I'),('2','R'),('3','E'),('4','A'),('5','S'),('6','G'),('7','T'),('8','B'),('9','P');s=input()
try:
    int(s);y=reduce(lambda a,kv:a.replace(*kv),x,s)
    for i in y:
        e+=i
        if i in v:
            z=True
            try:
                if y[c+1] in v:e+="N"
            except:
                pass
        else:
            z=False
            try: 
                if not y[c+1] in v:e+="U"
            except:
                pass
        c+=1
except:
    for i in s:
        if not i in l:
            p
    y=reduce(lambda a,kv:a.replace(*kv[::-1]),x,s)
    for i in y: 
        if not i in n:e+=i
print(e)

Hãy thử trực tuyến!

Có rất nhiều chỗ để cải thiện, tôi biết.


0

sed, 123 byte

s/[0134]/_&_/g
s/[25-9]/=&=/g
ta
y/OIREASGTBPU/0123456789N/
s/N//g
q
:a
s/__/N/g
s/==/U/g
y/0123456789_/OIREASGTBP=/
s/=//g

Giải trình

Đầu tiên, chúng tôi bao quanh các chữ số với _(cho nguyên âm) hoặc= (cho phụ âm).

Nếu chúng tôi không thực hiện bất kỳ thay thế nào, chúng tôi sẽ chuyển đổi các chữ cái thành chữ số, vì vậy đó là một sự thay thế đơn giản, và xóa UN. Sau đó nghỉ việc.

Mặt khác, chúng tôi phân nhánh để dán nhãn a, nơi chúng tôi xử lý các nguyên âm liên tiếp và sau đó là phụ âm liên tiếp. Sau đó chuyển đổi các chữ số thành chữ cái và xóa các ký tự đánh dấu mà chúng tôi đã giới thiệu trong bước đầu tiên.


0

Python3, 246 byte

v=lambda x:x in"AEIO"
V="OIREASGTBP"
i=input()
r=__import__("functools").reduce
print(r(lambda x,y:x+(("U",""),("","N"))[v(x[-1])][v(y)]+y,map(lambda x:V[x],map(int,i)))if i.isdigit()else r(lambda x,y:x*10+V.index(y),filter(lambda x:x in V,i),0))    

giải trình:

  • ánh xạ đầu vào một danh sách int
  • danh sách bản đồ của int đến vị trí của họ trong bảng chữ cái
  • giảm danh sách bằng cách thêm accumulator, cộng với một phần tử của một dict tuple, cộng với yếu tố hiện tại
    • các dict tuple là một bảng sự thật dựa trên hai yếu tố, là nguyên âm hay không

0

JavaScript (ES6), 120

Một hàm lấy đầu vào là một chuỗi. Nó trả về chuỗi dịch đúng nếu đầu vào hợp lệ, sai hoặc hàm bị hỏng.

n=>(t=n=>n.replace(/./g,d=>1/d?(v-(v=d<5&d!=2)?'':'UN'[v])+z[d]:~(a=z.search(d))?a:'',v=2,z='OIREASGTBP'))(q=t(n))==n&&q

Ít chơi gôn

n => 
{
  var t = n => { // function to translate, no check for invalid input
    var v = 2; // 1 = digit map to vowel, 0 = digit map to consonant, start with 2
    var z = 'OIREASGTBP'; // digits mapping
    return n.replace(/./g,
      d => 1/d // digit / alpha check
        ? ( // if digit
            w = v, // save previous value of v
            v = d < 5 & d != 2, // check if current digit will map to wovel or consonant
            (w != v 
             ? '' // if different - wovel+consonant or consonant+wovel or start of input
             : 'UN'[v] // if equal, insert required separator
            ) + z[d] // add digit translation
          )
        : ( // if alpha
             a = z.search(d), // look for original digit. Could crash if d is a reserved regexp char (not valid input)
             a != -1 ? a : '' // if digit found add to output, else do nothing
          )
    )
  }

  var q = t(n); // translate input an put in q
  if (t(q) == n) // translate again, result must be == to original input
    return q; // if ok return result
  else
    return false; // else return false
}

Kiểm tra

var F=
n=>(t=n=>n.replace(/./g,d=>1/d?(v-(v=d<5&d!=2)?'':'UN'[v])+z[d]:~(a=z.search(d))?a:'',v=2,z='OIREASGTBP'))(q=t(n))==n&&q

;`512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT`
.split('\n')
.forEach(x => {
  var [a,b] = x.match(/\w+/g)
  var ta = F(a)
  var tb = F(b)
  console.log(a==tb ? 'OK':'KO', a + ' => '+ ta)
  console.log(b==ta ? 'OK':'KO', b + ' => '+ tb)
})

function go() {
  O.textContent = F(I.value)
}

go()
<input id=I value='NUNS' oninput='go()'>
<pre id=O></pre>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.