모든 문자가 동일한 열 찾기


18

나는 SO에 대해이 질문을 보았고 좋은 골프 도전을 할 것이라고 생각했습니다. 그래서 여기 있습니다 :

도전:

일련의 문자열을 한 줄에 하나씩 읽고 각 문자열이 동일한 문자를 갖는 모든 위치의 목록을 출력하는 프로그램을 작성하십시오.

입력과 출력:

입력은 하나 이상의 인쇄 가능한 공백이 아닌 ASCII 문자로 구성되며 각 줄은 개행으로 구성됩니다. 모든 입력 라인의 길이가 같다고 가정 할 수 있습니다 . 줄 바꿈은 입력의 일부로 간주 되지 않습니다 (즉, 일치하는 문자로 출력해서는 안 됨).

입력 예 (SO 질문에서 뻔뻔스럽게 도난) :

abcdefg
avcddeg
acbdeeg

입력을 읽은 후 프로그램은 일치하는 각 열의 위치와 포함 된 문자를 인쇄해야합니다. (일치하는 열이없는 것으로 조기에 판별 할 수있는 경우 프로그램이 추가 입력을 읽는 것을 중지 할 수는 있지만 필요하지는 않습니다.) 합리적인 출력 형식이 허용됩니다. 특히 위치에 대해 0 기반 또는 1 기반 색인을 사용할 수 있습니다.

위 입력의 출력 예 (0 기반 색인 사용) :

0: a
3: d
6: g

채점 :

이것은 코드 골프이므로 최단 답변이 이깁니다. 동점 일 경우 다음과 같은 추가 기능을 위해 소수 동점 차단 문자가 제공 될 수 있습니다.

  • 길이가 다른 입력 라인을 올바르게 처리하기위한 -½ 자 (출력에는 최단 입력 라인의 끝을 지난 위치가 포함되어서는 안됩니다.)
  • 임의의 UTF-8 인코딩 유니 코드 문자로 구성된 입력을 올바르게 처리하기위한 −¼ 문자

영감을 얻으려면 SO 질문에서 골프를 타지 않은 해결책을 찾을 수 있습니다 (위 참조).

설명 :

  • 에서와 같이 단순히 위치와 문자를 연결하는 것은 "합리적인 출력"으로 계산 0a3d6g되지 않습니다 . 명확하게 구문 분석 할 수 있도록 출력의 각 요소 사이에 일종의 구분 기호 (예 : 공백)를 제공해야합니다.

  • 입력은 표준 입력 스트림 ( stdin)에 제공되거나 선택한 언어에 가장 적합한 텍스트 파일 입력 메커니즘을 사용합니다. (선택한 언어 에 파일 입력을위한 자연스러운 메커니즘 이없는 경우 가장 가까운 것으로 보이는 모든 것을 수행하십시오.)

  • 읽을 데이터가 더 이상 없으면 (즉, 파일 끝 조건이 발생하는 경우) 입력이 종료됩니다. 원하는 경우 입력을 빈 줄로 종료해야 할 수도 있습니다 (입력의 일부로 계산되지 않아야 함). 그렇게 할 경우, 다른 사람들이 테스트를위한 올바른 입력을 제공 할 수 있도록 답변에 언급하십시오.

  • 마지막 입력 줄을 포함 하여 모든 입력 줄 은 개행 문자로 끝납니다. 답은이 줄 바꿈을 일치하는 열로보고해서는 안됩니다. (솔루션이 마지막 줄이 줄 바꿈으로 끝나지 않는 입력을 처리 할 수 ​​있으면 좋지만 필수는 아닙니다.)


빈 줄이 입력을 종료합니까?
Steven Rumbalski

"모호하지 않게 구문 분석 할 수 있도록 출력의 각 요소 사이에 일종의 구분 기호를 제공해야합니다." 공간은 구분자로 간주됩니까?
Steven Rumbalski

