그 단어 2에 서명하십시오!
얼마 전, 나는 Sign that word 라는 챌린지를 게시했습니다 ! . 도전, 당신은 순서에 넣어 문자 (예 : 서명 인 단어의 서명을 찾아야합니다 this
입니다 hist
). 이제 그 도전은 꽤 잘 이루어졌지만 한 가지 중요한 문제가있었습니다. 너무 쉬운 방법이었습니다 ( GolfScript 답변 참조 ). 따라서 비슷한 과제를 게시했지만 규칙이 더 많았으며 대부분 PPCG 사용자가 이전 퍼즐에 대한 의견에서 제안했습니다. 자, 우리는 간다!
규칙
- 프로그램은 입력을받은 다음 서명을 STDOUT 또는 사용하는 언어와 동등한 것으로 출력해야합니다.
- 내장 정렬 기능을 사용할 수
$
없으므로 GolfScript 와 같은 항목은 허용되지 않습니다. - 다중 대소 문자를 지원해야합니다. 프로그램은 대문자와 소문자를 모두 그룹화해야합니다. 의 서명이 그래서
Hello
입니다eHllo
, 아니Hello
당신은 첫 번째 버전에 GolfScript 응답 주어진다한다. - 프로그램에 대한 무료 통역사 / 컴파일러가 있어야합니다.
채점
당신의 점수는 바이트 수입니다. 가장 낮은 바이트 수가 이깁니다.
리더 보드
다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.
답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.
# Language Name, N bytes
N
제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :
# Ruby, <s>104</s> <s>101</s> 96 bytes
답변
Pyth, 10 바이트
sm@+drd1zG
온라인으로 사용해보십시오 : 데모
설명:
implicit: z = input string
m G map each letter (variable d) of the alphabet to:
+drd1 d + upper(d)
@ z filter z for these two letters
s sum, join to a string
답변
하스켈, 51
f s=[x|(a,b)<-zip['a'..'z']['A'..],x<-s,x==a||x==b]
는 zip
문자의 쌍의 목록을 만듭니다 [('a','A'), ...('z','Z')]
. 자르기 때문에 두 번째 끝점을 지정할 필요가 없습니다. 목록의 각 쌍에 대해 입력 문자열 s
에서 쌍의 두 문자 중 하나 인 문자를 사용합니다.
답변
파이썬 3, 72 70 바이트
s=input()
print("".join(d*(ord(d)&31==c)for c in range(27)for d in s))
입력이로만 구성되어 있다고 가정합니다 [a-zA-Z]
.
(@xnor 덕분에 2 바이트)
답변
GOTO ++, 531 바이트
niveaugourou 0
s=ENTRETONTEXTE()
§2 a=LeCaracNumero()&s *(1)
n=*(1)
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1)
b=LeCaracNumero()&s &i
c=&b
d=&a
GOTONULPOURLESNULS %4 }&b sup *(96){
c=-*(32)
§4 GOTONULPOURLESNULS %5 }&a sup *(96){
d=-*(32)
§5 GOTONULPOURLESNULS %1 }&c inf &d{
a=&b
n=&i
§1 faiblard
GOTOPRINTDUTEXTE()&a
s=Marijuana()}BOITEAPINGOUINS()}PrendsUnMorceau()&s *(0) &n{ }PrendsUnMorceau()&s }&n+*(1){ *(0){{ «»
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){
GOTOPASMALIN %2
§3 GOTOPRINTDUTEXTE()&s
다음은 코드가 더 읽기 쉽고 주석이 달린 버전입니다 ( GOTO
GOTO ++에서 주석 을 시작하는 주 ).
niveaugourou 0 GOTO Allow every keyword to be used
s=ENTRETONTEXTE() GOTO Read from STDIN
§2 a=LeCaracNumero()&s *(1) GOTO Get first char in s
n=*(1)
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1) GOTO Loop on every char of s
b=LeCaracNumero()&s &i GOTO b = i-th char
c=&b
d=&a
GOTONULPOURLESNULS %4 }&b sup *(96){ GOTO If b is uppercase, goto §4
c=-*(32) GOTO Get the uppercase ASCII value of b
§4 GOTONULPOURLESNULS %5 }&a sup *(96){ GOTO same as above but with a
d=-*(32)
§5 GOTONULPOURLESNULS %1 }&c inf &d{ GOTO If b is after a in alphabetical order, goto §1 (next loop iteration)
a=&b GOTO Else replace a by b
n=&i
§1 faiblard GOTO End loop
GOTOPRINTDUTEXTE()&a GOTO Print the value of a
t=PrendsUnMorceau()&s *(0) &n GOTO Get the part of s before a
u=PrendsUnMorceau()&s }&n+*(1){ *(0) GOTO Get the part of s after a
e=BOITEAPINGOUINS()&t &u GOTO Create an array of penguins containing the two substrings
s=Marijuana()&e «» GOTO Concatenate the penguins in the array
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){ GOTO If s is one char long, goto §3
GOTOPASMALIN %2 GOTO Else goto §2
§3 GOTOPRINTDUTEXTE()&s GOTO Print the last char
답변
Pyth, 15 14 바이트
s*V/LzJ.irG1GJ
1 바이트를 제거 한 isaacg에게 감사드립니다.
나는 아직 Pyth에 대해 잘 모르기 때문에 골프를 잘하지 못할 수도 있습니다.
답변
자바 스크립트 (ES6), 71 74
A-Za-z로 제한 (@Matthieu M의 의견 참조)
‘반환’을 피하기 위해 쉼표로 단일 표현식을 작성하는 데 너무 편한 편집 . 여기에 출력이 필요하므로 간단하게 사용하고 for
쉼표를 잊어 버릴 수 있습니다 .
배열 이해를 사용하면 바이트 수는 73이지만 더 이상 유효한 EcmaScript 6이 아닙니다.
일반적인 참고 사항 : EcmaScript 6 호환 브라우저에서 스 니펫 실행 테스트 (특히 MSIE가 아닌 Chrome이 아닙니다. Firefox에서 테스트 한 경우 Safari 9로 이동 가능)
f=w=>{v=[];for(c of w)v[n=parseInt(c,36)]=(v[n]||'')+c;alert(v.join``)}
<input id=I value='Hellzapoppin'><button onclick=f(I.value)>-></button>
답변
자바 스크립트, 112 194 바이트
r=[];t=[];a=s.split('').map(function(x){t[i=parseInt(x,36)]?t[i].push(x):t[i]=[x];return i;});while(l=a.length)r[l-1]=t[a.splice(a.indexOf(Math.max.apply({},a)),1)].pop();console.log(r.join(''))
이것은 “골프”와는 거리가 멀지 만 지금은 조금 바빠서 정렬을 제거하기 위해 편집했습니다.