웨일스 말은 얼마나 걸립니까?


37

웨일스 어 단어를 나타내는 문자열을 입력으로받는 프로그램 또는 함수를 작성하십시오 (별도로 지정하지 않는 한 UTF-8).

다음은 웨일스 어의 모든 단일 문자 입니다.

a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y

Wikipedia 를 인용하자면 ,

이중 음자는 동안 ch가 , DD , FF , , LL , 산도 , RH , 각각 두 개의 기호로 작성된은, 그들은 모두 하나의 문자로 간주됩니다. 예를 들어 Llanelli (사우스 웨일즈의 도시)는 영어로 된 8 글자에 비해 웨일스 어에서는 6 글자로만 간주됩니다.

이 서한은 웨일스 어에도 존재하지만 다른 언어에서 빌린 기술 용어로 제한됩니다.

k, q, v, x, z

분음 부호가있는 문자는 별도의 문자로 간주되지 않지만 기능에서 해당 문자를 승인하고 계산할 수 있어야합니다. 가능한 문자는 다음과 같습니다.

â, ê, î, ô, û, ŷ, ŵ, á, é, í, ó, ú, ý, ẃ, ä, ë, ï, ö, ü, ÿ, ẅ, à, è, ì, ò, ù, ẁ

ASCII는 이러한 문자를 인코딩 할 수 없으므로 허용되는 입력 인코딩이 아닙니다.

노트:

  • 이것은 코드 골프입니다.
  • lngyfarch 와 같은 단어를 설명 할 필요는 없습니다 . 여기서 ng 는 digraph가 아니라 두 개의 별도 문자입니다. 이 단어에는 9 개의 문자가 있지만 8 자로 잘못 계산할 수 있습니다. ( 이러한 단어를 설명 할 있다면 정말 대단하지만이 과제의 범위를 벗어납니다.)
  • 입력에는 공백이 없어야합니다 (단일 후행 줄 바꿈 (또는 더 난해한 것)을 선호하지 않는 한 제공 될 수 있음). 내부 공백이 없을 것입니다.

테스트 사례 :

  • 랜디 드노, 8
  • 라 넬리, 6
  • 릴, 3
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (실제로 51, 그러나 우리는 50을 셉니다)
  • 3 대
  • 키 무루, 5
  • 글린 더, 7

4
모든 소문자로 입력 할 수 있습니까?
ETHproductions

15
실제로 웨일스 알파벳의 일부가 아닌 같은 네이티브 웨일스 어 스피커는 J가 "빌린"문자 섹션에 추가하는 것이 좋습니다 것입니다 내 아내
리치 Starkie

@RichStarkie Wikipedia 기사는 그 부분에서 약간 모호했습니다. 내 이해는 j 가 원래 단어에없는 경우에도 빌린 단어에 사용되므로 음운론 적으로 사용 되므로이 단계에서 언어로 자연 화됨을 의미합니다. 아일랜드에서 v 에 대한 비슷한 주장을 보았습니다 . 아일랜드 알파벳의 일부가 아닌 것으로 널리 간주되지만 Ó Cuiv 와 같은 아일랜드 이름으로 존재합니다 .
TRiG

1
웨일스 어 직교 기사의 각주에는 mh , nhngh가 그래프표시되어 있습니다. Methinks Linguistics SE 에 대한 질문을해야합니다 .
TRiG

3
너무 늦었 어. 그 트리플 글리프 "ngh"가 조금 더 복잡해 졌을 수도 있습니다.
megaflop

답변:


6

05AB1E , 24 23 21 바이트

암호:

u•éÓœ°D¥M™ù>•30B2ô0:g

설명:

u                      # Convert the input to uppercase.
 •éÓœ°D¥M™ù>•30B       # Compressed version of CHDDFFNGLLPHRHTH.
                         It convert the text between the •'s from base 214 to
                         base 10 and converts that to base 30.
                2ô     # Split into pieces of 2.
                  0:   # Replace each element that also occurs in the input by 0.
                    g  # Get the length of the processed input.

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


16

레티 나 , 23 바이트