@StevenRumbalski : 더 이상 읽을 데이터가 없으면 입력이 종료됩니다. 귀하의 언어가 EOF를 감지하는 데 어려움이 있다면 후행 공백을 허용 할 수 있습니다. 그리고 네, 공간은 완벽하게 좋은 분리기입니다.
Ilmari Karonen

임의의 UTF-8 인코딩 유니 코드 문자 샘플 코드를 가질 수 있습니까?
사용자가 알 수 없음

답변:


12

APL, 25 자

∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞

통역사로 Dyalog APL (버전 13)을 사용했습니다. 길이가 다른 문자와 유니 코드 (UTF-8) 문자를 모두 처리합니다.

예 :

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
abcdefg
avcddeg
acbdeeg

  1 a  4 d  7 g  

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
test日本
blat日本国foo

  4 t  5 日  6 本 

오른쪽에서 왼쪽으로 설명 :

  • 이 답변의 주요 부분은 중괄호 안에 정의 된 직접 함수 (기본적으로 익명 함수)입니다. 올바른 인수는로 지정됩니다 .
    • 0=⍴⍵:⍬첫 번째 표현이며 빈 줄을 받았는지 확인합니다 (즉, 완료). 콜론 오른쪽의 표현식을 조건부로 실행하기 위해 가드 (많은 기능 프로그래머에게 친숙한 구성)를 사용합니다. 이 경우 0이 오른쪽 인수 의 모양 / 길이 ( )와 같으면 빈 세트 ( )를 반환합니다 .
    • 함수 내에서 두 표현식을 구분합니다. 이전식이 평가되지 않았으므로 아무것도 반환하지 않으면 다음 식으로 이동합니다.
    • 자체 참조 함수 ( )를 사용하여 함수를 재귀 적으로 호출합니다 . 함수에 대한 인수는 quote-quad ( ) 로 평가되지 않은 사용자 입력 라인입니다 .
    • ⊂⍵,⍨¨⍳⍴⍵ 문자열에서 각 문자의 쌍을 만듭니다. 여기서 각 쌍의 첫 번째 요소는 문자열에서의 위치이고 두 번째 요소는 문자입니다.
    • ⍳⍴⍵1에서 벡터 ⍴⍵또는 입력 문자열의 길이를 제공합니다.
    • ⍵,⍨¨정류 된 연결 함수 ( ,⍨)를 각 ¨요소 ( )에 왼쪽 ( 이 경우 사용자 입력) 및 오른쪽에 적용합니다. 연결 함수를 정류하면 왼쪽과 오른쪽 인수가 서로 바뀝니다.
    • 마지막으로 입력 줄을 구분할 수 있도록을 사용하여 결과를 묶습니다 .
  • 처음에는 함수에 사용자 입력 ( )을 공급합니다.
  • 마지막으로 /교집합 함수 ( )를 사용하여 결과 쌍의 벡터로 구성된 벡터를 줄이고 ( ) 모든 하위 벡터에서 발견되는 쌍을 만듭니다.

J 나 GolfScript에없는 APL을 볼 때마다 좋은 이유는 없습니다. 그러나 어쨌든 +1은 훌륭한 솔루션입니다.
Steven Rumbalski

나는 실제로 J로 전환하는 것에 대해 생각하고 있었다. :)
Dillon Cower

12

골프 스크립트 (28 문자)

n/zip:^,,{.^=.&.,1>{;;}*}%n*

유니 코드를 파이핑 할 때 문자 세트 문제가 있으므로 1/4 포인트 보너스는 없습니다.


1
+1. 이것은 내 대답보다 적은 투표를해서는 안됩니다.
Steven Rumbalski

9

J, 57 51 44 40 자

,.&.>y;y{{.z[y=.I.*/2=/\]z=.];._2]1!:1]3

나는 천천히 그러나 확실하게 거기에 도착하고있다. 내가 생각하지만 이것은 여전히 ​​이상적이지 않습니다.

나는 후크를 사용하는 것이 답이 될 것이라고 확신했지만 불행히도 (44 자)는 아닙니다.

