숫자를 프랑스어로 번역


46

프랑스 인 들은 독특한 방식으로 숫자철자합니다 .

  • 1-16 은 "정상"입니다
  • 17-1910 + 7로 표시됩니다. 10 + 8, 10 + 9 .
  • 20-69 는 "정상적"입니다.
  • 70-7960 + 10, 60 + 11 ... 60 + 10 + 7, 60 + 10 + 8, 60 + 10 + 9 입니다.
  • 80-994 * 20, 4 * 20 + 1, 4 * 20 + 2 ... 4 * 20 + 16, 4 * 20 + 10 + 7, 4 * 20 + 10 + 8, 4 * 20 + 10 +입니다. 9

도전:

[1,100] 범위의 양의 정수를 가져 와서 "French way"로 출력하십시오. 당신은 출력이 정확히과 함께, 아래와 것 같은 있어야 *하고 +그래서 97입니다 4*20+10+7하지, [4 20 10 7]또는 뭔가 다른.

테스트 사례 :

1  - 1
.. - ..
16 - 16
17 - 10+7
18 - 10+8
19 - 10+9
20 - 20
21 - 21
.. - ..
69 - 69
70 - 60+10
71 - 60+11
72 - 60+12
77 - 60+10+7
78 - 60+10+8
79 - 60+10+9
80 - 4*20
81 - 4*20+1
82 - 4*20+2
.. - ..
90 - 4*20+10
91 - 4*20+11
96 - 4*20+16
97 - 4*20+10+7
98 - 4*20+10+8
99 - 4*20+10+9
100 - 100

14
내가 알고있는 모든 언어에서 하나 같이 "청소년"의 전환,가 1610+7위. (영어로는 사이에 발생 12하고 10+3좀 더 형태 변장으로.) 나는 항상 다른 언어가 다른 번호에서 그 전환 할 수 있다는 사실을 overobsessed 조금 있었어요.
Greg Martin

25
22"dix-huit"가 왜 "vingt-deux"여야 10+8합니까?
Titus

11
운 좋게도, 이것은 언어적인 퀴즈 사이트가 아니라 프로그래밍 퍼즐 사이트입니다. 그렇지 않으면 OP가 바보 같은 실수를 할 때 사람들이 성 가실 수 있습니다. 휴!
Stewie Griffin

4
@StewieGriffin 사람들은 여전히 ​​화가났습니다.
Leaky Nun

2
프랑스 인으로서 나는 그것을 꽤 잘 발견한다. : D.
Walfrat

답변:


13

엑셀 153 149 바이트

=IF(OR(A1<17,A1>99,AND(A1>19,A1<70)),A1,IF(A1<20,"10+"&A1-10,IF(A1<80,"60","4*20")&IF(A1=80,,IF(MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,"+"&MOD(A1,20)))))

이것이 더 좋을 것이라고 확신합니다. # 80을 설명하는 효율적인 방법을 찾기 위해 고심했습니다.

편집 : 4 바이트를 절약하기 위해 '일반'사례를 더 잘 통합했습니다. # 80은 여전히 ​​짜증나.

code-golf tbh의 규칙을 잘 모르는 여기에서 특정 답변을 찾을 수 없습니다. Excel에서 여러 셀을 사용하고 각각의 바이트 수를 추가 할 수 있습니까?

즉. 셀 A1의 입력

A2 : 11 바이트

=MOD(A1,20)

A3 (결과) : 125 바이트

=IF(OR(A1<17,A1>99,AND(A1>19,A1<70)),A1,IF(A1<20,"10+"&A1-10,IF(A1<80,"60","4*20")&IF(A1=80,,IF(A2>16,"+10+"&A2-10,"+"&A2))))

총 136 개?


여러 셀에 코드를 작성할 수 있어야한다고 생각합니다. IMHO 그것은 다른 프로그래밍 언어에서 중간 변수 또는 함수를 갖는 것과 같습니다.
pajonk

다른 언어로 함수를 사용하는 경우 (보일러 플레이트를 입력하여 함수를 선언하는 경우)와 같이 여러 셀을 사용하면 약간의 패널티가 있어야한다고 생각합니다. 아마도 가장 강력한 지원 인코딩 (예 : CSV), 필요한 수의 쉼표 및 (필요한 경우) 따옴표?
Muzer