i`[cprt]h|dd|ff|ng|ll|.

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

심지어 무어 정규식.


아마도 Retina에 대한 무지 일지 모르지만 입력 텍스트 길이의 출력은 어디에 있습니까? Retina의 문서는 "온라인으로 사용해보십시오!"에서 어떻게 작동하는지 설명하지 않습니다. 대지.
Xaero Degreaz

2
유일한 행은 Match 스테이지이므로 일치 횟수를 반환하므로 출력은 암시 적입니다. 여기서 정규식은 모든 웨일스 어 문자와 일치합니다.
user48538

그래서 그 논리에 의해 코드에서 길이가 명시 적으로 호출되는 아래의 모든 대답을 단축 할 수 있습니까?
Xaero Degreaz

2
@XaeroDegreaz Retina는 자동으로 일치하는 언어를 세어 출력하는 언어 중 하나입니다. 이것이 언어 인 Retina의 작동 방식입니다. 다른 언어의 작동 방식이 아니므로 올바른 언어를 얻으려면 길이 함수를 명시 적으로 호출해야합니다.
isaacg

고마워요, 지금 이해합니다. 설명서를 자세히 읽은 후 기본 "Match"단계가이 출력을 수행하는 것을 볼 수 있습니다.
Xaero Degreaz

5

자바 스크립트 (ES6), 44 바이트

x=>x.match(/[cprt]h|dd|ff|ng|ll|./gi).length

사소한 답변이 가장 짧을 수 있습니다.


5

배쉬 52 50 (sed + wc) 41

요르단 덕분에 -9

sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m

대문자가 필요한 경우 ised 명령 끝에가 필요합니다 . (일부 예제는 아니지만 질문의 모든 단일 문자가 소문자이기 때문에 생략했습니다.)


1
grep -o .|wc -l대신에 wc -c?
Jordan

wc -c는 â에서 ẁ까지를 2로 계산합니다.
Riley

아 물론 이죠 FWIW GNU 또는 BSD wc를 사용 -m하는 경우 바이트 대신 문자를 계산 하는 데 사용할 수 있습니다 .
Jordan

c에서 ch로 이동할 수 있습니까 [prt]? sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
megaflop

2
([dfl])\1보다 부끄러운 일 입니다 dd|ff|ll. 한 번 더 두 자음만으로 현명한 버전을 선호합니다.
Toby Speight

4

밀짚 , 30 58 35 33 바이트

<((?i:[cprt]h|dd|ff|ng|ll|.))0/$>

정규식의 각 발생을로 대체 0하고 단항에서 10 진수로 변환하십시오.

슬프게도 Straw는 정규식에 플래그를 전달할 수 없습니다. 나는 ?flags:구조물을 잊었다

온라인으로 사용해보십시오! (추가 된 코드는 모든 테스트 사례를 확인하는 것입니다)


이 언어는 Retina와 어떻게 다릅니 까?
Downgoat

@Downgoat 스트로 스택 기반 : P
TuxCrafting를


3

PowerShell v2 +, 52 50 48 바이트

($args[0]-replace'dd|ff|ng|ll|[prtc]h',0).length

않는 -replace변경 '안에 모두에있는 두 개의 심볼 - 단일 문자 편지에 0(아닌 숫자로 변경하는 따옴표를 요구하기 때문에 수행), 다음 얻는 .length결과 문자열을.

테스트 사례

PS C:\Tools\Scripts\golfing> 'Llandudno','Llanelli','Rhyl','Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch','Tŷr','Cymru','Glyndŵr'|%{"$_ --> "+(.\how-long-is-a-welsh-word.ps1 $_)}
Llandudno --> 8
Llanelli --> 6
Rhyl --> 3
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch --> 50
Tŷr --> 3
Cymru --> 5
Glyndŵr --> 7

PowerShell에 익숙하지 않지만 괄호가 정말로 필요 [prtc]h합니까?
Jordan

@ 조던 아니, 난하지 않습니다. 그것은 PowerShell 일이 아니며 정규식이 아닙니다. : D 골프 고마워!
AdmBorkBork


2

PHP, 56 바이트

<?=preg_match_all("#[cprt]h|dd|ff|ll|ng|.#iu",$argv[1]);

1
저는 믿습니다 [dfl]{2}경기 df, ld등뿐만 아니라 의도와 일치합니다. dd|ff|ll같은 길이입니다.
ETHproductions

1
나는 당신의 믿음이 진실임을 알고 있지만 당신의 믿음은 일종의 믿음이 아니라고 생각합니다. 그것은
kowledge

1
echo(끝의 공백) 대신 <?=2 바이트를 절약하는을 사용하십시오 . 또한 $t필요하지 않으므로 3 바이트가 더 절약됩니다.
Ismael Miguel

Thnak 당신 Ismael. 좀 내가되지는 $ t 제거하는 것이 혼동 더 다음 있어야합니다
요 르그 Hülsermann

2

자바 7, 156 73 바이트

@ OlivierGrégoire 덕분에 많은 바이트가 절약 되었습니다 .

int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","*").length();}

언 골프 및 테스트 사례 :

여기에서 시도하십시오.

class M{
  static int c(String s){
    return s.replaceAll("[cprt]h|dd|ff|ng|ll", "*").length();
  }

  public static void main(String[] a){
    System.out.println(c("llandudno"));
    System.out.println(c("llanelli"));
    System.out.println(c("rhyl"));
    System.out.println(c("llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch"));
    System.out.println(c("tŷr"));
    System.out.println(c("cymru"));
    System.out.println(c("glyndŵr"));
  }
}

산출:

8
6
3
50
3
5
7

가져 와서 Matcher직접 사용하지 않습니까? : o 또한 Matcherfor 루프에서 정의 할 수 있습니다.
Olivier Grégoire

1
나는 return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()훨씬 더 강한 느낌을 가지고 있습니다 . 이 작동하지 않습니다?
Olivier Grégoire

예, 작동하며 Java 7 버전 ( int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}) 의 경우 73 바이트입니다 . Java 8 버전 ( s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()) 의 경우 51입니다 .
Olivier Grégoire

1
@ OlivierGrégoire 감사합니다. 은 Matcher사고였다. 테스트 코드에는 올바르지 만 골프 코드에는 없었습니다 replaceAll.
Kevin Cruijssen

1

R, 54 바이트

다른 답변과 매우 유사합니다. 두 문자 문자 중 하나를 일치시키고 문자 수를 대체 한 @다음 문자 수를 계산합니다. stdin에서 입력을 읽습니다. 옵션 ignore.case = TRUE(세번째 인수 gsub)을 사용하여 대문자와 소문자를 모두 일치시킵니다.

nchar(gsub("ch|dd|ff|ng|ll|ph|rh|th","@",scan(,""),T))

보너스

모두 gsubnchar이 또한 문자 벡터, 예를 작동하는 방법을 벡터화되어 있습니다 :

v=c("Llandudno","Llanelli","Rhyl","Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch","Tŷr","Cymru","Glyndŵr")
nchar(gsub("ch|dd|ff|ng|ll|ph|rh|th","@",v,T))

생산 :

[1]  8  6  3 50  3  5  7


0

XQuery, 77 바이트

declare variable$s external;count(tokenize($s,'[cprt]h|ff|dd|ll|ng|.','i'))-1

0

tcl, 71

proc L s {string le [regsub -all -nocase ch|dd|ff|ng|ll|ph|rh|th $s @]}

데모


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.