,.&.>((];({{.)~)([:I.[:*/2=/\]))];._2]1!:1]3

더 짧아지기 위해서는 완전히 다른 방법이 필요할 수 있습니다.


1
+1. 그러나 그렇습니다, 나는 J.에서 더 나아질 것을 기대합니다.
Steven Rumbalski

이것은 내 대답보다 적은 투표를해서는 안됩니다.
Steven Rumbalski

1
@StevenRumbalski upvotes가 항상 코드의 상대적 크기를 반영하는 것은 아닙니다. 때때로 언어 인기 대회가됩니다. 나는 골프 스크립트 답변이 APL과 함께 거기에 있어야한다는 것에 동의합니다. 불행히도 나는 이미 그것을 공언에 제출했으며 더 이상 추진할 수 없습니다.
Gareth

8

하스켈, 64 자

main=interact$show.foldl1(filter.flip elem).map(zip[0..]).lines

길이가 다른 라인을 처리합니다. 유니 코드 지원은 현재 로캘 설정에 따라 다릅니다.

출력 예 :

[(0,'a'),(3,'d'),(6,'g')]

+1. 이것은 내 대답보다 적은 투표를해서는 안됩니다.
Steven Rumbalski

7

파이썬 2, 81.5 점 ( 116 94 86 83 82 bytes 빼기 보너스)

import sys
i=0
for x in zip(*sys.stdin)[:-1]:
 i+=1
 if len(set(x))<2:print i,x[0]

멋진 파이썬 골프를 위해 +1이지만 4 개의 문자를 모두 잃을 수 있습니다 [:-1]. 입력이 끝날 때 외부 줄 바꿈을 제거하지 않으면 필요하지 않습니다 (질문에는없는 것 같습니다).
ChristopheD

@ChristopheD : 실제로 결과는 zip(*sys.stdin)입니다 [('a', 'a', 'a'), ('b', 'v', 'c'), ('c', 'c', 'b'), ('d', 'd', 'd'), ('e', 'd', 'e'), ('f', 'e', 'e'), ('g', 'g', 'g'), ('\n', '\n', '\n')]. 마지막 줄 튜플을 제거하지 않는 방법을 보지 못했습니다. 내가 오해 한 경우 수정하십시오. 공감에 감사합니다.
Steven Rumbalski