Excel 파일을 인식 가능한 출력으로 저장할 수있는 형식을 알지 못합니다. CSV 파일은 기본적으로 이와 같은 기능을 지원하지 않으며 쉼표를 사용하는 기능을 분리합니다. 셀 사이에 줄 바꿈을 사용하여 하나의 열에 순수한 텍스트로 저장하면 Excel에 직접 복사되고 함수로 복사 될 수 있습니다. 이 경우 각 추가 셀에 1 바이트가 추가됩니다.
qoou

변환하여 바이트를 저장 IF(A1=80,,IF(MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,"+"&MOD(A1,20)))IFS(A1=80,,MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,1,"+"&MOD(A1,20))
Greedo

Libreoffice calc에서는 )끝 부분을 건너 뛸 수 있습니다. Excel에서 동일한 작업을 수행 할 수 있습니까? 따라서 5 "바이트"를 절약 할 수 있습니다 (실제로 UCS2-Char가 있으므로 Byte == octet라고하면 이중으로 계산해야합니다). 그리고 당신은 변경해야합니다 ,;
12,431,234,123,412,341,234,123

8

레티 나 , 52 48 바이트

Neil 덕분에 4 바이트 절약

^7\B
60+1
^9\B
81
^8\B
4*20+
1(?=7|8|9)
10+
\+0

온라인으로 사용해보십시오! 또는 모든 입력을 확인하십시오 (Neil 제공)

설명

^7\B
60+1
^9\B
81
^8\B
4*20+

먼저 우리는 70, 80, 90의 번역을 처리합니다.이 첫 3 단계에서 시작시 7 개의 문자가 뒤에 다른 문자로 바뀝니다 60+1. 마찬가지로, 9로 대체 81하고 8의해 4*20+1. 의 대체 9는 본질적으로 그것을 "80"으로 변경하는 것이므로 8다음 대체에서 처리 되므로 바이트를 4*20+1두 번 쓰는 것 보다 바이트가 절약됩니다 .

1(?=7|8|9)
10+

이 경우의 처리 17, 1819교체하는 의해 1각하여 10+.

\+0

마지막으로 +0끝에는 없어야 하므로 삭제하십시오.


대신에 뒤와
앞을 보면

에 대해서는 효과가 7-9없지만 온라인으로 사용해보십시오.
Neil

@Neil 나는 내가 떠난 동안 깨달았다 : P 그러나 새 버전에 감사드립니다!
비즈니스 고양이

@ Downgoat lookahead를 캡처 그룹으로 바꿀 수는 있지만 $1만큼 오래 걸리기 때문에 바이트를 저장하지 않습니다 ?=.
비즈니스 고양이


7

자바 스크립트 (ES6), 73 71 바이트

f=n=>n>16&n<20?'10+'+n%10:n<70|n>99?n:n%20?f(n-n%20)+'+'+f(n%20):'4*20'

실제로 추가 2 바이트로 철자가 표시된 숫자를 인쇄하는 보너스 버전 :

f=n=>n<17|n>99?n:n<20?'10+'+n%10:n%20?f(n-n%20)+'+'+f(n%20):n-80?n:'4*20'

1
많은 입력에 실패합니다. 실제로 그것은 단지 1..20, 30, 40, 50, 60, 80 및 100에서만 작동합니다.
Titus

@Titus 나는 당신이 대부분의 출력을 오해하고 있다고 생각합니다. 23예를 들어,가 23아닌 을 출력해야합니다 20+3.
ETHproductions

두 바이트를 저장(m=n%20)
디도

@Titus 감사합니다.하지만 이미 시도했지만 통화 에서 m재설정 되기 때문에 70-99에서 작동하지 않습니다 . (전역 변수입니다)0f(n-n%20)
ETHproductions

로 변경 n<70|n>99하여 바이트를 저장할 수 있습니다 n%100<70. 또한 테스트 컴파일러를 추가 할 수 있습니까?
Kevin Cruijssen

5

R, 110 바이트

i=scan()
r=i%%10;paste0(ifelse(i>16&i<20,"10+",ifelse(i>69&i<80,"60+10+",ifelse(i>16&i<20,"4*20+",i-r/10))),r)

(i-r)/10대신 사용해보십시오 floor(i/10). 그리고 i>15해야합니다 i>16.
Titus

