도전:
다음과 같은 출력을 생성하는 프로그램을 작성하십시오.
. E .. I ... S .... H
...- V
..- U ..-. F
..--
.- A .-. R .-.. L
.-.-
.-- W .--. P
.--- J
- T -. N -.. D -... B
-..- X
-.- K -.-. C
-.-- Y
-- M --. G --.. Z
--.- Q
--- O ---.
----
A에서 Z까지의 문자에 대한 모스 부호 형식의 표입니다. 각 열은 3 개의 공백으로 구분됩니다.
국제 문자 세트에 사용되는 4 개의 누락 된 슬롯이 있습니다. 프로그램은 거기에 공백을 써야합니다.
출력은 ASCII 공백, 점, 대시, 대문자 및 줄 바꿈 (LF 또는 CRLF)으로 만 구성되어야합니다.
프로그램이 입력을받지 않습니다.
다음은 원하는 출력을 생성하는 샘플 Python 프로그램입니다.
b = "."
out = []
last = 0
ch = "EISHVUF ARL WPJTNDBXKCYMGZQO "
cx = 0
while b:
if last >= len(b):
print(" ".join(out))
out = [" ", " ", " ", " "][0:len(b) - 1]
out.append(b + " " + ch[cx])
cx += 1
last = len(b)
if len(b) < 4:
b += "."
elif b[-1] == ".":
b = b[0:-1] + "-"
else:
i = len(b) - 1
while b[i] == "-":
i -= 1
if i < 0:
break
if i < 0:
break
b = b[0:i] + "-"
print(" ".join(out))
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
답변
젤리 , 85 바이트
ØQj⁶“_ȦeƤbṅỌU@⁼Cq’œ?;⁶$⁺ṁ®L€€¤
4R2ṗ©ị⁾.-;€€⁶ż"¢;€€⁶$⁺W€€j"731Dẋ@⁶¤ZµKFṚ;⁶ẋ³¤ḣ29ṫ3Ṛµ€Y
치트 시트를 인쇄하는 전체 프로그램.
방법?
참고 : 그리드 원자를 사용하여 올바르게 형식을 지정하는 목록을 작성하여이를자를 수있는 방법이 있다고 생각 G
하지만 어떻게 해결할 수는 없습니다.
ØQj⁶“_ȦeƤbṅỌU@⁼Cq’œ?;⁶$⁺ṁ®L€€¤ - Link 1: get "letters" lists: no arguments
ØQ - Qwerty yield = ["QWERTYUIOP","ASDFGHJKL","ZXCVBNM"]
j⁶ - join with spaces = "QWERTYUIOP ASDFGHJKL ZXCVBNM"
“_ȦeƤbṅỌU@⁼Cq’ - base 250 number = 23070726812742121430711954614
œ? - lexicographical permutation at index = "ETIANMSURWDKGOHVF L PJBXCYZQ"
⁺ - do this twice:
$ - last two links as a monad
;⁶ - concatenate a space = "ETIANMSURWDKGOHVF L PJBXCYZQ "
¤ - nilad followed by link(s) as a nilad:
® - recall from registry (4R2ṗ from the Main link)
L€€ - length for €ach for €ach = [[1,1],[2,2,2,2],[3,3,3,3,3,3,3,3],[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]]
ṁ - mould like = ["ET","IANM","SURWDKGO","HVF L PJBXCYZQ "]
4R2ṗ©ị⁾.-;€€⁶ż"¢;€€⁶$⁺W€€j"731Dẋ@⁶¤ZµKFṚ;⁶ẋ³¤ḣ29ṫ3Ṛµ€Y - Main link: no arguments
4R - range(4) = [1,2,3,4]
2ṗ - Cartesian power with 2 = [[[1],[2]],[[1,1],[1,2],[2,1],[2,2]],...,[...,[2,2,2,2]]]
© - copy to register and yield
⁾.- - literal ['.','-']
ị - index into (makes all the codes, in four lists by length like reading the output top-bottom, left-right)
;€€⁶ - concatenate a space to each code
¢ - call last link (1) as a nilad (get the letters reordered as required)
ż" - zip left and right with zip dyad
⁺ - do this twice:
$ - last two links as a monad:
;€€⁶ - concatenate a space to each code, letter pair
W€€ - wrap each code, letter pair in a list
¤ - nilad follwed by link(s) as a nilad:
731 - literal 731
D - to decimal list = [7,3,1]
ẋ@⁶ - repeat a space = [" "," "," "]
j" - zip with dyad join
Z - transpose
µ µ€ - for each:
K - join with spaces
F - flatten
Ṛ - reverse
¤ - nilad followed by link(s) as a nilad:
⁶ẋ³ - space repeated 100 times
; - concatenate
ḣ29 - head to 29 (make all "lines" the same length)
ṫ3 - tail from 3 (trim off two spaces from each line)
Ṛ - reverse
Y - join with newlines
- implicit print
답변
파이썬 3.6 201 197 193 187 바이트
for i in range(16):print(' '.join(i%k and' '*(2+j)or f'{i//k:0{j}b}'.replace(*'0.').replace(*'1-')+' '+'ETIANMSURWDKGOHVF L PJBXCYZQ '[2**j-2+i//k]for j,k in zip((1,2,3,4),(8,4,2,1))))
일부 포맷팅, 언 패킹 및 A000918 매직을 사용합니다.
답변
레티 나 , 125 바이트
^
. EISHVUF_ARL_WPJ¶- TNDBXKCYMGZQO__
+m`^((.*?)([-.]+) )(\w)((\w)+?)(((?<-6>)\w)+)$
$2$3 $4 $3. $5¶$.1$* $3- $7
T`\_`p
온라인으로 사용해보십시오! 121 바이트 여야하지만 시작과 끝에서 공백을 처리하기에는 너무 게으르다. 설명:
[blank line]
. EISHVUF_ARL_WPJ¶- TNDBXKCYMGZQO__
코드가 각각 시작 .
하고 -
각각 사전로드 된 문자입니다 . (사전로드를 피하는 것이 이론적으로 가능 .-
하지만이 방법으로 바이트를 절약합니다.) _
s는 공백으로 사용되므로 문자로 간주되므로 아래에서 쉽게 일치시킬 수 있습니다.
+m`^((.*?)([-.]+) )(\w)((\w)+?)(((?<-6>)\w)+)$
$2$3 $4 $3. $5¶$.1$* $3- $7
여기서 우리는 각 줄을 다섯 조각으로 나눕니다.
- 접두사 문자 (있는 경우)
- 현재 모스 부호
- 현재 편지
- 나머지 문자의 첫 번째 절반 (다음 문자는
.
) - 나머지 글자의 후반부 (다음 문자는
-
)
그런 다음 조각을 두 줄로 다시 조립합니다.
- 접두사 문자, 현재 모스 부호, 현재 문자,
.
접미사가 있는 모스 부호 , 나머지 문자의 첫 절반 - 처음 세 조각, 모스 부호를
-
접미사로 대체하는 공백 , 나머지 문자의 후반
새 줄은 기존 줄과 동일한 형식을 따르며 추가로 Morse 접두사와 처리 할 문자 수의 절반이 남아 있습니다. 그런 다음 각 줄에 문자가 하나만있을 때까지이 과정이 반복됩니다.
_
[single space]
_
의 다음 구역으로 다시 변경된다.
답변
자바 스크립트 (ES6), 154 (147) 145 바이트
f=(n=r='',d=i=k=0)=>(r+=n&&' '.repeat([d++&&3,21,13,6][i-(i=d-k)])+n+' '+'EISHVUF ARL WPJTNDBXKCYMGZQO '[k++],d<4)?f(n+'.',d)&&f(n+'-',d):r+=`
`
o.innerHTML = f()
<pre id=o>
답변
PHP, 208 바이트
<?=gzinflate(base64_decode("dZDJEQMhDAT/RNEJaHLwfd+38w/EWrRlu6gVnwZpGhWIGSCxqhCXoFgWhpa3jHtpasYtKOaZZwZ9z/OjCnEOim3imX7et2Y8guKYeR5aF+PqB4/tK8Q0KMbDnnWPeZamZmyCYpJ5Pu/V93y7qxCLoHgnXnf5qZnn/iGo9u1/Gf+XDw=="));
PHP, 229 바이트
<?=strtr("3E0.3I053S0.53H12 2.54V1254U05-3F12 25-4 1.4A0.-3R0.-.3L12 2.-.4 12.-4W0.63P12 2.64J
4T0-3N0-.3D0-53B12 2-54X12-.4K0-.-3C12 2-.-4Y1-4M063G06.3Z12 26.4Q1264O0-63 12 2-64 ",[$a=" ","
$a$a","$a $a",". ","- ","..","--"]);
답변
Perl 5, 158,156 바이트
map{$a=sprintf'%04b',$_;map{$a=~/.{$_}/;print(-$'?' 'x$_:$&=~y/01/.-/r,' ',(' EISHVUF ARL WPJTNDBXKCYMGZQO '=~/./g)[!-$'&&++$i],$_-4?' ':"\n")}1..4}0..15
답변
PHP, 18383181 바이트
for(;$y<16;$y++,print str_pad(ltrim("$r
"),28," ",0))for($r="",$c="03231323"[$y&7];$c++<4;)$r.=strtr(sprintf(" %0${c}b ",$y>>4-$c),10,"-.")."EISHVUF ARL WPJTNDBXKCYMGZQO "[$i++];
고장
for(;$y<16;$y++, # loop through rows
print str_pad(ltrim("$r\n"),28," ",0) # 4. pad to 28 chars and print
)
for($r="", # 1. result=empty
$c="03231323"[$y&7]; # 2. $c=bits in 1st code -1
$c++<4;) # 3. loop through columns
$r.=strtr(sprintf(" %0${c}b ",$y>>4-$c),10,"-.") # append morse code
."EISHVUF ARL WPJTNDBXKCYMGZQO "[$i++]; # append letter
-7 선행 공백과 바이트 : 교체 ltrim("$r\n")
로 "$r\n"
와 28
함께 31
.
후행 공백이있는 171 (= -10) 바이트 :
for(;$y<16;$y++)for(print str_pad("
",[0,7,14,22][$c="03231323"[$y&7]]);$c++<4;)echo strtr(sprintf("%0${c}b %s ",$y>>4-$c,"EISHVUF ARL WPJTNDBXKCYMGZQO"[$i++]),10,"-.");
고장 온라인 시도
for(;$y<16;$y++) # loop through rows
for(
print str_pad("\n",[0,7,14,22][ # 2. print left padding
$c="03231323"[$y&7] # 1. $c=bits in 1st code -1
]);
$c++<4;) # 3. loop through columns
echo # print ...
strtr(sprintf("%0${c}b %s ", # 3. delimiting spaces
$y>>4-$c, # 1. morse code
"EISHVUF ARL WPJTNDBXKCYMGZQO"[$i++] # 2. letter
),10,"-.");