당신이 당신의 데이터 파일의 마지막 줄 바꿈을 제거하면 그 라인의 튜플이 완료되지 않은 (미스 한 '\ n'을 이렇게 압축만을 고려하고 제거를 수 있도록 우리가 찾고있는 반환 데이터, [:-1]예.zip([1,2,3,4],[1,2,3])=> [(1, 1), (2, 2), (3, 3)]
ChristopheD

@ChristopheD : 사양에 따라, "입력은 [...] 줄 [...]로 구성되며, 각각 줄 바꿈이 이어집니다."
Ilmari Karonen

1
이 답변을 공언 한 사람이 이유를 설명 할 수 있습니까?
Steven Rumbalski

5

(Bash) Shell 스크립팅, 105 자

누구든지 이것에 대한 트릭이 더 있다면, 자유롭게 의견을 작성하십시오!

for((i=1;i<`tail -1 $1|wc -c`;i++))do
x="cut -c$i $1";y=`$x`;[ `$x|uniq|wc -l` = 1 ]&& echo $i ${y:3};done

결과:

1 개
4 일
7 지

이 작업을 수행하는 데 문제가 있습니다. 샘플 입력에서 이것을 실행하면 일련의 오류와 같은 오류가 인쇄 /tmp/cols.sh: line 2: [1: command not found됩니다.
Ilmari Karonen

@Ilmari Karonen : 이것은 Mac (Snow Leopard, 10.6.2)에서 테스트되었지만 다른 곳에서는 작동합니다. 나는 내일 리눅스에서 고칠 예정이다 (작은 수정일 것이다)
ChristopheD

2
ormaaj 는 담당자가 없었지만 논평하고 싶었습니다 : Ilmari에게는 [; 뒤에 공백이 없어서 깨졌습니다 . $ {y : 3}은 정확히 3 줄의 입력에서만 작동합니다. 수율 (100 자)을 수정 및 최적화 while((++i%`tail -1 $1|wc -c`));do x=`cut -c$i $1`;((`uniq|wc -l`==1))<<<"$x"&&echo $i ${x: -1};done하고 기본값을 사용하면 하나 더 저장할 수 for((;++i<`tail -1 $1|wc -c`;))do있지만 bash에는 수정되지 않은 버그가 있습니다.
피터 테일러

4

펄 (Perl), 87 자 (-2/2 자 타이 브레이크 보너스)

다음 은 SO 스레드의 자체 솔루션 골프 버전입니다 .

chomp($a=$b=<>);$a&=$_,$b|=$_ for<>;@$_=$$_=~/./sgfor a,b;$b[$i++]eq$_&&say"$i:$_"for@a

SO 버전과 달리이 버전은 출력에 1 기반 인덱스를 사용합니다. Perl 5.10 say기능을 사용하므로 perl -M5.010(또는로 perl -E)을 실행해야합니다 .

SO 버전과 마찬가지로이 코드는 가변 길이 행 처리하고 표준 입력 및 출력이 UTF-8 모드 인 경우 임의의 유니 코드 입력을 처리합니다. 아아, 비 자유 -CS 명령 줄 스위치를 지정하지 않으면 기본적으로 그렇지 않습니다 . 따라서 -½ 문자 보너스를 얻지 만 -¼ 보너스는 얻지 않습니다.

편집 : 버그 수정을 위해 +1 char : 입력 문자열에 줄 바꿈이 포함되어 있다고해서 끝나지 않는다는 의미는 아닙니다 $a(예 :) "+" & "J" eq "\n".


1
chop대신을 사용하여 1 개의 문자를 저장할 수 chomp있습니다.
Toto

@ M42 : 좋은 점이지만, 현재 버전의 견고성을 좋아합니다. 나는 지금은 계속 유지할 것이라고 생각 m합니다. 현재 순위와는 다른 점이 아닙니다. :)
Ilmari Karonen

3

T-SQL

SELECT N.number, letter = MIN(SUBSTRING(L.line, N.number, 1))
FROM Lines AS L
INNER JOIN master.dbo.spt_values AS N ON N.type = 'P'
WHERE N.number BETWEEN 1 AND (SELECT MAX(LEN(L2.line)) FROM Lines AS L2)
GROUP BY N.number
HAVING COUNT(DISTINCT SUBSTRING(L.line, N.number, 1)) = 1
ORDER BY N.number

2

스칼라 115 107 (-1/4 처리 UTF-8)

io.Source.stdin.getLines.map(_.zipWithIndex).toList.flatten.groupBy(_._2).map(_._2.toSet).filter(_.size==1)

및 ungolfed Source.fromFile ("f")대신 stdin더 나은 테스트 용이성을 위해 :

io.Source.fromFile ("f").
  getLines.map (_.zipWithIndex).
    toList.flatten.groupBy (_._2). 
      map (_._2.toSet).
        filter (_.size==1)

결과:

List(Set((a,0)), Set((g,6)), Set((d,3)))

를 사용하여 크기 8을 줄인 Gareth에게 감사합니다 stdin.


8자를 저장 하는 stdin대신 사용할 수 없습니까 fromFile("f")?
Gareth

2

VBA ( 307.25 284-0.75 보너스 = 283.25)

나는 이것이 이미 이겼다는 것을 알고 있지만, 여기 내 파일이 있습니다 (파일을 읽지 않고 문자열 만-io를 추가해야합니다). 나는 l()재귀 적 으로 사용해야한다는 것을 좋아합니다 . 나는 보통 실제 프로그래밍을 재귀 할 필요가 없다. 나는 너무 많은 테스트를했지만 유니 코드 보너스 포인트 규정을 다루고 있다고 생각합니다. 또한 vbCr라인 터미네이터 라고 가정합니다 . 이로 인해 모든 시스템으로 변환되지 않을 수 있습니다.

암호:

Function a(i)
b=Split(Left(i,Len(i)-1),vbCr):c=UBound(b):For q=1 To Len(b(c)):d=Mid(b(c),q,1):If l(b,c,q,d) Then a=a & q & ": " & d & vbCr:Next
End Function
Function l(m, n, o, p)
If n+1 Then l=IIf(o<=Len(m(n)),Mid(m(n),o,1)=p,0) And l(m,n-1,o,p) Else l=Mid(m(n+1),o,1)=p
End Function

입력 / 출력 예 :

Debug.Print a("abcdefghijklmnop" & vbCr & "abcdefg" & vbCr & "abcabcghijkl" & vbCr)

1: a
2: b
3: c
7: g

2

문 32

{a!((*:)x)a:(&)1=(#:')(?:')(+)x}

용법

q){a!((*:)x)a:(&)1=(#:')(?:')(+)x}[("abcdefg";"avcddeg";"acbdeeg")]
0| a
3| d
6| g

K, 22

위의 솔루션은 K 함수를 Q 인터프리터에 전달하지 않고 K로 완전히 작성하여 22로 줄일 수 있으므로 필요한 괄호 수가 줄어 듭니다.

{a!@[*x]a:&1=#:'?:'+x}

1

PHP, 123 127 :(

나는 그것에 만족하지 않지만 (개선해야 할 것이 있습니다), 여기에 간다 :

<?$a=$b=trim(fgets(STDIN));while($l=fgets(STDIN)){$a&=$l;$b|=$l;}$n=-1;while(@$a[++$n]){echo$a[$n]!=$b[$n]?'':"$n:{$a[$n]}\n";}

작동합니다.

누구든지 $ a와 $ b를 초기화하는 더 영리한 방법을 생각할 수 있다면 알려주십시오. 원래 나는 $a=$b=$n=''$ b가 정확했지만 [empty] & [anything] == [empty]$ a에는 결코 내용이 없었습니다.


편집 : 줄 바꿈 처리 (+6)를 수정했지만 닫기 태그 (-2)를 삭제했습니다.


궁금합니다. 왜 대부분의 답변을 커뮤니티 위키로 만드십니까?
Gareth

나는 이것에 의미하지 않았다. 오래 전에 CodeGolf에 처음 가입했을 때 누군가 표준이라고 말했습니다. 습관을 끊어야합니다. 그래도 위키를 해제 할 수 있습니다. codegolf.stackexchange.com/a/2249/1419 (댓글 참조)
Mr. Llama

코드 골프 질문에 대해 SO에서 작업을 수행하는 표준 방법이라고 생각하지만, 그렇지 않으면 아무도 명성을 얻지 못합니다. :-)
Gareth

아마도 플래그를 지정하고 중재자에게 CW 해제를 요청할 수 있습니다 . 실수라고 설명하십시오.
Ilmari Karonen

을 생략하면 두 문자를 저장할 수 ?>있습니다. 그러나 코드에 버그가 있음을 발견했습니다. 모든 줄에 지정된 줄 바꿈이 있으면 추가 일치 항목을 인쇄합니다.
Ilmari Karonen

1

자바 스크립트 (125 (134) 140 )

for(i=s=[];I=s[++i]=prompt(o='');S=I);for(c=-1;w=r=++c<S.length;o+=r?c+':'+C+'\n':'')for(C=S[c];w<i;)r&=s[w++][c]==C;alert(o)

데모 : http://jsfiddle.net/Fv7kY/4/

편집 1 : 중괄호를 피하기 위해 루프를 다시 정렬 하십시오 . 내가 함께 초기화 []와 결합하는 s. 움직임w 표현으로 증가합니다.

편집 2 : S=I마지막에 입력 한 단어를 캡처하고을 사용하여 저장하도록 설정 합니다 s[1]. 결합 r=1하고 ++c<S.length. C=s[c]내부 루프에서 설정 하고 C이전 단어와 다음 단어 대신 비교하여 표현 s[w][c]==s[w++][c]을 just 로 단축하십시오 s[w++][c]==C. 총 9자를 저장했습니다. 또한 w=r=...그것이 진실 일 때 w=1초기화해야 할 것이기 때문에 설정 w됩니다.


1

루비 (71)

a,*s=*$<.lines
(a.size-1).times{|i|s.all?{|t|t[i]==a[i]}&&p([i,a[i]])}

산출:

[0, "a"]
[3, "d"]
[6, "g"]

참고 : Ruby 1.9가 필요한 것으로 보입니다. Ruby 1.8 호환성을 위해 t[i]로 교체하십시오 t[i,1].
Ilmari Karonen

1

공통 Lisp, 183165

(let((l(loop for m =(read-line)until(equal m "")collect m)))(loop for c across(car l)for i from 0 if(null(remove c(mapcar(lambda(y)(char y i))l)))collect(list i c)))

읽을 수있는 형식 :

(let ((l (loop for m = (read-line) until (equal m "") collect m)))
  (loop for c across (car l)
        for i from 0 
        if (null (remove c 
                         (mapcar (lambda(y) (char y i))l)))
        collect(list i c)))

이것을 REPL에 직접 입력하고 빈 줄로 끝나는 줄을 입력하십시오.


1

C, 126 자

char a[999],b[999];main(i){for(gets(a);gets(b);)for(i=0;b[i];++i)a[i]^b[i]?a[i]=0:0;
while(i--)a[i]&&printf("%d:%c\n",i,a[i]);}

나는 이것을 쳐다 보았지만 더 작게 만들 수는 없다. 새로운 접근법이 필요할 수 있습니다.

(보너스 포인트는 없습니다. 첫 번째 라인이 짧은 라인 인 경우 다른 크기의 라인 만 처리합니다.)


0

.NET 4가 포함 된 C # (280)

using c=System.Console;class P{static void Main(){char[]a=c.ReadLine().ToCharArray();int r,i,l=a.Length;m:i=0;n:r=c.Read();if(r>0&&r!=10&&r!=13){if((int)a[i]!=r)a[i]='\0';i++;goto n;}for(;i>0&&i<l;)a[i++]='\0';if(r>0)goto m;for(i=0;i<l;i++)if(a[i]!='\0')c.WriteLine(i+":"+a[i]);}}
  • 한 줄, 280 자
  • 모든 필요한 using 문과 Main 메서드를 포함합니다.
  • 프로그램 끝에 빈 줄이 필요하지 않지만 수락합니다
  • 빈 줄은 무시됩니다
  • 모든 길이의 입력 문자열을 처리합니다.
  • 끝까지 출력을 예약합니다 (원래 답변은 증분 출력을 제공함)

읽을 수있는 버전

    char[]a=c.ReadLine().ToCharArray();
    int r,i,l=a.Length;
    m:
    i=0;
    n:
    r=c.Read();
    if(r>0&&r!=10&&r!=13){
        if((int)a[i]!=r)
            a[i]='\0';
        i++;
        goto n;
    }
    for(;i>0&&i<l;)
        a[i++]='\0';
    if(r>0)
        goto m;
    for(i=0;i<l;i++)
        if(a[i]!='\0')
            c.WriteLine(i+":"+a[i]);

원래 답변

c = System.Console; class P {static void Main () {char [] a; var b = c.ReadLine (); a = b.ToCharArray (); while (b! = "") {for (int 사용) i = 0; i

  • 1 줄
  • 207 자
  • 모든 필요한 using 문과 Main 메서드를 포함합니다.
  • 빈 줄을 입력하면 프로그램이 종료됩니다.
  • 첫 번째보다 짧은 입력 문자열을 처리하지 않습니다.


읽을 수있는 버전 :

    static void Readable()
    {
        char[]a;
        string b=System.Console.ReadLine();
        a=b.ToCharArray();
        while(b.Length>0)
        {
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] != b[i])
                {
                    a[i] = '\0';
                }
                else
                {
                    System.Console.WriteLine(i+": "+a[i]);
                }
            }
            b=System.Console.ReadLine();
        }
    }


챌린지의 테스트 입력에서 이것을 실행하면을 얻습니다 0: a 1: b 2: c 3: d 4: e 5: f 6: g 0: a 2: c 3: d 6: g 0: a 3: d 6: g. 예상 출력은입니다 0: a 3: d 6: g.
Ilmari Karonen

@Ilmari Ok, 그러나 각 입력 행 다음에 동일한 열 / 문자를 출력합니다. 파일을 표준 입력으로 공급하는 경우 출력이 이상하게 보일 수 있지만 수동으로 입력하면 의미가 있다고 생각합니다. 그래도 리팩토링하는 방법을 고려할 것입니다.
윌리 박사의 견습생

줄이 첫 줄보다 길면 솔루션이 충돌합니다.
Timwi

@Timwi Ah ... 지적 해 주셔서 감사합니다!
윌리 박사의 견습생

0

파이썬 122 자 :

print("\n".join([str(i)+':'+str(x[0]) for i,x in enumerate(zip(*[tuple(x) for x in input().split()])) if len(set(x))<2]))

)와 사이에 공백이 필요하지 않습니다 for. 따라서 대신에 …str(x[0]) for i,x…할 수 있습니다 …str(x[0])for i,x…. 또한에 등장 tuple(x) for하고.split()])) if
Cyoce

-1

루비 (242)

s = %w{ abcdefg avcddeg acbdeeg aejdjeggd }
cols = []
s.sort{ |a, b| b.size <=> a.size }[0].size.times do |i|
  uneq=true
  l = s[0][i]
  s.each { |w| uneq = false if l != w[i] }
  cols << [l, i] if uneq
end
cols.each { |c| puts c.join('|') }

도전의 의도는 표준 입력에서 라인을 읽는 것이 었습니다. 그 개념이 실제로 존재하지 않는 언어 (예 : 브라우저 내 JavaScript)의 느슨 함을 줄이려고하지만 Ruby에는 STDIN( ARGF또는 그냥 평범한 gets) 있습니다.
Ilmari Karonen

아 알았어 그러나 STDIN이 한 줄을 허용한다는 것을 고려하면 "다른 줄에 들어가거나 'n'을 멈추려면 '과 같은 것으로 가정합니까? 따라서 배열을 만들기 위해 루프를 만듭니다.
agmcleod 2012 년

질문에 설명을 추가했습니다. 기본적으로 파일 끝에 도달 할 때까지 입력 행을 계속 읽으십시오.
Ilmari Karonen

불필요한 공백이 많이 있습니다.
Cyoce

-1

씨#

List<string> strings = new List<string> { "abcdefg", "avcddeg", "acbdeeg", "aejdjeggd" };
var transposes = from index in Enumerable.Range(0, strings.First().Length)
                 select new string((from s in strings select s[index]).ToArray());
int i = 0;
foreach(string transpose in transposes)
{
   if (transpose.Distinct().Count() == 1)
     Console.WriteLine("{0}: {1}", i , transpose[0]);
   i++;
}

1
안녕하세요 Arjang, codegolf.SE에 오신 것을 환영합니다! 귀하의 답변에 대한 몇 가지 의견 : 첫째, 이것은 코드 골프 과제이므로 가능한 한 빨리 솔루션을 만들려고합니다. 우선, 단일 문자로 쉽게 단축 할 수있는 긴 변수 이름과 제거 할 수있는 여분의 공백이 있습니다. ( "golfed"코드와 함께 읽을 수있는 코드 버전을 게시하는 것이 좋지만 실제로 골프 솔루션도 게시해야합니다.) 둘째, 질문을주의 깊게 읽으면 표준 입력에서 문자열을 읽어야한다고 지정했습니다. 하드 코딩하지 마십시오.
Ilmari Karonen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.