5

PHP, 99 바이트 (행복한 버전이되고 싶다)

ETHproductions JS 의 직선 포트 , 4 바이트 골프. OP가 요청한 번호를 인쇄합니다.

function f($n){return$n<17|$n>19?$n>60&$n<100?($m=$n%20)?f($n-$m)."+".f($m):'4*20':$n:"10+".$n%10;}

고장

function f($n){return
    $n<17|$n>19
        ?$n>69&$n<100
            ?($m=$n%20)
                ?f($n-$m)."+".f($m) # 70..79, 81..99
                :'4*20'             # 80
            :$n                     # 1..16, 20..69
        :"10+".$n%10                # 17..19
    ;
}

나는 올바른 버전이되고 싶다, 114 98 바이트

ETHproductions 에서 영감을 얻은 새로운 접근 방식 은 실제로 철자가 나오는 숫자를 인쇄합니다.

function f($n){return$n>16&$n<100?$n-80?($m=$n%($n>60?20:10))?f($n-$m)."+".f($m):$n-$m:'4*20':$n;}

온라인으로 사용해보십시오 .

고장

function f($n){return
    $n>16&$n<100
        ?$n-80
            ?($m=$n%($n>60?20:10))
                ?f($n-$m)."+".f($m) # $n%$m>0
                :$n-$m              # 10,20,30,40,50,60
            :'4*20'                 # 80
        :$n                         # 1..16, 100
;}


3

배치, (220) 217 바이트

@set/pn=
@set s=
@if %n% gtr 99 goto g
@if %n% gtr 79 set s=+4*20&set/an-=80
@if %n% gtr 69 set s=+60&set/an-=60
@if %n% gtr 16 if %n% lss 20 set s=%s%+10&set/an-=10
:g
@if %n% gtr 0 set s=%s%+%n%
@echo %s:~1%

STDIN에서 입력을받습니다. 선행을 생성하고 제거하면 +특수 케이스 80보다 1 바이트가 절약됩니다. 편집 : @ ConorO'Brien 덕분에 3 바이트가 절약되었습니다.


@echo off@
Conor O'Brien

@ ConorO'Brien Huh, 이번에 왜 그렇게 잊었는지 궁금합니다 ...
Neil

2

젤리 , 55 바이트

⁹
’,ṃ60Ṁ€
⁹%80“4*20”,
Dj⁾0+µ¹e?“×ØŒ‘
%ȷ2:“FP‘S‘ŀḟ0Ç€j”+

온라인으로 사용해보십시오! 또는 테스트 스위트를 참조하십시오

의심 할 여지없이 더 짧은 방법이 있습니다!

어떻게?

+ - Link 1, helper for 1-69&100: number s=0, number n
⁹ - link's right argument, n

’,ṃ60Ṁ€ - Link 2, helper for 70-79: number s=1, number n
’       - decrement s -> 0
 ,      - pair -> [0,n]
  ṃ60   - base decompress (vectorises) using [1,2,...60]  effectively -> [60,[1,n%60]]
     Ṁ€ - maximum for €ach effectively -> [60,n%60]

⁹%80“4*20”, - Link 3, helper for 80-99: number s=2, number n
⁹           - link's right argument, n
 %80        - mod 80
    “4*20”  - literal ['4','*','2','0']
          , - pair -> [['4','*','2','0'],n]

Dj⁾0+µ¹e?“×ØŒ‘ - Link 4, reformat 17-19: element v (may be char list or number)
        ?      - if
       e       - v exists in
         “×ØŒ‘ - literal [17,18,19]
               - then:
D              -   convert to decimal list  e.g. [1,7]
  ⁾0+          -   literal ['0','+']
 j             -   join                          [1,'0','+',7]
     µ         - else:
      ¹        -   identity, v

%ȷ2:“FP‘S‘ŀḟ0Ç€j”+ - Main link: number n in [1,100]
 ȷ2                - literal 100
%                  - mod (convert 100 to 0)
    “FP‘           - literal [70,80]
   :               - integer division (vectorises)
        S          - sum (0 for 1-69&100; 1 for 70-79; 2 for 80-99)
         ‘         - increment (...1, 2 or 3)
          ŀ        - call link at index (1, 2 or 3) as a dyad(sum, n)
           ḟ0      - filter out zeros (remove 0 from 4*20+0)
             ǀ    - call the last link (4) as a monad for each
                ”+ - literal '+'
               j   - join

2

Pyth, 61 56 바이트

L?}b}17 19++T\+eb|bk?}/QTr6T.s+?<Q80"60+""4*20+"y%Q20\+y

온라인으로 테스트하십시오!

5 바이트 개선을위한 Leaky Nun에 감사합니다!

설명:

                     | Implicit: Q=eval(input())
L                    | Define y(b):
 ?}b}17 19           |  If b is in the inclusive range from 17 to 19:
          ++T\+eb    |   Return "10+" + (last digit of b)
                 |b  |  Else: if b!=0: return b
                   k |   Else: return an empty string (Leaves a trailing '+' for case 80)
_____________________|________________
?}/QTr6T                              | If 70<=Q<100:
          +                           |  Concatenate the next two expressions:
           ?<Q80                      |   If Q<80:
                "60+"                 |    Evaluate to "60+"
                     "4*20+"          |    Else: Evaluate to "4*20+"
                            y%Q20     |   y(Q%20)
        .s                       \+   |  Strip off trailing '+', if present (for case 80)
                                   y  | Else: return y(Q)
                                   (Q)| Trailing Q is implicitly added

*-Q100>Q69}/QTr6T
Leaky Nun

@]b}17 19}b}17 19
Leaky Nun

+"10+"ebj\+,Teb
Leaky Nun

@LeakyNun 골프에 도움을 주셔서 감사합니다! 제안한 내용을 변경했습니다.
K Zhang

1

Python3, 127 바이트

m,r=map,range;l=[*r(1,17),*m("10+{}".format,(7,8,9))];f=[0,*l,*r(20,61),*m("60+{}".format,l),"4*20",*m("4*20+{}".format,l),100]

각 배열 요소에는 다음과 같은 표현이 포함됩니다.

for i in range(1,101):
    print(i, f[i])

코드는 실제로 함수를 만들지 않고 배열을 만듭니다. 허용되는지 알 수 없습니다. 그렇지 않으면을 추가 하여이 139 바이트를 만들어야합니다 f=[...].__getitem__.


PPCG에 오신 것을 환영합니다! 나는 생각 개체에 대한 정수에서 매핑으로 배열 제출에 대한 메타에 대한 논의가 있었다, 그러나 나는 순간에 그것을 찾을 수 없습니다. 내가하는지 (그리고 그 토론의 결과는 무엇이 었는지) 알려 드리겠습니다. f=이름이없는 함수 (즉, 제출 된 함수로 평가되는 표현식)는 이름이 재귀와 같은 것에 필요하지 않은 한 괜찮 기 때문에 어느 쪽이든 필요하지 않습니다 .
Martin Ender

명확한 합의는 없지만 , 가장 많이 투표 된 답변 은 솔루션을 허용한다고 제안합니다.
Martin Ender

0

자바 7 97 96 109 바이트

String c(int i){return i>16&i<20?"10+"+(i-10):i%100<70?i+"":i<80?"60+"+c(i-60):"4*20"+(i<81?"":"+"+c(i-80));}

버그 수정 사례의 경우 +13 바이트 80.. :(

설명:

String c(int i){      // Method with integer parameter and String return-type
  return i>16&i<20?   //  If 17..19:
    "10+"+(i-10)      //   Return "10+" + `i`-10
   :i%100<70?         //  Else if 1..16; 20..69; 100:
    i+""              //   Return `i`
   :i<80?             //  Else if 70..79:
    "60+"+c(i-60)     //   Return "60+" + recursive-call with `i`-60
   :                  //  Else (80..99):
    "4*20"+           //   Return "4*20" +
     (i<81?           //   If 80:
      ""              //    nothing
     :                //   Else (81..99)
      "+"+c(i-80));   //    recursive-call with `i`-80
}                     // End of method

테스트 코드 :

여기에서 시도하십시오.

class M{
  static String c(int i){return i>16&i<20?"10+"+(i-10):i%100<70?i+"":i<80?"60+"+c(i-60):"4*20"+(i<81?"":"+"+c(i-80));}

  public static void main(String[] a){
    for (int i = 1; i <= 100; i++) {
      System.out.println(c(i));
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.